当前位置: 首页 > news >正文

LangChain Python版本 LCEL链式调用

LCEL 链式类型

RunableSequence--顺序链 RunableBranch--分支链 RunableSerializable--串行链 RunableParallel--并行链 RunableLambda--函数链

分支链

""" 分支链 在LangChain中提供了类RunnableBranch来完成LCEL中的条件分支判断,它可以根据输入的不同采用不同的处理逻辑, 具体示例如下 会根据用户输入中是否包含英语、韩语等关键词,来选择对应的提示词进行处理。根据判断结果, 再执行不同的逻辑分支 """fromlangchain.chat_modelsimportinit_chat_modelfromlangchain_core.output_parsersimportStrOutputParserfromlangchain_core.promptsimportChatPromptTemplatefromloguruimportloggerfromlangchain_core.runnablesimportRunnableBranchimportos# 构建提示词english_prompt=ChatPromptTemplate.from_messages([("system","你是一个英语翻译专家,你叫小英"),("human","{query}")])japanese_prompt=ChatPromptTemplate.from_messages([("system","你是一个日语翻译专家,你叫小日"),("human","{query}")])korean_prompt=ChatPromptTemplate.from_messages([("system","你是一个韩语翻译专家,你叫小韩"),("human","{query}")])defdetermine_language(inputs):"""判断语言种类"""query=inputs["query"]if"日语"inquery:return"japanese"elif"韩语"inquery:return"korean"else:return"english"# 初始化模型model=init_chat_model(model="qwen-plus",model_provider="openai",api_key=os.getenv("aliQwen-api"),base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")# 创建字符串输出解析器,用于处理模型输出parser=StrOutputParser()# 创建一个可运行的分支链,根据输入文本的语言类型选择相应的处理流程# 返回值:RunnableBranch对象,可根据输入动态选择执行路径的可运行链chain=RunnableBranch((lambdax:determine_language(x)=="japanese",japanese_prompt|model|parser),(lambdax:determine_language(x)=="korean",korean_prompt|model|parser),(english_prompt|model|parser))# 测试查询test_queries=[{'query':'请你用韩语翻译这句话:"见到你很高兴"'},{'query':'请你用日语翻译这句话:"见到你很高兴"'},{'query':'请你用英语翻译这句话:"见到你很高兴"'}]forquery_inputintest_queries:# 判断使用哪个提示词lang=determine_language(query_input)logger.info(f"检测到语言类型:{lang}")# 根据语言类型选择对应的提示词并格式化iflang=="japanese":chatPromptTemplate=japanese_prompteliflang=="korean":chatPromptTemplate=korean_promptelse:chatPromptTemplate=english_prompt#print(query_input) # {'query': '请你用英语翻译这句话:"见到你很高兴"'}# 格式化提示词并打印formatted_messages=chatPromptTemplate.format_messages(**query_input)logger.info("格式化后的提示词:")formsginformatted_messages:logger.info(f"[{msg.type}]:{msg.content}")# 执行链result=chain.invoke(query_input)logger.info(f"输出结果:{result}\n")

函数链

