INTEGRITY Документация

WebSockets API не в реальном времени

WebSockets API не в реальном времени позволяет устанавливать постоянные соединения для запросов ИИ без необходимости в повторных хендшейках. Такой подход отлично подходит для приложений, которым не требуется взаимодействие в реальном времени, но которые всё же выигрывают от снижения задержки и непрерывной связи.

Настройка WebSockets API

  1. Сгенерируйте токен AI Gateway с необходимым разрешением AI Gateway Run и включите использование аутентифицированного шлюза.
  2. Используйте wss:// протокол, чтобы инициировать WebSocket-соединение:
    wss://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}
  3. Откройте WebSocket-соединение, аутентифицированное токеном Cloudflare с разрешением AI Gateway Run.

Пример запроса

import WebSocket from "ws";

const ws = new WebSocket(
	"wss://gateway.ai.cloudflare.com/v1/my-account-id/my-gateway/",
	{
		headers: {
			"cf-aig-authorization": "Bearer AI_GATEWAY_TOKEN",
		},
	},
);

ws.on("open", () => {
	ws.send(
		JSON.stringify({
			type: "universal.create",
			request: {
				eventId: "my-request",
				provider: "workers-ai",
				endpoint: "@cf/meta/llama-3.1-8b-instruct",
				headers: {
					Authorization: "Bearer WORKERS_AI_TOKEN",
					"Content-Type": "application/json",
				},
				query: {
					prompt: "tell me a joke",
				},
			},
		}),
	);
})

ws.on("message", (message) => {
	console.log(message.toString());
});

Пример ответа

{
	"type": "universal.created",
	"metadata": {
		"cacheStatus": "MISS",
		"eventId": "my-request",
		"logId": "01JC3R94FRD97JBCBX3S0ZAXKW",
		"step": "0",
		"contentType": "application/json"
	},
	"response": {
		"result": {
			"response": "Why was the math book sad? Because it had too many problems. Would you like to hear another one?"
		},
		"success": true,
		"errors": [],
		"messages": []
	}
}

Пример потокового запроса

Для стриминговых запросов AI Gateway отправляет начальное сообщение с метаданными запроса, указывающее на начало стрима:

{
	"type": "universal.created",
	"metadata": {
		"cacheStatus": "MISS",
		"eventId": "my-request",
		"logId": "01JC40RB3NGBE5XFRZGBN07572",
		"step": "0",
		"contentType": "text/event-stream"
	}
}

После этого первоначального сообщения все потоковые фрагменты передаются в реальном времени в WebSocket-соединение по мере поступления от поставщика инференса. Только eventId поле включается в метаданные этих фрагментов потоковой передачи. eventId позволяет AI Gateway включать определяемый клиентом ID в каждое сообщение, даже в потоковой среде WebSocket.

{
	"type": "universal.stream",
	"metadata": {
		"eventId": "my-request"
	},
	"response": {
		"response": "would"
	}
}

Когда все чанки запроса переданы, AI Gateway отправляет финальное сообщение, сигнализирующее о завершении запроса. Для большей гибкости это сообщение снова содержит все метаданные, хотя они уже были переданы в начале потоковой передачи.

{
	"type": "universal.done",
	"metadata": {
		"cacheStatus": "MISS",
		"eventId": "my-request",
		"logId": "01JC40RB3NGBE5XFRZGBN07572",
		"step": "0",
		"contentType": "text/event-stream"
	}
}