背景与问题
在基层司法实践中,办案人员每天需要处理大量案件材料,包括起诉书、证据清单、审讯笔录等。传统的人工阅卷方式耗时费力,且容易遗漏关键信息。尤其是在辅助生成阅卷笔录、审查报告、量刑建议等文书时,重复性劳动占比很高。
近年来,大语言模型(LLM)在文本理解、摘要生成、知识问答方面表现出色,为法律智能化提供了新思路。然而,直接使用通用大模型存在三个问题:
- 领域知识不足:通用模型对法律条文、司法解释的掌握不够精准。
- 输出不可控:生成结果格式随意,难以直接进入业务系统。
- 部署运维复杂:自建GPU集群成本高,不适合中小团队。
阿里云百炼(Model Studio)提供了大模型API和知识库增强能力,配合函数计算(FC)的事件驱动模型,可以快速构建一个成本可控、弹性伸缩的AI辅助办案助手。本文以“盗窃罪案件初步审查”为例,演示完整的实现路径。
方案设计
整体架构
flowchart LR
A[办案人员上传案件信息] --> B[API网关]
B --> C[函数计算 FC]
C --> D[阿里云百炼大模型]
D --> E[结构化结果]
E --> C
C --> F[返回给前端/终端]
- 触发层:使用阿里云API网关或函数计算的HTTP触发器接收请求。
- 业务层:Python函数负责拼接提示词、调用百炼API、解析响应。
- 模型层:选择百炼上的Qwen-Max或Qwen-Plus模型,可按需接入法律知识库。
- 存储层(可选):将历史审查记录存入表格存储或云数据库RDS,便于追溯。
功能模块
- 案件信息结构化:从自然语言描述中抽取嫌疑人、罪名、金额、次数、是否自首等要素。
- 案情摘要:压缩冗长事实描述,生成300字以内的摘要。
- 法条推荐:基于罪名和性质,推荐可能适用的刑法条文。
- 初步量刑建议:参照常见量刑指导意见,给出量刑区间(仅辅助参考)。
实现步骤
1. 创建百炼应用并获取API-KEY
登录阿里云百炼控制台,开通模型服务后,创建API-KEY。在代码中将其配置为环境变量DASHSCOPE_API_KEY。
2. 编写核心调用代码
以下代码使用requests库直接调用百炼兼容OpenAI的接口,简单依赖,易于部署到函数计算。
# -*- coding: utf-8 -*-
import os
import json
import requests
def call_llm(prompt: str, temperature: float = 0.3) -> str:
"""调用百炼大模型接口"""
api_key = os.environ["DASHSCOPE_API_KEY"]
url = "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions"
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
payload = {
"model": "qwen-plus",
"messages": [
{
"role": "system",
"content": "你是一名资深刑事法官助理,请严格按照要求输出JSON。"
},
{
"role": "user",
"content": prompt
}
],
"temperature": temperature,
"response_format": {
"type": "json_object"} # 百炼支持JSON模式
}
resp = requests.post(url, headers=headers, json=payload, timeout=30)
resp.raise_for_status()
data = resp.json()
return data["choices"][0]["message"]["content"]
def build_prompt(case_desc: str) -> str:
"""构造办案审查提示词"""
return f"""请对以下盗窃案事实进行辅助审查,并输出JSON,包含四个字段:
- elements: 关键要素对象
- summary: 案情摘要(200字内)
- laws: 建议法条数组
- sentencing: 量刑建议对象
案件事实:
{case_desc}
输出格式示例:
{
{
"elements": {
{"罪名": "盗窃罪", "金额": 5000, "次数": 2, "自首": false}},
"summary": "...",
"laws": ["刑法第二百六十四条"],
"sentencing": {
{"区间": "六个月至一年有期徒刑", "理由": "..."}}
}}
"""
def analyze_case(case_desc: str) -> dict:
"""主函数:返回结构化审查结果"""
raw = call_llm(build_prompt(case_desc))
# 防止模型输出被```json包裹
raw = raw.strip().removeprefix("```json").removesuffix("```").strip()
return json.loads(raw)
if __name__ == "__main__":
test_case = """
2024年3月,犯罪嫌疑人张三在北京市朝阳区某商场趁被害人李四不备,
盗取其挎包内钱包一个,内有现金2000元。同年5月,张三再次在该商场
盗窃手机一部,价值3000元。案发后张三主动到公安机关投案,并如实供述。
"""
result = analyze_case(test_case)
print(json.dumps(result, ensure_ascii=False, indent=2))
3. 关键步骤说明
- 提示词设计:系统角色限定为“刑事法官助理”,并要求输出固定JSON结构,便于后续直接入库或展示。
- JSON模式:设置
response_format为json_object,大模型将只生成合法JSON,减少解析异常。 - 异常兜底:实际生产环境应加入
try-except,并校验必填字段,避免因单次调用失败导致流程中断。
4. 部署到函数计算
在阿里云函数计算控制台创建函数,运行时选择Python 3.10,上传上述代码及requirements.txt(仅需requests)。设置环境变量DASHSCOPE_API_KEY,并为函数创建HTTP触发器。此后即可通过Postman或前端应用发送POST请求:
curl -X POST https://your-fc-endpoint/analyze \
-H "Content-Type: application/json" \
-d '{"case_desc": "2024年6月,王五在公交车上扒窃他人手机一部,价值1500元,现场被抓获。"}'
函数计算会依据请求量自动伸缩,闲时缩容至零,节省成本。
更进一步的增强
接入法律知识库
百炼支持创建知识库,将刑法全文、司法解释、常见量刑指导意见等文档上传并建立向量索引。在调用时开启enable_knowledge参数,模型即可基于知识库内容回答,减少法条张冠李戴的风险。
输出校验与人工复核
AI辅助办案的核心是“辅助”而非“替代”。建议增加一个校验层:
- 使用正则或规则引擎检查金额、刑期格式。
- 对法条编号进行数据库匹配,确保法条真实存在。
- 在界面上明确标注“AI生成内容仅供参考,需经承办人审核”。
多轮对话与类案推送
在函数内部保存会话ID,配合百炼的上下文记忆,可实现多轮追问,例如“如果退赃退赔,量刑区间是否调整?”。同时可调用云数据库检索历史类案,推送相似判例。
注意事项
- 数据安全:案件信息属于敏感数据,建议使用阿里云专属VPC部署百炼实例,并对API请求做加密传输与鉴权。不要在提示词中输出无关的隐私信息。
- 模型幻觉:大模型可能编造不存在的法条或数字,务必对关键输出进行校验。建议将模型temperature调低(如0.2~0.3)以提高确定性。
- 责任边界:应用应明确AI仅提供参考,最终决定必须由办案人员作出。在系统日志中保留完整的调用输入输出,以便审计。
- 成本控制:函数计算按调用次数和实际消耗计费,百炼模型也按Token计费。建议对输入长度做截断,并缓存重复案件的查询结果。
总结
通过阿里云百炼与函数计算的组合,我们仅用数十行核心代码就实现了一个具备案情摘要、法条推荐、量刑参考等能力的AI办案助手原型。该方案具有三大优势:
- 免运维:无需管理GPU服务器,函数计算自动伸缩。
- 低成本:按量付费,零调用零成本。
- 可扩展:后续可无缝接入知识库、数据库、事件通知等云服务。
法律行业的AI转型正从概念走向落地。开发者应始终围绕实际业务场景,将模型能力与严格的数据治理、人工复核流程相结合,才能真正提升司法效率,守住公平正义的生命线。