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": "Hello! My name is Bagatur and I am 26 years old."}
    ]
}

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: "Hello! My name is Bagatur and I am 26 years old." }
  ]
};

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\": \"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': "Hello Bagatur! It's nice to meet you. Thank you for introducing yourself and sharing your age. Is there anything specific you'd like to know or discuss? I'm here to help with any questions or topics you're interested in.", '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