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

LangChain--(2)

3 LangChain Expression Language(LCEL)

LCEL是LangChain用于构建和编排AI工作流的声明式编程语言,通过标准化接口简化了大型语言模型(LLM)应用的开发流程。LCEL的所有组件(模型、提示模板、解析器等)均实现Runnable接口,支持一致的调用方法(invokestreambatch等)。即Langchain提供了一个顶级父类,Runnable,只要是Runnable的子类都可以放入chain中。

==声明式编程:==用户描述“做什么”而非“如何做”。

3.1 串行条构建

单个链条的构建

def qwen_single_chain():os.environ.setdefault("DASHSCOPE_API_KEY", load_key("DASHSCOPE_API_KEY"))# 提示词模板from langchain_core.prompts import ChatPromptTemplateprompt_template = ChatPromptTemplate.from_messages([("system", "You are a helpful assistant that translates {input_language} to {output_language}."),("human", "{text}"),])# 模型调用llm = ChatQwen(model="qwen-plus", base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")# 结果解析器from langchain_core.output_parsers import StrOutputParserparser = StrOutputParser()# chain链chain = prompt_template | llm | parserprint(chain.invoke({"input_language": "English", "output_language": "Chinese", "text": "I love programming."}))
------------------------------
我爱编程

注意事项:

串行链时,| 与 RunnableSequence不能直接替换。

# 等价关系
chain = prompt | llm | parser  
# RunnableSequence本应等价于|,但 | 操作符会自动插入许多组件、类型转化,所以会抛出异常: TypeError: Expected str, got PromptValue
chain = RunnableSequence([prompt, llm, parser]) # 原因分析:
# prompt_template 输出的是 PromptValue 类型
# llm 期望接收 str 类型(需调用 .to_string() 转换)
# RunnableSequence 不会自动插入类型转换步骤

差异对比如下:

在这里插入图片描述

3.2 并行链条构建

def qwen_parallel_chain():os.environ.setdefault("DASHSCOPE_API_KEY", load_key("DASHSCOPE_API_KEY"))from langchain_core.prompts import ChatPromptTemplate# 模板1prompt_template_zh = ChatPromptTemplate.from_messages([("system", "You are a helpful assistant that translates English to Chinese."),("human", "{text}"),])# 模板2prompt_template_fr = ChatPromptTemplate.from_messages([("system", "You are a helpful assistant that translates English to French."),("human", "{text}"),])# 模型llm = ChatQwen(model="qwen-plus", base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")# 结果解析器from langchain_core.output_parsers import StrOutputParserparser = StrOutputParser()# chain链chain_zh = prompt_template_zh | llm | parserchain_fr = prompt_template_fr | llm | parser# 并行执行两个链条(RunnableMap = RunnableParallel可以互相替换)from langchain_core.runnables import RunnableMap, RunnableLambdaparallel_chains = RunnableMap({"Chinese": chain_zh,"French": chain_fr})# 合并结果final_chain = parallel_chains | RunnableLambda(lambda x: "\n".join([f"{k}: {v}" for k, v in x.items()]))# 调用chainprint(final_chain.invoke({"text": "I love programming."}))

3.3 查看图形化链条

# 利用langgraph产看图形化链条
final_chain.get_graph().print_ascii()

在这里插入图片描述

http://www.xdnf.cn/news/1025713.html

相关文章:

  • 【测试开发】函数进阶-纯函数、内置函数、匿名函数、偏函数
  • 梨泛转录组-文献精读145
  • 基于sample_aiisp再创建一路 h264编码流,和jpg的编码流
  • BugKu Web渗透之秋名山车神
  • 高效解决Java内存泄漏问题:方法论与实践指南
  • 解决Avantage 6.0版本以上峰拟合 峰显示不全的问题
  • 2025最新版!Windows Python3 超详细安装图文教程(支持 Python3 全版本)
  • windows 电脑如何寻找 自己电脑上的 mac 地址
  • Linux cgroup 技术
  • 语法疫苗:SynCode如何为LLM生成装上“防崩溃引擎”
  • 学习笔记:Redis入门
  • 数学中 “熵“ 的奇妙世界
  • 【深入剖析】攻克 Java 并发的基石:Java 内存模型 (JMM) 原理与实践指南
  • R2S2:通过现实世界现成的技能空间释放人形机器人的潜力
  • 【考研数学:高数8】一元函数积分学的概念与性质
  • 基于Java+Swing实现餐厅点餐系统(含课程报告)
  • 【大模型推理】CTA与SM关系
  • 玩转计算机视觉——按照配置部署paddleOCR(英伟达环境与昇腾300IDUO环境)
  • Python 训练营打卡 Day 50
  • 网盘直链解析网页版
  • Java多线程:为什么wait()必须用循环而非if?
  • Python 学习路线图:从入门到精通的完整指南
  • 泰国电商系统简单纪要
  • atcoder [ABC271D] Flip and Adjust
  • 前端面经整理【2】
  • 【无标题】二维拓扑色动力学模型:数学物理基础与可行性论证
  • 窗口函数详解​
  • Jmeter调用jar包中的方法,并使用返回值当请求参数
  • 如何在Linux命令窗口中执行MySQL脚本
  • HarmonyOS 5 Cordova有哪些热门插件?