总结之LangChain(二)——LCEL表达式、使用多链

LCEL介绍

LangChain 表达式语言(LCEL)是一种声明式的方法,可以轻松地将多个链条组合在一起。

LCEL 从第一天开始设计就支持将原型投入生产,无需进行代码更改,从最简单的“提示 + LLM”链条到最复杂的链条(我们见过人们在生产中成功运行包含数百个步骤的 LCEL 链条)

  • 支持流式
  • 支持异步
  • 支持并行
  • 无缝 LangSmith 跟踪
  • 无缝 LangServe 部署

LCEL使用

基本示例:提示(Prompt) + 模型(Model) + 输出解析器(OutputParser)

简单示例
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate 

# 模型
model = ChatOpenAI(参数省略...)
# 模板
prompt = ChatPromptTemplate.from_template("你是历史专家,请讲一个关于{topic}的历史故事。")
# 输出解析器
output_parser = StrOutputParser()
# 链
chain = prompt | model | output_parser
# 执行
chain.invoke({
   "topic": "刘彻"}) 

chain = prompt | model | output_parser:类似于unix管道运算符,其中链将不同的组件组合在一起,从一个组件提供输出作为下一个组件的输入。|

在此链中,用户输入被传递到提示模板,然后提示模板输出传递给模型,然后模型输出为传递给输出解析器。

元素解读
  • prompt :是一个BasePromptTemplate,这意味着它接受模板变量的字典并生成PromptValue,是提示词包装
  • model :将PromptValue传递给模型。在这种情况下,我们的模型是ChatModel,这意味着它将输出BaseMessage
  • output_parser
    :最后,我们将模型输出传递给output_parser,它是一个BaseOutputParser,这意味着它接受字符串或BaseMessage作为输入。指定的StrOutputParser只需将任何输入转换为字符串
完整步骤
  • 我们将用户的主题以 {“topic”:“刘彻”} 形式输入
  • 提示组件(Prompt)接受用户输入,然后在使用主题构造提示后使用该输入构造PromptValue。
  • 模型组件(Model)接受生成的提示,并传递到OpenAI LLM模型中进行评估。模型生成的输出是一个ChatMessage对象。
  • 最后,output_parser组件接收ChatMessage,并将其转换为从invoke方法返回的Python字符串。

知道具体步骤后,我们可以对其拆分,查看中间过程结果

# 模型
model = ChatOpenAI(参数省略...)
# 模板
prompt = ChatPromptTemplate.from_template("你是历史专家,请讲一个关于{topic}的历史故事。")
input = {
   "topic": "刘彻"} 
# prompt执行invoke方法的输出
prompt.invoke(input)
# 输出
ChatPromptValue(messages=[HumanMessage(content='你是历史专家,请讲一个关于刘彻的历史故事。')])  

# prompt+model执行invoke的输出
### LangChainLCEL工作原理解释 #### 三、LangChain框架概述 LangChain是一个用于构建对话应用的强大框架,它不仅提供了丰富的功能组件还支持灵活的扩展机制。通过集成多种模型和服务,能够快速搭建起具备自然语言处理能力的应用程序[^1]。 #### 四、LCEL表达式的定义及其作用 LCEL (LangChain Expression Language) 是一种专门为简化操作而设计的小型领域特定语言(DSL),允许开发者以更直观的方式编写逻辑流程。这种表达式可以被解析成一系列可执行的操作序列,在运行时按照预定规则顺序执行各个节点上的任务[^2]。 #### 五、运算符重载技术在LCEL中的体现 为了使代码更加简洁易读,LCEL引入了Python风格的魔术方法来实现运算符重载。特别是对于管道(`|`)符号对应的`__or__()`函数进行了特殊定制,使得多个Runnable对象之间可以通过简单的竖线连接形成复杂的数据流控制结构[^3]: ```python from langchain import Runnable, LCELExpression class CustomRunnable(Runnable): pass expr = ( CustomRunnable() | CustomRunnable() ) print(expr) ``` 上述例子展示了如何利用`__or__`方法创建由两个自定义Runnable实例组成的流水线。当这条语句被执行时,输入数据会先传递给第一个CustomRunnable处理完毕后再交给下一个继续加工直至整个链条结束为止。 #### 六、不同场景下的接口选用策略 针对不同的业务需求,LangChain提供了一系列优化过的API供选择。例如,在面对高并发量的在线客服系统时推荐采用异步版本;而对于大规模离线分析作业则更适合批量提交方式;至于那些对响应速度要求不高但追求简易性的内部管理平台来说同步调用无疑是最优解之一[^4]。 #### 七、总结 综上所述,LangChain借助于其独特的架构设计——尤其是内置DSL的支持——实现了高度模块化的同时保持了良好的性能表现。无论是初学者还是经验丰富的工程师都能从中受益匪浅,轻松驾驭复杂的AI项目开发过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值