LangChain 核心组件:模型、消息、工具与 Runnable
《Agent 大模型 0 到 1 系统课》 · 程序员 Sunday
你正在阅读本节的免费试读。完整课程 ¥499,可在文末添加作者微信购买。
上一小节,咱们使用 LangChain.js 实现了一个最小 Agent。
代码不多,大致的逻辑是:
定义一个模型,定义一个 Tool,再交给
createAgent(),Agent 就可以自己查询订单了。
可比咱们之前哼哧哼哧的写 Agent Runtime 简单多了吧。
那么,这么好的框架,到底怎么用呢?
这一小节,就看这个。
直接通过代码来学
我给大家准备好了一个代码,在 /Code/Node/第五章/03-langchain-core-abstractions
咱们直接通过这个代码来学
整个代码的结构并不复杂,说白了,只有一个代码文件 core-abstractions.js
不过再看具体的代码之前,咱们先来看一下项目的依赖,也就是 package.json
这里面和 LangChain 有关的包有三个,用的时候基本上就按照下面的方式来用:
import { ChatDeepSeek } from '@langchain/deepseek'
import { RunnableSequence } from '@langchain/core/runnables'
import { HumanMessage, SystemMessage, ToolMessage, tool } from 'langchain'
它们都属于 LangChain 生态,然后咱们一个个来看
首先是:langchain
先看咱们最常接触的 langchain。
在上一小节中,createAgent() 和 tool() 都是从这个包中导入的。这一小节使用的 HumanMessage、SystemMessage 和 ToolMessage,也可以直接从这里导入。
所以,langchain 可以理解成 咱们开发 Agent 时主要使用的库。
它提供了创建 Agent、定义 Tool、管理 Message 和添加 Middleware 等上层开发的入口,负责把模型、Tool 与 Agent Runtime 组织到一起。
如果不使用这个包,咱们也可以使用 @langchain/core 自己组合执行流程。
但是,模型返回 Tool Call 以后怎样继续执行、Tool 结果怎样回传、什么时候结束循环,这些逻辑就得自己写了(第四章手写的 AI 编程 Agent,做的就是类似的事情)。
其次是:@langchain/core
然后是 @langchain/core。
如果用官方属于来说,这玩意叫做 “底层公共抽象”。好说,就是不好理解。。
咱们可以先看本节代码里的三个调用:
// 直接调用大模型,并将当前消息上下文发送给模型生成回复。
model.invoke(messages)
// 直接调用 getTask Tool,查询 DEV-1024 对应的任务详情。
getTask.invoke({ taskId: 'DEV-1024' })
// 直接调用 taskSummary Tool,获取 DEV-2048 对应的任务摘要。
taskSummary.invoke({ taskId: 'DEV-2048' })
其中:model 是模型,getTask 是 Tool,taskSummary 是一条组合流程。
它们做的事情完全不同,却都可以使用 invoke() 执行。
原因就在于,LangChain 通过 Core 中的 Runnable 等公共抽象,规定了这些组件应该怎样接收输入、返回输出以及继续组合。
除此之外,Chat Model、Message、Tool、Prompt、Retriever 和 Vector Store 等组件使用的基础结构,也都来自 @
本节试读已结束
继续学习,解锁完整课程
购买《Agent 大模型 0 到 1 系统课》,
继续阅读本节剩余内容与后续课程。
