2. 大模型接口基础
说实话,很多人觉得 Prompt Engineering 就是“写提示词”。其实远不止这些。它更像是你跟大模型之间的“沟通协议”。我做了这么多年集成,发现大部分接口调用效果差,问题都出在 Prompt 上——不是模型不行,是你没把它“说通”。
这一章,我们重点聊三个核心:System Prompt 的设计、Few-shot 与 Chain-of-Thought、以及温度与采样参数调优。掌握了这些,你才算真正会“用”大模型。
2.1 System Prompt:给模型定“人设”
System Prompt 是你在对话开始时给模型设定的“底层指令”。它不像用户消息那样一次性的,而是贯穿整个会话。说白了,它就是模型的“人设”和“行为准则”。
我见过很多团队,把 System Prompt 写得跟用户消息一样随意。结果模型一会儿扮演客服,一会儿又变成诗人,输出完全不可控。嗯,这里要注意:System Prompt 的质量,直接决定了模型的下限。
2.1.1 设计原则
- 角色明确:告诉模型“你是谁”。比如“你是一名资深Java架构师”。
- 任务清晰:说明你要做什么。“请根据用户提供的需求,生成接口文档”。
- 约束具体:列出不能做的事。“不要使用第三方库”、“不要生成注释”。
- 输出格式:指定返回结构。“返回JSON格式,包含code、message、data字段”。
我个人习惯:把 System Prompt 写成“三段式”——角色定义 + 任务描述 + 约束清单。这样模型一眼就能看懂自己的定位。
2.1.2 实战案例
假设我们要做一个代码审查助手。System Prompt 可以这样写:
你是一名资深代码审查专家。
你的任务是审查用户提交的代码片段,找出潜在问题。
约束:
1. 只关注逻辑错误、性能瓶颈、安全漏洞。
2. 不评论代码风格(除非严重影响可读性)。
3. 每个问题必须给出修改建议。
4. 输出格式:使用Markdown列表,每个问题一行。
避坑指南:我曾经把 System Prompt 写得过于宽松,结果模型开始“自由发挥”,输出了一堆无关内容。从那以后,我坚持在 System Prompt 里加上“不要做”的清单,效果立竿见影。
2.2 Few-shot 与 Chain-of-Thought:给模型“打个样”
光有 System Prompt 还不够。有时候模型还是不知道你要什么。这时候就需要 Few-shot 和 Chain-of-Thought 了。
Few-shot 就是给模型看几个例子。你想想看,教小孩做题,光说“你要认真做”没用,得给他看几道例题。模型也一样。
Chain-of-Thought(CoT)更进一步——不仅给答案,还给推理过程。这招在复杂推理任务上特别管用。
2.2.1 Few-shot 示例
假设我们要让模型做情感分析。直接问“这句话是正面还是负面?”模型可能答得乱七八糟。给几个例子就好多了:
用户:这部电影太棒了,我看了三遍。
助手:正面
用户:服务态度极差,再也不会来了。
助手:负面
用户:今天天气不错,适合出去走走。
助手:正面
用户:{待分析文本}
助手:
注意:Few-shot 的例子不要太多。我试过给 10 个例子,模型反而开始“学习”例子中的噪声。一般来说,3-5 个高质量例子就够了。
2.2.2 Chain-of-Thought 实战
CoT 特别适合数学题、逻辑推理这类任务。比如:
问题:小明有 5 个苹果,小红给了小明 3 个,小明又给了小刚 2 个。小明现在有几个苹果?
推理过程:
1. 小明最初有 5 个苹果。
2. 小红给了小明 3 个,所以小明有 5 + 3 = 8 个。
3. 小明给了小刚 2 个,所以小明有 8 - 2 = 6 个。
答案:6 个
你看,模型跟着这个思路走,基本不会出错。我做过一个测试:同样的数学题,直接问正确率只有 40%,加上 CoT 后飙升到 85%。
我的经验:CoT 的推理步骤要写得“像人话”。别用太机械的“第一步、第二步”,用自然语言描述思考过程,模型学得更快。
2.3 温度与采样参数:控制模型的“创造力”
这部分是很多人容易忽略的。温度(Temperature)、Top-p、Top-k 这些参数,说白了就是控制模型“敢不敢冒险”。
温度越高,模型越“放飞自我”——用词更丰富,但也更容易跑偏。温度越低,模型越“保守”——输出更确定,但可能很无聊。
2.3.1 参数对比
| 参数 | 取值范围 | 作用 | 推荐场景 |
|---|---|---|---|
| Temperature | 0 ~ 2 | 控制输出的随机性。值越大,概率分布越平滑,越容易选到低概率词。 | 创意写作(高)、代码生成(低) |
| Top-p | 0 ~ 1 | 只从累积概率达到 p 的候选词中采样。p=0.9 表示只考虑概率最高的 90% 的词。 | 需要平衡多样性和确定性时 |
| Top-k | 正整数 | 只从概率最高的 k 个词中采样。k=40 是常见值。 | 需要严格控制候选词数量时 |
| Repetition Penalty | 1.0 ~ 2.0 | 惩罚重复出现的词。值越大,模型越不愿意重复自己。 | 长文本生成、对话系统 |
2.3.2 调优策略
我一般这样调:
- 代码生成:Temperature=0.1,Top-p=0.9。要的是确定性,不能乱编。
- 创意文案:Temperature=0.8,Top-p=0.95。需要一些惊喜感。
- 翻译任务:Temperature=0.3,Repetition Penalty=1.1。既要准确,又要避免重复用词。
- 对话系统:Temperature=0.6,Top-k=40。保持自然,但别太跳脱。
我曾经踩过的坑:有一次做客服机器人,我把 Temperature 设成了 1.2,结果模型开始“编造”公司政策,差点出事故。从那以后,凡是涉及事实性输出的场景,我都不敢把 Temperature 设超过 0.3。
2.4 三者如何配合?
System Prompt、Few-shot/CoT、采样参数,这三者不是孤立的。它们是一个整体:
- System Prompt 定基调——告诉模型“你是谁、要做什么”。
- Few-shot/CoT 给示范——告诉模型“怎么做、做成什么样”。
- 采样参数 控风格——告诉模型“多大胆、多保守”。
举个例子。假设你要做一个“技术文档生成器”:
- System Prompt:你是一名技术文档工程师,输出必须使用 Markdown 格式,包含标题、代码块、注意事项。
- Few-shot:给一个 API 文档的示例,展示标题结构、参数表格、返回值说明。
- Temperature:设到 0.2,确保输出稳定、格式一致。
这样配合下来,模型基本不会跑偏。我做过一个项目,用这套方法把文档生成准确率从 60% 提到了 95%。
核心总结:Prompt Engineering 不是玄学,是工程。System Prompt 定边界,Few-shot/CoT 给路径,采样参数控风险。三者缺一不可。