hello-agents 第三章学习输出
用过 ChatGPT、DeepSeek 的朋友应该都有过这种经历:同样一个问题,换个问法,模型给出的回答质量天差地别。这背后其实藏着一门学问,叫提示工程(Prompt Engineering)。今天咱们就来好好聊聊,怎么跟大模型"好好说话"。
一、提示工程是什么?
打个比方:大语言模型就像一个能力超强但"不太主动"的助手。你跟它说"帮我写个东西",它可能写出一坨不知所云的内容;但如果你说"你是一个资深技术博主,请用通俗幽默的口吻,写一篇关于 Python 装饰器的 1500 字科普文",它大概率能给你一篇像模像样的文章。
你给模型输入的那段文字,就叫 Prompt(提示)。而提示工程,就是研究"怎么写 Prompt 才能让模型输出你真正想要的东西"。
别小看这件事。在 AI Agent(智能体)的开发里,Prompt 写得好不好,直接决定了多个智能体之间能不能高效协作。可以说,Prompt 是人和大模型之间的"接口协议"。
二、先搞懂采样参数:Temperature、Top-k、Top-p
在调用大模型 API 的时候,你肯定见过 temperature、top_k、top_p 这些参数。很多人直接用默认值,也不知道它们是干嘛的。其实它们控制的是模型"选下一个词"时的策略。
2.1 Temperature(温度)
大模型在生成每个词的时候,内部会给所有候选词算一个概率分布。Temperature 做的事情很简单——调整这个概率分布的"陡峭程度"。
- Temperature 低(比如 0.1):概率分布变得很"尖锐",模型几乎只挑概率最高的那个词。输出很稳定、很确定,但也比较死板。适合代码生成、数学计算这种不需要发挥的场景。
- Temperature 高(比如 1.5):概率分布变得很"平坦",那些本来概率不高的词也有机会被选中。输出更有创意,但也更容易跑偏。适合头脑风暴、创意写作。
- Temperature = 0:直接选概率最高的词,输出完全确定,每次跑结果都一样。
2.2 Top-k
Top-k 更直接——每次只从概率最高的 k 个候选词里选。比如 Top-k=50,模型就只考虑排名前 50 的词,剩下的直接淘汰。
2.3 Top-p(核采样)
Top-p 换了个思路:不限制数量,而是限制累计概率。比如 Top-p=0.9,就从概率最高的词开始往下累加,加到总概率达到 90% 就停,只在这个范围内选。
2.4 它们之间怎么配合?
实际使用中,三个参数的优先级是:Temperature → Top-k → Top-p。温度先调整整体分布,Top-k 再砍一刀只留前 k 个,Top-p 最后在 Top-k 的结果里做累计概率筛选。
不过日常使用建议:Top-k 和 Top-p 选一个设就行,没必要都开。另外如果 Temperature 设成 0,后面两个参数就没意义了,因为模型直接选最大概率的词。
三、零样本、单样本、少样本——给不给例子,差别很大
根据你在 Prompt 里给模型看多少个"示范",可以分成三种策略。用情感分类任务来说明最直观。
3.1 零样本提示(Zero-shot)
不给任何例子,直接让模型干活。
文本:Datawhale的AI Agent课程非常棒!
情感:
模型靠自己在预训练阶段积累的知识,直接输出"正面"。能搞定,但遇到复杂任务容易翻车。
3.2 单样本提示(One-shot)
给一个例子,让模型知道你要什么格式、什么风格。
文本:这家餐厅的服务太慢了。
情感:负面
文本:Datawhale的AI Agent课程非常棒!
情感:
模型看了你给的示范,知道该怎么输出了,准确率通常比零样本高。
3.3 少样本提示(Few-shot)
给好几个例子,覆盖不同情况。
文本:这家餐厅的服务太慢了。
情感:负面
文本:这部电影的情节很平淡。
情感:中性
文本:Datawhale的AI Agent课程非常棒!
情感:
例子越丰富,模型对任务的理解越全面,结果也越靠谱。特别是那些有微妙区分的任务(比如"平淡"算负面还是中性?),多给几个边界情况的例子很有帮助。
四、指令调优——为什么现在的模型这么"听话"
早期的 GPT-3 其实是个"续写机器"。你给它一段话,它就接着往下编,并不能很好地理解"请帮我做XX"这种指令。
后来 OpenAI 搞了一个叫**指令调优(Instruction Tuning)**的技术:拿大量"指令→回答"格式的数据,对模型做进一步训练。训练完之后,模型就能理解"请翻译"“请总结”"请分类"这些指令了。
我们现在用的 ChatGPT、DeepSeek、Qwen,全都经过了指令调优。所以你可以直接说:
请将下面的英文翻译成中文:
How are you?
而不需要像以前那样,先给一堆翻译示例,再让模型接着补全。
五、四个实用的提示技巧
5.1 角色扮演(Role-playing)
给模型设定一个身份,它的回答风格会立刻变得不同。
你现在是一位资深的Python编程专家。请解释一下Python中的GIL(全局解释器锁)是什么,要让一个初学者也能听懂。
一句"你是XX专家"就能显著改善输出质量。这个技巧在 Agent 开发中用得很多——不同的 Agent 扮演不同角色(产品经理、程序员、测试工程师),各司其职。
5.2 上下文示例(In-context Example)
这个其实就是前面说的少样本提示的延伸。当你需要模型按照特定格式输出时,直接给一个输入输出的样例,比用文字描述格式要好使得多。
我需要你从产品评论中提取产品名称和用户情感。请严格按照下面的JSON格式输出。
评论:这款"星尘"笔记本电脑的屏幕显示效果惊人,但我不太喜欢它的键盘手感。
输出:{"product_name": "星尘笔记本电脑", "sentiment": "混合"}
评论:我刚买的"声动"耳机音质很棒,续航也超出了我的预期!
输出:
模型看完你的样例,就知道该输出什么样的 JSON 了。
5.3 思维链(Chain-of-Thought, CoT)
这是我个人觉得最有用的一个技巧。对于需要推理的复杂问题,直接让模型给答案,它经常算错。但如果你加一句"请一步一步地思考",效果会好很多。
一个篮球队在一个赛季的80场比赛中赢了60%。在接下来的赛季中,他们打了15场比赛,赢了12场。两个赛季的总胜率是多少?
请一步一步地思考并解答。
模型会输出:
第一步:第一个赛季赢了 80 × 60% = 48 场。
第二步:总比赛数 = 80 + 15 = 95 场。总胜利数 = 48 + 12 = 60 场。
第三步:总胜率 = 60 / 95 ≈ 63.16%。
秘诀就一句话:“请逐步思考”。这句话被实验证明能显著提升模型在数学、逻辑推理任务上的表现。
5.4 结构化提示模板
把前面几个技巧组合起来,你就可以构建一个结构化的 Prompt 模板:
【角色】你是一个……
【任务】请帮我……
【格式要求】请按照以下格式输出:……
【示例】输入:…… 输出:……
【注意事项】请一步一步思考,不要遗漏……
这个模板在实际项目中非常好用。角色 + 任务 + 格式 + 示例 + 约束条件,五要素齐活,模型基本不会跑偏。
六、总结
| 技巧 | 核心思路 | 适用场景 |
|---|---|---|
| 调采样参数 | 控制输出的随机性 | 所有场景 |
| 零样本/少样本 | 通过示例引导输出 | 分类、格式化、抽取 |
| 角色扮演 | 设定身份改变风格 | 专业问答、Agent |
| 上下文示例 | 给输入输出样本 | 格式要求严格的任务 |
| 思维链 CoT | 让模型分步推理 | 数学、逻辑、复杂推理 |
提示工程看起来只是"写几句话"的事,但要写好确实需要积累。多试、多对比、多迭代,慢慢就能摸到门道。
最后分享一个朴素的心得:写 Prompt 本质上和写需求文档一样——你描述得越清楚,对方(模型)交付的结果就越接近你的预期。
参考来源:《Hello Agents》第三章
如果这篇文章对你有帮助,欢迎点赞收藏,也欢迎在评论区交流你的 Prompt 使用经验。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)