大模型结果约束
一、最常用、成本最低的约束方式(Prompt 层面)
1. 格式强约束(JSON / 列表 / 固定结构)
直接告诉模型必须输出什么格式,不给自由发挥空间。
示例:
只输出 JSON,不要解释,不要多余文字,格式如下:
{
“result”: “答案”,
“reason”: “步骤”
}
实现效果:
- 输出可直接被代码解析
- 不会乱说话
- 适合对接系统(RAG、函数调用、OOAD 建模等)
2. 内容边界约束(禁止做什么)
禁止编造信息
禁止回答无关问题
禁止生成违法、暴力、色情内容
不知道就说 “无法回答”
这是最基础的安全约束。
3. 风格 / 长度约束
回答控制在 3 句话内
只使用专业术语
不要口语化
只输出代码,不输出解释
二、中等成本:样本约束(Few-shot / 示例约束)
给模型看几个正确例子,它就会跟着学。
示例:
Q1: 1+1=?
A1: 2
Q2: 2+3=?
A2: 5
Q3: 4+5=?
A3:
模型会严格模仿格式与行为。
适用场景:
- OOAD 建模输出固定 UML 格式
- 代码生成固定风格
- 表单填写、信息抽取
三、工程级约束:结构化输出(最稳)
1. JSON Schema / Pydantic 约束
现在主流框架都支持:
- LangChain
- LlamaIndex
- OpenAI API
- Qwen、GLM 等国产大模型
告诉模型:
必须严格按照这个 JSON 结构输出,字段不能少,类型不能错。
例如 Pydantic 模型:
python
运行
1 | class Student(BaseModel): |
模型输出会被强制校验,不合法就重生成。
2. 函数调用约束(Function Calling)
让模型只能从你定义的工具里选行为,不能自己瞎编。
例如:
- 查询数据库
- 调用接口
- 计算
- 搜索
模型不能自己创造函数,行为被严格限制。
四、高级约束:RAG + 事实约束(防止胡说)
核心思想:
不让模型凭空生成,只让它从给定文档里回答。
实现步骤:
- 准备知识库(文档、规则、代码库、需求文档)
- 检索相关片段
- 拼接进 Prompt
- 强制模型:
只根据提供的材料回答,不允许编造内容
这是企业级应用最核心的事实约束。
五、训练层面约束(成本高,但效果最强)
1. SFT 监督微调
用大量符合约束的优质数据训练模型,让它天生就守规矩。
例如:
- 只输出专业内容
- 格式固定
- 不违规
- 逻辑严谨
2. RLHF / RLAIF 人类 / AI 反馈强化学习
让模型学会:
- 什么能说
- 什么不能说
- 什么格式是对的
- 什么行为是安全的
适合做产品级约束。
3. 对齐(Alignment)
让模型行为与人类价值观、规则、法律对齐。
本质也是一种强约束。
六、最底层约束:解码阶段控制(Inference Time)
在生成 token 时直接限制:
温度 temperature → 0
越低越 deterministic,越稳定,越不创新。
top_p /top_k 限制
减少随机性,强制模型选最可靠的词。
禁止词表(blacklist)
直接禁止模型生成某些词。
长度限制 max_new_tokens
停止词 stop_sequences
遇到特定符号自动停止,防止输出失控。
七、企业级完整约束方案(真实落地架构)
- 输入过滤(检查是否违规)
- RAG 检索(提供事实依据)
- Prompt 约束(格式 + 边界)
- Function Call(行为限制)
- JSON Schema(结构化输出)
- 输出校验(格式 / 合规 / 事实校验)
- 不通过则重新生成
这是目前最稳、工业界通用的约束链路。
八、一句话总结
- 想快速实现约束 → 用 Prompt + 格式限制
- 想稳定对接系统 → JSON Schema + Function Call
- 想不胡说 → RAG + 事实约束
- 想产品级稳定 → SFT + RLHF + 解码参数控制