LangGraph 专为希望构建强大、适应性强的 AI 智能体的开发者而设计。开发者选择 LangGraph 的原因是:

  • 可靠性和可控性。通过审核检查和人工干预审批来指导智能体行为。LangGraph 可为长时间运行的工作流持久化上下文,使您的智能体保持正常运行。
  • 低层级和可扩展性。使用完全描述性的低层级原语构建自定义智能体,不受限制自定义的僵化抽象约束。设计可扩展的多智能体系统,其中每个智能体都为您的用例量身定制特定角色。
  • 一流的流式传输支持。通过逐令牌流式传输和中间步骤流式传输,LangGraph 让用户实时清晰地了解智能体的推理和行动过程。

LangGraph支持两种对于构建对话代理至关重要的内存类型:

  • 短期内存:通过在会话中维护消息历史来跟踪正在进行的对话。
  • 长期内存:在不同会话之间存储用户特定或应用程序级别的数据。

什么是Agent

人类在复杂的模式识别任务中表现卓越,但通常需要借助工具(如书籍、搜索引擎或计算器)来补充先验知识以得出结论。同理,生成式AI模型可通过训练使用工具获取实时信息或建议的实际动作。例如:

  • 模型可利用数据库检索工具获取客户购买历史以生成个性化购物推荐
  • 基于用户查询,模型可通过API调用发送邮件或完成金融交易

为实现此能力,模型需具备:

  1. 外部工具集访问权限
  1. 自主规划与执行任务的推理能力

这种结合推理逻辑与外部信息访问的系统,即构成智能体(Agent)。

智能体的认知架构中有三个基本组件:模型(Model)、工具(Tools)和以及一个提供指令的提示

LLM 在一个循环中运行。在每次迭代中,它会选择一个要调用的工具,提供输入,接收结果(一个观察),并利用该观察来指导下一个动作。循环会一直持续,直到满足停止条件——通常是Agent已经收集到足够的信息来响应用户时。

Agent vs. Workflow(图)

Anthropic将Agent系统划分为两类:

  1. 第一类是workflow。遵循预定义的工作流,编排LLM和工具,固定代码路径。
  1. Agent:此类Agent被定义为完全自主的系统,这些系统在较长时间内独立运行,可以动态地指导自身流程和工具使用的系统。通过自身的推理、规划能力,自主控制,完成任务。

注意:在LangGraph中,一切都是图,Agent是图中的一个节点。使用 create_react_agent 创建一个Agent,并且也得到了一个图。

以下代码片段展示了如何使用 create_react_agent 创建上述Agent

Python
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI

model = ChatOpenAI("xxx")

def tool() -> None:
    """Testing tool."""
    ...

agent = create_react_agent(
    model,
    tools=[tool],
)

agent.get_graph().draw_mermaid_png()

1LangGraph本地服务

LangGraph CLI 是一个多平台命令行工具,用于在本地构建和运行 LangGraph API 服务器。生成的服务器包含您的图的所有运行、线程、助手等的 API 端点,以及运行您的代理所需的其他服务,包括用于检查点和存储的托管数据库。

安装和使用步骤

1.1、创建Python虚拟环境

虚拟环境的安装步骤

  1. 安装好python解释器:  Python >= 3.11 is required.
  1. 安装虚拟环境库,在cmd中输入:

Plain Text
pip install virtualenv

  1. 创建虚拟环境,在cmd中切换到需要创建虚拟环境的目录下,执行:

Plain Text
virtualenv env_name

  1. 激活虚拟环境,在cmd中进入到 第三步创建的 env_name/Scripts 目录下,执行:

Plain Text
activate

   执行成功后,在cmd中,当前输入行前面会有 (env_name) 的前缀

   在当前状态下,使用 pip 就是在虚拟环境中安装第三方库了

5. 退出虚拟环境,cmd中输入:

Plain Text
deactivate

1.2、安装LangGraph CLI

Python
# Python >= 3.11 is required.

pip install --upgrade "langgraph-cli[inmem]"

1.3、创建 LangGraph 应用

new-langgraph-project-python 模板new-langgraph-project-js 模板创建一个新应用。此模板演示了一个单节点应用,您可以根据自己的逻辑进行扩展。

注意:如果您使用 langgraph new 命令时未指定模板,将显示一个交互式菜单,允许您从可用模板列表中进行选择。

