跳转至

无状态运行

大多数情况下,在运行图时你会向客户端提供 thread_id,以便通过 LangGraph Platform 中实现的持久状态来跟踪先前的运行。但是,如果你不需要持久化运行,就不需要使用内置的持久状态,可以创建无状态运行。

设置

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

from langgraph_sdk import get_client

client = get_client(url=<DEPLOYMENT_URL>)
# Using the graph deployed with the name "agent"
assistant_id = "agent"
# create thread
thread = await client.threads.create()
import { Client } from "@langchain/langgraph-sdk";

const client = new Client({ apiUrl: <DEPLOYMENT_URL> });
// Using the graph deployed with the name "agent"
const assistantId = "agent";
// create thread
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": "你好!我的名字是 Bagatur,我今年 26 岁。"}
    ]
}

async for chunk in client.runs.stream(
    # Don't pass in a thread_id and the stream will be stateless
    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: "你好!我的名字是 Bagatur,我今年 26 岁。" }
  ]
};

const streamResponse = client.runs.stream(
  // Don't pass in a thread_id and the stream will be stateless
  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\": \"Hello! My name is Bagatur and I am 26 years old.\"}]},
        \"stream_mode\": [
            \"updates\"
        ]
    }" | jq -c 'select(.data and (.data | has("run_id") | not)) | .data'

输出:

{'agent': {'messages': [{'content': "你好 Bagatur!很高兴见到你。感谢你介绍自己并分享你的年龄。有什么特别想了解或讨论的吗?我在这里帮助你解决任何问题或你感兴趣的话题。", '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': 'Hello! My name is Bagatur and I am 26 years old.',
            'additional_kwargs': {},
            'response_metadata': {},
            'type': 'human',
            'name': None,
            'id': '5e088543-62c2-43de-9d95-6086ad7f8b48',
            'example': False}
        ,
        {
            'content': "你好 Bagatur!很高兴见到你。感谢你介绍自己并分享你的年龄。有什么特别想了解或讨论的吗?我在这里帮助你解决任何问题或你想要探索的话题。",
            '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
        }
    ]
}