跳到主要内容
LangChain v1 是一个专注、生产就绪的构建代理的基础。 我们围绕三项核心改进精简了框架 要升级,
npm install langchain @langchain/core
有关更改的完整列表,请参阅迁移指南

createAgent

createAgent 是 LangChain 1.0 中构建代理的标准方式。它提供了比 LangGraph 导出的预构建 createReactAgent 更简单的接口,同时通过使用中间件提供了更大的定制潜力。
import { createAgent } from "langchain";

const agent = createAgent({
  model: "claude-sonnet-4-5-20250929",
  tools: [getWeather],
  systemPrompt: "You are a helpful assistant.",
});

const result = await agent.invoke({
  messages: [
    { role: "user", content: "What is the weather in Tokyo?" },
  ],
});

console.log(result.content);
在底层,createAgent 构建在基本的代理循环之上——调用模型,让它选择要执行的工具,然后在它不再调用工具时完成
Core agent loop diagram
有关更多信息,请参阅代理

中间件

中间件是 createAgent 的定义性功能。它使 createAgent 具有高度可定制性,提高了您可以构建的上限。 优秀的代理需要上下文工程:在正确的时间向模型提供正确的信息。中间件通过可组合的抽象帮助您控制动态提示、对话摘要、选择性工具访问、状态管理和防护机制。

预构建中间件

LangChain 为常见模式提供了一些预构建中间件,包括
  • summarizationMiddleware:当对话历史过长时,将其浓缩
  • humanInTheLoopMiddleware:对敏感工具调用需要批准
  • piiRedactionMiddleware:在发送给模型之前编辑敏感信息
import {
  createAgent,
  summarizationMiddleware,
  humanInTheLoopMiddleware,
  piiRedactionMiddleware,
} from "langchain";

const agent = createAgent({
  model: "claude-sonnet-4-5-20250929",
  tools: [readEmail, sendEmail],
  middleware: [
    piiRedactionMiddleware({ patterns: ["email", "phone", "ssn"] }),
    summarizationMiddleware({
      model: "claude-sonnet-4-5-20250929",
      maxTokensBeforeSummary: 500,
    }),
    humanInTheLoopMiddleware({
      interruptOn: {
        sendEmail: {
          allowedDecisions: ["approve", "edit", "reject"],
        },
      },
    }),
  ] as const,
});

自定义中间件

您还可以构建自定义中间件以满足您的特定需求。 通过使用 createMiddleware 函数实现以下任何钩子来构建自定义中间件:
钩子何时运行用例
beforeAgent调用代理之前加载内存,验证输入
beforeModel每次 LLM 调用之前更新提示,修剪消息
wrapModelCall每次 LLM 调用前后拦截和修改请求/响应
wrapToolCall每次工具调用前后拦截和修改工具执行
afterModel每次 LLM 响应之后验证输出,应用防护机制
afterAgent代理完成后保存结果,清理
Middleware flow diagram
自定义中间件示例
import { createMiddleware } from "langchain";

const contextSchema = z.object({
  userExpertise: z.enum(["beginner", "expert"]).default("beginner"),
})

const expertiseBasedToolMiddleware = createMiddleware({
  wrapModelCall: async (request, handler) => {
    const userLevel = request.runtime.context.userExpertise;
    if (userLevel === "expert") {
      const tools = [advancedSearch, dataAnalysis];
      return handler(
        request.replace("openai:gpt-5", tools)
      );
    }
    const tools = [simpleSearch, basicCalculator];
    return handler(
      request.replace("openai:gpt-5-nano", tools)
    );
  },
});

const agent = createAgent({
  model: "claude-sonnet-4-5-20250929",
  tools: [simpleSearch, advancedSearch, basicCalculator, dataAnalysis],
  middleware: [expertiseBasedToolMiddleware],
  contextSchema,
});
有关更多信息,请参阅完整的中间件指南

基于 LangGraph 构建

由于 createAgent 构建在 LangGraph 之上,您可以通过以下方式自动获得对长期运行和可靠代理的内置支持

持久化

通过内置检查点,对话会自动跨会话持久化

流式处理

实时流式传输令牌、工具调用和推理轨迹

人工干预

在敏感操作之前暂停代理执行以进行人工批准

时间旅行

将对话回溯到任何时间点并探索备选路径和提示
您无需学习 LangGraph 即可使用这些功能——它们开箱即用。

结构化输出

createAgent 改进了结构化输出生成
  • 主循环集成:结构化输出现在在主循环中生成,而不需要额外的 LLM 调用
  • 结构化输出策略:模型可以在调用工具或使用提供商侧的结构化输出生成之间进行选择
  • 成本降低:消除了额外 LLM 调用带来的额外开销
import { createAgent } from "langchain";
import * as z from "zod";

const weatherSchema = z.object({
  temperature: z.number(),
  condition: z.string(),
});

const agent = createAgent({
  model: "gpt-4o-mini",
  tools: [getWeather],
  responseFormat: weatherSchema,
});

const result = await agent.invoke({
  messages: [
    { role: "user", content: "What is the weather in Tokyo?" },
  ],
});

console.log(result.structuredResponse);
错误处理:通过 ToolStrategyhandleErrors 参数控制错误处理
  • 解析错误:模型生成的数据与所需结构不匹配
  • 多次工具调用:模型为结构化输出模式生成 2 个以上的工具调用

标准内容块

大多数包都提供了 1.0 版本。目前只有以下包支持新的内容块
  • LangChain
  • @langchain/core
  • @langchain/anthropic
  • @langchain/openai
计划提供对内容块的更广泛支持。

优势

  • 与提供商无关:无论提供商是谁,都可以使用相同的 API 访问推理轨迹、引用、内置工具(网络搜索、代码解释器等)以及其他功能
  • 类型安全:所有内容块类型的完整类型提示
  • 向后兼容:标准内容可以延迟加载,因此没有相关的重大更改
有关更多信息,请参阅我们的内容块指南

简化包

LangChain v1 精简了 langchain 包命名空间,以专注于代理的基本构建块。该包只公开最有用和最相关的功能: 为了方便起见,其中大部分是从 @langchain/core 重新导出的,这为您提供了构建代理的重点 API 界面。

@langchain/classic

旧功能已移至 @langchain/classic,以保持核心包精简和专注。

@langchain/classic 中有什么

如果您使用任何此功能,请安装 @langchain/classic
npm install @langchain/classic
然后更新您的导入
import { ... } from "langchain"; 
import { ... } from "@langchain/classic"; 

import { ... } from "langchain/chains"; 
import { ... } from "@langchain/classic/chains"; 

报告问题

请使用 'v1' 标签GitHub 上报告 1.0 版本中发现的任何问题。

附加资源

另请参见


以编程方式连接这些文档到 Claude、VSCode 等,通过 MCP 获取实时答案。
© . This site is unofficial and not affiliated with LangChain, Inc.