Chain的基础使用1
·
目录
1.介绍

上一环的输出作为下一环的输入
2.示例
from langchain_core.prompts import ChatPromptTemplate,MessagesPlaceholder
from langchain_community.chat_models import ChatTongyi
chat_prompt_template = ChatPromptTemplate.from_messages(
[
("system", "你是一个边塞诗人,可以作诗。"),
MessagesPlaceholder("history"),
("human", "请再来一首唐诗"),
]
)
history_data = [
("human", "你来写一个唐诗"),
("ai", "床前明月光,疑是地上霜,举头望明月,低头思故乡"),
("human", "好诗再来一个"),
("ai", "锄禾日当午,汗滴禾下锄,谁知盘中餐,粒粒皆辛苦"),
]
model = ChatTongyi(model="qwen-max")
chain = chat_prompt_template | model
response = chain.invoke({"history": history_data})
print(response.content)
流式输出
response = chain.stream({"history": history_data})
for chunk in response:
print(chunk.content, end="", flush=True)
3.StrOutputParser字符串输出解析器
from langchain_core.prompts import ChatPromptTemplate,MessagesPlaceholder
from langchain_community.chat_models import ChatTongyi
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate
model = ChatTongyi(model="qwen-max")
prompt = PromptTemplate.from_template("我邻居姓:{lastname},刚生了{gender},请起名,简单回答")
chain = prompt | model | StrOutputParser() | model
response = chain.invoke({"lastname": "王", "gender": "男"})
print(response.content)

也可
chain = prompt | model | StrOutputParser() | model | StrOutputParser()
response : str = chain.invoke({"lastname": "王", "gender": "男"})
print(response)
4.JsonOutputParser和多模型执行链
from langchain_community.chat_models import ChatTongyi
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_core.messages import AIMessage
from langchain_core.output_parsers import JsonOutputParser
# 定义输出解析器
str_parser = StrOutputParser()
json_parser = JsonOutputParser()
# 定义模型
model = ChatTongyi(model="qwen-max")
# 定义提示模板
first_prompt = PromptTemplate.from_template("我邻居姓:{lastname},刚生了{gender},请起名,并封装为JSON格式返回给我。要求key为name,value就是你起的名,严格遵守格式要求")
second_prompt = PromptTemplate.from_template("姓名:{name},简单解析一下")
# 定义链
chain_chain = first_prompt | model | json_parser| second_prompt | model | str_parser
res = chain_chain.invoke({"lastname": "王", "gender": "男"})
print(res)
此处第一个模型输出的格式为AIMessage,需要提前在第一个模板处告诉第一个模型将输出结果规范化,以便第二个模型去输入key的value,当然,规范化后的输出(AIMessage)需要经过JsonOutputParser()转化为字典输入第二个模板
5.自定义函数加入链
from langchain_community.chat_models import ChatTongyi
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_core.messages import AIMessage
from langchain_core.output_parsers import JsonOutputParser
from langchain_core.runnables import RunnableLambda
str_parser = StrOutputParser()
my_func = RunnableLambda(lambda ai_msg :{"name": ai_msg.content})
model = ChatTongyi(model="qwen-max")
first_prompt = PromptTemplate.from_template(
"我的邻居姓氏是{last_name},刚生了{gender},帮我给他起个名,仅告知姓名。"
)
second_prompt = PromptTemplate.from_template(
"姓名:{name},简单解析一下"
)
chain = first_prompt | model | my_func | second_prompt | model | str_parser
res : str = chain.invoke(input={"last_name": "王", "gender": "男"})
print(res)
更多推荐


所有评论(0)