跳到主要内容

文档索引

在以下地址获取完整的文档索引:https://docs.langchain.org.cn/llms.txt

在进一步探索之前,请使用此文件发现所有可用页面。

本快速入门指南将向您展示如何在短短几分钟内创建一个功能齐全的 AI 智能体。
正在使用 AI 编程助手?

安装依赖项

安装以下软件包以继续学习
npm install deepagents langchain @langchain/core
# Requires Node.js 20+

设置 API 密钥

任何受支持的模型提供商(例如 Google Gemini 或 OpenAI)处获取 API 密钥。 设置 API 密钥,例如:
export OPENAI_API_KEY="your-api-key"

构建一个基础智能体

首先创建一个简单的智能体,它可以回答问题并调用工具。此示例中的智能体使用所选的语言模型、一个基础天气函数作为工具,以及一个简单的提示词来引导其行为。
import { createAgent, tool } from "langchain";
import * as z from "zod";

const getWeather = tool(
  (input) => `It's always sunny in ${input.city}!`,
  {
    name: "get_weather",
    description: "Get the weather for a given city",
    schema: z.object({
      city: z.string().describe("The city to get the weather for"),
    }),
  }
);

const agent = createAgent({
  model: "gpt-5.4",
  tools: [getWeather],
});

console.log(
  await agent.invoke({
    messages: [{ role: "user", content: "What's the weather in San Francisco?" }],
  })
);
当您运行代码并提示智能体告知旧金山的天气时,智能体会使用该输入及其可用上下文。智能体会理解您正在询问旧金山的天气,因此会使用提供的城市名称调用天气工具。
您可以通过更改代码中的模型名称并设置相应的 API 密钥来使用任何受支持的模型

构建一个实际应用的智能体

在接下来的示例中,您将构建一个能够回答关于文本文件问题的研究智能体。在此过程中,您将探索以下概念:
  1. 详细的系统提示词:用于实现更好的智能体行为
  2. 创建工具:与外部数据进行集成
  3. 模型配置:用于获得一致的响应
  4. 对话记忆:用于实现类似聊天的交互
  5. Deep Agents:内置功能
  6. 测试:测试您的智能体
1

定义系统提示词

系统提示词定义了智能体的角色和行为。请务必使其具有针对性和可操作性。
const SYSTEM_PROMPT = `You are a literary data assistant.

## Capabilities

- \`fetch_text_from_url\`: loads document text from a URL into the conversation.
Do not guess line counts or positions—ground them in tool results from the saved file.`;
2

创建工具

工具允许模型通过调用您定义的函数与外部系统进行交互。工具可以依赖运行时上下文,并与智能体记忆进行交互。此示例使用一个工具来从给定的 URL 加载文档:
import { tool } from "@langchain/core/tools";
import { createAgent, initChatModel } from "langchain";
import { z } from "zod";

const fetchTextFromUrl = tool(
    async ({ url }: { url: string }): Promise<string> => {
        const controller = new AbortController();
        const timeoutId = setTimeout(() => controller.abort(), 120_000);
        try {
            const resp = await fetch(url, {
                headers: {
                "User-Agent": "Mozilla/5.0 (compatible; quickstart-research/1.0)",
                },
                signal: controller.signal,
            });
            if (!resp.ok) {
                return `Fetch failed: HTTP ${resp.status} ${resp.statusText}`;
            }
            return await resp.text();
        } catch (e) {
            const msg = e instanceof Error ? e.message : String(e);
            return `Fetch failed: ${msg}`;
        } finally {
            clearTimeout(timeoutId);
        }
    },
    {
        name: "fetch_text_from_url",
        description: "Fetch the document from a URL.",
        schema: z.object({ url: z.string().url() }),
    },
);
Zod 是一个用于验证和解析预定义模式的库。您可以使用它来为工具定义输入模式,以确保智能体仅使用正确的参数调用工具。或者,您可以将 schema 属性定义为 JSON schema 对象。请记住,JSON schema 不会在运行时进行验证。
import { tool } from "langchain";

const fetchTextFromUrl = tool(
async ({ url }: { url: string }): Promise<string> => {
    const controller = new AbortController();
    const timeoutId = setTimeout(() => controller.abort(), 120_000);
    try {
    const resp = await fetch(url, {
        headers: {
        "User-Agent": "Mozilla/5.0 (compatible; quickstart-research/1.0)",
        },
        signal: controller.signal,
    });
    if (!resp.ok) {
        return `Fetch failed: HTTP ${resp.status} ${resp.statusText}`;
    }
    return await resp.text();
    } catch (e) {
    const msg = e instanceof Error ? e.message : String(e);
    return `Fetch failed: ${msg}`;
    } finally {
    clearTimeout(timeoutId);
    }
},
{
    name: "fetch_text_from_url",
    description: "Fetch the document from a URL.",
    schema: {
    type: "object",
    properties: {
        url: {
        type: "string",
        description: "The URL of the document to fetch.",
        format: "uri",
        },
    },
    required: ["url"],
    },
},
);
3

配置您的模型

使用适合您用例的参数设置您的语言模型。例如:
import { initChatModel } from "langchain";

const model = await initChatModel("gpt-5.4", {
  temperature: 0.5,
  timeout: 300,
  maxTokens: 25000,
});
根据所选的模型和提供商,初始化参数可能会有所不同;请参阅其参考页面了解详情。
4

添加记忆

