Agent开发基础---提示词编写
当前,AI Agent(智能体)的开发热潮正席卷而来。无论是基于LangChain、agno还是AutoGen,开发者们都致力于打造能自主理解、决策和执行任务的AI智能体。然而,许多开发者都会遇到一个共同的痛点:为什么同一个大模型,在不同的人手里表现出的能力天差地别?
答案往往隐藏在提示词(Prompt) 中。提示词是与大模型交互的核心接口,是驱动Agent的“灵魂”。它就像是给一个能力超强但需要明确指令的新员工下达的“任务书”。模糊的指令只会得到模棱两可的结果,而精准、清晰的提示词则能彻底激发大模型的潜能,构建出真正高效、可靠的智能体。
本文将抛开理论,直击实战,带你深入掌握Agent开发中提示词编写的核心原则与高级技巧。
一、提示词的核心四要素:构建清晰指令的基石
编写高质量的提示词,就像是在编写一段给AI看的特殊“代码”。它需要包含以下四个关键要素:
1. 角色扮演(Role Playing):给它一个“人设”
这是最重要的一步。通过为模型设定一个明确的角色,你可以将其能力范围聚焦到特定领域,从而得到更专业、更符合预期的结果。
- •
反面教材: “帮我写点代码。”
- •
正面教材:
“你是一名资深的全栈安全专家,尤其精通Python和Web安全。你的代码必须符合OWASP安全规范。”
2. 任务定义(Task Definition):清晰、具体、无歧义
任务描述必须像函数定义一样清晰,避免使用模糊的词汇。
- •
反面教材: “处理一下这份数据。”
- •
正面教材:
“请对用户提供的JSON数组进行清洗和转换。具体任务:1. 过滤掉‘age’字段小于0或大于120的记录。 2. 将‘name’字段的首字母大写。 3. 计算‘score’字段的平均值。”
3.高级技巧:Few-Shot(示例学习)
对于复杂任务,在提示词中提供一两个输入输出的例子,能让模型瞬间理解你的意图,效果远超千言万语。CoT(Chain of Thought,CoT)是一种思维工具,通过逐步延伸和拓展一个主要想法,帮助人们进行更深层次的思考,并得出更复杂、更全面的结论。在一些逻辑推理、数学运算等场景下,考虑使用 CoT 分解问题,通过输出一些推断过程,可以增加模型输出正确结果的概率。
zero-shot:
在 prompt 中加上 Let's think step by step
或者 让我们一步一步分析思考
few-shots:
以下是将用户输入的数字进行一系列加减乘除的例子。
你是一个计算器,请你将用户输入的数字分别加上2,减去3,乘以3,除以2后直接输出计算结果,以','作为分隔符进行返回。
示例如下:
"""
输入:1,2,3,4,5
答案:0, 1.5, 3, 4.5, 6
"""
输入:2,4,6,8,10
我们会发现,模型无法给出正确的答案,所以,让模型处理这种复杂、多步骤的问题时,我们可以遵循以下步骤:提供实例 > 分解问题 > 提供解释。
以下是将 CoT 融入到 prompt 的例子,分步骤地提供解释。
CoT(Chain of Thought,CoT)是一种思维工具,通过逐步延伸和拓展一个主要想法,帮助人们进行更深层次的思考,并得出更复杂、更全面的结论。在一些逻辑推理、数学运算等场景下,考虑使用 CoT 分解问题,通过输出一些推断过程,可以增加模型输出正确结果的概率。
加入cot的示例:
你是一个计算器,请你将用户输入的数字分别加上2,减去3,乘以3,除以2后直接输出计算结果,以','作为分隔符进行返回。
你可以参考以下的计算过程来帮助解决,
"""
对于输入:1,2,3,4,5
计算过程如下。
首先分别对输入1,2,3,4,5加上2,得到:3, 4, 5, 6, 7
然后将3,4,5,6,7分别减去3,得到:0, 1, 2, 3, 4
然后将0,1,2,3,4分别乘以3,得到:0, 3, 6, 9, 12
最后将0,3,6,9,12分别除以2,得到:0, 1.5, 3, 4.5, 6
答案是:0, 1.5, 3, 4.5, 6
"""
输入:2,4,6,8,10
4. 输出格式化(Output Format):让结果可直接使用
对于Agent开发而言,这是至关重要的一环。明确的输出格式能让Agent的后续步骤(如解析、存储、传递)实现无缝自动化。
- •
示例:
`“请将分析结果以JSON格式输出,必须包含以下字段:
{
"risk_level": "高危 | 中危 | 低危",
"reason": "字符串,简要说明原因",
"suggestions": ["建议1", "建议2"]
}”`
二、提示词模版:快速填充提示词
任务型模版
假如你是{某个角色},你将根据{上下文信息},来解决{具体某个任务}。根据以下规则一步步执行:
1.规则1
2.规则2参考例子:
示例1:
问题:{具体问题}
输出:{该问题的结果}示例2:
问题:{具体问题}
输出:{该问题的结果}请回答问题:
问题:{具体问题}
输出:要求:
1 指定输出格式
2 格式中需要满足的详细规范
角色型模版(生成System Prompt)
你是{某个具体人物},人称{xxx},出身于{交代背景信息和上下文}。性格特点:语言风格:人际关系:过往经历:经典版台词or口头禅:{台词1(补充信息: 即你可以将动作、神情语气、心理活动、故事背景放在()中来表示,为对话提供补充信息。)}
{台词2}
三、参数设置:精细调控模型输出的“旋钮”
在使用大语言模型(LLM)调用其API时,我们并非只能被动接受模型的原始输出。实际上,开发者可以通过配置一系列关键参数,像调节“旋钮”一样,精细地控制生成结果的特性,使其更贴合具体应用场景的需求。这些参数直接影响着模型的语言生成策略,理解并掌握它们,是进行高质量Agent开发的必备技能。本节将深入探讨两个最核心的参数:Temperature
(温度)和 Top_p
(核采样),并阐明其背后的概念与最佳实践。
关键参数详解
1. Temperature(温度)
- •
概念解释:该参数用于控制模型输出结果的随机性(Randomness)和创造性。它影响着模型在生成下一个词时,对其概率分布进行重新调整的程度。
- •
工作原理:一个较低的Temperature值会锐化模型的概率分布,使得高概率的token被选中的机会远大于低概率的token,从而让输出变得更可预测、更稳定、更聚焦。反之,一个较高的Temperature值会平滑概率分布,让低概率的token也有更多机会被选中,从而增加输出的多样性和出乎意料性。
- •
应用场景:
- •
低温度(如0.1~0.3):非常适合分类任务、事实性问答、代码生成、摘要等需要高度准确性和一致性的场景。模型会倾向于给出最直接、最确定的答案。
- •
高温度(如0.7~1.0):非常适合诗歌创作、故事编写、头脑风暴、广告文案生成等需要创造力和多样性的场景。
- •
2. Top_p(核采样)
- •
概念解释:也称为“概率核采样”(Nucleus Sampling)。该参数通过控制候选词集合的大小,来影响生成结果的确定性与多样性。它定义了从一个累积概率最高的小范围token集合中进行采样的规则。
- •
工作原理:模型会计算所有可能的下一个词的概率,并从高到低排序并累加,直到累积概率刚好超过设定的
top_p
值。然后,模型仅从这个动态大小的“核”集合中采样下一个词。- •
较低的
top_p
值(如0.5):候选集合很小,仅包含那些最可能、最确定的token,输出结果更集中、更保守。 - •
较高的
top_p
值(如0.9):候选集合更大,包含了一些概率稍低但依然合理的token,输出结果更多样、更不可预测。
- •
- •
应用场景:
Top_p
通常与Temperature
配合使用。当你的提示词写得非常清晰、具体,为模型提供了充足的上下文时,可以设置较高的top_p
(如0.9~1.0),让模型在高质量的候选词中自由发挥。如果提示词很短很模糊,再设置高top_p
可能会导致输出偏离主题。
参考配置与实践建议
任务类型 | Temperature | Top_p | 说明 |
---|---|---|---|
通用对话/默认值 |
|
| 在多样性和可靠性间取得良好平衡,适合大多数闲聊场景。 |
分类/事实问答/代码 |
|
| 低温度确保输出稳定、准确,高Top_p可避免结果过于僵化。 |
创意生成/写作 |
|
| 高温度和高Top_p共同作用,激发最大限度的创造性和多样性。 |
重要提示:以上配置仅为参考起点,实际效果务必以您的具体业务场景进行实测和调整为准。不同的模型、不同的提示词,对参数的敏感度也不同。
关键概念:Token
- •
定义说明:Token是模型处理和生成文本的基本单位。它通常由几个字符组成,可以是一个词、一个字、一个标点或一个词的一部分。例如,中文词语“智能体”、英文单词“apple”、数字“123”或符号“?”通常都被计为1个token。
- •
为何重要:模型的上下文窗口长度(如32K)和API的计费均以token数量为单位。由于不同模型采用的分词器(Tokenizer)不同,同一段文本可能会被切分成不同数量的tokens。
- •
最佳实践:在编写长提示词或处理长文本时,务必注意token消耗。清晰的提示词和参数设置,最终都是为了在有限的token预算内,获得最优的输出效果。