零基础用大模型搭一个法律问答助手:从API配置到效果验证
法律咨询场景里,用户往往希望快速得到条文依据和初步判断。
用大模型搭一个本地法律问答助手,是零基础也能动手的 AI+法律应用入门方式。
下面从环境准备到效果验证,给出可照做的步骤和避坑点。
先确认你要解决的是哪类法律问答
不是所有法律问题都适合直接交给大模型。
适合的场景包括:常见劳动纠纷的初步梳理、合同条款的通俗解释、诉讼流程的常识性说明。
不适合的场景包括:需要出具正式法律意见、涉及具体案件胜诉判断、要求替代律师做最终决策。
搭建前先明确边界:助手只做信息整理和常识解释,回答末尾要提示用户以现行法律法规和执业律师意见为准。
这一点要写进系统提示词,不能只靠口头约定。
准备运行环境和API凭据
本文示例在 Linux 服务器或本地电脑均可运行,需要 Python 3.9 以上版本。
先用下面命令确认环境:
python3 --version
pip3 --version
如果版本过低,用系统包管理器升级 Python,或使用 pyenv 管理多版本。
接着安装依赖,建议放进虚拟环境,避免污染系统包:
python3 -m venv legal-ai
source legal-ai/bin/activate
pip install openai
API 凭据不要写死在代码里。
创建 .env 文件保存密钥,并限制文件权限:
cat > .env <<'EOF'
API_KEY=你的密钥
BASE_URL=https://你的服务商接口地址/v1
EOF
chmod 600 .env
代码中通过环境变量读取,例如 os.getenv("API_KEY")。
如果使用宝塔面板,可以在“网站”对应目录下上传 .env,并在“文件”权限中设置为仅所有者可读。
编写法律问答脚本与提示词
新建 legal_qa.py,核心逻辑是:读取用户问题、拼接系统提示词、调用大模型接口、打印回答。
系统提示词要约束回答范围和格式:
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("API_KEY"),
base_url=os.getenv("BASE_URL")
)
SYSTEM_PROMPT = """你是一个法律常识助手,只回答中国法律常识和流程性问题。
回答时先给结论,再分点说明依据,最后提示用户以现行法律和执业律师意见为准。
不编造法条编号,不确定时明确说无法确认。"""
def ask(question):
resp = client.chat.completions.create(
model="你的模型名称",
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": question}
],
temperature=0.3,
timeout=30
)
return resp.choices[0].message.content
if __name__ == "__main__":
print(ask("试用期被辞退,公司需要提前通知吗?"))
model 字段要填服务商实际提供的模型名,不能照抄示例。temperature 调到 0.3 左右,让回答更稳定,减少随意发挥。
运行脚本:
python legal_qa.py
如果终端输出一段结构化的中文回答,说明接口调用成功。
超时、限流和密钥错误的处理
零基础阶段最容易卡在接口报错。
常见现象和排查顺序如下:
- 报
AuthenticationError或 401:检查.env中的API_KEY是否有多余空格,是否在代码运行前已通过export或python-dotenv加载。 - 报
RateLimitError或 429:说明请求频率超过服务商限制。在代码里加time.sleep(1)重试,或降低并发。不要用循环狂刷接口。 - 报超时:先确认服务器能访问
BASE_URL,用curl -I 接口地址测试连通性;再检查防火墙是否放行出站 443 端口。 - 回答为空或乱码:确认请求头编码和返回解析方式,先用
print(resp)打印原始响应,不要直接假设字段存在。
另外,法律问答涉及用户隐私,不要把真实姓名、身份证号、合同原件直接发给外部接口。
测试阶段用脱敏后的虚构案例。
验证回答质量与适用边界
脚本跑通不等于能用。
准备 5 到 10 个已知答案的常识问题,逐条检查回答是否包含法条依据、是否出现编造条文、是否在不确定时主动说明。
可以人工记录每次回答的准确性和完整性,连续测试后再决定是否对外提供服务。
如果回答经常偏离主题,优先收紧系统提示词,而不是频繁换模型。
提示词里明确“只回答法律常识”“不判断案件胜负”“不编造法条编号”,通常比调参数更有效。
最后提醒:AI+法律应用的定位是辅助信息整理,不能替代律师执业。
对外发布前,应保留人工复核环节,并在页面显著位置说明回答仅供参考。
按本文步骤先跑通本地脚本,再逐步增加日志、脱敏和限流,是比较稳妥的落地顺序。