Skip to content

LangGraph Cloud 快速开始

在本教程中,您将构建和部署一个简单的聊天机器人代理,该代理可以在互联网上查找信息。您将使用 LangGraph CloudLangGraph Studio 进行可视化和测试,并使用 LangGraph SDK 与部署的代理进行交互。

如果您想学习如何从头开始构建这样的代理,请查看 LangGraph 快速入门教程

设置要求

本教程将使用:

  • Anthropic 作为 LLM - 在 这里 注册并获取 API 密钥。
  • Tavily 作为搜索引擎 - 在 这里 注册并获取 API 密钥。
  • LangSmith 作为托管 - 在 这里 注册并获取 API 密钥。

创建和配置您的应用程序

首先,让我们创建 LangGraph 应用程序所需的所有文件。

  1. 创建应用程序目录和文件

    创建一个新应用程序 my-app,并使用以下文件结构:

    mkdir my-app
    
    my-app/
    |-- agent.py            # 您的 LangGraph 代理代码
    |-- requirements.txt    # 您的图所需的 Python 包
    |-- langgraph.json      # LangGraph 配置文件
    |-- .env                # 含 API 密钥的环境文件
    
    my-app/
    |-- agent.ts            # 您的 LangGraph 代理代码
    |-- package.json        # 您的图所需的 Javascript 包
    |-- langgraph.json      # LangGraph 配置文件
    |-- .env                # 含 API 密钥的环境文件
    
  2. 定义您的图

    agent.py 文件应包含图的代码。

    agent.ts 文件应包含图的代码。

    以下代码示例是一个简单的聊天机器人代理(类似于 先前教程 中的代理)。特别是,它使用 create_react_agent,这是一个预构建的 ReAct 风格代理。

    agent 文件需要有一个带有 CompiledGraph 的变量(在这种情况下是 graph 变量)。

    # agent.py
    from langchain_anthropic import ChatAnthropic
    from langchain_community.tools.tavily_search import TavilySearchResults
    from langgraph.prebuilt import create_react_agent
    
    model = ChatAnthropic(model="claude-3-5-sonnet-20240620")
    
    tools = [TavilySearchResults(max_results=2)]
    
    # 编译图
    graph = create_react_agent(model, tools)
    
    // agent.ts
    import { ChatAnthropic } from "@langchain/anthropic";
    import { TavilySearchResults } from "@langchain/community/tools/tavily_search";
    import { createReactAgent } from "@langchain/langgraph/prebuilt";
    
    const model = new ChatAnthropic({
      model: "claude-3-5-sonnet-20240620",
    });
    
    const tools = [
      new TavilySearchResults({ maxResults: 3, }),
    ];
    
    // 编译图
    export const graph = createReactAgent({ llm: model, tools });
    
  3. 指定依赖关系

    您应该将图的依赖关系添加到 requirements.txt 中。

    您应该将图的依赖关系添加到 package.json 中。

    在这种情况下,我们只需要四个包以使图运行:

    langgraph
    langchain_anthropic
    tavily-python
    langchain_community
    
    {
      "name": "my-app",
      "packageManager": "yarn@1.22.22",
      "dependencies": {
        "@langchain/community": "^0.3.11",
        "@langchain/core": "^0.3.16",
        "@langchain/langgraph": "0.2.18",
        "@langchain/anthropic": "^0.3.7"
      }
    }
    
  4. 创建 LangGraph 配置文件

    langgraph.json 文件是一个配置文件,描述您要部署的图。在这种情况下,我们只有一个图:来自 agent.py / agent.ts 的编译 graph 对象。

    {
      "dependencies": ["."],
      "graphs": {
        "agent": "./agent.py:graph"
      },
      "env": ".env"
    }
    
    {
      "node_version": "20",
      "dockerfile_lines": [],
      "dependencies": ["."],
      "graphs": {
        "agent": "./src/agent.ts:graph"
      },
      "env": ".env"
    }
    

    了解更多关于 LangGraph CLI 配置文件的信息 请点击这里

  5. 指定环境变量

    .env 文件应该包含运行图所需的任何环境变量。这仅在本地测试时使用,因此如果您不在本地测试,可以跳过这一步。

    Warning

    .env 文件不应与 Github 存储库中的其余源代码一起包含。当使用 LangGraph Cloud 创建部署时,您将能够手动指定环境变量。

    对于此图,我们需要两个环境变量:

    ANTHROPIC_API_KEY=...
    TAVILY_API_KEY=...
    

