Prompt Engineering
一、基础定义
提示词工程是通过结构化文本指令约束大模型行为、输出格式、推理逻辑、工具调用的整套工程化方法;
对你的系统来说:提示词是控制 Agent 行为的核心开关,比模型参数调优收益更高,能直接解决工具调用乱、JSON 报错、幻觉、代码定位不准四大痛点。
二、四大基础提示词技术(从简单到复杂)
1. Zero-Shot 零样本(简单问答)
仅角色 + 指令,无参考案例,适合简单查询
示例:你是后端代码排查专家,根据日志定位报错代码行,直接输出 JSON 结果。
2. Few-Shot 少样本(生产必备,解决格式混乱)
给 1~5 组「输入→标准输出」样例,强制模型模仿格式、逻辑、输出规范,Agent 工具调用必须用。
作用:大幅降低非法 JSON、乱调用工具、输出冗余文字。
3. CoT 思维链(复杂故障定位核心)
强制模型先分步推理再给出结论,解决长链路 SaaS 流程多层逻辑混乱:
指令模板:
- 先拆解用户问题对应的业务流程
- 列出需要检索的代码模块、日志、Trace 链路
- 调用工具获取数据后逐一校验异常点
- 最后汇总根因代码行,禁止直接给出最终结论不写推理过程
4. Self-Consistency 自校验(降低幻觉)
让模型对同一个问题生成多套推理路径,交叉验证后输出统一结论;适合祖传代码、隐性业务规则排查,减少虚假代码分支幻觉。
三、工业级标准化提示词框架(Agent 开发直接复用)
1. CRISPE(Agent 最优框架,适配你的代码排查系统)
C Capacity&Role 角色能力 | R Requirement 任务要求 | I Insight 业务上下文 | S Scenario 边界约束 | E Example 标准样例
可直接复制的 SaaS 代码 Agent System Prompt 模板
# CRISPE 代码根因定位Agent系统提示词
## C 角色与能力
你是资深SaaS微服务架构排查专家,精通Java/TS/Go微服务、分布式Trace、日志堆栈、数据库SQL、业务流程状态机;
你的唯一工作:根据用户业务问题,自动检索对应流程代码、链路日志,精准定位出错代码行,给出可验证根因;
禁止编造不存在接口、代码文件、数据库字段。
## R 任务硬性要求
1. 用户提问=某业务流程异常(支付/订单/库存等)
2. 第一步:拆解完整业务调用链路,列出依赖微服务
3. 第二步:自主选择工具:代码检索/日志查询/Trace链路/数据库表查询
4. 第三步:读取工具返回数据,逐行比对代码分支与异常堆栈
5. 第四步:输出结构化结论:流程名称、出错文件+行号、异常分支、修复建议
6. 所有工具调用严格使用GLM5.2标准<|tool_start|><|tool_end|>格式,输出纯JSON,无多余自然语言
## I 上下文背景
当前系统私有数据:整套SaaS微服务源码库、全链路Trace、线上异常日志、数据库表结构、历史故障案例;
禁止依赖外部联网知识,所有判断必须基于工具返回的本地代码/日志。
## S 场景约束(边界,杜绝越界+幻觉)
1. 若工具返回信息不足,禁止自行脑补数据,主动调用补充工具,或告知用户缺少XX日志/代码片段
2. 基础设施故障(磁盘、网络、K8s)优先识别,不盲目检索业务代码
3. 单次最多连续调用3次工具,超过则停止循环,输出当前线索,等待用户确认
4. 不回答与SaaS故障排查无关问题
## E 标准样例(Few-Shot)
### 样例输入:用户支付余额扣减失败
### 样例模型思考+工具调用
<|tool_start|>code_search{"module":"pay-service","keyword":"balance_deduct"}<|tool_end|>
<|tool_start|>trace_query{"trace_id":"pay-20260728001"}<|tool_end|>
### 样例标准输出JSON
{
"flow": "支付余额扣减流程",
"error_file": "pay/balance/DeductService.java",
"line": 142,
"root_cause": "未做余额负数判断,并发扣减后余额小于0未拦截",
"fix": "增加if(balance < deductAmount)抛出业务异常,终止扣减"
}
2. CO-STAR(通用轻量化框架)
C 上下文 | O 目标 | S 输出风格 | T 语气 | A 受众 | R 返回格式
适合简单对话、告警摘要,不适合复杂多工具 Agent。
四、GLM5.2 专属提示词适配要点(关键,解决工具调用报错)
- 工具调用格式强制约束
GLM5.2 不兼容原生 OpenAI Function JSON,必须在 System Prompt 明确标记工具分隔符:
所有工具调用必须严格遵循格式:
<|tool_start|>工具名{"参数1":"值","参数2":"值"}<|tool_end|>
禁止使用```json、多余注释、换行拆分JSON;参数缺失时不编造,等待补充信息
- 启用深度推理模式
Prompt 末尾追加指令,配合
enable_thinking=true参数:
推理阶段完整梳理业务链路后再执行工具调用,不要直接调用工具跳过分析步骤阿里云帮助...
- 百万上下文适配优化
在提示词增加长文本约束:
读取超长代码 / 日志时,只保留与当前业务流程相关片段,自动过滤无关模块,减少冗余推理
- 幻觉强制拦截规则(写进 System Prompt)
任何代码、接口、表结构、日志内容必须来自工具返回结果;工具未返回则明确说明「无相关数据,无法判断」,禁止虚构代码逻辑
五、Agent 场景分层提示词架构(工程化,可维护)
不要把所有指令写死在一段文本,模块化拆分,方便版本迭代、A/B 测试:
1. 固定 System Prompt(核心,长期不变)
角色、全局约束、工具调用格式、幻觉拦截、安全边界(CRISPE 主体)
2. 动态业务 Prompt(运行时拼接,变量注入)
- 当前用户提问
- 检索到的业务流程文档、代码片段、Trace 日志
- 历史对话记忆、上一轮工具返回结果
使用 LangChain/LangGraph
PromptTemplate+ Jinja2 模板管理,统一变量渲染
3. 子 Agent 专属子提示词(分层智能体隔离)
- 代码检索子 Agent:只负责筛选代码文件
- 链路分析子 Agent:只分析 Trace 调用时序
- 根因总结子 Agent:只做汇总输出
各自独立提示词,互不干扰,降低长 Prompt 冲突。
六、针对你的 SaaS 故障定位系统,提示词工程核心优化点(解决「不如人工快」痛点)
- 置信度输出约束
强制输出结论附带置信分,写进 Prompt:
输出 JSON 增加 confidence 字段,0~100;低于 60 分停止工具循环,提示人工介入,禁止强行给出错误根因
- 工具调用限流规则
限制连续工具调用次数,防止无限循环检索无关代码,浪费算力 + 耗时
- 分层检索优先逻辑
Prompt 内置检索优先级:先匹配业务流程分片代码,不全局扫描全仓库,大幅提速
- 历史故障记忆复用
指令:优先匹配历史故障案例库,同类问题直接复用历史根因,无需重复完整推理
- 异常分支优先校验
强制优先读取代码中 if/else 异常分支、try-catch、参数校验逻辑,而非正常业务流程
七、生产级提示词工程配套工具链
- 模板管理:LangChain PromptTemplate、LlamaIndex 模板、Jinja2 动态渲染
- 版本 & 实验管理:LangSmith(提示词 A/B 测试、效果追踪)、PromptLayer 记录调用日志
- 自动化测试:批量导入故障测试用例,自动校验工具调用正确率、JSON 合规率
- 监控优化:采集线上失败案例(工具格式错误、幻觉、定位不准),迭代优化提示词
浙公网安备 33010602011771号