Skip to content

复制线程

您可能希望复制(即“分叉”)现有的线程,以便保留现有线程的历史记录,并创建独立的运行,这些运行不会影响原始线程。本指南将展示如何进行操作。

设置

此代码假设您已经有一个线程可供复制。您可以在这里了解线程的概念此处,并在此教程中学习如何在某个线程上流式传输运行。

SDK初始化

首先,我们需要设置客户端以便能够与托管的图进行通信:

from langgraph_sdk import get_client
client = get_client(url="<DEPLOYMENT_URL>")
assistant_id = "agent"
thread = await client.threads.create()
import { Client } from "@langchain/langgraph-sdk";

const client = new Client({ apiUrl: "<DEPLOYMENT_URL>" });
const assistantId = "agent";
const thread = await client.threads.create();
curl --request POST \
  --url <DEPLOYMENT_URL>/threads \
  --header 'Content-Type: application/json' \
  --data '{
    "metadata": {}
  }'

复制一个线程

下面的代码假设你想要复制的线程已经存在。

复制一个线程将创建一个具有与现有线程相同历史的新线程,然后允许你继续执行运行。

创建副本

copied_thread = await client.threads.copy(<THREAD_ID>)
let copiedThread = await client.threads.copy(<THREAD_ID>);
curl --request POST --url <DEPLOYMENT_URL>/threads/<THREAD_ID>/copy \
--header 'Content-Type: application/json'

验证副本

我们可以验证前一个线程的历史确实正确复制:

def remove_thread_id(d):
  if 'metadata' in d and 'thread_id' in d['metadata']:
      del d['metadata']['thread_id']
  return d

original_thread_history = list(map(remove_thread_id,await client.threads.get_history(<THREAD_ID>)))
copied_thread_history = list(map(remove_thread_id,await client.threads.get_history(copied_thread['thread_id'])))

# 比较两个历史
assert original_thread_history == copied_thread_history
# 如果通过了断言,则输出
print("历史记录相同。")
function removeThreadId(d) {
  if (d.metadata && d.metadata.thread_id) {
    delete d.metadata.thread_id;
  }
  return d;
}

// 假设 `client.threads.getHistory(threadId)` 是一个异步函数,返回一个字典列表
async function compareThreadHistories(threadId, copiedThreadId) {
  const originalThreadHistory = (await client.threads.getHistory(threadId)).map(removeThreadId);
  const copiedThreadHistory = (await client.threads.getHistory(copiedThreadId)).map(removeThreadId);

  // 比较两个历史
  console.assert(JSON.stringify(originalThreadHistory) === JSON.stringify(copiedThreadHistory));
  // 如果通过了断言,则输出
  console.log("历史记录相同。");
}

// 示例用法
compareThreadHistories(<THREAD_ID>, copiedThread.thread_id);
if diff <(
    curl --request GET --url <DEPLOYMENT_URL>/threads/<THREAD_ID>/history | jq -S 'map(del(.metadata.thread_id))'
) <(
    curl --request GET --url <DEPLOYMENT_URL>/threads/<COPIED_THREAD_ID>/history | jq -S 'map(del(.metadata.thread_id))'
) >/dev/null; then
    echo "历史记录相同。"
else
    echo "历史记录不同。"
fi

输出:

历史记录相同。

Comments