ChatKit 架构与交互开发详解
大模型 API 可以生成文字、代码和结构化数据,但要让用户在回答里点击按钮、填写表单并查看结果,还需要一套界面与事件处理机制。OpenAI 的 ChatKit 提供了可嵌入的聊天界面、交互组件和服务端集成能力,帮助开发者把模型输出接入实际产品。
理解 ChatKit,关键是分清三件事。模型负责理解与生成,后端负责数据和操作,前端负责展示与交互。ChatKit 连接这些环节,但业务规则仍由应用实现。官方概览
本文面向准备开发 AI 聊天应用的开发者,介绍 ChatKit 的架构、Widget 和 Action,以及接入时需要承担的工作。文中的代码为局部示例,不能直接作为完整应用运行。功能与接入说明以 2026 年 10 月 8 日的官方文档为准。
1. ChatKit 在应用中的位置
用户在 ChatKit 界面发送消息,前端将请求交给应用后端。后端调用模型或 Agent,读取业务数据,再把文字和组件事件发送给前端。用户点击组件后,同一条链路继续处理操作。

从应用职责来看,可以分成五层:
| 层次 | 主要职责 |
|---|---|
| ChatKit 前端 | 显示聊天、输入框与交互组件,发送用户操作 |
| ChatKit 后端 | 处理请求,组织响应,连接模型与业务服务 |
| 模型或 Agent | 理解问题,生成内容,决定是否调用工具 |
| 业务系统 | 查询真实数据,执行具体操作 |
| 存储 | 保存会话、消息与文件 |
自建集成可以连接自己的 Agent 服务。官方 Python SDK 提供与 Agents SDK 对接的辅助方法,开发者也可以在自己的后端编排模型调用。自建集成文档
例如订单助手中,模型可以判断用户需要查看物流,订单服务提供真实的物流状态,ChatKit 则展示结果和后续操作入口。是否允许查询某个订单,应由服务端根据用户身份判断。
2. 官方 SDK 与接入方式
React 项目可以安装官方 bindings:
npm install @openai/chatkit-react
官方前端接入文档还包含浏览器脚本加载步骤:
<script
src="https://cdn.platform.openai.com/deployments/chatkit/chatkit.js"
async
></script>
自建后端使用官方 Python 包:
pip install openai-chatkit
安装 SDK 之后,还需要配置后端端点、认证、存储和模型连接。所谓自建集成,主要指自己管理后端及业务编排;如果有完整离线部署要求,还需要核对前端资源的加载与分发方式。前端接入说明
当前官方支持自建后端,以及过渡期内已有的 Agent Builder 托管工作流。新项目应采用自建后端:Agent Builder 计划于 2026 年 11 月 30 日关闭,ChatKit 继续可用。当前接入路线
3. Widget 如何把回答变成组件
Widget 是 ChatKit 对话中的组件树。容器负责布局,子组件负责文字、状态和输入操作。常见组件包括卡片、列表、文本、按钮、表单与选择控件。官方 Widget Builder 可以预览布局,并生成对应 JSON。Widget 文档
下面的 Python 片段构建了一张带按钮的卡片。要让用户看到它,还需将组件通过 ChatKit 后端发送给前端。
from chatkit.widgets import Card, Text, Button, ActionConfig
widget = Card(
children=[
Text(value="找到一个符合预算的方案。"),
Button(
label="查看详情",
onClickAction=ActionConfig(
type="view_plan",
payload={"plan_id": "plan_123"},
),
),
],
)
用户看到的是一张卡片和一个按钮。组件结构说明如何显示,按钮绑定的 Action 说明用户操作后应触发什么事件。
3.1 模型输出与组件构建
开发者可以让模型生成符合约束的组件数据,也可以让模型只返回业务结果,再由后端构建组件。例如模型输出推荐商品及理由,后端把这些字段填进固定商品卡片。
对于订单、商品和审批等业务场景,我更建议先使用固定模板。模型负责内容,后端控制展示字段和可执行操作,便于维护样式与业务规则。模型直接生成组件树则适合布局确实需要动态变化的场景,但仍要校验组件类型和字段。
ChatKit 接收的是它定义的组件协议。任意 JSON 需要转换,HTML 或 React 源代码也需要单独的运行环境。模型生成了一段页面代码,并不意味着 ChatKit 会执行它。
4. Action 如何处理用户操作
Action 表达一次用户操作。上面的按钮在点击后,会产生一个事件,类型为 view_plan,并携带方案 ID。下面是其核心字段示意,不代表完整的传输请求:
{
"type": "view_plan",
"payload": {
"plan_id": "plan_123"
}
}
Action 默认交给服务器处理。服务端实现 ChatKitServer.action(),可以查询业务数据、更新组件或继续调用模型。设置 handler="client" 后,则可由客户端回调处理,例如打开应用中的详情页面。表单内的输入值会随相应操作进入 payload。Action 文档