""" RunnableLambda-函数链 将普通Python函数融入Runnable流程. """fromlangchain.chat_modelsimportinit_chat_modelfromlangchain_core.output_parsersimportStrOutputParserfromlangchain_core.promptsimportChatPromptTemplatefromlangchain_core.runnablesimportRunnableLambdafromloguruimportloggerimportos model=init_chat_model(model="qwen-plus",model_provider="openai",api_key=os.getenv("aliQwen-api"),temperature=0.0,base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")# 一个简单的打印函数,调试用defdebug_print(x):logger.info(f"中间结果:{x}")return{"input":x}# 子链1提示词prompt1=ChatPromptTemplate.from_messages([("system","你是一个知识渊博的计算机专家,请用中文简短回答"),("human","请简短介绍什么是{topic}")])# 子链1解析器parser1=StrOutputParser()# 子链1:生成内容chain1=prompt1|model|parser1# 子链2提示词prompt2=ChatPromptTemplate.from_messages([("system","你是一个翻译助手,将用户输入内容翻译成英文"),("human","{input}")])# 子链2解析器parser2=StrOutputParser()# 子链2:翻译内容chain2=prompt2|model|parser2# 创建一个可运行的调试节点,用于打印中间结果debug_node=RunnableLambda(debug_print)# 构建完整的处理链,将chain1、调试打印和chain2串联起来full_chain=chain1|debug_print|chain2# 调用复合链result1=full_chain.invoke({"topic":"langchain"})logger.info(f"最终结果111:{result1}")# 构建完整的处理链,将chain1、调试打印和chain2串联起来full_chain=chain1|debug_node|chain2# 调用复合链result2=full_chain.invoke({"topic":"langchain"})logger.info(f"最终结果222:{result2}")

并行链

""" RunnableParallel-并行链 在 Langchain 中,创建并行链(Parallel Chains),是指同时运行多个子链(Chain),并在它们都完成后汇总结果。 **作用**:同时执行多个 Runnable,合并结果 """fromlangchain.chat_modelsimportinit_chat_modelfromlangchain_core.output_parsersimportStrOutputParserfromlangchain_core.promptsimportChatPromptTemplatefromlangchain_core.runnablesimportRunnableParallelfromloguruimportloggerimportos model=init_chat_model(model="qwen-plus",model_provider="openai",api_key=os.getenv("aliQwen-api"),base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")# 并行链1提示词prompt1=ChatPromptTemplate.from_messages([("system","你是一个知识渊博的计算机专家,请用中文简短回答"),("human","请简短介绍什么是{topic}")])# 并行链1解析器parser1=StrOutputParser()# 并行链1:生成中文结果chain1=prompt1|model|parser1# 并行链2提示词prompt2=ChatPromptTemplate.from_messages([("system","你是一个知识渊博的计算机专家,请用英文简短回答"),("human","请简短介绍什么是{topic}")])# 并行链2解析器parser2=StrOutputParser()# 并行链2:生成英文结果chain2=prompt2|model|parser2# 创建并行链,用于同时执行多个语言处理链parallel_chain=RunnableParallel({"chinese":chain1,"english":chain2})# 调用复合链result=parallel_chain.invoke({"topic":"langchain"})logger.info(result)# 打印并行链的ASCII图形表示,LangGraph提前预告,不是本节知识点parallel_chain.get_graph().print_ascii()

顺序链

""" RunnableParallel-并行链 在 Langchain 中,创建并行链(Parallel Chains),是指同时运行多个子链(Chain),并在它们都完成后汇总结果。 **作用**:同时执行多个 Runnable,合并结果 """fromlangchain.chat_modelsimportinit_chat_modelfromlangchain_core.output_parsersimportStrOutputParserfromlangchain_core.promptsimportChatPromptTemplatefromlangchain_core.runnablesimportRunnableParallelfromloguruimportloggerimportos model=init_chat_model(model="qwen-plus",model_provider="openai",api_key=os.getenv("aliQwen-api"),base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")# 并行链1提示词prompt1=ChatPromptTemplate.from_messages([("system","你是一个知识渊博的计算机专家,请用中文简短回答"),("human","请简短介绍什么是{topic}")])# 并行链1解析器parser1=StrOutputParser()# 并行链1:生成中文结果chain1=prompt1|model|parser1# 并行链2提示词prompt2=ChatPromptTemplate.from_messages([("system","你是一个知识渊博的计算机专家,请用英文简短回答"),("human","请简短介绍什么是{topic}")])# 并行链2解析器parser2=StrOutputParser()# 并行链2:生成英文结果chain2=prompt2|model|parser2# 创建并行链,用于同时执行多个语言处理链parallel_chain=RunnableParallel({"chinese":chain1,"english":chain2})# 调用复合链result=parallel_chain.invoke({"topic":"langchain"})logger.info(result)# 打印并行链的ASCII图形表示,LangGraph提前预告,不是本节知识点parallel_chain.get_graph().print_ascii()

串行链

""" RunnableSerializable-串行链 子链叠加串行,假如我们需要多次调用大模型,将多个步骤串联起来实现功能 """fromlangchain.chat_modelsimportinit_chat_modelfromlangchain_core.output_parsersimportStrOutputParserfromlangchain_core.promptsimportChatPromptTemplatefromloguruimportloggerimportos model=init_chat_model(model="qwen-plus",model_provider="openai",api_key=os.getenv("aliQwen-api"),base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")# 子链1提示词prompt1=ChatPromptTemplate.from_messages([("system","你是一个知识渊博的计算机专家,请用中文简短回答"),("human","请简短介绍什么是{topic}")])# 子链1解析器parser1=StrOutputParser()# 子链1:生成内容chain1=prompt1|model|parser1 result1=chain1.invoke({"topic":"langchain"})logger.info(result1)# 子链2提示词prompt2=ChatPromptTemplate.from_messages([("system","你是一个翻译助手,将用户输入内容翻译成英文"),("human","{input}")])# 子链2解析器parser2=StrOutputParser()# 子链2:翻译内容chain2=prompt2|model|parser2# 组合成一个复合 Chain,使用 lambda 函数将chain1执行结果content内容添加input键作为参数传递给chain2full_chain=chain1|(lambdacontent:{"input":content})|chain2# 调用复合链result=full_chain.invoke({"topic":"langchain"})logger.info(result)
http://www.jsqmd.com/news/1151271/

相关文章:

  • Maven项目管理实践
  • 【Bug已解决】Claude Code freezes on startup / Hangs at initialization — Claude Code 启动冻结解决方案
  • Flink流处理实时计算
  • Scipy griddata 与 PyKrige 实战:气象站点数据插值到40x40网格的3个关键参数调优
  • 【C++】set和map
  • 2026抖音动图去水印免费方法,无水印保存抖音GIF技巧
  • 【安全与故障排查】05-K8s安全加固:RBAC+网络策略+镜像扫描实践
  • BERT 预训练实战:PyTorch 复现 MLM 与 NSP 双任务,Loss 降至 1.2
  • 抖店发货后买家改地址怎么办一件代发订单还能拦截吗
  • ASIC vs FPGA vs SoC:3类芯片选型指南,从成本、功耗到开发周期对比
  • 操作系统调度算法与LinuxCFS实现
  • MP2315GJ-Z 3A同步降压芯片:从24V输入到5V/3A输出的完整PCB布局与效率实测
  • 为什么你的企业需要一次“风险体检”——高企税务稽查已进入“穿透式审查”时代,你的企业能扛住吗?
  • 06-高级模式与实战项目——21. 实战项目五:社交媒体
  • 【Bug已解决】Anthropic API Error 500 / 503 / Internal server error — Claude Code API 服务端错误解决方案
  • 多功能证件阅读机在酒店行业的应用,主要围绕提升外籍宾客入住效率、满足公安合规要求及优化住客服务体验展开,已成为酒店智能化管理的关键设备-5-12
  • 上课记笔记写不完不会整理?2026学习笔记生成使用场景该怎么选
  • 2026丹东黄金回收白银回收铂金回收市民首选无隐形扣费正规备案回收门店联系方式推荐
  • 多模态大模型 5 大核心技术解析:从提示学习到 RLHF 的演进路径
  • 2026在线PDF转Excel,实操指南:无水印免费、无需注册的安全转换方案
  • 抖店哪些商品应该批量下架长期不出单商品怎么清理
  • Go语言的runtime.SetFinalizer终结器与对象复活在垃圾回收中的行为
  • HarmonyKit | 鸿蒙新特性应用:颜色转换 HEX↔RGB↔HSL 三色空间互转算法
  • 掌握Git rebase与merge的区别
  • 抖店一件代发供应商发货地不一致怎么办会不会影响买家体验
  • 理解Kubernetes Service类型
  • YOLOv11涨点改进| CVPR 2026 | 独家卷积+Mamba改进篇| 引入AKCMamba-YOLO中的CAKCMamba模块,助力小目标检测、遥感目标检测、图像分类、图像分割任务,高效涨点
  • 电力系统小电流接地系统单相故障(中性点不接地系统+经消弧线圈接地)Matlab仿真分析
  • torchvision.datasets 内置10+数据集:从MNIST到ImageNet的快速调用指南
  • 冷思考与行业复盘,数字孪生标准化、数据安全、人才缺口与个人科研选题规划