跳至主要內容

使用 Dify 搭建法律顾问机器人

cpgege原创大约 6 分钟AIRAGDify

Dify构建RAG机器人流程
Dify构建RAG机器人流程

这次目标是通过 dify 搭建一个 RAG 机器人,用于回答法律问题。以民法典婚姻家庭为例。

一、准备数据

先从网上把民法典婚姻家庭的文档下载下来,txt 格式,做一次数据清洗(去掉多余的章节标题,保留法条内容,法条间空一行)

第一千零四十条 本编调整因婚姻家庭产生的民事关系。

第一千零四十一条 婚姻家庭受国家保护。
实行婚姻自由、一夫一妻、男女平等的婚姻制度。
保护妇女、未成年人、老年人、残疾人的合法权益。

第一千零四十二条 禁止包办、买卖婚姻和其他干涉婚姻自由的行为。禁止借婚姻索取财物。
禁止重婚。禁止有配偶者与他人同居。
禁止家庭暴力。禁止家庭成员间的虐待和遗弃。

...

二、在 Dify 创建知识库


进入 Dify 控制台 → 知识库 → 创建知识库,关键参数:

  • 分段设置
    • 分段标识符:用于分隔文本。\n\n\n 常用于分隔段落和行
    • 分段最大长度:分段最大长度是每个分段(chunk)的最大字符数。超过最大长度的文本会被截断
    • 分段重叠长度:设置分段之间的重叠长度可以保留分段之间的语义关系,提升召回连贯性。建议设置为最大分段长度的 10%-25%,举个例子:最大分段长度为 10,重叠长度为 1,当遇到 ABCDEFGHIJKLMN 时,会拆成 ABCDEFGHIJ 和 JKLMN 两个 chunk
  • Embedding 模型:如果用 OpenAI,选 text-embedding-3-small 即可;国内可选 BAAI/bge-large-zh-v1.5,对中文支持更好。
  • 向量检索
    • Top K: 建议设置为 3~5,后续在流程编辑器中可在此基础上减少数值
    • Score 阈值: 建议设置为 0.5 及以上,后续在流程编辑器中可在此基础上提高阈值

可以预览切块,观察切块结果是否符合预期。

三、搭建工作流

3.1. 创建 Chatflow 空白应用

3.2. 用户输入节点

该节点用于接收用户输入的问题和文件

3.3. 问题分类器

添加一个问题分类器节点,将用户的输入进行分类,路由至不同的分支处理流程

问题分类器需配置模型(chat 模型即可)

3.4. 知识检索节点

添加知识检索节点,用于从知识库中检索相关文档

也可以在此节点中进行“召回设置”,Top K 只能在知识库对应设置基础上减少,增加不生效;Score 阈值只能在知识库对应设置基础上提高,降低不生效

3.5. LLM 节点

LLM 节点用于将知识检索结果与用户输入合并,作为模型的输入

模型 Temperature 建议设 0.2~0.3,降低"胡编"概率。

SYSTEM Prompt:

你是一名专业的中国民法典法律顾问。你只能基于下方【参考法条】中的内容回答
用户问题,不得引用法条之外的法律依据。

【回答要求】
1. 先简要直接回答核心问题(1-2句)
2. 引用具体条款编号,格式为:《民法典》第X条
3. 语言简洁,避免过度堆砌法律术语,面向普通用户
4. 若参考法条不足以回答,明确告知用户,并建议其咨询专业律师

【免责声明】
每次回答末尾附注:本回答仅供参考,不构成正式法律意见。

【参考法条】
{context}

系统提示词原则

好的 System Prompt 通常遵循以下核心原则:

  1. 角色定义清晰 — 明确 AI 的身份和专业领域
  2. 任务边界明确 — 告诉模型能做什么、不能做什么
  3. 输出格式规范 — 指定回答的结构、风格、长度
  4. 上下文充分 — 提供必要的背景信息和约束条件
  5. 正向指令为主 — 用"要做什么"代替"不要做什么"
  6. 处理边界情况 — 明确当信息不足/问题超出范围时如何应对

3.6. 直接回复节点

直接回复节点, 输出 LLM 的生成结果

四、调优与发布

4.1. 调试

在预览窗口可以进行调试

下面是 LLM 的数据处理部分:

{
  "model_mode": "chat",
  "prompts": [
    {
      "files": [],
      "role": "system",
      "text": "你是一名专业的中国民法典法律顾问。你只能基于下方【参考法条】中的内容回答用户问题,不得引用法条之外的法律依据。【回答要求】1. 先简要直接回答核心问题(1-2句) 2. 引用具体条款编号,格式为:《民法典》第X条 3. 语言简洁,避免过度堆砌法律术语,面向普通用户 4. 若参考法条不足以回答,明确告知用户,并建议其咨询专业律师 【免责声明】每次回答末尾附注: 本回答仅供参考,不构成正式法律意见。 【参考法条】:{第一千零八十七条 离婚时,夫妻的共同财产由双方协议处理;协议不成的,由人民法院根据财产的具体情况,按照照顾子女、女方和无过错方权益的原则判决。\n对夫或者妻在家庭土地承包经营中享有的权益等,应当依法予以保护。\n第一千零九十二条 夫妻一方隐藏、转移、变卖、毁损、挥霍夫妻共同财产,或者伪造夫妻共同债务企图侵占另一方财产的,在离婚分割夫妻共同财产时,对该方可以少分或者不分。离婚后,另一方发现有上述行为的,可以向人民法院提起诉讼,请求再次分割夫妻共同财产。\n第一千零六十六条 婚姻关系存续期间,有下列情形之一的,夫妻一方可以向人民法院请求分割共同财产:\n(一)一方有隐藏、转移、变卖、毁损、挥霍夫妻共同财产或者伪造夫妻共同债务等严重损害夫妻共同财产利益的行为;\n(二)一方负有法定扶养义务的人患重大疾病需要医治,另一方不同意支付相关医疗费用。\n第一千零八十九条 离婚时,夫妻共同债务应当共同偿还。共同财产不足清偿或者财产归各自所有的,由双方协议清偿;协议不成的,由人民法院判决。\n第一千零六十三条 下列财产为夫妻一方的个人财产:\n(一)一方的婚前财产;\n(二)一方因受到人身损害获得的赔偿或者补偿;\n(三)遗嘱或者赠与合同中确定只归一方的财产;\n(四)一方专用的生活用品;\n(五)其他应当归一方的财产。}"
    },
    {
      "files": [],
      "role": "user",
      "text": "离婚财产如何分割\n\n"
    }
  ],
  "usage": {
    "completion_price": "0.000483",
    "completion_price_unit": "0.000001",
    "completion_tokens": 161,
    "completion_unit_price": "3",
    "currency": "RMB",
    "latency": 3.105,
    "prompt_price": "0.000896",
    "prompt_price_unit": "0.000001",
    "prompt_tokens": 448,
    "prompt_unit_price": "2",
    "time_to_first_token": 1.037,
    "time_to_generate": 2.069,
    "total_price": "0.001379",
    "total_tokens": 609
  },
  "finish_reason": "stop",
  "model_provider": "langgenius/deepseek/deepseek",
  "model_name": "deepseek-chat"
}

4.2. 发布

上次编辑于: