Kotaemon法律援助机器人公益项目启动
在数字鸿沟依然存在的今天,许多普通人面对劳动纠纷、合同争议或家庭矛盾时,往往因信息不对称、律师资源稀缺而错失维权良机。尤其是在偏远地区,一次法律咨询动辄数百元,成为难以承受的负担。正是在这样的现实背景下,一个名为Kotaemon的开源智能代理框架悄然走出了实验室,开始承担起一项更具温度的任务——构建可复制、低成本、高可信度的法律援助机器人。
这不是一场炫技式的AI秀,而是一次技术向善的实践探索。它试图回答一个问题:当大模型不再只是生成流畅文本的“话术机器”,我们能否让它真正“懂法”“办事”,并为最需要帮助的人群提供第一步的专业支持?
从“能说”到“靠谱”:为什么传统问答系统撑不起法律服务?
早期的智能客服多依赖关键词匹配或预设规则,遇到“公司拖欠工资怎么办?”这类问题,可能只会机械地回复“请保留证据并向劳动监察部门投诉”。这看似正确,实则空洞。用户真正想知道的是:我能拿回多少钱?要不要打官司?去哪里找免费律师?
更危险的是,一些基于纯生成式大模型的助手,虽然语言流畅,却容易“一本正经地胡说八道”——编造根本不存在的法条,给出错误赔偿金额。在法律场景中,这种“幻觉”是不可接受的。
于是,检索增强生成(RAG)成了解决方案的核心思路:让AI先查资料,再作答。但仅仅接入一个向量数据库远远不够。真正的挑战在于——如何确保整个流程在生产环境中稳定、可追溯、易维护?
这正是Kotaemon框架的设计初衷。
镜像即产品:一个可复现的RAG运行环境
Kotaemon 提供的不只是代码库,而是一个完整的Docker镜像—— 它封装了嵌入模型、向量存储、生成模型、评估工具链和标准化接口。这意味着开发者无需纠结“为什么在我机器上跑得好,线上就出错”,也不用花几周时间搭建复杂的依赖环境。
这个镜像遵循典型的 RAG 流程,但每一个环节都经过工程化打磨:
查询理解阶段,系统不会直接把用户的口语化提问扔进数据库。比如用户问:“干了两年被开除有补偿吗?” 系统会先用轻量级LLM将其重写为更规范的语义表达:“劳动合同未到期,用人单位单方面解除,劳动者工作年限两年,是否享有经济补偿?” 这一步显著提升了检索命中率。
知识检索环节,采用 BGE-M3 等先进嵌入模型对法律条文、司法解释、典型案例进行向量化处理,并存入 FAISS 或 Chroma 数据库。检索不仅看语义相似度,还会结合时间权重(优先最新修订法条)和权威性评分(全国人大 > 地方法规)。
生成与增强阶段,提示词模板明确要求模型“仅依据所提供材料回答”,并在输出时自动拼接引用来源。例如:
“根据《劳动合同法》第47条:经济补偿按劳动者在本单位工作的年限,每满一年支付一个月工资的标准向劳动者支付……”
(引用来源:[中华人民共和国劳动合同法] 第47条)结果评估模块内置
ragas框架,在离线测试中持续监控 Answer Relevance(相关性)、Faithfulness(忠实度)等指标。我们曾在一次迭代中发现,尽管生成内容流畅,但 Faithfulness 得分仅为0.68——说明模型在“自由发挥”。通过加强 prompt 约束和引入交叉验证机制,最终将该指标提升至0.92以上。
from kotaemon.rag import RetrievalQA, VectorStoreRetriever from kotaemon.embeddings import BGEM3Embedding from kotaemon.llms import HuggingFaceLLM # 初始化组件 embedding_model = BGEM3Embedding(model_name="BAAI/bge-m3") retriever = VectorStoreRetriever(embedding_model=embedding_model, index_path="./legal_index") llm = HuggingFaceLLM(model_name="meta-llama/Llama-3-8b") # 构建RAG管道 qa_pipeline = RetrievalQA( retriever=retriever, llm=llm, prompt_template="你是一名法律助理,请根据以下资料回答问题:{context}\n\n问题:{question}" ) # 执行查询 response = qa_pipeline("劳动合同到期不续签是否有补偿?") print(response.text) print("引用来源:", response.sources)这段代码看似简单,背后却是无数次对嵌入精度、上下文截断策略、模型响应格式的调优。更重要的是,这套流程可以在任何具备基础算力的服务器上一键部署,真正实现了“科研成果→工程落地”的跨越。
不只是问答:让AI学会“边查边办”的对话代理
如果说 RAG 解决了“说什么”的问题,那么智能对话代理框架则解决了“怎么一步步解决问题”。
在真实法律咨询中,用户很少能一次性说清所有信息。他们可能会说:“我想辞职,老板不让走。” 接下来需要引导用户提供更多细节:有没有签合同?拖欠工资了吗?工作多久了?这些信息共同决定了维权路径。
Kotaemon 的代理框架采用“感知-决策-行动”循环:
- 感知层接收用户输入与历史对话;
- 状态跟踪器判断当前处于“信息收集”、“法条解释”还是“建议输出”阶段;
- 策略引擎决定下一步动作:是追问细节?调用计算工具?还是发起外部API请求?
- 执行器完成具体任务,并将结果反馈给生成模型形成自然语言回应。
关键在于,这个代理不仅能“说”,还能“做”。
工具调用:让AI拥有“手”和“脚”
from kotaemon.agents import ToolCallingAgent from kotaemon.tools import register_tool @register_tool def get_legal_provision(article_id: str) -> dict: """查询指定法条内容""" return { "title": "劳动合同法第47条", "content": "经济补偿按劳动者在本单位工作的年限..." } @register_tool def check_assistance_eligibility(income: float, region: str) -> bool: """判断是否符合法律援助条件""" threshold = 5000 if region == "一线" else 3000 return income < threshold agent = ToolCallingAgent( tools=[get_legal_provision, check_assistance_eligibility], llm=HuggingFaceLLM("meta-llama/Llama-3-8b-instruct") ) history = [ {"role": "user", "content": "我月薪4000,在北京打工,能申请法律援助吗?"} ] response = agent.run(history) print(response.text)在这个例子中,当用户提出资格问题时,代理不会凭记忆猜测政策标准,而是主动调用check_assistance_eligibility函数进行逻辑判断。这种“结构化调用+自然语言输出”的模式,极大降低了误判风险。
类似的工具还包括:
-compute_severance_pay(years, salary):自动计算应得赔偿金;
-generate_complaint_letter(name, company, reason):生成标准仲裁申请书草稿;
-find_nearest_legal_aid_office(city):对接民政公开接口,推荐最近的服务点。
这些能力组合起来,使得机器人不再是被动应答者,而是能够主导对话流程、完成复杂任务的“数字法律顾问”。
实战落地:一个劳动纠纷咨询的完整旅程
让我们看一个真实模拟场景:
用户提问:“我在深圳上班两年,公司突然通知我不用来了,也没给钱,怎么办?”
- 首轮响应:系统识别关键词“解雇”“无补偿”,触发“劳动维权”对话流。
- 信息补全:代理连续追问:“是否有书面劳动合同?”、“过去12个月平均工资是多少?”、“离职通知是口头还是邮件?”
- 知识检索:自动检索《劳动合同法》第38、46、47条及广东省高院相关判例。
- 工具调用:
- 调用compute_compensation(years=2, monthly=8000)返回“约16,000元”;
- 调用check_retrenchment_procedure合规检查()验证企业是否履行法定程序;
- 查询本地法律援助中心地址并附上联系方式。 - 综合输出:
“您有权主张经济补偿金约16,000元(依据《劳动合同法》第47条)。若公司未提前30日通知,还可额外主张一个月工资作为代通知金。以下是深圳市南山区法律援助中心的信息……”
- 溯源标注:每一条结论后均标注法条编号与参考案例ID,用户可自行查证。
整个过程耗时不到30秒,且全程留痕,便于后续人工律师接手时快速掌握案情。
设计背后的克制与边界
我们在开发过程中始终坚持几个原则,哪怕牺牲部分智能化体验:
- 绝不承诺胜诉:所有建议必须包含免责声明:“以上分析仅供参考,具体诉讼策略请咨询执业律师。”
- 隐私优先:身份证号、银行卡等敏感字段在传输时加密,会话结束后自动清除内存缓存。
- 知识时效性保障:建立自动化 pipeline,每日同步全国人大官网、最高人民法院公报,确保法条更新延迟不超过24小时。
- 可解释性高于流畅性:宁可回答稍显刻板,也不能为了“说得漂亮”而模糊依据。
这些设计不是技术限制,而是一种责任意识的体现。毕竟,我们提供的不是娱乐聊天,而是可能影响人生决策的法律指引。
技术之外的价值:让公平触手可及
Kotaemon 的意义远不止于代码本身。它代表了一种可能性——用模块化、可复用的技术架构,降低专业服务的门槛。
在云南某县试点中,当地司法局将该机器人接入微信小程序,三个月内接待咨询超1,200人次,其中76%的问题得到了有效解答,23%的用户被成功引导至线下援助窗口。一位农民工通过机器人指导收集工资记录和考勤证据,最终在调解中成功追回欠薪。
这正是我们希望看到的变化:AI 不取代律师,而是成为他们的“前置过滤器”和“效率倍增器”。有限的公共法律资源得以聚焦于真正复杂的案件,而大多数基础性、重复性问题由系统批量处理。
更深远的影响在于生态建设。由于 Kotaemon 完全开源,各地机构可根据本地法规定制知识库,甚至扩展至婚姻家事、消费者权益、农村土地等领域。已有团队尝试将其应用于少数民族地区的双语法律服务,通过集成民族语言翻译插件,让更多人跨越语言障碍获得帮助。
结语:科技向善,始于脚下
Kotaemon 并非完美。它的准确率仍在持续优化,多轮对话的连贯性有待提升,对地方性法规的覆盖也不够全面。但它已经迈出了关键一步——证明了高可信度、可追溯、易部署的AI助手,在公共服务领域是可行且必要的。
未来,随着更多开发者加入,我们期待看到:
- 更精细的领域微调模型,专精于行政法、知识产权等细分方向;
- 与法院电子立案系统的对接,实现“咨询-准备-提交”全流程辅助;
- 基于用户反馈的自动评估闭环,让系统越用越聪明。
技术终归是工具,而选择用它来做什么,才定义了我们的价值。当一个外卖员深夜打开手机,问出那句“他们不给我社保怎么办”,如果能得到一份清晰、有据、温暖的回答——那么这场关于 AI 与正义的实验,就已经值得。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考