目录

1.介绍

2.示例

3.StrOutputParser字符串输出解析器

4.JsonOutputParser和多模型执行链

5.自定义函数加入链


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)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