RAGFlow自动化脚本套件:自定义解析+回答质量评估+参数自动调优

最近 MCP(大模型上下文协议)比较火,花了点时间研究了下和 RAG 的协作架构,后续整理出心得后再发出。 言归正传,之前文章里详细介绍了 RAGFlow 的 Python api 用法,今天结合几篇法律法规文档来给大家做个简单演示,抛砖引玉。 这篇主要介绍三个脚本示例,分别是:数据处理与系统配置,系统测试,参数优化脚本。

RAGFlow自动化脚本套件:自定义解析+回答质量评估+参数自动调优

最近 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可添加的其他配置选项

数据集高级配置

复制
def create_legal_dataset(rag_object, dataset_name="法规知识库"):
    # 添加更多高级配置
    dataset = rag_object.create_dataset(
        name=dataset_name,
        descriptinotallow="包含生物安全法等法律法规文档",
        embedding_model="BAAI/bge-m3",
        chunk_method="laws",
        permissinotallow="team",  # 设置为团队可访问
        parser_cnotallow={
            "raptor": {"user_raptor": False}
        }  # 为法律文档添加特定的解析器配置
    )
    return dataset

文档元数据配置

复制
def upload_documents_with_metadata(dataset, docs_path):
    documents = []
    for filename in os.listdir(docs_path):
        if filename.endswith(('.docx', '.doc', '.pdf', '.txt')):
            file_path = os.path.join(docs_path, filename)
            with open(file_path, "rb") as f:
                blob = f.read()
                # 添加元数据
                documents.append({
                    "display_name": filename,
                    "blob": blob,
                    "meta_fields": {
                        "法律类型": "行政法规" if "条例" in filename else "法律",
                        "颁布年份": filename.split("(")[1].split(")")[0] if "(" in filename else "未知",
                        "效力级别": "国家级"
                    }
                })
    dataset.upload_documents(documents)

文档解析自定义配置

复制
def customize_document_parsing(dataset, doc_ids):
    # 获取文档并更新解析配置
    for doc_id in doc_ids:
        docs = dataset.list_documents(id=doc_id)
        if docs:
            doc = docs[0]
            # 更新文档解析配置
            doc.update({
                "chunk_method": "laws",
                "parser_config": {
                    "raptor": {"user_raptor": True}
                }
            })
    # 然后解析文档
    dataset.async_parse_documents(doc_ids)

聊天助手高级配置

复制
def create_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}
"""
        }
    )
    return assistant

多数据关联与权限管理

复制
def setup_multiple_datasets(rag_object):
    # 创建多个专题数据集
    datasets = []
    topics = ["生物安全法", "传染病防治法", "野生动物保护法"]
    
    for topic in topics:
        dataset = rag_object.create_dataset(
            name=f"{topic}知识库",
            descriptinotallow=f"专门针对{topic}的法律法规解析",
            embedding_model="BAAI/bge-m3",
            chunk_method="laws",
            permissinotallow="team"  # 团队共享
        )
        datasets.append(dataset)
    
    # 创建综合法律助手,关联所有数据集
    dataset_ids = [dataset.id for dataset in datasets]
    assistant = create_legal_assistant(rag_object, dataset_ids, "综合法律法规顾问")
    
    return datasets, 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,设计一个符合特定文档结构特点以及业务目标的脚本组合,总是多快好省的。

相关资讯

RAGFlow+DeepSeek-R1:14b落地案例分享(足够详细):机加工行业设备维保场景

看到一个段子说,春节开工以后,中国有 5000 万家企业老板担心会错过 DeepSeek。 虽然感觉有点瞎玩梗,但 DeepSeek 无疑已是当下所谓大模型企业应用落地的"房间里的大象"。 不过想想,其实子弹也才刚刚飞了一个月而已。

企业实施RAG过程中:常见误解与澄清,内含项目升级预告

春节之后的一个月的时间内,微信和小红书上数了下大概有 150 多个过来咨询 RAG 在企业落地的网友,一路聊下来按照对方的诉求大概分为三类,第一种是最多的就是年后返工公司领导让落地 RAG,但是一时没有头绪的过来咨询的;第二种是看过我公众号上的相关案例后,想外包给我来做具体实施的;第三种有点出乎意料的是,相关的媒体来交流行业观察的。 第一种类型也是最开始比较多的,最初我也是问啥答啥,但是大概聊了五六个之后发现情况有点不对,大部分其实是比较基础的问题,或者我认为问大模型能比问我更快扫盲的,再加上后来确实肉眼可见的人在变多,我索性和每个人说如果是咨询的话 200 块每小时(现在涨到了 500),这样就大部分人就索性不问了,虽说前后也是有十几个人很干脆的问完问题后直接发了红包,不过不得不说收费确实是个很好的互相筛选。 以上是碎碎念,言归正传,这篇给大家介绍下我目前几个项目实践踩坑过程中总结出的些经验。

现在的AI Agent还是这么差!

编辑 | 言征出品 | 51CTO技术栈(微信号:blog51cto)背景是这样的。 前几天,我发现我的XX激光雷达出了问题。 本来我靠它来为电影摄像机增加自动对焦和自动跟踪功能,如果没有这项功能,我会很难拍摄到我需要的画面。