INTEGRITY Dokumentace

Chat SDK

Použijte agents/chat-sdk když spustíte Chat SDK ↗ uvnitř agenta. První integrační pomocná funkce je Chat SDK StateAdapter která ukládá stav v podřízených agentech Agents.

Adaptér ukládá odběry, zámky, fronty, klíče pro deduplikaci, stav vlákna, stav kanálu, metadata callbacků, seznamy přepisů a historii vláken Chat SDK do Durable Object SQLite. Každý shard stavu je ChatSdkStateAgent podřízeného agenta pod svým vstupním Agentem.

Instalovat

Nainstalujte oba balíčky do Workeru, který hostuje váš messenger ingress:

npm i agents chat

agents/chat-sdk poskytuje trvalý stav pro Chat SDK. Použijte ho s libovolným adaptérem Chat SDK, například Telegram, Slack, Discord, Teams nebo Google Chat.

Základní nastavení

Vytvořte nadřazeného Agenta, který vlastní váš runtime Chat SDK. Předejte createChatSdkState() jako Chat SDK state možnost.

import { Agent } from "agents";
import { createChatSdkState } from "agents/chat-sdk";
import { Chat } from "chat";
import { createTelegramAdapter } from "@chat-adapter/telegram";

export { ChatSdkStateAgent } from "agents/chat-sdk";

export class MessengerAgent extends Agent {
	chat;

	onStart() {
		const telegram = createTelegramAdapter({
			botToken: this.env.TELEGRAM_BOT_TOKEN,
			mode: "webhook",
			userName: "my_bot",
		});

		this.chat = new Chat({
			adapters: { telegram },
			userName: "my_bot",
			state: createChatSdkState(),
			concurrency: { strategy: "burst", debounceMs: 600 },
		});
	}
}
import { Agent } from "agents";
import { createChatSdkState } from "agents/chat-sdk";
import { Chat } from "chat";
import { createTelegramAdapter } from "@chat-adapter/telegram";

export { ChatSdkStateAgent } from "agents/chat-sdk";

export class MessengerAgent extends Agent<Env> {
	private chat!: Chat;

	onStart() {
		const telegram = createTelegramAdapter({
			botToken: this.env.TELEGRAM_BOT_TOKEN,
			mode: "webhook",
			userName: "my_bot",
		});

		this.chat = new Chat({
			adapters: { telegram },
			userName: "my_bot",
			state: createChatSdkState(),
			concurrency: { strategy: "burst", debounceMs: 600 },
		});
	}
}

Přidejte nadřazený Agent do migrace Durable Object:

{
  "$schema": "./node_modules/wrangler/config-schema.json",
  // Set this to today's date
  "compatibility_date": "2026-08-28",
  "compatibility_flags": [
    "nodejs_compat"
  ],
  "durable_objects": {
    "bindings": [
      {
        "class_name": "MessengerAgent",
        "name": "MessengerAgent"
      }
    ]
  },
  "migrations": [
    {
      "new_sqlite_classes": [
        "MessengerAgent"
      ],
      "tag": "v1"
    }
  ]
}
# Set this to today's date
compatibility_date = "2026-08-28"
compatibility_flags = ["nodejs_compat"]

[[durable_objects.bindings]]
class_name = "MessengerAgent"
name = "MessengerAgent"

[[migrations]]
new_sqlite_classes = ["MessengerAgent"]
tag = "v1"

Export ChatSdkStateAgent z vstupního bodu vašeho Workeru, aby ho směrování sub-agenta mohlo přeložit. Když createChatSdkState() se volá uvnitř metody životního cyklu Agent nebo handleru požadavku, použije aktuální Agent jako nadřazený a vytvoří stavové shardy s this.subAgent().

Shardování stavu

Ve výchozím nastavení je stav Chat SDK shardován podle prvních dvou segmentů oddělených dvojtečkou v klíči podobném vláknu.

Například telegram:-100123:456 a telegram:-100123:789 sdílejí stejný shard stavu, telegram:-100123.

