深入浅出 LangChain —— 第二章:环境搭建与快速上手

使用Nodejs和Langchain开发大模型 熟悉 ChatGPT 的同学一定还知道 Langchain 这个AI开发框架。由于大模型的知识仅限于它的训练数据内部,它有一个强大的“大脑”而没有“手臂”,而 Langchain 这个框架出现的背景就是解决大模型缺少“手臂”的问题,使得大模型可以与外部接口,数据库,前端应用交互。可以说大模型解决了99%的智能化问题,而 Langchain 就是来解决这最后1%和外部应用的打通。Langchain 同时支持python和nodejs。 阅读详情

📖 本章学习目标

完成本章后,你将能够:

  • ✅ 配置完整的 LangChain.js 开发环境(Node.js + TypeScript)
  • ✅ 理解模块化包安装的设计理念和最佳实践
  • ✅ 创建并运行第一个可工作的 AI Agent
  • ✅ 接入 LangSmith 实现可视化调试
  • ✅ 掌握流式输出的实现方法
  • ✅ 识别并避免常见的配置陷阱

一、开发环境准备

在写第一行代码之前,先把开发工具配好。这就像厨师做菜前要准备好厨具和食材一样重要。

1、Node.js 与包管理器

LangChain.js 要求 Node.js 20+(推荐 LTS 版本)。为什么需要这么高的版本?因为 LangChain.js 大量使用了现代 JavaScript 特性(如 ES Modules、Top-level await),这些特性在旧版本中支持不完善。

(1)检查当前Node版本
node -v   # 应该输出 v20.x.x 或更高

如果版本过低,需要升级。不同操作系统有不同的管理工具:

macOS / Linux 用户: 推荐使用 nvm(Node Version Manager)

# 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

# 重新加载 shell 配置
source ~/.bashrc  # 或 source ~/.zshrc

# 安装并使用 Node.js 20
nvm install 20
nvm use 20

Windows 用户: 推荐使用 fnm(Fast Node Manager),比 nvm for Windows 更稳定

# 使用 winget 安装 fnm
winget install Schniz.fnm

# 安装并使用 Node.js 20
fnm install 20
fnm use 20
(2)安装包管理器

包管理器推荐使用 pnpm,相比 npm 和 yarn,它有两大优势:

  • 更快:使用硬链接和符号链接,避免重复下载
  • 更节省磁盘空间:全局存储依赖,多个项目共享
# 通过 npm 安装 pnpm(全局安装)
npm install -g pnpm

# 验证安装成功
pnpm -v

💡 小贴士:如果你已经熟悉 npm 或 yarn,继续使用也完全没问题。本系列教程的命令会用 pnpm,你可以轻松转换为对应的 npm/yarn 命令。

2、TypeScript 配置

所有教程的代码使用 TypeScript,原因有三:

  1. 类型安全:在编码阶段就能发现很多错误
  2. IDE 支持:智能提示和自动补全更准确
  3. 生产实践:大型项目几乎都用 TypeScript
(3)初始化项目
# 创建项目目录并进入
mkdir my-langchain-agent && cd my-langchain-agent

# 初始化 package.json
pnpm init

# 安装 TypeScript 相关依赖(-D 表示开发依赖)
pnpm add -D typescript tsx @types/node

依赖说明:

  • typescript:TypeScript 编译器
  • tsx:直接运行 TypeScript 文件的工具(无需手动编译)
  • @types/node:Node.js 的类型定义
(4)创建 TypeScript 配置文件

在项目根目录创建 tsconfig.json:

{
  "compilerOptions": {
    "target": "ES2022",           // 目标 JavaScript 版本
    "module": "ESNext",           // 模块系统
    "moduleResolution": "bundler", // 模块解析策略
    "strict": true,               // 启用严格类型检查
    "esModuleInterop": true,      // 允许 import CommonJS 模块
    "skipLibCheck": true,         // 跳过库文件的类型检查(加速编译)
    "outDir": "./dist",           // 编译输出目录
    "rootDir": "./src"            // 源代码目录
  },
  "include": ["src/**/*"]         // 包含的文件
}

关键配置解读:

  • "strict": true:开启所有严格类型检查选项,帮助你在编码阶段发现潜在问题
  • "moduleResolution": "bundler":现代化的模块解析策略,更适合打包工具
  • "esModuleInterop": true:让你可以用 import x from 'module' 的方式导入 CommonJS 模块
(5)配置运行脚本

在 package.json 中添加脚本,方便开发和构建:

{
  "scripts": {
    "dev": "tsx src/index.ts",  // 开发模式:直接运行 TS 文件
    "build": "tsc"              // 构建模式:编译为 JS
  },
  "type": "module"              // ⚠️ 重要:声明使用 ESM 模块系统
}

