在大模型(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("北京天气怎么样?");

实际执行流程

  1. 用户提问
  2. 模型判断需要调用工具
  3. 返回 tool_call
  4. 执行函数
  5. 返回 ToolMessage
  6. 模型生成最终回答

本质:

LLM = 大脑,Tool = 手脚

七、你应该真正理解的 3 件事

 LangChain ≠ AI

它只是一个:

调度框架(Orchestration Layer)


 核心三要素

  • LLM(模型)
  • Messages(上下文)
  • Tools(能力扩展)

Agent 的基础

工具调用就是 Agent 的雏形:

👉 AI 可以:

  • 查天气
  • 查数据库
  • 调接口
  • 执行任务

🚀 八、下一步可以做什么?

当你掌握这些后,可以继续进阶:

Agent(智能体)

自动决策 + 多工具调用

 RAG(检索增强生成)

接入知识库

工作流(Workflow)

构建复杂 AI 应用


🎯 总结

LangChain 的价值不在“封装 API”,而在:

用统一的方式组织 AI 能力

如果你只记住一句话:
LangChain = 模型 + 消息 + 工具 的组合框架

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