LangChain 实战入门:从 0 到 1 构建一个支持工具调用的 AI 助手
在大模型(LLM)应用开发中,一个非常现实的问题是:
❓ 不同模型接口各不相同,如何优雅地统一调用?
比如:
- 千问(Qwen)
- DeepSeek
- Kimi
- OpenAI
每家 API 风格都不一样,如果你直接对接,代码会变得非常混乱。
这时候,LangChain 就登场了。
🧠 一、LangChain 是什么?
一句话总结:
LangChain 是一个用于连接大模型与应用的开发框架。
它帮你做了三件核心事情:
1. 统一模型调用接口
无论你用哪个模型,都可以用同一套代码调用。
2. 管理对话上下文(Messages)
不用再手动拼字符串。
3. 支持工具调用(Agent 能力基础)
让 AI 不只是“聊天”,还能“做事”。
⚙️ 二、环境准备
初始化项目(推荐 TypeScript)
npm init -y
安装依赖
npm install langchain @langchain/core
npm install @langchain/openai dotenv
配置环境变量
创建 .env 文件:
QWEN_API_KEY=你的API_KEY
配置 package.json
{
"type": "module"
}
为什么要加?
因为 LangChain 使用 ESM 模块,不加会报错。
三、第一个 LLM 调用
import dotenv from "dotenv";
import { ChatOpenAI } from "@langchain/openai";
dotenv.config();
const llm = new ChatOpenAI({
model: "qwen-plus",
apiKey: process.env.QWEN_API_KEY,
temperature: 0.7,
configuration: {
baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1"
}
});
const res = await llm.invoke("世界上最高的山峰是哪座?");
console.log(res.content);
核心理解
ChatOpenAI:统一模型入口invoke():最基础调用方式content:模型输出内容
本质就是:LangChain 把所有模型抽象成统一接口
💬 四、消息机制(Messages)——核心设计
LangChain 并不是用字符串拼接上下文,而是用 消息对象:
import { HumanMessage, SystemMessage } from "langchain";
const messages = [
new SystemMessage("你是一个智能助手"),
new HumanMessage("明朝什么时候建立?")
];
const res = await llm.invoke(messages);
消息类型
| 类型 | 作用 |
|---|---|
| SystemMessage | 设定 AI 行为 |
| HumanMessage | 用户输入 |
| AIMessage | AI 输出 |
| ToolMessage | 工具返回 |
关键思想:
对话 = 一组有结构的消息,而不是字符串
⚡ 五、5 种常用调用方式
普通调用(invoke)
适合简单问答。
流式调用(stream)🔥
const stream = await llm.stream("简单介绍一下人工智能");
for await (const chunk of stream) {
console.log(chunk.text);
}
用于:
- 聊天界面
- 打字机效果
批量调用(batch)
const res = await llm.batch([
"什么是AI?",
"什么是区块链?"
]);
用于高并发任务
结构化输出(JSON)🔥
import * as z from "zod";
const schema = z.object({
title: z.string(),
rating: z.number()
});
const model = llm.withStructuredOutput(schema);
const res = await model.invoke("介绍泰坦尼克号");
console.log(res);
用于:
- 后端接口
- 数据处理
多轮对话(Messages)
使用 Messages(正确方式)
import { HumanMessage, SystemMessage, AIMessage } from "langchain";
// 构建对话历史
const messages = [
new SystemMessage("你是一个智能助手"),
new HumanMessage("我叫小军"),
new AIMessage("好的,我记住了,你叫小军"),
new HumanMessage("我刚刚说我叫什么名字?")
];
// 调用模型
const res = await llm.invoke(messages);
console.log(res.content);
输出结果
你叫小军 😊
刚刚你告诉我你的名字是小军。
用于:
- 聊天机器人
- 上下文记忆
🛠️ 六、工具调用(重点🔥🔥🔥)
这是 LangChain 最强大的能力之一。
什么是工具调用?
让 AI 不只是“回答问题”,而是“调用函数解决问题”
示例:天气查询工具
定义工具
import { tool } from "@langchain/core/tools";
const getWeather = tool(
async (input) => {
const data = {
北京: "多云 15°C",
上海: "小雨 18°C"
};
return data[input] || "暂无数据";
},
{
name: "get_weather",
description: "查询城市天气"
}
);
绑定工具
const llmWithTools = llm.bindTools([getWeather]);
调用流程
const res = await llmWithTools.invoke("北京天气怎么样?");
实际执行流程
- 用户提问
- 模型判断需要调用工具
- 返回 tool_call
- 执行函数
- 返回 ToolMessage
- 模型生成最终回答
本质:
LLM = 大脑,Tool = 手脚
七、你应该真正理解的 3 件事
LangChain ≠ AI
它只是一个:
调度框架(Orchestration Layer)
核心三要素
- LLM(模型)
- Messages(上下文)
- Tools(能力扩展)
Agent 的基础
工具调用就是 Agent 的雏形:
👉 AI 可以:
- 查天气
- 查数据库
- 调接口
- 执行任务
🚀 八、下一步可以做什么?
当你掌握这些后,可以继续进阶:
Agent(智能体)
自动决策 + 多工具调用
RAG(检索增强生成)
接入知识库
工作流(Workflow)
构建复杂 AI 应用
🎯 总结
LangChain 的价值不在“封装 API”,而在:
用统一的方式组织 AI 能力
如果你只记住一句话:
LangChain = 模型 + 消息 + 工具 的组合框架
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)