⚠️ 注意:"type": "module" 这一行非常重要!它告诉 Node.js 你的项目使用 ES Modules(而不是传统的 CommonJS)。缺少这一行会导致 import 语句报错。

3、安装 LangChain.js

LangChain.js 采用模块化设计,核心包和各个 Provider 集成包分开安装。

(1)为什么要模块化?

想象一下,如果你只需要 OpenAI 的模型,却要安装 Anthropic、Google、Ollama 等所有 Provider 的依赖,会造成:

  • 安装包体积巨大(可能超过 100MB)
  • 安装时间长
  • 潜在的依赖冲突

模块化设计让你只安装需要的部分。

(2)安装核心包
# LangChain 核心包(必须)
pnpm add langchain
(3) 安装 Provider 集成包

根据你的需求选择安装(至少选一个):

# OpenAI(GPT-4o、GPT-4o-mini 等)
pnpm add @langchain/openai

# Anthropic(Claude Opus、Sonnet、Haiku 等)
pnpm add @langchain/anthropic

# Google(Gemini 系列)
pnpm add @langchain/google-genai

# Ollama(本地运行的开源模型)
pnpm add @langchain/ollama
(5)安装 LangGraph
# LangGraph(底层运行时,Agent 的基础)
pnpm add @langchain/langgraph

💡 提示:虽然 LangGraph 是底层依赖,但建议显式安装,确保版本可控。

4. 安装类型校验库Zod

Zod 是一个 TypeScript 类型验证库,用于确保输入数据符合定义的格式。

pnpm add zod

5、配置 API Key

大多数 LLM Provider 都需要 API Key 才能使用。我们需要安全地存储这些密钥。

(1)创建环境变量文件

在项目根目录创建 .env 文件:

# .env 文件(存储敏感信息,不要提交到 Git)

# OpenAI API Key(从 https://platform.openai.com/api-keys 获取)
OPENAI_API_KEY=sk-your-openai-key-here

# Anthropic API Key(可选,如果使用 Claude 模型)
ANTHROPIC_API_KEY=sk-ant-your-anthropic-key-here

# LangSmith 配置(可选,但强烈推荐用于调试)
LANGSMITH_TRACING=true
LANGSMITH_API_KEY=ls-your-langsmith-key-here
LANGSMITH_PROJECT=my-first-agent
(2)创建 .gitignore 文件

为了防止敏感信息泄露,必须把 .env 加入 .gitignore:

# .gitignore
.env
node_modules/
dist/
(3)安装 dotenv 包

dotenv 是一个轻量级的库,用于在应用启动时加载 .env 文件中的环境变量:

pnpm add dotenv
最终的项目结构
my-langchain-agent/
├── src/
│   └── index.ts          # 主入口文件
├── .env                  # API Keys(不提交到 Git)
├── .gitignore            # Git 忽略配置
├── package.json          # 项目配置和依赖
└── tsconfig.json         # TypeScript 配置

二、第一个 Agent:天气查询示例

环境配好了,现在来写第一个能真正运行的 Agent。我们从一个简单的场景开始:查询天气。

1、最简版本:20 行代码

这个示例展示如何用最少代码创建一个可用的 Agent。

(1)完整代码
// src/index.ts

// 第一步:加载环境变量(必须在最顶部)
import "dotenv/config";

// 第二步:导入 LangChain 核心功能
import { createAgent, tool } from "langchain";
import { z } from "zod";

// 第三步:定义天气查询工具
const getWeather = tool(
  ({ city }) => `${city} 今日天气:晴,气温 22°C,湿度 60%`,
  {
    name: "get_weather",
    description: "查询指定城市的当前天气",
    schema: z.object({
      city: z.string().describe("要查询天气的城市名称"),
    }),
  }
);

// 第四步:创建 Agent
const agent = createAgent({
  model: "openai:gpt-4o",
  tools: [getWeather],
});

// 第五步:调用 Agent 并输出结果
const result = await agent.invoke({
  messages: [{ role: "user", content: "北京和上海今天天气怎么样?" }],
});

console.log(result.messages.at(-1)?.content);
(2)运行代码
pnpm dev
(3)预期输出
北京今日天气:晴,气温 22°C,湿度 60%
上海今日天气:晴,气温 22°C,湿度 60%

两个城市今天天气都不错,都是晴天,气温适中。如果你计划出行,不用担心雨天哦!

✨ 神奇之处:你只定义了一个查询单个城市天气的工具,但 Agent 自动判断需要查询两个城市,连续调用了两次工具,最后生成了汇总回答。这就是 Agent 的智能之处!

2、代码逐段解析

让我们深入理解每一部分的作用。