Tip

了解更多关于不同应用程序结构选项的信息 请点击这里

现在我们已经在本地文件系统上设置了所有内容,准备在本地测试我们的图。

在本地测试应用程序

在使用 LangGraph Cloud 部署之前,您可以在本地启动 LangGraph 服务器 或使用 LangGraph Studio 来测试 LangGraph 应用程序。

使用本地服务器

您可以通过本地运行 LangGraph 服务器 来测试您的应用程序。这对于确保您正确配置了我们的 CLI 配置文件 并可以与您的图进行交互非常有用。

要在本地运行服务器,您需要首先安装 LangGraph CLI:

pip install langgraph-cli

然后您可以在本地测试我们的 API 服务器。为了在本地运行服务器,您需要将 LANGSMITH_API_KEY 添加到 .env 文件中。

langgraph up

这将在本地启动 LangGraph API 服务器。如果成功运行,您应该会看到类似以下内容:

Ready!
- API: http://localhost:8123

首先,让我们通过调用 /ok 端点来验证服务器是否正常运行:

curl --request GET --url http://localhost:8123/ok

输出:

{"ok": "true"}

现在我们准备使用真实输入来测试应用程序!

curl --request POST \
    --url http://localhost:8123/runs/stream \
    --header 'Content-Type: application/json' \
    --data '{
    "assistant_id": "agent",
    "input": {
        "messages": [
            {
                "role": "user",
                "content": "纽约的天气怎么样?"
            }
        ]
    },
    "stream_mode": "updates"
}'

输出:

...

data: {
  "agent": {
    "messages": [
      {
        "content": "Tavily 的搜索结果提供了纽约市当前的天气情况,包括温度、风速、降水量、湿度和云层覆盖。根据结果,截至 2024 年 10 月 30 日下午 3:00,纽约的天气是阴天,温度约为 66°F (19°C),西南方向轻风约 8 mph (13 km/h),湿度为 66%。\n\n因此,总结一下,纽约当前的天气是阴天,温度在 60 多华氏度之间,轻风,基于搜索结果。如果您需要其他详细信息,请让我知道!",
        "type": "ai",
        ...
      }
    ]
  }
}

您可以看到我们的代理用最新的搜索结果进行了响应!

使用 LangGraph Studio Desktop

您还可以使用 LangGraph Studio 在本地测试您的应用程序。LangGraph Studio 提供了一种新的方式来开发 LLM 应用程序,提供一个专业的代理 IDE,使您能够可视化、交互和调试复杂的代理应用程序。

借助可视化图形和编辑状态的能力,您可以更好地了解代理工作流程并更快地迭代。LangGraph Studio 与 LangSmith 集成,使您可以与团队成员协作以调试故障模式。

LangGraph Studio 可作为 桌面应用程序 提供给 MacOS 用户。安装应用后,您可以选择 my-app 目录,这将自动在本地启动服务器并在 UI 中加载图。

要与 LangGraph Studio 中的聊天机器人代理互动,您可以在 输入 部分添加新消息并按 提交

LangGraph Studio Desktop

部署到 LangGraph Cloud

一旦您在本地测试了图并验证它按预期工作,您可以将其部署到 LangGraph Cloud。

首先,您需要将 my-app 目录变成一个 GitHub 仓库并 推送到 GitHub。 一旦您创建了包含已编译图形的 Python 文件的 GitHub 存储库以及带有配置的 langgraph.json,您可以前往 LangSmith,点击左侧导航栏底部的图形图标(LangGraph Cloud)。这将打开 LangGraph 部署页面。在此页面上,点击右上角的 + 新部署 按钮。

Langsmith 工作流程

如果您之前没有部署到 LangGraph Cloud: 会出现一个按钮,显示 从 GitHub 导入。您需要按照此流程将 LangGraph Cloud 连接到 GitHub。

一旦您设置好 GitHub 连接: 新部署页面将如下所示:

部署页面在填写前

