Skip to content

无状态运行

大多数情况下,当你运行图时,会提供一个 thread_id 给客户端,以便通过 LangGraph Cloud 实现的持久化状态来跟踪之前的运行情况。然而,如果你不需要持久化这些运行记录,则可以不使用内置的持久化状态,并创建无状态运行。

设置

首先,让我们设置我们的客户端:

from langgraph_sdk import get_client

client = get_client(url=<DEPLOYMENT_URL>)
# 使用名为"agent"的图部署
assistant_id = "agent"
# 创建线程
thread = await client.threads.create()
import { Client } from "@langchain/langgraph-sdk";

const client = new Client({ apiUrl: <DEPLOYMENT_URL> });
// 使用名为"agent"的图部署
const assistantId = "agent";
// 创建线程
const thread = await client.threads.create();
curl --request POST \
    --url <DEPLOYMENT_URL>/assistants/search \
    --header 'Content-Type: application/json' \
    --data '{
        "limit": 10,
        "offset": 0
    }' | jq -c 'map(select(.config == null or .config == {})) | .[0].graph_id' && \
curl --request POST \
    --url <DEPLOYMENT_URL>/threads \
    --header 'Content-Type: application/json' \
    --data '{}'

无状态流式处理

我们可以以几乎相同的方式流式传输无状态运行的结果,就像我们从带有状态属性的运行中流式传输结果一样,但是我们不再向thread_id参数传递值,而是传递None

input = {
    "messages": [
        {"role": "user", "content": "你好!我的名字叫巴加图尔,我今年26岁。"}
    ]
}

async for chunk in client.runs.stream(
    # 不传递thread_id参数,流式处理将是无状态的
    None,
    assistant_id,
    input=input,
    stream_mode="updates",
):
    if chunk.data and "run_id" not in chunk.data:
        print(chunk.data)
let input = {
  messages: [
    { role: "user", content: "你好!我的名字叫巴加图尔,我今年26岁。" }
  ]
};

const streamResponse = client.runs.stream(
  // 不传递thread_id参数,流式处理将是无状态的
  null,
  assistantId,
  {
    input,
    streamMode: "updates"
  }
);
for await (const chunk of streamResponse) {
  if (chunk.data && !("run_id" in chunk.data)) {
    console.log(chunk.data);
  }
}
curl --request POST \
    --url <DEPLOYMENT_URL>/runs/stream \
    --header 'Content-Type: application/json' \
    --data "{
        \"assistant_id\": \"agent\",
        \"input\": {\"messages\": [{\"role\": \"human\", \"content\": \"你好!我的名字叫巴加图尔,我今年26岁。\"}]},
        \"stream_mode\": [
            \"updates\"
        ]
    }" | jq -c 'select(.data and (.data | has("run_id") | not)) | .data'

输出:

{'agent': {'messages': [{'content': "你好巴加图尔!很高兴见到你。感谢您介绍自己并分享您的年龄。您是否有什么具体的问题或话题想要讨论?我很乐意帮助解答您的问题或探讨您感兴趣的议题。", 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'ai', 'name': None, 'id': 'run-489ec573-1645-4ce2-a3b8-91b391d50a71', 'example': False, 'tool_calls': [], 'invalid_tool_calls': [], 'usage_metadata': None}]}}

等待无状态结果

除了流式处理之外,您还可以通过使用.wait函数来等待无状态的结果,如下所示:

stateless_run_result = await client.runs.wait(
    None,
    assistant_id,
    input=input,
)
print(stateless_run_result)
let statelessRunResult = await client.runs.wait(
  null,
  assistantId,
  { input: input }
);
console.log(statelessRunResult);
curl --request POST \
    --url <DEPLOYMENT_URL>/runs/wait \
    --header 'Content-Type: application/json' \
    --data '{
        "assistant_id": <ASSISTANT_IDD>,
    }'

输出:

{
    'messages': [
        {
            'content': '你好!我的名字是巴加图尔,我今年26岁。',
            'additional_kwargs': {},
            'response_metadata': {},
            'type': 'human',
            'name': None,
            'id': '5e088543-62c2-43de-9d95-6086ad7f8b48',
            'example': False},
        {
            'content': "你好巴加图尔!很高兴见到你。感谢你自我介绍并分享你的年龄。你是否有特定的问题想要了解或讨论?我在这里帮助解答任何问题或探讨任何话题。",
            'additional_kwargs': {},
            'response_metadata': {},
            'type': 'ai',
            'name': None,
            'id': 'run-d6361e8d-4d4c-45bd-ba47-39520257f773',
            'example': False,
            'tool_calls': [],
            'invalid_tool_calls': [],
            'usage_metadata': None
        }
    ]
}

Comments