(1)导入依赖
// 加载环境变量(让 process.env.OPENAI_API_KEY 可用)
import "dotenv/config";

// 导入 LangChain 核心功能
import { createAgent, tool } from "langchain";

// 导入 Zod(用于定义参数校验规则)
import { z } from "zod";

关键点:

  • dotenv/config 必须在最顶部导入,确保在其他代码执行前加载环境变量
  • createAgent:创建 Agent 的核心函数
  • tool:将普通函数包装成 Agent 可调用的工具
  • zod:类型安全的参数校验库(LangChain.js 内置依赖)
(2)定义工具
const getWeather = tool(
  // 参数 1:工具的执行函数
  // 接收解构的参数对象,返回字符串结果
  ({ city }) => `${city} 今日天气:晴,气温 22°C,湿度 60%`,

  // 参数 2:工具的元数据(告诉 LLM 如何使用这个工具)
  {
    name: "get_weather",                    // 工具的唯一标识符
    description: "查询指定城市的当前天气",     // 工具的功能描述
    schema: z.object({                      // 参数校验规则
      city: z.string().describe("要查询天气的城市名称"),
    }),
  }
);

工具定义的三个关键要素:

要素作用重要性
nameLLM 用来引用这个工具⭐⭐⭐ 必须唯一
descriptionLLM 根据描述决定是否调用⭐⭐⭐⭐⭐ 最关键
schema定义参数的类型和约束⭐⭐⭐⭐ 保证类型安全

💡 最佳实践:description 写得越详细(明确而不是字多),Agent 的表现越好。例如:

description: "查询指定城市的当前天气情况,包括温度、湿度、天气状况。当用户询问某个地方的天气时使用此工具。"
(3)创建 Agent
const agent = createAgent({
  model: "openai:gpt-4o",  // 使用的模型(Provider:模型名格式)
  tools: [getWeather],      // 注册给 Agent 的工具列表
});

支持的模型格式:

// OpenAI 系列
model: "openai:gpt-4o"
model: "openai:gpt-4o-mini"
model: "openai:o1-mini"

// Anthropic 系列
model: "anthropic:claude-opus-4-5"
model: "anthropic:claude-sonnet-4-6"

// Google 系列
model: "google:gemini-2.0-flash"
(4)调用 Agent
const result = await agent.invoke({
  messages: [{ role: "user", content: "北京和上海今天天气怎么样?" }],
});

返回值结构:

result = {
  messages: [
    { role: "user", content: "北京和上海今天天气怎么样?" },
    { role: "assistant", content: "", tool_calls: [...] },  // LLM 决定调用工具
    { role: "tool", content: "北京 今日天气:晴...", name: "get_weather" },
    { role: "assistant", content: "", tool_calls: [...] },  // 再次调用工具
    { role: "tool", content: "上海 今日天气:晴...", name: "get_weather" },
    { role: "assistant", content: "两个城市今天天气都不错..." }  // 最终回答
  ]
}

使用 result.messages.at(-1)?.content 获取最后一条消息(即最终回答)。

3、Agent 执行流程可视化

为了帮助你理解 Agent 的内部工作流程,我们用序列图展示:

get_weather 工具 GPT-4o (LLM) Agent 用户 get_weather 工具 GPT-4o (LLM) Agent 用户 LLM 分析任务, 决定需要查天气 LLM 发现还需要查上海 LLM 生成汇总回答 "北京和上海今天天气怎么样?" 传入用户消息 + 工具定义 tool_call(get_weather, {city: "北京"}) 执行工具调用 "北京 今日天气:晴..." 传入工具返回结果 tool_call(get_weather, {city: "上海"}) 执行工具调用 "上海 今日天气:晴..." 传入全部结果 "两个城市今天天气都不错..." 返回最终回答

关键点:

  • Agent 会自主决策调用几次工具
  • 每次工具调用后,结果都会回传给 LLM
  • LLM 基于所有历史信息决定下一步行动
  • 整个过程是循环迭代的,直到 LLM 认为任务完成

三、接入 LangSmith:让每一步都可见

上面的示例跑通了,但你有没有想过:

  • Agent 在执行过程中,LLM 具体传了什么 Prompt?
  • 工具调用的参数是什么?
  • 每一步花了多少时间?
  • 用了多少 Token,成本是多少?

在传统软件开发里,你可以加 console.log 来调试。但在 Agent 开发中,调用链路可能有十几步,而且 LLM 的每次调用都有延迟,手动打日志效率很低。

LangSmith 就是为这个场景设计的可观测性平台。

1、注册并获取 API Key

步骤 1:访问官网

前往 LangSmith 官网

步骤 2:注册账号

可以使用 GitHub 账号直接登录,或者用邮箱注册。

