openai-chatkit-advanced-samples
openai-chatkit-advanced-samples 是一套基于 OpenAI ChatKit SDK 构建的场景化示例合集,旨在帮助开发者快速上手并理解如何打造功能丰富的 AI 聊天应用。该项目通过四个生动的演示案例——虚拟宠物管家、航空客服助手、新闻编辑助理以及地铁路线规划器,展示了如何将 FastAPI 后端与 Vite + React 前端无缝结合,实现从数据检索到界面交互的完整闭环。
它主要解决了开发者在集成 ChatKit 时面临的“如何落地具体业务场景”的难题,提供了涵盖服务器端工具调用(如获取实时状态、搜索文章、查询地图数据)和客户端状态同步(如读取画布选中节点)的成熟代码参考。无论是需要处理复杂领域知识,还是希望实现动态 UI 反馈,这些示例都给出了清晰的实现路径。
这套资源特别适合具有一定开发经验的工程师和技术研究人员使用。其独特的技术亮点在于深入演示了 Agent 如何利用自定义工具链获取应用数据进行推理,以及如何通过“即发即弃”或双向通信机制灵活操控前端界面状态。通过直接运行这些预设项目,用户可以直观地学习如何构建具备上下文感知能力和实时交互能力的下一代智能对话系统,从而大幅降低从零开发的门槛。
使用场景
某航空公司的开发团队正致力于构建一个能实时读取旅客行程、自动处理改签与行李服务的智能客服助手。
没有 openai-chatkit-advanced-samples 时
- 数据割裂严重:AI 模型无法直接访问后端数据库中的实时航班动态和旅客会员等级,只能基于训练数据“瞎猜”,导致回答缺乏时效性。
- 状态同步困难:前端界面展示的座位图或时间线与后台实际业务状态不同步,用户修改需求后,AI 往往不知道当前已选定了哪个航班或座位。
- 开发成本高昂:开发者需手动编写大量胶水代码来连接 FastAPI 后端与 React 前端,并自行设计复杂的函数调用(Function Calling)逻辑来处理退改签等具体指令。
- 上下文管理混乱:难以在每次对话中自动注入包含历史行程和偏好设置的
<CUSTOMER_PROFILE>,导致用户需要反复陈述背景信息。
使用 openai-chatkit-advanced-samples 后
- 实时工具调用:直接复用 Customer Support 示例中的架构,AI 能通过预置的
AirlineStateManager工具实时查询并修改行程、锁定座位或添加行李,确保回复基于最新数据。 - 双向状态同步:利用客户端工具调用机制,前端画布或表单的选中状态(如特定航班)可即时传递给 AI,使助手能精准针对用户当前关注的对象进行回应。
- 全栈快速落地:基于现成的 FastAPI + Vite/React 模板,团队无需从零搭建,只需替换业务逻辑即可拥有具备领域专用工具链的生产级应用。
- 智能上下文注入:系统自动在每次推理前拼接旅客画像快照,使 AI 像专属管家一样熟知用户的历史偏好,无需重复询问即可提供个性化建议。
openai-chatkit-advanced-samples 通过提供标准化的全栈示例,将原本数周的复杂集成工作缩短为几天,让开发者能专注于业务逻辑而非底层架构搭建。
运行环境要求
- 未说明
未说明
未说明

