如何用LCEL实现多LLM步骤链并在第四步返回流式响应?
用LCEL实现多步骤链式调用
核心思路
LCEL通过|操作符串联各组件,可基于上一步输出构造新输入提示,最终通过stream()实现流式响应。以下是针对需求的具体实现:
代码示例
先导入依赖模块:
from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser from langchain_openai import ChatOpenAI from langchain_core.runnables import RunnablePassthrough
定义各步骤的系统消息与初始用户输入:
system_msg_1 = "你是内容提炼助手,把用户输入提炼成核心要点" system_msg_2 = "你是逻辑梳理专家,把给定要点整理成结构化大纲" system_msg_3 = "你是文案润色师,把结构化大纲转化为流畅段落" system_msg_4 = "你是格式转换助手,把输入段落转成Markdown分点格式" user_msg_1 = "我今天去公园,看到很多人跑步、野餐,小朋友放风筝,天气好,阳光足,风不大,感觉很放松"
构建多步骤链:
# 初始化模型(可替换为其他支持LCEL的模型) model = ChatOpenAI(model="gpt-3.5-turbo", temperature=0) # 步骤1:system_msg_1 + user_msg_1 生成输出1 step1_prompt = ChatPromptTemplate.from_messages([ ("system", system_msg_1), ("user", "{user_input}") ]) step1_chain = step1_prompt | model | StrOutputParser() # 步骤2:system_msg_2 + 步骤1输出 生成输出2 step2_prompt = ChatPromptTemplate.from_messages([ ("system", system_msg_2), ("user", "{step1_output}") ]) step2_chain = RunnablePassthrough.assign(step1_output=step1_chain) | step2_prompt | model | StrOutputParser() # 步骤3:system_msg_3 + 步骤2输出 生成输出3 step3_prompt = ChatPromptTemplate.from_messages([ ("system", system_msg_3), ("user", "{step2_output}") ]) step3_chain = RunnablePassthrough.assign(step2_output=step2_chain) | step3_prompt | model | StrOutputParser() # 步骤4:system_msg_4 + 步骤3输出 生成流式响应 step4_prompt = ChatPromptTemplate.from_messages([ ("system", system_msg_4), ("user", "{step3_output}") ]) final_chain = RunnablePassthrough.assign(step3_output=step3_chain) | step4_prompt | model | StrOutputParser() # 执行并获取流式响应 for chunk in final_chain.stream({"user_input": user_msg_1}): print(chunk, end="", flush=True)
关键说明
RunnablePassthrough.assign()用于将上一步输出作为变量传递到下一个prompt,实现步骤间数据流转。- 每个步骤通过
ChatPromptTemplate构造包含系统消息和上一步输出的对话提示。 - 调用
stream()方法即可获取第四步的流式响应输出。
内容的提问来源于stack exchange,提问作者danladis
相关产品推荐
相关产品推荐

