一个简单的FewShot 模板和LCEL例子

背景和价值


from langchain_openai import ChatOpenAI
from langchain_core.messages import SystemMessage, HumanMessage
import os

# 
from langchain.prompts import (
ChatPromptTemplate,
    FewShotChatMessagePromptTemplate,
)

# 初始化 ChatOpenAI 对象
llm = ChatOpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),  # 如果未配置环境变量,请直接替换为您的 API Key
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",  # 百炼兼容模式的 Base URL
    model="qwen2.5-math-7b-instruct"  # 指定使用的模型名称,如 qwen-plus 或其他支持的模型
)

examples = [
    {"input": "罗杰有五个网球,他又买了两盒网球,每盒有3个网球,请问他现在总共有多少个网球?", 
     "output": "罗杰一开始有五个网球,又购买了两盒网球,每盒3个,共购买了6个网球,因此现在总共由5+6=11个网球。因此答案是11。"},
    
    {"input": "食堂总共有23个苹果,如果他们用掉20个苹果,然后又买了6个苹果,请问现在食堂总共有多少个苹果?", 
     "output": "食堂最初有23个苹果,用掉20个,然后又买了6个,总共有23-20+6=9个苹果,答案是9。"},
    
    {"input": "杂耍者可以杂耍16个球。其中一半的球是高尔夫球,其中一半的高尔夫球是蓝色的。请问总共有多少个蓝色高尔夫球?", 
     "output": "总共有16个球,其中一半是高尔夫球,也就是8个,其中一半是蓝色的,也就是4个,答案是4个。"},
]

# This is a prompt template used to format each individual example.
example_prompt = ChatPromptTemplate.from_messages(
    [
        ("human", "{input}"),
        ("ai", "{output}"),
    ]
)

few_shot_prompt = FewShotChatMessagePromptTemplate(
    example_prompt=example_prompt,
    examples=examples,
)

print(few_shot_prompt.format())

final_prompt = ChatPromptTemplate.from_messages(
    [
        few_shot_prompt,
        ("human", "{input}"), #这里的human是用户的输入。chain.invoke({"input": "xxxx"}) 里面的input
    ]
)

final_prompt
print(final_prompt)

chain = final_prompt | llm


response = chain.invoke({"input": "艾米需要4分钟才能爬到滑梯顶部,她花了1分钟才滑下来,水滑梯将在15分钟后关闭,请问在关闭之前她能滑多少次?"})
print(response.content)

参考资料

posted @ 2025-03-25 18:06  向着朝阳  阅读(22)  评论(0)    收藏  举报