Skip to main content

Documentation Index

Fetch the complete documentation index at: https://tech.illasoft.com/llms.txt

Use this file to discover all available pages before exploring further.

路径

POST /agent/streaming

认证

Bearer JWT(Supabase)

请求 Body

字段类型必填说明
messageResponseMessageSchema用户消息(v5 格式,parts[]
threadIdstring线程 ID
model"lite" | "nova" | "crazy" | "ultra"默认 lite
anchorMessageIdstring传入则级联删除该消息之后所有消息/版本/异步任务(rewind)

Plan 校验 + 降级

if (model === "ultra" && !isMaxPlan) model = "lite";
else if (["nova","crazy"].includes(model) && !isPremium) model = "lite";

响应

Content-Type: text/event-stream SSE 流通过 Vercel AI SDK createAgentUIStream() 生成。Chunks 包含 text delta、tool calls、tool results、finish reason 等。 工具调用在消息中使用特殊 marker 格式:
::::poisson-function function=generateVideo description=生成视频
{"prompt":"...","duration":"5"}
::::

流式架构

  1. agentRegistry.register(threadId, abortController, promise)
  2. Redis HSET agent:task:{threadId} { status: "running", userId, startedAt } TTL 600s
  3. ChunkWriter 75ms 批量 flush → XADD agent:stream:{threadId}
  4. 断线重连:GET /agent/stream/:threadId 用 XREAD BLOCK 3s 拉缓存 chunks
  5. onFinish
    • INSERT messages + thread_version
    • publishVideoTask / publishMusicTask 派发 Inngest events
    • ChunkWriter.close()XADD sentinel { type: "done" }
    • Redis TTL 降到 120s

副作用

  • DB:新增 messages、thread_version
  • Redis:agent:task / agent:stream
  • Inngest:派发视频/音乐 events(如 agent 调用对应工具)
  • CSAM:用户 parts 里的图片会触发非阻塞 moderateImageUrl + threads.flag 更新
  • PostHogchat + chat_completion + sub_call(工具内 LLM 子调用)事件

错误码

状态含义
400请求体无效 / threadId 不存在
401JWT 无效
500模型调用失败

  • src/hono/agent/index.ts:238
  • src/hono/agent/index.ts:276-341(anchorMessageId 级联)
  • src/lib/agentTask.ts(Redis streaming)

相关