要部署您的应用程序,您应该执行以下步骤:

  1. 从选择器中选择您的 GitHub 用户名或组织
  2. 在搜索框中搜索要部署的存储库并选择它
  3. 为您的部署选择一个名称
  4. Git Branch 字段中,您可以指定要部署的代码分支,或确切的提交 SHA。
  5. LangGraph API 配置文件 字段中,输入 langgraph.json 文件的路径(在此情况下,即为 langgraph.json
  6. 如果您的应用程序需要环境变量,请在 环境变量 部分添加这些变量。它们将会传播到基础服务器,以便您的代码可以访问它们。在这种情况下,我们需要 ANTHROPIC_API_KEYTAVILY_API_KEY

点击 提交,您的应用程序将开始部署!

在您的部署完成后,您的部署页面应如下所示:

已部署页面

与您的部署互动

使用 LangGraph Studio(云)

在您的应用程序的部署页面上,您应该在右上角看到一个按钮,上面写着 LangGraph Studio。点击此按钮将带您进入 LangGraph Studio 的网页版本。这是您在 本地测试应用 时所交互的相同用户界面,但这次它使用的是您在 LangGraph Cloud 部署中的服务器。

运行中的 Studio UI

使用 LangGraph SDK

您还可以通过编程方式与已部署的 LangGraph 应用程序进行交互,使用 LangGraph SDK

首先,请确保您已安装 SDK:

pip install langgraph_sdk
yarn add @langchain/langgraph-sdk

在使用之前,您需要获取您的 LangGraph 部署的 URL。您可以在 Deployment 视图中找到它。点击 URL 将其复制到剪贴板。

您还需要确保已正确设置您的 API 密钥,以便您可以与 LangGraph Cloud 进行身份验证。

export LANGSMITH_API_KEY=...

使用 SDK 时的第一步是设置我们的客户端,访问我们的助手,并创建一个线程以执行运行:

from langgraph_sdk import get_client

client = get_client(url=<DEPLOYMENT_URL>)
# 获取默认助手
assistants = await client.assistants.search(metadata={"created_by": "system"})
assistant = assistants[0]
# 创建线程
thread = await client.threads.create()
print(thread)
import { Client } from "@langchain/langgraph-sdk";

const client = new Client({ apiUrl: <DEPLOYMENT_URL> });
// 获取默认助手
const assistants = await client.assistants.search({ metadata: {"created_by": "system"} })
const assistant = assistants[0];
// 创建线程
const thread = await client.threads.create();
console.log(thread)
curl --request POST \
    --url <DEPLOYMENT_URL>/assistants/search \
    --header 'Content-Type: application/json' \
    --data '{
        "limit": 10,
        "offset": 0,
        "metadata": {"created_by": "system"}
    }' &&
curl --request POST \
    --url <DEPLOYMENT_URL>/threads \
    --header 'Content-Type: application/json' \
    --data '{}'

然后我们可以在该线程上执行运行:

input = {
    "messages": [{"role": "user", "content": "纽约的天气如何?"}]
}

async for chunk in client.runs.stream(
    thread["thread_id"],
    assistant["assistant_id"],
    input=input,
    stream_mode="updates",
):
    if chunk.data:
        print(chunk.data)
const input = { "messages": [{ "role": "user", "content": "纽约的天气如何?"}] };

const streamResponse = client.runs.stream(
  thread["thread_id"],
  assistant["assistant_id"],
  {
    input,
    streamMode: "updates"
  }
);
for await (const chunk of streamResponse) {
  if (chunk.data) {
    console.log(chunk.data);
  }
}
curl --request POST \
  --url <DEPLOYMENT_URL>/threads/<THREAD_ID>/runs/stream \
  --header 'Content-Type: application/json' \
  --data '{
    "assistant_id": <ASSISTANT_ID>,
    "input": {
    "messages": [
        {
            "role": "user",
            "content": "纽约的天气如何?"
        }
      ]
    },
    "stream_mode": "updates"
  }'

输出:

...

data: {
  "agent": {
    "messages": [
      {
        "content": "Tavily 的搜索结果提供了纽约市当前的天气情况,包括气温、风速、降水量、湿度和云层覆盖情况。根据结果,截至 2024 年 10 月 30 日下午 3:00,纽约市天阴,气温大约为 66°F(19°C),西南方向的微风约为每小时 8 英里(13 公里/小时),湿度为 66%。\n\n因此,总结一下,纽约市当前天气阴云密布,气温在中等的 60 华氏度,微风,基于搜索结果。如果您需要其他详细信息,请告诉我!",
        "type": "ai",
        ...
      }
    ]
  }
}

下一步

恭喜您!如果您完成了本教程,您已经在迈向成为 LangGraph Cloud 专家的道路上走出了重要一步。以下是一些其他资源,以帮助您在成为专家的道路上继续前进:

优云智算