快速开始
OpenAI ChatKit 示例
此仓库收集了基于场景的 ChatKit 演示。每个示例都由一个 FastAPI 后端和一个 Vite + React 前端组成,使用 ChatKit Python SDK 实现自定义后端,并将其与 ChatKit.js 客户端集成。
您可以运行以下示例:
- 猫咖啡馆 - 一位虚拟猫咪的照护者,帮助提升猫咪的能量、快乐度和清洁度等状态。
- 客户支持 – 一家航空公司的礼宾服务,提供实时行程数据、时间线同步以及领域特定工具。
- 新闻指南 – Foxhollow Dispatch 新闻编辑部助手,具备文章搜索、@提及功能及页面感知响应能力。
- 地铁地图 – 一款基于聊天的地铁规划工具,采用 React Flow 构建线路与站点网络。
快速入门
- 导出
OPENAI_API_KEY。 - 确保已安装
uv。 - 从仓库根目录启动示例,或在项目目录下使用
npm run start:
| 示例 | 仓库根目录命令 | 项目目录命令 | URL |
|---|---|---|---|
| 猫咖啡馆 | npm run cat-lounge |
cd examples/cat-lounge && npm install && npm run start |
http://localhost:5170 |
| 客户支持 | npm run customer-support |
cd examples/customer-support && npm install && npm start |
http://localhost:5171 |
| 新闻指南 | npm run news-guide |
cd examples/news-guide && npm install && npm run start |
http://localhost:5172 |
| 地铁地图 | npm run metro-map |
cd examples/metro-map && npm install && npm run start |
http://localhost:5173 |
功能索引
服务器工具调用以获取应用数据用于推理
- 猫咖啡馆:
- 函数工具
get_cat_status(cat_agent.py)会为代理拉取最新的猫咪状态数据。
- 函数工具
- 新闻指南:
- 代理在回复前会依赖一系列检索工具——
list_available_tags_and_keywords、get_article_by_id、search_articles_by_tags/keywords/exact_text和get_current_page——并使用show_article_list_widget来展示结果(news_agent.py)。 - 隐藏上下文,如特色首页,会被规范化为代理输入,以确保摘要和建议始终基于准确信息(news_agent.py)。
- 代理在回复前会依赖一系列检索工具——
- 地铁地图:
- 地铁代理通过
get_map同步地图数据,并利用list_lines、list_stations、get_line_route和get_station展示线路和站点详情,然后再给出路线指引(metro_map_agent.py)。 show_line_selector使用小部件向用户呈现多选题。- 路线规划回复会将建议路径中各站点的实体来源作为标注附上。
- 地铁代理通过
- 客户支持:
- 礼宾服务会在每次对话开始前附加一个
<CUSTOMER_PROFILE>快照(行程、会员等级、近期时间线),并暴露更改座位、取消行程、增加行李、选择餐食、显示航班选项以及针对每条线程的AirlineStateManager状态请求协助等工具(server.py、support_agent.py、airline_state.py)。
- 礼宾服务会在每次对话开始前附加一个
客户端工具调用,用于改变或获取 UI 状态
- 地铁地图:
- 客户端工具
get_selected_stations会从画布中拉取当前选中的节点,以便代理能够在响应中使用客户端状态(ChatKitPanel.tsx、metro_map_agent.py)。
- 客户端工具
即时执行的客户端效果
- 猫咖啡馆:
- 客户端效果
update_cat_status和cat_say由服务器工具调用,用于同步 UI 状态并显示气泡对话框;这些效果通过 ChatKitPanel.tsx 中的onEffect处理。
- 客户端效果
- 地铁地图:
- 客户端效果
location_select_mode在选择线路后由服务器动作处理器流式传输(server.py),并更新地铁地图画布(ChatKitPanel.tsx)。 - 客户端效果
add_station则由代理在地图更新后流式传输,以立即同步画布并聚焦新创建的站点(metro_map_agent.py、ChatKitPanel.tsx)。
- 客户端效果
- 客户支持:
- 服务器会在工具或小部件操作后流式传输
customer_profile/update效果,使侧边栏始终反映最新的行程、会员等级和时间线数据(support_agent.py、server.py)。
- 服务器会在工具或小部件操作后流式传输
页面感知的模型响应
- 新闻指南:
- ChatKit 客户端会在
article-id头部中传递当前打开的文章 ID,以便后端可以将响应限定在“当前页面”范围内(ChatKitPanel.tsx)。 - 服务器会读取该请求上下文,并暴露
get_current_page工具,使代理无需用户粘贴内容即可加载完整内容(main.py、news_agent.py)。
- ChatKit 客户端会在
进度更新
- 新闻指南:
- 检索工具在搜索标签、作者、关键词、精确文本或加载当前页面时会流式传输
ProgressUpdateEvent消息,从而让 UI 显示“正在搜索…”或“正在加载…”的状态(news_agent.py)。 - 事件查找代理在扫描日期、星期几或关键词时也会发出进度通知,以在较长时间的查询过程中保持用户知情(event_finder_agent.py)。
- 检索工具在搜索标签、作者、关键词、精确文本或加载当前页面时会流式传输
- 地铁地图:
- 地铁代理在调用
get_map获取地图信息时会发出进度更新;同时,在等待客户端工具调用get_selected_stations完成时也会发出进度更新(metro_map_agent.py)。
- 地铁代理在调用
回复生命周期中的 UI 状态
- 地铁地图:
- 客户端会在回复开始时锁定地图交互,并在流式传输结束时解锁,以防止在代理更新期间画布状态发生偏移,方法是添加
onResponseStart和onResponseEnd处理程序(ChatKitPanel.tsx)。
- 客户端会在回复开始时锁定地图交互,并在流式传输结束时解锁,以防止在代理更新期间画布状态发生偏移,方法是添加
不含操作的组件
- 猫咪休息室:
- 服务器工具
show_cat_profile流式传输一个在 profile_card_widget.py 中定义的展示组件。
- 服务器工具
含有操作的组件
- 猫咪休息室:
- 服务器工具
suggest_cat_names流式传输一个带有操作配置的组件,这些配置指定了由客户端处理的cats.select_name和cats.more_names操作。 - 当用户点击该组件时,这些操作会在 ChatKitPanel.tsx 中的
handleWidgetAction回调函数中被处理。
- 服务器工具
- 客户支持:
- 航班和餐食组件会携带操作负载(
flight.select、support.set_meal_preference)进行流式传输,以便在预订前捕获用户的选择,这些组件基于.widget模板构建而成(flight_options.py、meal_preferences.py、support_agent.py)。
- 航班和餐食组件会携带操作负载(
- 新闻指南:
- 文章列表组件会渲染“查看”按钮,这些按钮会分发
open_article操作,用于客户端导航和互动(news_agent.py、article_list_widget.py)。 - 事件查找器会流式传输一个包含时间线的组件,其中的“查看事件详情”按钮配置为由服务器端处理,以便用户可以内联展开条目(event_finder_agent.py、event_list_widget.py)。
- 文章列表组件会渲染“查看”按钮,这些按钮会分发
- 地铁地图:
- 服务器工具
show_line_selector流式传输一个带有line.select操作的组件,该操作在点击列表项时触发(metro_map_agent.py、line_select_widget.py)。
- 服务器工具
由服务器端处理的组件操作
- 猫咪休息室:
cats.select_name操作同样由服务器端处理,以反映数据更新,并在 server.py 中流式传输更新后的名称建议组件。- 该操作通过 ChatKitPanel.tsx 中的
handleWidgetAction回调函数使用chatkit.sendAction()调用。
- 客户支持:
- 操作处理器会持久化预订、餐食、追加销售和重新预订信息;锁定组件;记录隐藏上下文;并在用户点击
flight.select、support.set_meal_preference、booking.*、upsell.*或rebook.select_option时刷新个人资料(server.py)。
- 操作处理器会持久化预订、餐食、追加销售和重新预订信息;锁定组件;记录隐藏上下文;并在用户点击
- 新闻指南:
view_event_details操作在服务器端处理,以更新时间线组件中的扩展描述,而无需往返模型(server.py)。
- 地铁地图:
line.select操作由服务器端处理,用于流式传输更新后的组件,向对话中添加一个<LINE_SELECTED>的隐藏上下文条目,流式传输助手消息以询问用户是否要在该线路的起点或终点添加车站,并触发客户端的location_select_mode效果以同步 UI(server.py)。
附件
- 客户支持:
- 端到端的图片附件:后端会提供上传/下载 URL,强制执行图片/大小限制,并将上传的文件转换为数据 URL 供模型使用(attachment_store.py、main.py、thread_item_converter.py)。React 面板会注册
attachments.create操作,通过签名的 URL 进行上传,并在旅客分享灵感照片时将附件放入编辑器中(CustomerContextPanel.tsx)。
- 端到端的图片附件:后端会提供上传/下载 URL,强制执行图片/大小限制,并将上传的文件转换为数据 URL 供模型使用(attachment_store.py、main.py、thread_item_converter.py)。React 面板会注册
口述转文字(语音转文本)
- 客户支持:
- 聊天编辑器支持内置的口述功能(点击麦克风按钮即可说话)。该功能在客户端通过
composer.dictation启用(ChatKitPanel.tsx),并在服务器端通过实现ChatKitServer.transcribe()来处理(server.py)。
- 聊天编辑器支持内置的口述功能(点击麦克风按钮即可说话)。该功能在客户端通过
注释
- 地铁地图:
plan_route工具会将计划路线中的每个车站作为实体来源呈现在助手消息中。这些车站既以内联注释的形式出现在助手消息中,也出现在来源列表中。- 客户端的实体点击处理器会将 React Flow 画布平移到被点击的车站位置(ChatKitPanel.tsx、metro_map_agent.py)。
对话标题
- 猫咪休息室:
- 在用户为猫命名后,
set_cat_name工具会锁定该名称,并将对话标题更新为{name}’s Lounge,然后保存(cat_agent.py)。
- 在用户为猫命名后,
- 客户支持:
- 一个轻量级的标题代理会在第一条用户消息时为对话命名,且不会延迟首次回复(title_agent.py、server.py)。
- 新闻指南:
title_agent会在第一条用户消息时运行,以在没有标题的情况下生成一个简短的、适合新闻编辑部的标题(server.py、title_agent.py)。
- 地铁地图:
- 地铁服务器使用专门的
title_agent来在第一次交互时设置一个简短的地铁规划标题,并将其持久化到对话元数据中(server.py、title_agent.py)。
- 地铁服务器使用专门的
实体标签(@提及)
- 新闻指南:
- 实体搜索和预览功能支持在消息编辑器中对文章/作者进行@提及(输入
@或点击@按钮),并通过/articles/tags接口渲染悬停预览(ChatKitPanel.tsx, main.py)。 - 被标记的实体会被转换为模型可读的标记,以便智能体能够获取正确的记录(
<ARTICLE_REFERENCE>/<AUTHOR_REFERENCE>)(thread_item_converter.py)。 - 在智能体引用具体内容之前,文章引用标签会通过指定的
get_article_by_id工具解析为完整文章(news_agent.py)。
- 实体搜索和预览功能支持在消息编辑器中对文章/作者进行@提及(输入
- 地铁地图:
- 消息编辑器中的实体搜索会列出所有车站,用户可以通过@提及它们(输入
@或点击@按钮);点击标签还会将画布上的对应车站置为焦点(ChatKitPanel.tsx)。 - 被标记的车站会被转换为包含完整线路元数据的
<STATION_TAG>块,这样智能体无需再次查找即可作答(thread_item_converter.py, server.py)。
- 消息编辑器中的实体搜索会列出所有车站,用户可以通过@提及它们(输入
工具选择(编辑器菜单)
- 新闻指南:
- ChatKit客户端配置了
composer.tools选项,用于指定编辑器菜单中的可用工具(ChatKitPanel.tsx)。 - 编辑器中的工具按钮允许用户强制指定特定的智能体(
event_finder、puzzle),并在请求中设置tool_choice(config.ts)。 - 后端会根据这些工具选择将请求路由到相应的专用智能体,若无法处理则回退到新闻指南智能体(server.py)。
- ChatKit客户端配置了
自定义页眉操作
- 地铁地图:
- 聊天页眉右侧提供了一个图标切换按钮(
dark-mode/light-mode),用于在客户端层面切换应用的主题颜色(ChatKitPanel.tsx)。
- 聊天页眉右侧提供了一个图标切换按钮(
图像生成
- 猫咪休息室:
cat_agent包含一个配置了3张部分图像的ImageGenerationTool。- 猫咪休息室服务器的
respond方法在调用stream_agent_response时传入了ResponseStreamConverter(partial_images=3),以便助手在流式传输每一张部分图像时正确计算图像生成进度。
常见问题
相似工具推荐
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。