最近 MCP(大模型上下文协议)比较火,花了点时间研究了下和 RAG 的协作架构,后续整理出心得后再发出。
言归正传,之前文章里详细介绍了 RAGFlow 的 Python api 用法,今天结合几篇法律法规文档来给大家做个简单演示,抛砖引玉。这篇主要介绍三个脚本示例,分别是:数据处理与系统配置,系统测试,参数优化脚本。这套自动化脚本相比 RAGFlow 的 Web 界面提供了三个关键优势:
自动化与效率:将需要人工数小时完成的操作缩减为几分钟的全自动流程
系统化与可重复:确保测试和优化过程的客观性、系统性和可重复性
可编程与可扩展:可以根据具体需求调整配置、测试方法和优化策略
这种类型的脚本可以被视为 RAGFlow 的"增强配套工具",通过代码方式扩展了基础平台的能力,做深度业务场景适配时会灵活些。
源码已发布在知识星球内
1
数据处理与系统配置脚本
1.1
相比 web 界面优势
自动化流程处理
一键式配置:从数据集创建、文档上传到聊天助手配置的全流程自动化
批量处理能力:可以一次性处理整个目录的文档
流程控制:自动等待文档解析完成后再创建聊天助手,确保流程顺序合理
灵活性与可定制性
灵活参数调整:可以在代码中直接调整各种参数而无需在界面中逐一点击
条件处理:可以添加逻辑判断,根据不同情况执行不同操作
错误处理:内置错误处理机制,出现问题时提供更详细的信息
可复用性
环境复制:可以在不同环境中复用相同的配置脚本
版本控制:配置可以纳入代码版本控制系统,便于跟踪变更
标准化部署:确保不同实例使用完全相同的配置
集成能力
可与其他系统集成:作为更大工作流的一部分
计划任务:可以作为定时任务自动运行
与测试脚本衔接:可与测试脚本无缝衔接,自动完成配置和测试
1.2
目前实现的灵活配置
数据集配置:
自定义数据集名称和描述
配置使用的嵌入模型(BAAI/bge-m3)
使用专为法律文档设计的分块方法(chunk_method="laws")
文档处理:
支持多种文档格式(docx, doc, pdf, txt)的自动处理
批量上传文档
异步解析文档并监控进度
聊天助手配置:
自定义助手名称
关联到创建的法律法规数据集
1.3
可添加的其他配置选项
数据集高级配置
defcreate_legal_dataset(rag_object,dataset_name="法规知识库"):#添加更多高级配置dataset=rag_object.create_dataset(name=dataset_name,description="包含生物安全法等法律法规文档",embedding_model="BAAI/bge-m3",chunk_method="laws",permission="team",#设置为团队可访问parser_config={"raptor":{"user_raptor":False}}#为法律文档添加特定的解析器配置)returndataset文档元数据配置
defupload_documents_with_metadata(dataset,docs_path):documents=[]forfilenameinos.listdir(docs_path):iffilename.endswith(('.docx','.doc','.pdf','.txt')):file_path=os.path.join(docs_path,filename)withopen(file_path,"rb")asf:blob=f.read()#添加元数据documents.append({"display_name":filename,"blob":blob,"meta_fields":{"法律类型":"行政法规"if"条例"infilenameelse"法律","颁布年份":filename.split("(")[1].split(")")[0]if"("infilenameelse"未知","效力级别":"国家级"}})dataset.upload_documents(documents)文档解析自定义配置
defcustomize_document_parsing(dataset,doc_ids):#获取文档并更新解析配置fordoc_idindoc_ids:docs=dataset.list_documents(id=doc_id)ifdocs:doc=docs[0]#更新文档解析配置doc.update({"chunk_method":"laws","parser_config":{"raptor":{"user_raptor":True}}})#然后解析文档dataset.async_parse_documents(doc_ids)聊天助手高级配置
defcreate_legal_assistant(rag_object,dataset_id,assistant_name="法规助手"):#创建具有高级配置的聊天助手assistant=rag_object.create_chat(name=assistant_name,dataset_ids=[dataset_id],llm={"model_name":"deepseek-ai/DeepSeek-R1-Distill-Qwen-32B","temperature":0.1,"top_p":0.3,"presence_penalty":0.2,"frequency_penalty":0.7,"max_token":1024},prompt={"similarity_threshold":0.2,#设置相似度阈值"keywords_similarity_weight":0.7,#关键词相似度权重"top_n":8,#检索topN文档"rerank_model":"BAAI/bge-reranker-v2-m3",#使用重排序模型"prompt":"""你是一位专业的法律顾问,精通中国法律法规,尤其是生物安全法等相关法规。请基于检索到的法律条文,准确回答用户的问题。回答时请:1.引用具体的法律条款编号2.解释法律条文的含义3.如有必要,说明条文之间的关联4.保持客观,不要添加个人观点5.如果检索结果不足以回答问题,请明确说明{knowledge}"""})returnassistant多数据关联与权限管理
defsetup_multiple_datasets(rag_object):#创建多个专题数据集datasets=[]topics=["生物安全法","传染病防治法","野生动物保护法"]fortopicintopics:dataset=rag_object.create_dataset(name=f"{topic}知识库",description=f"专门针对{topic}的法律法规解析",embedding_model="BAAI/bge-m3",chunk_method="laws",permission="team"#团队共享)datasets.append(dataset)#创建综合法律助手,关联所有数据集dataset_ids=[dataset.idfordatasetindatasets]assistant=create_legal_assistant(rag_object,dataset_ids,"综合法律法规顾问")returndatasets,assistant上述这些高级配置可以根据实际需求进行组合和调整,不必拘泥于我的写法
2
系统测试脚本
自动生成不同类型的测试问题、收集系统回答、使用大模型评估回答质量、生成详细评估报告。
支持四种典型法律问题类型(直接引用类、概念解释类、场景应用类、跨条款关联类)的系统化测试。相比 Web 界面提供了更加好全面、客观的自动化测试与评估工具。
2.1
测试问题分类
设计了四种类型的测试问题:
直接引用类:询问特定条款的内容
概念解释类:询问法律中的概念定义
场景应用类:提出实际场景,询问适用的法律条款
跨条款关联类:需要综合多个条款回答的问题
2.2
评估指标
从五个维度评估回答质量:
准确性:回答是否引用了正确的法律条款
完整性:是否包含了所有相关条款
解释质量:对法律条文的解释是否清晰、准确
引用格式:是否正确引用了条款编号
总体评分:综合以上几点的总体评价
3
参数优化脚本
自动测试多种参数组合、创建临时测试助手、评估每种组合的性能、识别最佳配置方案。具体来说,大家可以试下初步探索相似度阈值、关键词权重、返回文档数量等不同的组合效果。
Web 界面相对而言,只能手动调整一组参数后进行主观评估,而使用这种类型的脚本可以自动比较多组参数效果。需要说明的是,这里列出的参数优化方案只是示例,大家可以根据具体业务需求进行灵活调整。
使用网格搜索方法,测试不同参数组合:
相似度阈值:[0.1, 0.15, 0.2, 0.25]
关键词权重:[0.6, 0.7, 0.8, 0.9]
返回条文数量:[8, 10, 12, 15]
4
其他
除了上述提到的参考技巧外,还可以测试不同的嵌入模型和重排序模型,以及结合自动评估和人工评估。
Anyway,设计一个符合特定文档结构特点以及业务目标的脚本组合,总是多快好省的。
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |