3.langchain中的prompt模板 (few shot examples in chat models)

本教程将介绍如何使用LangChain库和智谱清言的 GLM-4-Plus 模型来理解和推理一个自定义的运算符(例如使用鹦鹉表情符号🦜)。我们将通过一系列示例来训练模型,使其能够理解和推断该运算符的含义。

环境准备

首先,确保你已经安装了以下库:

  • langchain_openai
  • langchain_core
  • langchain_chroma
  • langchain_community

你可以使用以下命令进行安装:

bash 复制代码
pip install langchain_openai langchain_core langchain_chroma langchain_community

第一步:初始化模型

首先,初始化OpenAI的Chat模型。

python 复制代码
from langchain_openai import ChatOpenAI

model = ChatOpenAI(
    temperature=0,
    model="GLM-4-Plus",
    openai_api_key="your api key",
    openai_api_base="https://open.bigmodel.cn/api/paas/v4/"
)

第二步:初步测试模型

测试一下模型对自定义运算符的理解。

python 复制代码
response = model.invoke("What is 2 🦜 9?")
print(response.content)

输出结果:

复制代码
The notation "2 🦜 9" is not a standard mathematical or widely recognized symbol. It appears to be using an emoji (a parrot) in place of a traditional operator. Without additional context or clarification, it's difficult to determine the intended meaning.

However, if we consider the parrot emoji as a playful or whimsical substitute for a standard mathematical operation, we might speculate on a few possibilities:

1. **Repetition or Iteration**: Parrots are known for repeating sounds. If the parrot emoji is meant to imply repetition, "2 🦜 9" could be interpreted as repeating the number 2 nine times, resulting in "222222222".

2. **Multiplication**: If the parrot is whimsically standing in for a multiplication sign, "2 🦜 9" could mean \(2 \times 9 = 18\).

3. **Concatenation**: If the parrot is meant to indicate combining the numbers, "2 🦜 9" could simply mean concatenating 2 and 9 to form the number 29.

Without further context, these are just educated guesses. If you have more information about the context or the specific rules governing the use of the parrot emoji in this notation, please provide it for a more accurate interpretation.

第三步:构建示例提示

为了让模型更好地理解自定义运算符,提供一些示例。

python 复制代码
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,
)

print(few_shot_prompt.invoke({}).to_messages())

输出结果:

复制代码
[HumanMessage(content='2 🦜 2', additional_kwargs={}, response_metadata={}), AIMessage(content='4', additional_kwargs={}, response_metadata={}), HumanMessage(content='2 🦜 3', additional_kwargs={}, response_metadata={}), AIMessage(content='5', additional_kwargs={}, response_metadata={})]

第四步:构建最终提示

将示例提示与系统提示结合起来,构建最终的提示。

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

第五步:链式调用模型

我们将最终提示与模型结合起来,进行链式调用。

python 复制代码
chain = final_prompt | model

response = chain.invoke({"input": "What is 2 🦜 9?"})
print(response.content)

输出结果:

复制代码
The symbol "🦜" seems to represent an operation, and based on the previous examples:

- 2 🦜 2 = 4
- 2 🦜 3 = 5

It appears that the operation "🦜" adds the second number to the first number. So, following this pattern:

2 🦜 9 = 2 + 9 = 11

Therefore, 2 🦜 9 is 11.

第六步:使用语义相似性选择示例

为了进一步提高模型的推理能力,我们可以使用语义相似性来选择最相关的示例。

python 复制代码
from langchain_chroma import Chroma
from langchain_core.example_selectors import SemanticSimilarityExampleSelector

examples = [
    {"input": "2 🦜 2", "output": "4"},
    {"input": "2 🦜 3", "output": "5"},
    {"input": "2 🦜 4", "output": "6"},
    {"input": "What did the cow say to the moon?", "output": "nothing at all"},
    {
        "input": "Write me a poem about the moon",
        "output": "One for the moon, and one for me, who are we to talk about the moon?",
    },
]

from langchain_community.embeddings import ZhipuAIEmbeddings

to_vectorize = [" ".join(example.values()) for example in examples]
embeddings = ZhipuAIEmbeddings(
    model="embedding-3",
    api_key="your api key",
)
vectorstore = Chroma.from_texts(to_vectorize, embeddings, metadatas=examples)

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

