跳到主要内容

智能体 API

智能体 API 用于调用交互式对话智能体和结构化任务智能体。所有请求都必须具备目标智能体访问权限,并归属于当前认证用户和空间。

选择正确端点​

需求端点客户端方法
交互式、多模态、流式对话POST /api/agents/{agentId}/chatclient.agents.chatStream()
非流式对话结果POST /api/agents/{agentId}/chat,stream: falseclient.agents.chat()
结构化任务智能体执行POST /api/agents/{agentId}/executeclient.agents.execute()
长时间任务智能体执行POST /api/agent-jobsclient.agents.invokeAsync()
恢复用户选择交互POST /api/agents/{agentId}/turns/{turnId}/resumeHTTP V3 流请求
查看或压缩对话上下文会话 context 端点HTTP 请求

不要向智能体 chat 端点发送 OpenAI messages[]。该端点使用 GeniSpace contents[];Models 中继是另一套 OpenAI 兼容 API。

交互式对话​

请求​

POST /api/agents/{agentId}/chat
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Accept: text/event-stream
X-GeniSpace-Stream-Protocol: langgraph-v3
{
"contents": [
{ "type": "text", "text": "请对照制度分析这张图表" },
{ "type": "image_url", "image_url": { "url": "https://example.com/chart.png" } }
],
"session_id": "session-123",
"turnId": "1a11bb22-333c-444d-855e-666666666666",
"stream": true,
"settings": {
"temperature": 0.3,
"max_tokens": 2000,
"chat_mode": "agent",
"disable_web_search": false
}
}

contents 不能为空。API 支持 text、image_url、audio 和 file。使用 session_id 延续对话;每个用户轮次生成一个稳定的 UUID turnId,便于安全识别重试。

settings.chat_mode 可为 ask 或 agent。Ask 模式不执行操作型工具。只发送该端点支持的设置,未知字段会被拒绝。

LangGraph V3 流协议​

流式请求必须发送 X-GeniSpace-Stream-Protocol: langgraph-v3,响应也必须确认相同值。缺失或不一致会返回 HTTP 426 Upgrade Required。

每个 SSE data: 帧都是带连续序号的 JSON 信封:

{
"type": "event",
"method": "custom:genispace",
"params": { "data": { "event": "content-delta", "delta": "你好" } },
"seq": 7
}

线上方法包括以 custom:genispace 表达的产品事件,以及 messages、tools、lifecycle 和 input。客户端必须保持顺序,并拒绝序号不连续或不支持的帧。请使用 JavaScript SDK,不要维护第二套解析器。

SDK 会把线上事件投影成产品事件,例如:

  • session.started;
  • content.delta;
  • 携带结构化参数和结果元数据的 tool.execution;
  • knowledge.evidence;
  • agent.input.required;
  • local.tool.call;
  • context.usage;
  • response.completed;
  • turn.persist_pending、error.occurred 和 stream.ended。

不要只显示事件描述;工具参数、执行结果、错误、插件元数据和知识证据都属于用户可见的执行过程。

JavaScript SDK 示例​

import { GeniSpace } from 'genispace';

const client = new GeniSpace({
apiKey: process.env.GENISPACE_API_KEY!,
baseURL: 'https://api.genispace.cn/api',
});

const controller = new AbortController();
const stream = client.agents.chatStream(
'AGENT_ID',
{
contents: [{ type: 'text', text: '查找相关制度证据。' }],
session_id: 'session-123',
turnId: crypto.randomUUID(),
settings: { temperature: 0.2, max_tokens: 1200 },
},
{ signal: controller.signal, language: 'zh-CN' },
);

for await (const event of stream) {
if (event.type === 'content.delta') process.stdout.write(event.content ?? '');
if (event.type === 'tool.execution') renderToolResult(event.metadata);
if (event.type === 'agent.input.required') renderUserChoice(event.metadata);
if (event.type === 'error.occurred') throw new Error(event.error);
}

SDK 还导出 AgentStreamClient 和 AgentStreamDecoder,供内置智能体流及字节转发桌面代理使用。

恢复用户选择交互​

收到 agent.input.required 后,持久化交互元数据,并渲染服务端给出的单选或多选表单。提交选项 ID,不要提交显示文案:

POST /api/agents/{agentId}/turns/{turnId}/resume
X-GeniSpace-Stream-Protocol: langgraph-v3
{
"sessionId": "session-123",
"interactionId": "interaction-456",
"selectedOptionIds": ["candidate-42"],
"otherText": null
}

恢复请求会返回另一条 V3 流。重复提交会返回幂等成功,不会执行两次。可通过以下端点列出待处理交互:

GET /api/agents/{agentId}/sessions/{sessionId}/interactions/pending

otherText 只对应表单的自定义答案输入框,客户端不要再自行添加第二个“其他”选项。

上下文状态与压缩​

POST /api/agents/{agentId}/sessions/{sessionId}/context/status
POST /api/agents/{agentId}/sessions/{sessionId}/context/compact

公开 API 均接受空 JSON 请求体。状态包含已用、剩余和最大 Token,是否为估算值、压缩次数、摘要状态和消息数。存在待处理用户交互时,手动压缩返回 409;没有 checkpoint 时返回 404。

压缩会汇总模型上下文,不删除持久化聊天记录。详见上下文管理。

结构化任务执行​

具有明确输入输出、无需交互界面的任务智能体使用 /execute:

const result = await client.agents.execute('TASK_AGENT_ID', {
inputs: {
query: '抽取发票字段',
documentUrl: 'https://example.com/invoice.pdf',
},
settings: { temperature: 0.1, maxTokens: 1200 },
});

可能运行数分钟的操作使用 invokeAsync()。它创建 AGENT_INVOKE Job 并轮询状态,不会长时间占用一个 HTTP 请求:

const result = await client.agents.invokeAsync(
'invoice-extractor',
{ query: '抽取并校验字段' },
{
timeoutMs: 600_000,
idempotencyKey: 'invoice-2026-00042',
onProgress: (job) => updateProgress(job.phase, job.progress),
},
);

停止本地轮询不会取消服务端 Job;需要使用 Job 取消 API 进行协作式取消。

取消轮次​

取消正在运行的对话轮次:

POST /api/agents/{agentId}/turns/{turnId}/cancel
{ "sessionId": "session-123" }

同时中止浏览器流,避免界面继续读取。分布式取消到达当前运行实例可能需要短暂时间。

错误​

状态常见原因
400内容、设置、会话或交互参数错误
401凭据缺失或无效
402用户或空间额度不足
403无智能体、工具或空间资源权限
404智能体、会话 checkpoint、轮次或交互不存在
409轮次已运行,或待确认输入阻止上下文压缩
426缺少或错误的 langgraph-v3 流请求头
503运行时或上下文压缩暂不可用

即使 HTTP 连接最初成功,error.occurred 也表示流失败。诊断时保留 turn ID、request ID 和最后一个有效序号。

安全与可靠性​

  • API Key 应保存在可信服务端;浏览器应用使用已认证 Access Token。
  • 每个用户轮次生成唯一 turnId,只有重试同一轮时才复用。
  • 本地工具只有在宿主应用已经注册和授权时才能执行。
  • 工具证据属于不可信数据,不要作为可执行 HTML 渲染。
  • 遵守空间权限,不请求用户无权查看的输出字段。
  • 有重要后果的后台工作使用幂等键。

相关指南​