步骤 3:创建项目

登录后,点击 “Create Project”,输入项目名称(如 my-first-agent)。

步骤 4:获取 API Key

在项目设置页面,找到 “API Keys” 标签页,复制你的 API Key。

2、开启追踪

在 .env 文件中添加以下配置:

# .env
LANGSMITH_TRACING=true
LANGSMITH_API_KEY=ls_你的API_Key
LANGSMITH_PROJECT=my-first-agent  # 项目名,可以自定义

就这样!不需要修改任何业务代码。

3、查看执行追踪

再次运行你的 Agent:

pnpm dev

然后打开 LangSmith 控制台(https://smith.langchain.com),你会看到类似这样的完整执行追踪:

Run: "北京和上海今天天气怎么样?"
├── 🤖 LLM Call 1(决策阶段)
│   ├── Input: [system prompt] + [user message] + [工具定义]
│   ├── Output: tool_call(get_weather, {city: "北京"})
│   ├── Latency: 1.2s
│   └── Tokens: 312 (prompt: 280, completion: 32)
│
├── 🔧 Tool Call: get_weather
│   ├── Input: {city: "北京"}
│   └── Output: "北京 今日天气:晴..."
│
├── 🤖 LLM Call 2(再次决策)
│   ├── Input: [...历史消息] + [工具结果]
│   ├── Output: tool_call(get_weather, {city: "上海"})
│   ├── Latency: 0.9s
│   └── Tokens: 198
│
├── 🔧 Tool Call: get_weather
│   ├── Input: {city: "上海"}
│   └── Output: "上海 今日天气:晴..."
│
└── 🤖 LLM Call 3(生成最终回答)
    ├── Input: [...历史消息] + [所有工具结果]
    ├── Output: "两个城市今天天气都不错..."
    ├── Latency: 1.5s
    └── Tokens: 267

你可以在 LangSmith 中看到:

  • ✅ 每次 LLM 调用的完整输入输出
  • ✅ 工具调用的参数和返回值
  • ✅ 每一步的耗时和 Token 消耗
  • ✅ 整个执行链路的可视化流程图

🔍 为什么可观测性在 AI 开发中尤为重要?

传统软件的 bug 往往是确定性的——同样的输入,永远产生同样的错误。LLM 应用则不同:

  • 模型输出具有随机性(即使 temperature=0)
  • 同一个 Prompt 在不同时刻可能给出不同的工具调用决策
  • Agent 的行为依赖于多轮交互的累积状态

如果你不追踪每次执行的完整链路,遇到 Agent 行为异常时几乎无从下手。

建议:从第一天就开启 LangSmith,养成在 LangSmith 里调试的习惯,而不是只看终端输出。


四、流式输出:让 Agent 实时响应

上面的示例使用 invoke(),需要等 Agent 完成全部推理才返回结果。对于耗时较长的任务(比如需要调用多次工具),用户体验不好(用户只能盯着空白屏幕等待 5-10 秒甚至更长)。

流式输出(Streaming) 可以让 Agent 的中间过程和最终输出实时传输,实现类似 ChatGPT 的"打字机效果"。

1、基础流式示例

// src/streaming.ts
import "dotenv/config";
import { createAgent, tool } from "langchain";
import { z } from "zod";

// 定义工具(和之前一样)
const getWeather = tool(
  ({ city }) => `${city} 今日天气:晴,气温 22°C,湿度 60%`,
  {
    name: "get_weather",
    description: "查询指定城市的当前天气",
    schema: z.object({ city: z.string() }),
  }
);

// 创建 Agent(和之前一样)
const agent = createAgent({
  model: "openai:gpt-4o",
  tools: [getWeather],
});

// 使用 stream() 替代 invoke()
const stream = await agent.stream(
  { messages: [{ role: "user", content: "北京今天天气怎么样?" }] },
  { streamMode: "values" }  // 流式返回每次状态更新
);

// 遍历流式数据
for await (const chunk of stream) {
  const lastMessage = chunk.messages.at(-1);
  if (lastMessage?.role === "assistant") {
    process.stdout.write(lastMessage.content as string);
  }
}

代码解读:

  • 第 19 行:使用 stream() 方法替代 invoke()
  • 第 21 行:streamMode: "values" 表示返回每次状态更新的完整快照
  • 第 24-28 行:使用 for await...of 异步遍历流式数据
  • 第 26-27 行:只输出 assistant 角色的消息内容

2、streamMode 的三种模式

模式返回内容适用场景
"values"每次状态更新后的完整状态需要展示中间步骤,了解 Agent 的思考过程
"updates"每次状态变化的增量部分只关心变化部分,减少数据传输
"messages"逐 Token 流式输出对话界面的打字机效果,用户体验最佳

3、逐 Token 流式输出(推荐用于聊天界面)

如果你想实现类似 ChatGPT 的效果(文字逐个出现),使用 "messages" 模式:

const stream = await agent.stream(
  { messages: [{ role: "user", content: "北京今天天气怎么样?" }] },
  { streamMode: "messages" }  // 逐 Token 流式输出
);

for await (const [message, metadata] of stream) {
  if (message.role === "assistant") {
    // 逐字符输出,实现打字机效果
    process.stdout.write(message.content);
  }
}

效果:

北→京→今→日→天→气→:→晴→,→气→温→ →2→2→°→C...

💡 实际应用场景:

  • Web 应用:使用 Server-Sent Events (SSE) 或 WebSocket 将流式数据推送到前端
  • CLI 工具:直接在终端逐字输出,提升交互体验
  • 移动端:分块渲染,减少首屏等待时间

五、完整的项目结构

至此,一个基本的 LangChain.js 项目结构如下:

my-langchain-agent/
├── src/
│   ├── tools/              # 工具定义目录
│   │   └── weather.ts      # 天气查询工具
│   ├── agents/             # Agent 配置目录
│   │   └── main.ts         # 主 Agent 创建逻辑
│   └── index.ts            # 入口文件
├── .env                    # API Keys(不提交 Git)
├── .env.example            # 环境变量模板(提交 Git)
├── .gitignore              # Git 忽略配置
├── package.json            # 项目配置
└── tsconfig.json           # TypeScript 配置

添加.env.example 文件

这是一个模板文件,提交到代码仓库,告诉其他开发者需要配置哪些环境变量:

# .env.example(提交到 Git)

# OpenAI API Key(必填)
# 从 https://platform.openai.com/api-keys 获取
OPENAI_API_KEY=

# Anthropic API Key(可选)
# 从 https://console.anthropic.com/settings/keys 获取
ANTHROPIC_API_KEY=

# LangSmith 配置(推荐)
# 从 https://smith.langchain.com 获取
LANGSMITH_TRACING=true
LANGSMITH_API_KEY=
LANGSMITH_PROJECT=my-first-agent

使用方法:

# 克隆项目后,复制模板并填写真实值
cp .env.example .env
# 然后用编辑器打开 .env 填入真实的 API Key

六、常见问题与踩坑指南

在实际开发中,你可能会遇到以下问题。这里整理了最常见的几个坑和解决方案。

⚠️ 踩坑 1:Cannot use import statement in a module 错误

错误现象:

SyntaxError: Cannot use import statement outside a module

原因: Node.js 默认使用 CommonJS 模块系统(require/module.exports),而 LangChain.js 使用 ES Modules(import/export)。

解决方案: 在 package.json 中添加 "type": "module"

{
  "name": "my-langchain-agent",
  "version": "1.0.0",
  "type": "module",  // ← 添加这一行
  "scripts": {
    "dev": "tsx src/index.ts"
  }
}

⚠️ 踩坑 2:API Key 没有生效

错误现象:

AuthenticationError: Invalid API key

原因: dotenv/config 需要在代码最顶部导入,且必须在其他 LangChain 导入之前。

解决方案:

// ✅ 正确:dotenv 必须第一行
import "dotenv/config";
import { createAgent } from "langchain";

// ❌ 错误:dotenv 在后面,环境变量可能已经被读取过
import { createAgent } from "langchain";
import "dotenv/config";

验证方法:

import "dotenv/config";
console.log("API Key:", process.env.OPENAI_API_KEY?.substring(0, 10) + "...");
// 应该输出:API Key: sk-xxxxx...

⚠️ 踩坑 3:工具返回值类型错误

错误现象:

TypeError: Tool output must be a string

原因: 工具函数的返回值必须是字符串(或者能序列化为字符串的内容)。

解决方案: 如果工具返回的是对象或数组,手动序列化:

const searchTool = tool(
  async ({ query }) => {
    const results = await fetchSearchResults(query);
    
    // ❌ 错误:返回对象
    // return results;
    
    // ✅ 正确:序列化为 JSON 字符串
    return JSON.stringify(results);
  },
  { 
    name: "search", 
    description: "搜索互联网", 
    schema: z.object({ query: z.string() }) 
  }
);

⚠️ 踩坑 4:model 字符串格式错误

错误现象:

Error: Invalid model identifier

原因: v1.x 的 model 参数使用 "provider:model-name" 格式,而不是直接传模型实例。

解决方案:

// ✅ 正确:使用字符串标识符(推荐)
createAgent({ model: "openai:gpt-4o" })

// ✅ 也可以:显式实例化(需要精细配置时)
import { ChatOpenAI } from "@langchain/openai";
const model = new ChatOpenAI({ model: "gpt-4o", temperature: 0.7 });
createAgent({ model })

// ❌ 错误:v0.x 的旧写法(已废弃)
createAgent({ llm: new ChatOpenAI(...) })

⚠️ 踩坑 5:Zod Schema 定义不完整

错误现象: Agent 调用工具时传入了错误的参数类型,但没有报错。

原因: Zod Schema 定义不够严格,缺少必要的校验规则。

解决方案: 为每个参数添加详细的描述和校验:

// ❌ 不够严格
schema: z.object({
  city: z.string(),
})

// ✅ 更严格的定义
schema: z.object({
  city: z.string()
    .min(1, "城市名称不能为空")
    .max(50, "城市名称过长")
    .describe("要查询天气的城市名称,如:北京、上海、广州"),
})

七、本章小结

恭喜你完成了第一章的实战练习!这一章我们完成了三件重要的事情:

✅ 学习成果回顾

  1. 搭好了开发环境

    • Node.js 20+ 和 pnpm 包管理器
    • TypeScript 配置和 tsx 运行工具
    • LangChain.js 模块化安装策略
  2. 跑通了第一个 Agent

    • 理解了 tool() 定义工具的三要素(name、description、schema)
    • 掌握了 createAgent() 创建 Agent 的方法
    • 学会了 invoke() 同步调用和 stream() 流式输出
  3. 接入了 LangSmith

    • 用两个环境变量就开启了完整的执行链路追踪
    • 理解了可观测性在 AI 开发中的重要性

🎯 动手练习

尝试完成以下练习,巩固所学知识:

练习 1:扩展天气工具
修改 getWeather 工具,让它返回更真实的天气数据(可以调用免费的天气 API,如 OpenWeatherMap)。

练习 2:添加新工具
创建一个 getTime 工具,返回当前时间。测试 Agent 能否正确回答"现在几点了?"

练习 3:对比不同模型
将模型从 "openai:gpt-4o" 改为 "openai:gpt-4o-mini",观察响应速度和质量的差异。

练习 4:探索 LangSmith
在 LangSmith 控制台中查看你的 Agent 执行轨迹,找出:

  • 总共调用了几次 LLM?
  • 每次调用的 Token 消耗是多少?
  • 工具调用的参数是否正确?

📚 延伸阅读


下一章:第三章 —— 模型抽象层(Models & Messages)

实战LLM应用(2):搭建LangChain开发环境 至此,本地langchain架构调用本地部署LLM流程跑通,建议后续每次开发工作在虚拟环境进行。 阅读详情

相关推荐

Nodejs 调用langchainjs的实验

直接在官网下载,重新安装就可以了。程序-2 langchain 调用。程序-1 大模型调用。

姚家湾博客 1321

langchain设置和安装 (js版)

在我们的 CI 中,我们测试了将 LangChain 与 Webpack 和 Vite 捆绑在一起,但其他捆绑器也应该可以工作。我们不支持 Node.js 16,但如果您仍然想在 Node.js 16 上运行 LangChain,则需要按照本节中的说明进行操作。组合模块已被弃用,在Node.js之外无法使用,并将在将来的版本中删除。如果您正在从 LangChain 0.0.52 之前的版本更新,则需要更新您的导入以使用新的路径结构。如果您想在Node.js中快速开始使用LangChain,请。

m0_61932070的博客 2855

深入浅出LangChain AI Agent智能体开发教程(九)—LangChain从0到1搭建知识库

本期分享我们通过Streamlit前端界面,结合LangChain框架retriever工具与DashScope向量模型服务、DeepSeek大模型服务,从0到1实现了轻量化的RAG知识库系统。

weixin_42782643的博客 1326

LangChain.js 从入门到进阶:用 JavaScript/TypeScript 构建可落地的 RAG 与智能体系统

解释:LangChain.js 是 JavaScript/TypeScript 生态下的“AI 应用搭建框架”。它强调“链式思维 + 组件化拼装”,让我们把大模型的推理变成可编排的流程,并在浏览器、Node、Cloudflare Workers、Vercel Edge 等环境平滑运行。示例:同样是“问答机器人”,纯提示(prompt)方案容易不稳定、不可控;而用 LangChain.js,我们可以把问题分解为“检索 → 归并 → 生成 → 校对”,每步是独立的Runnable,易于调试与复用。对比。

aifs2025的博客 2666

Langchain快速上手

本文基于jupyter对langchain进行一个非常简单的入门教学,让大家对langchain有个初步概念。具体细节参考。

weixin_48435461的博客 1096

掌握LangChain:一站式本地开发环境搭建指南

本文介绍了LangChain本地开发环境的基本设置,帮助您快速入门。在进一步学习中,您可以探索各个子包的文档和源代码,以便深入了解LangChain的内部工作机制。Poetry官方文档LangChain GitHub页面。

ndAbsAfaqwdav的博客 1354

从零开始:用 LangChain.js 构建你的第一个 Tool-Calling Agent

因为 Agent 会拿工具的返回值来"看结果",如果返回的是一堆 stack trace,它大概率会困惑。能让你看到 Agent 的完整思考过程(它在想什么、调了什么工具、得到了什么结果),调试时非常有用。这就是 Agent 的价值:你不需要告诉它"先查 A 再查 B 再算差值",它自己会规划。——它不是给人看的注释,而是 LLM 判断"要不要调用这个工具"的依据。如果你确实有很多工具,可以考虑"工具路由"——先让一个 Agent 判断属于哪个分类,再把任务转给对应分类下的子 Agent。

LuckyWinty的博客 1514

深入浅出LangChain AI Agent智能体开发教程(六)—两行代码LangChain Agent API快速搭建智能体

本篇分享了LangChain Agent API快速搭建智能体的方法,通过create_tool_calling_agent创建模型和工具的Agent,并使用AgentExecutor执行Agent。

weixin_42782643的博客 1064

P1 LangChain 的快速上手

这里是Yukiii学习LangChain的学习日记第一篇,记录了配置环境及基本功能的应用,详细展示了整个流程步骤,包括部署和调用,欢迎感兴趣的小伙伴来参观指正~

m0_67850950的博客 1138

深入浅出LangChain AI Agent智能体开发教程(十)—LangChain搭建数据分析智能助手

本期分享通过Streamlit前端界面,结合LangChain框架搭建了CSV数据智能分析系统,通过自然语言指令分析结构化数据,支持CSV文件上传与DataFrame实时显示,还支持图表识别与自动展示

weixin_42782643的博客 1188

【AIGC】LangChain 环境搭建及模型API能力集成使用详解

LangChain 环境搭建及模型API能力集成使用详解

congge 7935

深入浅出LangChain AI Agent智能体开发教程(六)—LangChain Agent API快速搭建智能体

面对现状,LangChain是如何快速将大模型构建为AI Agent智能体呢?本期分享笔者将和大家一起学习LangChain Agent API的调用方法~

DEVELOPERAA的博客 1267

of_graph_get_remote_port

isp { compatible = "isp"; core@0 { id = <0>; ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; ...

wmzjzwlzs的专栏 1165

快速上手LangChain(四)LangChain Hub和LangSmith

LangChain Hub是一个用于上传、浏览、拉取和管理提示词(prompts)的地方。 LangSmith 帮助您**追踪和评估语言模型应用和智能代理**,以帮助您从原型过渡到生产环境。

西京刀客 3264

手把手教你用ESP32驱动MAX30102心率血氧传感器(含完整代码)

本文详细介绍了如何使用ESP32微控制器驱动MAX30102心率血氧传感器,构建智能健康监测系统。内容涵盖PPG原理、硬件连接、驱动配置、信号处理算法以及Web服务器数据可视化,提供完整代码实现,帮助开发者快速上手物联网健康设备开发。

weixin_29208077的博客 587

ZYNQ实战:如何用AXI-stream FIFO解决跨时钟域数据同步难题(附完整代码)

本文深入探讨了在ZYNQ项目中,如何利用AXI-Stream FIFO有效解决PS与PL之间的跨时钟域数据同步难题。文章详细分析了异步FIFO的架构设计、关键配置参数,并提供了PS端软件策略与PL端逻辑设计的完整代码示例,旨在帮助开发者构建稳定可靠的数据流通道,优化系统性能。

nginx7reverse的博客 754

【LangChain】快速上手

安装OPENAI包接下来我们定义我们的大模型如果我们使用的是ChatGPT的API接口,那么它应该就是下面这样子写的有人可能就会问了,为什么这里不需要写这个API KEY呢?事实上这个ChatOpenAI 函数默认会去读取一个叫 OPENAI_API_KEY的环境变量,这个环境变量里面存储的就是我们的API KEY。但是我们为了方便,我们这里选择使用DeepSeek的模型# 1. 定义大模型实例 —— 改为 DeepSeek 配置。

2301_80224556的博客 559

ArcGIS图解建模工具与DEM提取山脊、山谷线(水文分析、表面分析)

参考汤国安、杨昕等编著的《地理信息系统空间分析实验教程第二版》 利用水文分析(流量)和表面分析(坡向变率)得到山脊和山谷线 文章目录1、基本概念1.1 正地形1.2 负地形正负地形的影响2、水文分析方法2.1 基本思想原理2.2 技术路线2.3 操作步骤2.3.1 正负地形的提取2.3.2 利用水文分析思想和工具提取研究区域的山脊线2.3.3 利用水文分析思想和工具提取研究区域的山谷线2.3.4 利用水文分析提取山脊线和山谷线结果3、表面分析方法3.1 基本思想原理3.2 技术路线3.3 操作步骤4、图.

fungis 1万+

第一章:基于Docker环境快速搭建LangChain框架的智能对话系统:从langchain环境搭建到多轮对话代码实现(大语言模型加载)

在当今的技术发展中,大语言模型(LLMs)的出现极大地简化了智能对话系统的构建。LangChain作为一个强大的框架,为开发者提供了灵活且全面的工具集,使得即使是复杂的多轮对话系统也能轻松实现。本指南将简要介绍如何使用Docker快速搭建LangChain环境,并通过实例展示从简单的问答到带有历史记录的多轮对话的构建方法。首先,我们会学习如何利用Docker部署一个支持GPU的环境,以加速应用运行。然后,我们将了解如何安装LangChain及通过API调用语言模型进行交互。

weixin_38252409的博客 2291

Alibaba Java Coding Guidelines,以后我的Java代码规范,就靠它了

前言 对于Java代码规范,业界有统一的标准,不少公司对此都有一定的要求。但是即便如此,庞大的Java使用者由于经验很水平的限制,未必有规范编码的意识,而且即便经验丰富的老Java 程序员也无法做到时刻将规范牢记于心。所以对于代码规范扫描工具,一经问世就广受青睐,阿里巴巴出品的Alibaba Java Coding Guidelines(阿里巴巴Java代码规约扫描,以下简称为AJCG)插件便是其...

java梦工厂 859

从通用到定制:营销Agent如何跨越数据鸿沟,实现对话SOP的个性化飞跃

从通用到定制:营销Agent如何跨越数据鸿沟,实现对话SOP的个性化飞跃

丨汀、的博客 656

快速上手LangChain,大模型入门必看教程

LangChain是一个基于大语言模型用于构建端到端语言模型应用的框架,它提供了一系列工具、套件和接口,让开发者使用语言模型来实现各种复杂的任务,如文本到图像的生成、文档问答、聊天机器人等。开发阶段:使用LangChain的开源构建块和组件构建应用程序,利用第三方集成和模板快速启动。生产化阶段:使用LangSmith检查、监控和评估您的链,从而可以自信地持续优化和部署。部署阶段:使用LangServe将任何链转化为API。

程序员鑫港的博客 1378

罗克韦尔AB PLC_FactoryTalk无法登录的解决方法

罗克韦尔AB PLC_FactoryTalk无法登录的解决方法

Robot_PLC_HMI_Automation 3575

langchain1.0学习环境搭建+helloworld

安装langchain,ollama,并在使用langchain调用本地部署的大模型

👨‍💻 算法厨子 | 健身码农 | 生活实验家 分享机器学习实战、LeetCode心法、云服务编排魔法,兼修减脂餐研发与生活实验。拒绝枯燥理论,只讲亲身验证的干货。你的每个建议都是我下一篇内容的灵感燃料。一起在代码与生活间优雅切换!🚀 1067

HMC7044调试指南与FPGA开发

最后,我们介绍了在FPGA开发中使用HMC7044的几个常见应用场景,包括时钟分配、时钟同步、高精度时钟生成和时钟域交叉。根据您的应用需求,您可以选择不同的时钟分配方案,例如使用PLL生成特定频率的时钟信号,或者通过分频器生成较低频率的时钟信号。HMC7044可以提供精确的时钟同步功能,确保各个FPGA板之间的时钟信号保持一致,从而实现可靠的数据传输和协同操作。HMC7044可以实现时钟域之间的交叉,通过生成和分配不同频率的时钟信号,使得不同时钟域的模块能够协同工作。FPGA开发中的HMC7044应用。

CqpFsharp的博客 3619

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

快速上手LangChain(一)

LangChain是一个开源的Python库,它提供了构建基于大模型的AI应用所需的模块和工具。它可以帮助开发者轻松地与大型语言模型(LLM)集成,实现文本生成、问答、翻译、对话等任务。LangChain的出现大大降低了AI应用开发的门槛,使得任何人都可以基于LLM构建自己的创意应用。目前,它提供了 Python 和 JavaScript(确切地说是 TypeScript)的软件包。如果您是一个构建生产级应用的开发者,并且需要一个 灵活、以代码为中心的解决方案,LangChain 是您的最佳选择。

西京刀客 1744

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: 深入浅出 LangChain — 第一章:AI Agent 开发导论
下一篇: 深入浅出 LangChain —— 第三章:模型抽象层
FrontAI
博客等级 码龄1年 61粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值