本文介绍如何在 ChatKit 相关场景中接入 XpertAI 后端能力,包括通过 SDK 接入和通过 HTTP API 直接调用接入。
接入方式概览
如果你只是从自己的服务端调用 XpertAI API,不需要先换取
client_secret。client_secret 主要用于 ChatKit UI 或其他浏览器侧短期访问场景。
接入前准备
开始前请先准备以下信息:apiUrl- 公有云示例:
https://api.xpertai.cn/api/ai - 私有部署请替换成你自己的 XpertAI AI API 地址
- 公有云示例:
apiKey- 建议使用服务端安全保存的长期凭据
- 可通过
x-api-key或Authorization: Bearer <apiKey>传递
xpertId- 即目标已发布 xpert 的
xpert_id
- 即目标已发布 xpert 的
organization-idx-principal-user-id
通过 SDK 接入
XpertAI SDK 仓库名是xpert-sdk-js,但实际安装包名为 @xpert-ai/xpert-sdk。
1. 安装 SDK
2. 初始化 Client
ClientConfig 支持常用参数包括:
apiUrlapiKeytimeoutMsdefaultHeadersonRequest
defaultHeaders 中统一注入:
3. 最小对话示例
下面的示例展示了完整主链路:- 使用
client.assistants查询 xpert - 使用
client.threads创建线程 - 使用
client.runs发起一次对话运行
4. 常用能力
SDK 中最常用的子客户端包括:client.assistants- 查询或读取 xpert 信息
client.threads- 创建和管理线程
client.runs- 使用
wait()获取最终结果,或使用stream()实时消费 SSE 流
- 使用
client.contexts- 上传上下文文件,例如
client.contexts.uploadFile()
- 上传上下文文件,例如
client.knowledges- 创建或管理知识库资源
通过 API 直接调用
如果你不使用 SDK,也可以直接调用公开的 REST API。1. 使用 apiKey 鉴权
你可以任选一种方式:
x-api-key: sk-x-...Authorization: Bearer sk-x-...
x-api-key。
2. 查询 xpert
如果你已经知道 xpert ID,可以直接调用GET /api/ai/assistants/{id}。如果你希望先按条件筛选 assistant,可以调用搜索接口:
3. 创建 thread
thread_id。后续运行 xpert 时要继续使用这个线程 ID。
4. 调用 runs/stream
5. 可选:上传文件后再发起对话
如果你的 xpert 需要读取附件,可以先上传上下文文件:files 传给运行请求:
鉴权与安全说明
apiKey 与 client_secret 的区别
apiKey- 长期凭据
- 适合服务端到服务端调用
- 不应该暴露给浏览器
client_secret- 短期凭据
- 适合 ChatKit UI 或前端侧短时访问
- 由
POST /api/ai/v1/chatkit/sessions签发
什么时候需要 client_secret
如果你是:
- 在自己的服务端使用 SDK 调用 XpertAI
- 在自己的服务端直接发起 REST 调用
apiKey。
如果你是:
- 在浏览器里嵌入 ChatKit UI
- 需要把一个短期凭据交给前端侧运行时
client_secret,再把它返回给前端。
chatkit/sessions 的正确调用方式
POST /api/ai/v1/chatkit/sessions 只用于换取短期 client_secret。当前接口请求体只需要传递 expires_after:
- 不需要在请求体中传
xpert - 不需要在请求体中传
user - 如果需要固定组织或业务用户上下文,请通过请求头传递
organization-id和x-principal-user-id
安全建议
- 永远不要在浏览器中暴露长期
apiKey - 前端只持有短期
client_secret - 如果使用 xpert 专用 key,请确保它绑定的 xpert 与实际访问目标一致
- 需要审计终端用户身份时,在服务端换取
client_secret阶段传入x-principal-user-id
下一步
- 如果你要嵌入前端聊天 UI,请先阅读 💬 ChatKit SDK
- 如果你要继续自定义视觉与交互,请查看 主题和自定义、小部件、客户端工具