Výchozí key sharder rozpoznává tyto předpony klíčů Chat SDK:

Neznámé klíče používají výchozí název shardu adaptéru, default.

Vlastní sharding

Použijte shardKey pro řízení toho, jak se ID vláken mapují na názvy stavových podřízených agentů:

const state = createChatSdkState({
	shardKey(threadId) {
		return threadId.split(":").slice(0, 2).join(":");
	},
});
const state = createChatSdkState({
	shardKey(threadId) {
		return threadId.split(":").slice(0, 2).join(":");
	},
});

Použijte keyShard když adaptér ukládá klíče, jejichž tvar neodpovídá vláknu, ale přesto by se měly směrovat na shard specifický pro poskytovatele:

const state = createChatSdkState({
	keyShard(key) {
		if (!key.startsWith("dedupe:telegram:")) {
			return undefined;
		}

		const chatId = key.slice("dedupe:telegram:".length).split(":")[0];
		return chatId ? `telegram:${chatId}` : undefined;
	},
});
const state = createChatSdkState({
	keyShard(key) {
		if (!key.startsWith("dedupe:telegram:")) {
			return undefined;
		}

		const chatId = key.slice("dedupe:telegram:".length).split(":")[0];
		return chatId ? `telegram:${chatId}` : undefined;
	},
});

Vracení undefined se vrátí k vestavěnému key sharderu a poté k výchozímu shardu.

API

createChatSdkState(options)

Vytvoří Chat SDK StateAdapter podporovaný ChatSdkStateAgent podřízeného agenta.

import { createChatSdkState } from "agents/chat-sdk";

export { ChatSdkStateAgent } from "agents/chat-sdk";

const state = createChatSdkState({
	// parent: this // Optional. Defaults to the current Agent from getCurrentAgent().
});
import { createChatSdkState } from "agents/chat-sdk";

export { ChatSdkStateAgent } from "agents/chat-sdk";

const state = createChatSdkState({
	// parent: this // Optional. Defaults to the current Agent from getCurrentAgent().
});

Možnosti:

Možnost Popis
agent Volitelná vlastní podtřída ChatSdkStateAgent. Výchozí hodnota je ChatSdkStateAgent.
parent Volitelný nadřazený Agent, který zavolá subAgent() pro vytváření shardů stavu. Výchozí hodnota je aktuální Agent z getCurrentAgent().
name Výchozí název shardu pro klíče, které nelze namapovat. Výchozí hodnota je default.
shardKey Mapuje ID vláken a zamykací klíče Chat SDK na název shardu.
keyShard Mapuje obecné klíče mezipaměti nebo seznamů Chat SDK na název shardu.

ChatSdkStateAgent

Třída sub-agenta, která ukládá stav do SQLite. Exportujte ji ze vstupního bodu Workeru, aby ji runtime mohl vytvořit.

export { ChatSdkStateAgent } from "agents/chat-sdk";
export { ChatSdkStateAgent } from "agents/chat-sdk";

ChatSdkStateAdapter

Konkrétní StateAdapter implementaci vrácenou createChatSdkState(). Většina aplikací nepotřebuje vytvářet jeho instanci přímo.

Co se ukládá

Adaptér implementuje kompletní Chat SDK StateAdapter rozhraní:

Mezi funkce Chat SDK postavené na těchto primitivech patří:

Chování při vyčištění

Čtení TTL jsou přísná: vypršené zámky, hodnoty mezipaměti, položky fronty a položky seznamu jsou před vrácením ignorovány nebo smazány.

Fyzické čištění probíhá líně. ChatSdkStateAgent naplánuje jeden callback pro vyčištění k nejbližší známé expiraci a po jeho spuštění naplánuje další. Neaktivní shardy tak zůstávají v klidu a zároveň se zabraňuje neomezenému hromadění expirovaných řádků.

Příklad

Příklad messengeru Chat SDK

Sestavte bota pro messenger Telegram se stavem Chat SDK v podřízených agentech, souběžností burst/debounce a odpověďmi AI podporovanými Think, které běží ve vláknech managed fiber.