selected_examples = example_selector.select_examples({"input": "What's 3 🦜 3?"})
print(selected_examples)

输出结果:

复制代码
[{'input': '2 🦜 3', 'output': '5'}, {'input': '2 🦜 4', 'output': '6'}]

第七步:构建新的提示并调用模型

使用选定的示例构建新的提示,并调用模型。

python 复制代码
from langchain_core.prompts import ChatPromptTemplate, FewShotChatMessagePromptTemplate

# Define the few-shot prompt.
few_shot_prompt = FewShotChatMessagePromptTemplate(
    # The input variables select the values to pass to the example_selector
    input_variables=["input"],
    example_selector=example_selector,

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

print(few_shot_prompt.invoke(input="What's 3 🦜 3?").to_messages())

输出结果:

复制代码
[HumanMessage(content='2 🦜 3', additional_kwargs={}, response_metadata={}), AIMessage(content='5', additional_kwargs={}, response_metadata={}), HumanMessage(content='2 🦜 4', additional_kwargs={}, response_metadata={}), AIMessage(content='6', additional_kwargs={}, response_metadata={})]
python 复制代码
final_prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "You are a wondrous wizard of math."),
        few_shot_prompt,
        ("human", "{input}"),
    ]
)

print(final_prompt.invoke(input="What's 3 🦜 3?").to_messages())

输出结果:

复制代码
[SystemMessage(content='You are a wondrous wizard of math.', additional_kwargs={}, response_metadata={}), HumanMessage(content='2 🦜 3', additional_kwargs={}, response_metadata={}), AIMessage(content='5', additional_kwargs={}, response_metadata={}), HumanMessage(content='2 🦜 4', additional_kwargs={}, response_metadata={}), AIMessage(content='6', additional_kwargs={}, response_metadata={}), HumanMessage(content="What's 3 🦜 3?", additional_kwargs={}, response_metadata={})]
python 复制代码
chain = final_prompt | model

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

输出结果:

复制代码
It seems like the "🦜" symbol is being used as an operation, but its specific rules aren't standard in mathematics. Based on the previous examples:

- 2 🦜 3 = 5
- 2 🦜 4 = 6

One possible interpretation is that "🦜" might represent an operation where you add the two numbers together. Following this pattern:

- 3 🦜 3 would be 3 + 3 = 6

So, 3 🦜 3 = 6. However, if there's a different rule or context for this operation, please provide more details for a precise answer!

参考链接:https://python.langchain.com/docs/how_to/few_shot_examples_chat/

希望这个教程对你有所帮助!如果有任何问题,欢迎随时提问。

相关推荐
Zach_菠萝侠9 分钟前
【DeepSeek Harness 研究】进化方向1:动态路由 思考、设计与实现
人工智能·深度学习·deepseek
whyutianict_vv13 分钟前
从 Web 前端到 HarmonyOS ArkTS:一次 AI 鸿蒙全栈智能体开发的迁移实录
前端·人工智能·harmonyos
Aision_16 分钟前
代码安全学习手记(二):SCA 软件成分分析原理与 OWASP Dependency-Check 集成实战
运维·人工智能·学习·安全·web安全·网络安全
m0_7496902318 分钟前
【寻迹校园 HarmonyOS NEXT 实战 01】从校园痛点到可上架 MVP:失物招领应用产品设计
人工智能·深度学习·移动开发·harmonyos·arkts·arkui·产品设计
yinshuzhineng22 分钟前
如何提升生产线自动化水平,降低人工成本?
运维·人工智能·自动化·制造
今天你AiPy了吗23 分钟前
AI桌面助手的隐私底线 数据可落本地不出域,还能一键切换云端,全能智能体
人工智能·python·ai·ai编程·智能体
u01030552725 分钟前
H5转App遇API错误?关键在HTTPS与CORS
人工智能
2601_9563198827 分钟前
近期手工规则转量化:按学习、表达、开发、验证推进
人工智能·python
watersink40 分钟前
机器学习关联分析
人工智能·算法·机器学习
AI服务老曹1 小时前
摄像机安装AI视频分析完整流程:从现场物理安装、硬解配置到算法POC效果验证
人工智能·算法·音视频