Python
langgraph new path/to/your/app --template new-langgraph-project-python

1.4、安装项目依赖

在您的新 LangGraph 应用的根目录下,以编辑模式安装依赖项,以便服务器使用您的本地更改。

LangGraph 中,pyproject.toml  代传统的 setup.pyrequirements.txt.可能包含以下扩展配置:

  • 依赖分组​:如 [project.optional-dependencies] 定义 dev(开发工具)和 test(测试框架)依赖。
  • 动态版本控制​:通过 requires-python = ">=3.9" 指定 Python 版本兼容性。
  • CI/CD 集成​:通过 [tool.*] 配置与 GitHub Actions 或 GitLab CI 的交互

Python
cd path/to/your/app
pip install -e .

1.5、修改graph.py的代码

Python
# 本地私有化部署的大模型
llm = ChatOpenAI(
    model='qwen3-8b',
    temperature=0.8,
    api_key='xx',
    base_url="http://localhost:6006/v1",
    extra_body={'chat_template_kwargs': {'enable_thinking': False}},
)

def get_weather(city: str) -> str:
    """Get weather for a given city."""
    return f"It's always sunny in {city}!"

graph = create_react_agent(
    llm,
    tools=[get_weather],
    prompt="You are a helpful assistant"
)

1.6、启动LangGraph服务器

langgraph dev 命令以内存模式启动 LangGraph 服务器。此模式适用于开发和测试目的。对于生产用途,请部署 LangGraph 服务器并使其能够访问持久存储后端。

Python
命令: langgraph dev

选项

点击图片可查看完整电子表格

1.7、测试和访问agentAPI

  1. LangGraph Studio 是一个专用 UI,您可以将其连接到 LangGraph API 服务器,以在本地可视化、交互和调试您的应用。通过访问 langgraph dev 命令输出中提供的 URL,在 LangGraph Studio 中测试您的Agent和图。
  1. PythonSDK测试

Shell
pip install langgraph-sdk
 

异步测试:

Python
from langgraph_sdk import get_client
import asyncio

client = get_client(url="http://localhost:2024")

async def main():
    async for chunk in client.runs.stream(
        None,  # Threadless run
        "agent", # Name of assistant. Defined in langgraph.json.
        input={
        "messages": [{
            "role": "human",
            "content": "What is LangGraph?",
            }],
        },
    ):
        print(f"Receiving new event of type: {chunk.event}...")
        print(chunk.data)
        print("\n\n")

asyncio.run(main())

同步测试:

Python

from langgraph_sdk import get_sync_client

client = get_sync_client(url="http://localhost:2024")

for chunk in client.runs.stream(
    None,  # Threadless run
    "agent", # Name of assistant. Defined in langgraph.json.
    input={
        "messages": [{
            "role": "human",
            "content": "What is LangGraph?",
        }],
    },
    stream_mode="messages-tuple",
):
    print(f"Receiving new event of type: {chunk.event}...")
    print(chunk.data)
    print("\n\n")

  1. JavaScript SDK测试

安装 LangGraph JS SDK

Shell
npm install @langchain/langgraph-sdk

向LangGraph服务区发送消息:

JavaScript

const { Client } = await import("@langchain/langgraph-sdk");

// only set the apiUrl if you changed the default port when calling langgraph dev
const client = new Client({ apiUrl: "http://localhost:2024"});

const streamResponse = client.runs.stream(
    null, // Threadless run
    "agent", // Assistant ID
    {
        input: {
            "messages": [
                { "role": "user", "content": "What is LangGraph?"}
            ]
        },
        streamMode: "messages-tuple",
    }
);

for await (const chunk of streamResponse) {
    console.log(`Receiving new event of type: ${chunk.event}...`);
    console.log(JSON.stringify(chunk.data));
    console.log("\n\n");
}

  1. REST API测试:

Shell

curl -s --request POST \
    --url "http://localhost:2024/runs/stream" \
    --header 'Content-Type: application/json' \
    --data "{
        \"assistant_id\": \"agent\",
        \"input\": {
            \"messages\": [
                {
                    \"role\": \"human\",
                    \"content\": \"What is LangGraph?\"
                }
            ]
        },
        \"stream_mode\": \"messages-tuple\"
    }"

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