以“查看物流”为例,按钮点击后,前端发送订单 ID;后端验证访问权限,查询物流系统,再发送详情卡片。这个过程可以完全由业务代码完成。只有用户提出“解释一下为什么延误”等需求时,才可能需要模型参与。
4.1 Action 与工具调用的区别
| 机制 | 发起方 | 例子 |
|---|---|---|
| Widget Action | 用户 | 点击“查看物流” |
| 模型工具调用 | 模型或 Agent | 根据问题决定查询物流系统 |
两者可以复用同一个业务函数,但入口不同。用户点击按钮,也不代表客户端提供的参数天然可信。官方明确要求把 Action 及其 payload 当作不可信输入;身份、对象权限和允许的操作应在后端检查。事件处理说明
如果 Action 会创建订单或发送消息,应用还应考虑网络重试和重复点击。可以在业务接口中加入幂等处理,确保一次操作不会因重复请求执行多次。
5. 后端需要承担哪些工作
自建模式以 ChatKitServer 为核心。respond() 处理用户消息和客户端工具结果,action() 处理组件操作;HTTP 端点接收请求并调用 server.process()。
响应可以是 JSON,也可以是流式事件。stream_agent_response() 用于对接 Agent 输出,stream_widget() 用于发送组件及更新。通过 Store 保存会话和消息;支持上传时,还需要实现 FileStore。认证后的用户身份可以通过服务端 context 传递给存储与处理逻辑。后端接口说明
这些接口提供集成路径,实际模型选择、工具执行、业务数据库和访问控制仍由应用配置。开发时可以先采用内存存储;准备上线时,需要把会话与文件保存到持久化系统,并保证用户之间的数据隔离。
6. 外观定制与功能边界
ChatKit 支持主题、颜色、字体、界面密度和圆角配置,也可以调整欢迎文字、建议问题、输入框、附件、标题栏按钮、历史记录及语言。附件默认关闭,启用时还需配置上传方式。主题与定制文档
这些能力适合将聊天界面嵌入现有产品。完全自由的页面布局、3D 场景或任意 JavaScript 模拟,需要另外选择相应的前端实现。ChatGPT 中展示的交互可视化,也不能直接视为 ChatKit 的全部现成能力。
因此,选型时应先问:用户主要是在对话中完成选择和填写,还是需要一个自由布局的交互应用?前者适合评估 ChatKit,后者往往需要自定义界面,并把聊天作为其中一个入口。
7. ChatKit 与模型 API 的关系
| 技术 | 主要解决的问题 |
|---|---|
| 模型 API | 推理、内容生成与工具调用 |
| Structured Outputs | 约束模型返回的数据结构 |
| Agents SDK | 编排 Agent 与工具执行 |
| ChatKit | 接入聊天界面、组件和用户操作 |
| 自定义 HTML 或 React 应用 | 实现自由布局与专用交互 |
一种实用的组合方式是:模型输出结构化业务结果,后端把结果转换成 Widget,ChatKit 展示组件,再通过 Action 接收用户操作。Structured Outputs 也提供界面生成的示例,但组件渲染和业务执行仍需要应用集成。结构化输出文档
这也解释了为什么支持交互回答不要求所有模型响应都改成 HTML。普通解释仍可以采用文字或 Markdown,需要用户操作的部分则由组件承担。
8. 从一个小闭环开始
第一次接入,可以选择一个具体业务场景,例如订单查询,先完成以下流程:
- 用户发送问题,界面展示文字回答。
- 后端查询数据,返回一张业务卡片。
- 卡片按钮触发 Action,后端校验并处理。
- 将处理结果展示为新消息或组件更新。
- 保存会话,并验证重新打开后的行为。
在这个闭环运行稳定后,再加入表单、附件和动态组件生成。每增加一种界面能力,都应能对应到一个真实用户任务,以及明确的后端处理逻辑。
ChatKit 的价值在于提供聊天界面与交互协议,让开发者把精力投入模型编排和业务流程。是否采用它,取决于产品需要的界面自由度,以及团队愿意自行维护多少前端与会话基础设施。
评论