LangChain 编程的一大创新是引入管道化表达式(Pipeline Expressions),通过链式组合不同的模块来构建 LLM 任务流。
为了实现这种链式编程,LangChain 通过 Runnable 统一封装模块,使它们提供标准化接口(如 invoke()、batch()、stream())
通过运算符(|)实现模块间的数据传递,“|” 像一数据管道,本质上仍然是 invoke() 逐步执行。
langgraph.graph.StateGraph 更是引入图论、基于图论,通过节点(node)定义不同的任务,通过边(Edge)使数据在多个任务之间流转和更新。
V0.3 版的聊天机器人示例代码中,State就是通过Edge流转。里面的StateMessage通过Annotated中引用的add_message实现了自动叠加历史消息的逻辑。
为了理解add_message如何影响State,我们先用一个更直观的例子来理解。
以下代码展示的是一个有三个节点的工作流,数据从一个节点流入下一个节点的过程中,会被Annotated中元数据的函数修改,模拟“带历史消息”的聊天。
因为数据(state)是从一个节点流入另一个节点,连接节点的是边(edge),为了形象,我们用管道来描述,即edge是数据流通的管道。
为了展示数据是在管道中被修改的,我们分别把节点收到的state、节点输出的state、管道中的state分别打印出来。
为了方便演示,我们定义State的结构包含2个成员:foo 表示数据要流向的节点名称,bar 表示本环节大模型api接口返回的结果。 Annotated 的bar_meta_function 对b

最低0.47元/天 解锁文章
773

被折叠的 条评论
为什么被折叠?



