Skip to content

定时任务

有时你不想基于用户交互来运行你的图谱,而是希望按计划调度图谱运行 —— 例如,如果你希望你的图谱每周为你的团队编写并发送一份待办事项电子邮件。LangGraph Cloud 允许你通过使用 Crons 客户端来实现这一点,而无需编写自己的脚本。要调度一个图谱任务,你需要传递一个 cron 表达式 来告知客户端你希望何时运行该图谱。Cron 任务在后台运行,不会干扰图谱的正常调用。

设置

首先,让我们设置我们的 SDK 客户端、助手和线程:

from langgraph_sdk import get_client

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

const client = new Client({ apiUrl: <DEPLOYMENT_URL> });
// 使用以 "agent" 名称部署的图
const assistantId = "agent";
// 创建线程
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
    }' | 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': '9dde5490-2b67-47c8-aa14-4bfec88af217', 
    'created_at': '2024-08-30T23:07:38.242730+00:00', 
    'updated_at': '2024-08-30T23:07:38.242730+00:00', 
    'metadata': {}, 
    'status': 'idle', 
    'config': {}, 
    'values': None
}

线程上的定时任务

要创建与特定线程关联的定时任务,你可以这样编写代码:

# 这会安排一个任务每天 15:27(下午 3:27)运行
cron_job = await client.crons.create_for_thread(
    thread["thread_id"],
    assistant_id,
    schedule="27 15 * * *",
    input={"messages": [{"role": "user", "content": "现在几点了?"}]},
)
// 这会安排一个任务每天 15:27(下午 3:27)运行
const cronJob = await client.crons.create_for_thread(
  thread["thread_id"],
  assistantId,
  {
    schedule: "27 15 * * *",
    input: { messages: [{ role: "user", content: "现在几点了?" }] }
  }
);
curl --request POST \
    --url <DEPLOYMENT_URL>/threads/<THREAD_ID>/runs/crons \
    --header 'Content-Type: application/json' \
    --data '{
        "assistant_id": <ASSISTANT_ID>,
    }'

请注意,删除不再有用的 Cron 任务是**非常**重要的。否则,你可能会产生不必要的大语言模型 API 费用!你可以使用以下代码删除 Cron 任务:

await client.crons.delete(cron_job["cron_id"])
await client.crons.delete(cronJob["cron_id"]);
curl --request DELETE \
    --url <DEPLOYMENT_URL>/runs/crons/<CRON_ID>

无状态定时任务

你还可以使用以下代码创建无状态定时任务:

# 此代码将任务安排在每天 15:27(下午 3:27)运行
cron_job_stateless = await client.crons.create(
    assistant_id,
    schedule="27 15 * * *",
    input={"messages": [{"role": "user", "content": "现在几点了?"}]},
)
// 此代码将任务安排在每天 15:27(下午 3:27)运行
const cronJobStateless = await client.crons.create(
  assistantId,
  {
    schedule: "27 15 * * *",
    input: { messages: [{ role: "user", content: "现在几点了?" }] }
  }
);
curl --request POST \
    --url <DEPLOYMENT_URL>/runs/crons \
    --header 'Content-Type: application/json' \
    --data '{
        "assistant_id": <ASSISTANT_ID>,
    }'

再次提醒,任务完成后记得删除它!

await client.crons.delete(cron_job_stateless["cron_id"])
await client.crons.delete(cronJobStateless["cron_id"]);
curl --request DELETE \
    --url <DEPLOYMENT_URL>/runs/crons/<CRON_ID>

Comments