← Создание агентов на Cloudflare / agents / runtime
Agents API
Эта страница даёт общий обзор Agents SDK. Подробную документацию по каждой функции см. на связанных справочных страницах.
Обзор
Agents SDK предоставляет два основных API:
| API | Описание |
|---|---|
На стороне сервера Agent класс |
Инкапсулирует логику агента: подключения, состояние, методы, модели ИИ, обработку ошибок |
| На стороне клиента SDK | AgentClient, useAgent, а также useAgentChat для подключения из браузеров |
Класс Agent
Agent представляет собой класс, расширяющий базовый Agent класс:
import { Agent, routeAgentRequest } from "agents";
export class MyAgent extends Agent<Env, State> {
// Your agent logic
}
export default {
async fetch(request: Request, env: Env) {
return (
(await routeAgentRequest(request, env)) ||
new Response("Not found", { status: 404 })
);
},
} satisfies ExportedHandler<Env>;У каждого Agent может быть миллионы экземпляров. Каждый экземпляр представляет собой отдельный микросервер, который выполняется независимо, что обеспечивает горизонтальное масштабирование. Экземпляры адресуются по уникальному идентификатору (ID пользователя, email, номер тикета и так далее).
Жизненный цикл
flowchart TD
A["onStart<br/>(instance wakes up)"] --> B["onRequest<br/>(HTTP)"]
A --> C["onConnect<br/>(WebSocket)"]
A --> D["onEmail"]
C --> E["onMessage ↔ send()<br/>onError (on failure)"]
E --> F["onClose"]
| Метод | Когда это выполняется |
|---|---|
onStart(props?) |
Когда экземпляр запускается или просыпается после гибернации. Принимает необязательный инициализационные props передаваемый через getAgentByName или routeAgentRequest. |
onRequest(request) |
Для каждого HTTP-запроса к экземпляру |
onConnect(connection, ctx) |
Когда устанавливается WebSocket-соединение |
onMessage(connection, message) |
Для каждого полученного сообщения WebSocket |
onError(connection, error) |
Когда возникает ошибка WebSocket |
onClose(connection, code, reason, wasClean) |
Когда WebSocket-соединение закрывается |
onEmail(email) |
Когда письмо маршрутизируется на экземпляр |
onStateChanged(state, source) |
Когда состояние меняется (на стороне сервера или клиента) |
Основные свойства
| Свойство | Тип | Описание |
|---|---|---|
this.env |
Env |
Переменные окружения и привязки |
this.ctx |
ExecutionContext |
Контекст выполнения запроса |
this.state |
State |
Текущее сохранённое состояние |
this.sql |
Функция | Выполнять SQL-запросы к встроенной SQLite |
Справочник по API на стороне сервера
| Возможность | Методы | Документация |
|---|---|---|
| Состояние | setState(), onStateChanged(), initialState |
Хранение и синхронизация состояния |
| Вызываемые методы | @callable() декоратор |
Вызываемые методы |
| Планирование | schedule(), scheduleEvery(), getScheduleById(), listSchedules() |
Планирование задач |
| Устойчивое выполнение | runFiber(), startFiber(), stash(), onFiberRecovered(), keepAlive(), keepAliveWhile() |
Устойчивое выполнение |
| Queue | queue(), dequeue(), dequeueAll(), getQueue() |
Задачи очереди |
| WebSockets | onConnect(), onMessage(), onClose(), broadcast() |
WebSockets |
| HTTP/SSE | onRequest() |
HTTP и SSE |
| Электронная почта | onEmail(), replyToEmail() |
Маршрутизация электронной почты |
| Workflows | runWorkflow(), waitForApproval() |
Запуск Workflows |
| MCP-клиент | addMcpServer(), removeMcpServer(), getMcpServers() |
API MCP-клиента |
| AI-модели | Привязки Workers AI, OpenAI, Anthropic | Использование ИИ-моделей |
| Сообщения протокола | shouldSendProtocolMessages(), isConnectionProtocolEnabled() |
Сообщения протокола |
| Контекст | getCurrentAgent() |
getCurrentAgent() |
| Трассировка | wrapAISDK() |
Трассировка |
| Диагностические каналы | subscribe(), диагностические каналы |
Диагностические каналы |
| Дочерние агенты | subAgent(), abortSubAgent(), deleteSubAgent() |
Дочерние агенты |
| Agents как инструменты | runAgentTool(), clearAgentToolRuns(), hasAgentToolRun() |
Agents как инструменты |
| Agent Skills | skills реестр, встроенные источники skill, средства запуска скриптов |
Agent Skills |
| Сеансы | Session.create(), блоки контекста, компактизация, search |
Сеансы |
| Think | Think базовый класс, инструменты рабочей области, хуки жизненного цикла, расширения |
Think |
| Chat SDK | createChatSdkState(), ChatSdkStateAgent |
Chat SDK |
SQL API
Каждый экземпляр Agent имеет встроенную базу данных SQLite, доступ к которой осуществляется через this.sql:
// Create tables
this.sql`CREATE TABLE IF NOT EXISTS users (id TEXT PRIMARY KEY, name TEXT)`;
// Insert data
this.sql`INSERT INTO users (id, name) VALUES (${id}, ${name})`;
// Query data
const users = this.sql<User>`SELECT * FROM users WHERE id = ${id}`;Для состояния, которое нужно синхронизировать с клиентами, используйте API состояния взамен.
Справочник по API на стороне клиента
| Возможность | Методы | Документация |
|---|---|---|
| Клиент WebSocket | AgentClient |
Клиентский SDK |
| HTTP-клиент | agentFetch() |
Клиентский SDK |
| React-хук | useAgent() |
Клиентский SDK |
| Хук чата | useAgentChat() |
Клиентский SDK |
| События инструментов Agent | useAgentToolEvents() |
Agents как инструменты |
Экспортируемые вспомогательные функции на уровне модуля включают agentTool() от agents/agent-tools, который преобразует Think или AIChatAgent подкласс в определение инструмента AI SDK.
Краткий пример
import { useAgent } from "agents/react";
import type { MyAgent } from "./server";
function App() {
const agent = useAgent<MyAgent, State>({
agent: "my-agent",
name: "user-123",
});
// Call methods on the agent
agent.stub.someMethod();
// Update state (syncs to server and all clients)
agent.setState({ count: 1 });
}Чат-агенты
Для чат-приложений на базе ИИ расширьте AIChatAgent вместо Agent:
import { AIChatAgent } from "@cloudflare/ai-chat";
class ChatAgent extends AIChatAgent {
async onChatMessage(onFinish) {
// this.messages contains the conversation history
// Return a streaming response
}
}Возможности включают:
- Встроенное сохранение сообщений
- Автоматическая возобновляемая потоковая передача (переподключение посреди потока)
- Работает с
useAgentChatReact-хук
См. Создайте чат-агента для полного руководства.
Маршрутизация
Agents доступны через URL-паттерны:
https://your-worker.workers.dev/agents/:agent-name/:instance-nameИспользуйте routeAgentRequest() в вашем Worker для маршрутизации запросов:
import { routeAgentRequest } from "agents";
export default {
async fetch(request: Request, env: Env) {
return (
routeAgentRequest(request, env) ||
new Response("Not found", { status: 404 })
);
},
} satisfies ExportedHandler<Env>;См. Маршрутизация для пользовательских путей, CORS и шаблонов именования инстансов.