AI Agent白手起家29: Few Shot 提示词工程实战

发布时间:2026/8/4 22:10:55
AI Agent白手起家29: Few Shot 提示词工程实战 内容纲要核心概念Zero Shot零样本推理不给示例直接提问Few Shot少样本推理通过少量示例引导模型输出FewShotChatMessagePromptTemplateLangChain 中实现 Few Shot 的专用模板关键流程准备示例 → 定义示例模板 → 组合最终提示词 → 提交给 LLM涉及组件langchain_core.prompts、langchain_core.messages示例使用ChatPromptTemplate代码演示完整可运行的 Python 脚本包含构建示例、组合模板、调用模型使用模拟模型全过程引言在提示词工程中如果直接让大模型完成一个从未见过的任务往往会出现答非所问或质量低下的情况。Few Shot少样本提示就是通过提供少量“输入-输出”示例让模型快速理解任务模式从而在新问题上给出更符合预期的答案。本文将介绍 Few Shot 的核心思想并结合 LangChain 展示如何用FewShotChatMessagePromptTemplate高效地构建示例驱动的提示。Zero Shot 与 Few Shot 对比Zero Shot不提供任何示例直接提问。对于推理能力较强的模型如具备思维链的模型也能获得不错的效果但对于常规对话模型直接回答生僻或自定义的任务往往表现不佳。Few Shot提供若干精心设计的示例让模型模仿示例格式和逻辑进行回答。示例的质量和与任务的相关性远比数量更重要。例如直接问模型 “what is 2 小鸟 9?”Zero Shot 方式可能得到不知所云的回复而如果先给出两个示例 “2 小鸟 2 4”、“2 小鸟 3 5”模型便能推断出“小鸟”代表加法并正确回答 “2 小鸟 9 11”。下表对比了两种方式的特点方式示例数量适用场景对模型推理要求Zero Shot0常识问答、简单任务高Few Shot≥1自定义规则、格式转换、新任务较低LangChain 中的 Few Shot 实现LangChain 提供了FewShotChatMessagePromptTemplate它可以轻松地将一组示例和基础提示词组合成最终的消息列表。整个流程如下准备示例列表创建示例模板用FewShotChatMessagePromptTemplate组合示例与基础提示追加最终用户问题提交给大模型构建示例示例通常是一个字典列表每个字典包含input和output字段分别代表人类问题和期望的 AI 回答。创建示例模板使用ChatPromptTemplate定义如何将示例格式化为消息一般将input放入HumanMessageoutput放入AIMessage。组合最终提示将示例模板与包含系统消息和最终人类问题的完整提示词模板进行组合由FewShotChatMessagePromptTemplate统一编排。完整可运行代码以下代码演示了用 Few Shot 让模型理解自定义运算符“小鸟”为加法的过程。为便于运行使用FakeListChatModel模拟大模型响应无需 API Key。安装依赖pipinstalllangchain langchain-core langchain-community核心代码fromlangchain_core.promptsimport(ChatPromptTemplate,FewShotChatMessagePromptTemplate,)fromlangchain_community.chat_models.fakeimportFakeListChatModel# 1. 定义示例列表examples[{input:2 小鸟 2,output:4},{input:2 小鸟 3,output:5},]# 2. 构建示例模板将每个示例格式化为 HumanMessage 和 AIMessageexample_promptChatPromptTemplate.from_messages([(human,{input}),(ai,{output}),])# 3. 用 FewShotChatMessagePromptTemplate 组合示例和模板few_shot_promptFewShotChatMessagePromptTemplate(example_promptexample_prompt,examplesexamples,)# 4. 构建最终提示词模板系统消息 few shot 示例 最终人类问题final_promptChatPromptTemplate.from_messages([(system,你是一位神奇的数学奇才。),few_shot_prompt,(human,{input}),])# 5. 格式化并查看组合后的消息formatted_messagesfinal_prompt.format_messages(input2 小鸟 9)print(组合后的消息列表)formsginformatted_messages:print(f{msg.type}:{msg.content})# 6. 使用模拟模型进行回答预设输出为 11modelFakeListChatModel(responses[11])chainfinal_prompt|model responsechain.invoke({input:2 小鸟 9})print(f\n模型回答{response.content})运行上述代码可以看到消息列表中包含了示例的 Human 和 AI 消息以及最后的用户问题 “2 小鸟 9”。模拟模型返回 “11”证明 Few Shot 成功让模型掌握了“小鸟”的含义。示例设计的注意事项示例与任务高度相关如果任务是写唐诗示例应该是唐诗而不是宋词或现代诗。质量优于数量一两个精准的示例往往比一堆模糊的示例更有效。格式一致保证示例的输入输出格式与最终期望的格式完全一致让模型容易模仿。总结Few Shot 是提升大模型在特定任务上表现的重要技巧LangChain 通过FewShotChatMessagePromptTemplate将其变成了一个可复用、可组合的组件。无论是自定义符号运算、特定领域的文本生成还是格式转换都可以通过提供少量示例大幅提高模型的输出质量和稳定性。