为您的智能体添加记忆,以在交互过程中保持状态。这使智能体能够记住之前的对话和上下文。
import { MemorySaver } from "@langchain/langgraph";

const checkpointer = new MemorySaver();
在生产环境中,请使用将消息历史记录保存到数据库的持久化检查点机制。有关更多详细信息,请参阅添加和管理记忆
5

创建并运行智能体

现在,将智能体的所有组件组装起来并运行它。有两种不同的框架用于创建智能体:LangChain 智能体和 Deep Agents。LangChain 和 Deep Agents 都为您提供了对工具、记忆等的精细控制。两者的主要区别在于,Deep Agents 预置了一系列常用的实用功能,例如规划、文件系统工具和子智能体。当您需要以最少的设置获得最大的功能时,请使用 Deep Agents;当您需要精细控制时,请选择 LangChain 智能体。
由于代码使用《了不起的盖茨比》的全文调用模型,因此会消耗大量的 token。您可以在下一步中查看示例输出。
让我们尝试两者
async function main() {
    const agent = createAgent({
        model,
        tools: [fetchTextFromUrl],
        systemPrompt: SYSTEM_PROMPT,
        checkpointer,
    });

    const deepAgent = createDeepAgent({
        model,
        tools: [fetchTextFromUrl],
        systemPrompt: SYSTEM_PROMPT,
        checkpointer,
    });

    const content = `Project Gutenberg hosts a full plain-text copy of F. Scott Fitzgerald's The Great Gatsby.
    URL: https://www.gutenberg.org/files/64317/64317-0.txt

    Answer as much as you can:

    1) How many lines in the complete Gutenberg file contain the substring \`Gatsby\` (count lines, not occurrences within a line, each line ends with a line break).
    2) The 1-based line number of the first line in the file that contains \`Daisy\`.
    3) A two-sentence neutral synopsis.

    Do your best on (1) and (2). If at any point you realize you cannot **verify** an exact answer with
    your available tools and reasoning, do not fabricate numbers: use \`null\` for that field and spell out
    the limitation in \`how_you_computed_counts\`. If you encounter any errors please report what the error was and what the error message was.`;

    const agentResult = await agent.invoke(
        { messages: [{ role: "user", content }] },
        { configurable: { thread_id: "great-gatsby-lc" } },
    );
    const deepAgentResult = await deepAgent.invoke(
        { messages: [{ role: "user", content }] },
        { configurable: { thread_id: "great-gatsby-da" } },
    );

    const agentMessages = agentResult.messages;
    const deepMessages = deepAgentResult.messages;
    console.log(agentMessages[agentMessages.length - 1]!.content_blocks);
    console.log("\n");
    console.log(deepMessages[deepMessages.length - 1]!.content_blocks);
}

main().catch((err) => {
    console.error(err);
    process.exitCode = 1;
});
6

查看结果

结果会根据模型和执行情况而有所不同。
**1) Number of lines containing `Gatsby`:** `null`

**2) First line containing `Daisy`:** `null`

**3) Synopsis:**
The Great Gatsby follows the mysterious millionaire Jay Gatsby and his obsession with reuniting with his former lover, Daisy Buchanan, as narrated by his neighbor Nick Carraway. Set against the backdrop of the Roaring Twenties on Long Island, the novel explores themes of wealth, class, and the elusive nature of the American Dream.

**how_you_computed_counts:**
I successfully fetched the full text of the eBook using the `fetch_text_from_url` tool. However, because I do not have access to a code execution environment (like Python) or text-processing tools (like `grep`), I cannot deterministically split the text by line breaks, iterate through the thousands of lines, and verify the exact line numbers or match counts. LLMs cannot reliably perform exact line-counting or indexing over massive texts within their context window without external computational tools. As instructed, rather than fabricating or guessing a number, I have output `null` for the exact counts and positions.
如果您查看两个标签页上的输出,会发现 LangChain 智能体提供了答案,但这些答案是估算的。该智能体缺乏回答此问题的工具。您可能还会收到提示词过长的错误。另一方面,Deep Agent 可以:
  1. 规划其方法:使用内置的 write_todos 工具来分解研究任务。
  2. 加载文件:通过调用 fetch_text_from_url 工具来收集信息。
  3. 管理上下文:通过使用文件系统工具(grepread_file)。
  4. 生成子智能体:根据需要将复杂的子任务委派给专门的子智能体。
对于 LangChain 智能体,您必须实现更多功能才能获得相似的服务水平,并可以根据需要随时对其进行自定义。

追踪智能体调用

您使用 LangChain 构建的绝大多数有趣应用都会多次调用 LLM。随着这些应用变得越来越复杂,能够检查智能体内部到底发生了什么变得非常重要。实现这一点的最佳方式是使用 LangSmith 注册一个 LangSmith 账户并设置以下内容以开始记录跟踪:
export LANGSMITH_TRACING="true"
export LANGSMITH_API_KEY="..."
设置完成后,再次运行您的脚本,然后在 LangSmith 上检查智能体调用期间发生了什么。
要了解有关使用 LangSmith 追踪智能体的更多信息,请参阅 LangSmith 文档

后续步骤

您现在拥有的智能体可以:
  • 理解上下文并记住对话
  • 智能地使用工具
  • 提供结构化响应,格式保持一致
  • 通过上下文处理用户特定信息
  • 在交互过程中保持对话状态
  • 规划、研究和综合(仅限 Deep Agents)
继续学习:
© . This site is unofficial and not affiliated with LangChain, Inc.