法律咨询 Agent¶
项目背景与目标¶
法律服务存在"需求多、门槛高、成本贵"的痛点。普通人遇到法律问题(劳动纠纷、婚姻家事、消费维权、合同问题)往往不知如何维权,律师咨询费又让很多人望而却步。智能法律咨询 Agent 通过法条检索、案例匹配、咨询建议生成,为大众提供 7×24 小时可用、低成本的初级法律咨询服务,引导合理维权。
本项目目标是构建一个法律咨询 Agent,覆盖常见民事咨询场景,核心能力包括法律问题理解、法条检索、相似案例匹配、咨询建议生成。系统须严格遵循"辅助不替代律师"原则:不代写诉状、不出具正式法律意见、复杂案件引导找律师。
需求分析¶
核心能力: 1. 问题理解:从用户自然语言描述提取法律要素(当事人、事实、诉求) 2. 法条检索:根据问题检索相关法律法规、司法解释 3. 案例匹配:检索相似判例,分析裁判倾向 4. 咨询建议:给出维权路径、证据准备、时效提醒 5. 风险提示:告知诉讼风险与成本 6. 律师匹配:复杂案件推荐对口律师
咨询领域:劳动、婚姻家事、合同、消费维权、交通事故、知识产权(初步)。
技术选型说明¶
| 模块 | 技术方案 | 选型理由 |
|---|---|---|
| Agent 框架 | LangGraph | 多步骤咨询流程 |
| 法条库 | 向量 + BM25 混合检索 | 法律文本精准检索 |
| 案例库 | Elasticsearch + 向量 | 判例多维度检索 |
| LLM | Qwen-Max | 法律推理与建议 |
| 知识图谱 | Neo4j | 法条-案例-概念关系 |
| 法律计算器 | 规则引擎 | 赔偿、时效计算 |
| 后端 | FastAPI | 流式回复 |
| 数据库 | PostgreSQL | 咨询记录 |
架构设计¶
flowchart TD
U[用户咨询] --> UNDER[问题理解]
UNDER --> EXTRACT[要素抽取]
EXTRACT --> AGENT[咨询 Agent]
AGENT --> LAW[法条检索]
LAW --> VEC[(法条向量库)]
LAW --> BM25[(法条索引)]
AGENT --> CASE[案例匹配]
CASE --> CDB[(案例库)]
AGENT --> CALC[法律计算]
CALC --> RULE[规则引擎]
AGENT --> ADV[建议生成]
ADV --> LLM[LLM 推理]
LLM --> SAFE[安全审查]
SAFE --> REPLY[回复用户]
SAFE --> LAWYER{需律师?}
LAWYER -->|是| REF[推荐律师]
关键模块实现思路¶
模块1:法律问题理解¶
用户描述往往口语化、要素不全(如"老板拖欠工资怎么办")。LLM 抽取法律要素:当事人关系(雇主-员工)、事实(拖欠工资)、诉求(要回工资)、时间(是否过仲裁时效)。要素缺失时追问澄清。
LEGAL_ELEMENTS = {
"当事人": "劳动关系/合同关系/侵权关系",
"事实": "发生了什么",
"诉求": "想要什么结果",
"时间": "何时发生/是否过时效",
"证据": "有无合同/记录/证人"
}
def extract_elements(text):
return llm_extract(text, schema=LEGAL_ELEMENTS)
模块2:法条检索¶
法条库收录法律法规、司法解释、地方性法规,按条文分块向量化。检索采用向量 + BM25 混合:向量召回语义相关("拖欠工资"匹配"劳动法第 50 条"),BM25 精确匹配法条编号与术语。
def search_law(query, elements):
vec_results = vector_search(query, top_k=20)
bm25_results = bm25_search(query, top_k=20)
merged = hybrid_rank(vec_results, bm25_results)
return rerank_by_relevance(merged, elements)
每条法条标注效力等级(法律>行政法规>部门规章>地方性法规),冲突时高效力优先。
模块3:相似案例匹配¶
案例库收录裁判文书(脱敏)。匹配维度:案由、事实要素、争议焦点、当事人关系。向量检索找语义相似案例,再用规则过滤(同案由、同地区优先)。
def match_cases(elements, top_k=5):
query = encode_case(elements)
candidates = case_vector_search(query, top_k=50)
filtered = [c for c in candidates if c.cause == elements.cause]
return rank_by_similarity(filtered, elements)[:top_k]
案例分析输出裁判倾向:支持率、典型裁判要点、判赔区间,帮助用户预期诉讼结果。
模块4:法律计算器¶
部分咨询涉及数值计算,用规则引擎精确完成: - 劳动仲裁时效:自知道权益受损起 1 年 - 诉讼时效:一般 3 年(民法典) - 经济补偿:N(工作年限×月工资) - 交通事故赔偿:医疗费+误工费+护理费+伤残赔偿金
def calc_labor_compensation(years, monthly_salary, cause):
if cause == "违法解除":
return 2 * years * monthly_salary # 2N
if cause == "协商解除":
return years * monthly_salary # N
数值计算不交给 LLM,避免错误。
模块5:咨询建议生成¶
LLM 综合法条、案例、计算结果生成结构化建议:维权路径(协商→调解→仲裁→诉讼)、证据准备清单、时效提醒、风险与成本提示。建议须引用具体法条,禁止编造。
ADVICE_PROMPT = """基于以下信息生成法律咨询建议:
问题要素:{elements}
相关法条:{laws}
相似案例:{cases}
计算结果:{calc}
要求:
1. 引用具体法条
2. 给出维权路径
3. 提示时效与风险
4. 复杂案件建议找律师
"""
核心流程详解¶
咨询主流程: 1. 用户描述问题 → 要素抽取(缺失追问) 2. 法条检索 → 案例匹配 → 法律计算 3. LLM 生成咨询建议(引用法条与案例) 4. 安全审查 → 过滤错误/危险建议 5. 回复用户:法律依据 + 维权路径 + 证据清单 + 风险提示 6. 复杂案件 → 推荐对口律师
多轮咨询流程: 1. 首次咨询给出初步建议 2. 用户追问细节 → Agent 深入分析 3. 用户补充新信息 → 更新要素与建议 4. 咨询记录存档,便于后续追溯
部署与优化建议¶
- 法条时效:法律法规更新后及时同步,旧法条失效标记
- 免责声明:每次回复附"仅供参考,不构成正式法律意见"
- 地域差异:地方性法规按地区检索,避免误用
- 隐私保护:咨询内容脱敏存储,敏感信息加密
- 律师协同:复杂案件一键转律师,共享咨询记录
- 专业审核:定期由律师抽检咨询质量
常见问题与解决方案¶
| 问题 | 原因 | 解决方案 |
|---|---|---|
| LLM 引用错法条 | 法条幻觉 | 强制 RAG + 法条编号校验 |
| 案例过时 | 法律修订 | 案例标注裁判时间 + 现行法对照 |
| 建议越界 | 涉及诉讼代理 | 安全护栏 + 引导找律师 |
| 要素遗漏 | 用户描述模糊 | 多轮追问 + 模板引导 |
扩展方向¶
- 法律文书生成:起诉状、答辩状草稿(标注需律师审核)
- 在线调解:双方协商辅助
- 普法推送:基于用户咨询推送相关法律知识
- 企业法务:合同审查、合规咨询企业版