对话 (Chat)
对话 API 让你的程序像网页端一样和已发布的 Agent 聊天:发一条消息会创建(或延续)一个对话,并把它路由给 Agent;回复通过 SSE 流式返回,直到本轮结束。 它走的是用户端应用使用的同一套 conversations 协议。
创建客户端
OpenhexClient 是有状态的高层封装:把连接和默认 Agent 配好一次,后面就能反复对话。
import { OpenhexClient } from '@openhex/agent-sdk';
const client = new OpenhexClient({
agentId: '你的-agent-id', // 新对话默认路由到的 Agent
// apiKey 省略时从 OPENHEX_API_KEY 读取
});
发一条消息,拿到完整一轮
sendMessage 发送消息并等到本轮结束,返回一个聚合好的 AgentTurn:
const turn = await client.sendMessage('总结一下最新的客服工单');
turn.text; // 拼接好的回复文本
turn.toolCalls; // Agent 这一轮调用过的工具
turn.conversationId; // 复用它来继续这轮对话
turn.records; // 本轮观察到的全部原始记录
多轮对话
Conversation 句柄会记住对话 id,后续消息自动延续上下文:
const convo = client.conversation();
await convo.send('记住我最喜欢的颜色是青色。');
const reply = await convo.send('我刚说我喜欢什么颜色?'); // → “青色”
也可以传入已有的 conversationId 来接续一段历史对话:
const convo = client.conversation({ conversationId: '已有的对话 id' });
流式输出
逐条消费本轮记录,配合事件辅助函数提取文本:
import { extractText, isTurnComplete } from '@openhex/agent-sdk';
for await (const record of client.runTurn('把它们按主题分组')) {
if (record.sender === 'assistant') {
process.stdout.write(extractText(record));
}
if (isTurnComplete(record)) break;
}
常用辅助函数:
| 函数 | 作用 |
|---|---|
extractText(record) | 从一条记录里取出助手文本 |
extractToolCalls(record) | 取出这条记录里的工具调用 |
isTurnComplete(record) | 是否为本轮的终止 result 事件 |
isInterrupt(record) | 这条记录是否表示对话被打断 |
底层协议
当你需要完全掌控时,client.chat 把每个接口 1:1 暴露出来:
// POST /conversations/send —— 用 targetAgentIds 新建,或用 conversationId 接续
const { conversationId, userEventId } = await client.chat.send({
message: 'hello',
targetAgentIds: [agentId],
});
// GET /conversations/:id/stream —— 可断线重连的 SSE 流。
// 从某条记录的 id 续传,或从 userEventId 续传以精确捕获“这条消息的回复”。
for await (const record of client.chat.stream(conversationId, { lastEventId: userEventId })) {
console.log(record.sender, record.raw.type);
if (record.raw.type === 'result') break;
}
await client.chat.interrupt(conversationId); // 打断正在进行的一轮
const { entries } = await client.chat.messages(conversationId); // 拉取完整历史
每条流式记录的结构为 { id, seq, sender, event, timestamp, sessionId, raw },其中 raw 携带 Agent 运行时事件({ type: 'assistant', message: { content: […] } }、{ type: 'result' } 等)——和应用里聊天界面消费的内容完全一致。
训练模式
如果你是 Agent 的所有者,可以用训练模式对话——此时 Agent 运行在「创造 / 训练」态,会从你的反馈中学习:
const training = client.training('你的-agent-id'); // 省略则用客户端配置的 agentId
const result = await training.send('以后回复请更简洁。');
下一步
- 工作区 (Workspaces) — 作为服务商管理成员、积分与会话
- API 参考 — 客户端配置、类型与错误处理
- 对话 (Conversations) — 了解对话在产品中的概念