一键导入
chatkit-botbuilder
创建生产级 ChatKit 聊天机器人的指南,该机器人将 OpenAI Agents SDK 与 MCP 工具和自定义后端集成。在为任何应用程序构建具有专门功能、实时任务执行和用户隔离的 AI 驱动聊天机器人时使用。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
创建生产级 ChatKit 聊天机器人的指南,该机器人将 OpenAI Agents SDK 与 MCP 工具和自定义后端集成。在为任何应用程序构建具有专门功能、实时任务执行和用户隔离的 AI 驱动聊天机器人时使用。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
自动化浏览器交互,用于网页测试、表单填写、截图和数据提取。当用户需要浏览网站、与网页交互、填写表单、截取屏幕截图、测试 Web 应用程序或从网页提取信息时使用。
为后端代码(Express 路由、MongoDB 模型、Node 服务)生成测试时使用 - 分析文件类型,从 package.json 检测测试框架,生成包含设置/拆卸和边缘情况覆盖的全面测试
当你发现当前可用的技能都不够合适(或用户明确要求你寻找技能)时使用。本技能会基于任务目标和约束,给出一份精简的候选技能清单,帮助你选出最适配当前任务的技能。
Translates English documents to Chinese with accurate semantics and grammar. Invoke when user asks to translate any English documentation or content to Chinese.
使用 OpenAI 和 Google API 进行 AI 图像生成。支持文生图、参考图片、宽高比和并行生成(推荐 4 个并发子代理)。当用户要求生成、创建或绘制图像时使用。
将文件和办公文档转换为 Markdown。支持 PDF、DOCX、PPTX、XLSX、图像(带 OCR)、音频(带转录)、HTML、CSV、JSON、XML、ZIP、YouTube URL、EPub 等。
| name | chatkit-botbuilder |
| description | 创建生产级 ChatKit 聊天机器人的指南,该机器人将 OpenAI Agents SDK 与 MCP 工具和自定义后端集成。在为任何应用程序构建具有专门功能、实时任务执行和用户隔离的 AI 驱动聊天机器人时使用。 |
| license | 完整条款见 LICENSE.txt |
使用 OpenAI ChatKit 框架创建生产级聊天机器人。此技能支持构建以下类型的聊天机器人:
本技能提供从前端配置到后端服务器实现的完整 ChatKit 集成架构模式。
当你需要以下功能时使用此技能:
用户消息
↓
ChatKit 前端 (React/Next.js)
↓ [Authorization Header 中的 JWT Token]
↓
FastAPI 后端 (ChatKit Server)
↓ [从 JWT 提取 user_id]
↓
OpenAI Agent (Agents SDK)
↓ [需要执行工具]
↓
MCP 工具 (自定义工具函数)
↓ [创建/更新/列出数据]
↓
数据库 (用户隔离数据)
↓
响应 → ChatKit → 前端 → 用户
前端 (Next.js + ChatKit SDK)
后端 (FastAPI + ChatKit Server)
代理 (OpenAI Agents SDK)
工具 (MCP + 自定义函数)
数据库
1. 创建 ChatKit Server 类
from chatkit.server import ChatKitServer
from chatkit.store import Store
class MyChatKitServer(ChatKitServer):
def __init__(self):
store = CustomChatKitStore()
super().__init__(store=store)
async def respond(self, thread, input, context):
"""处理用户消息并流式返回 AI 响应"""
user_id = getattr(context, 'user_id', None)
# 创建带包装工具的代理
# 使用官方模式流式响应
2. 创建 MCP 工具包装器
# 从上下文提取 user_id 并注入到工具调用中
def add_task_wrapper(title: str, description: str = None):
return mcp_add_task(user_id=user_id, title=title, description=description)
def list_tasks_wrapper(status: str = "all"):
return mcp_list_tasks(user_id=user_id, status=status)
3. 创建 FastAPI 端点
@router.post("/api/v1/chatkit")
async def chatkit_protocol_endpoint(request: Request):
user_id = request.state.user_id # 从 JWT 中间件获取
context = create_context_object(user_id=user_id)
result = await chatkit_server.process(body, context)
return StreamingResponse(result, media_type="text/event-stream")
4. 配置 JWT 中间件
class JWTAuthMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request, call_next):
# 从 Authorization header 提取 JWT token
# 解码并设置 request.state.user_id
# 所有端点都可以访问已认证的 user_id
1. 配置 ChatKit SDK
const chatKitConfig: UseChatKitOptions = {
api: {
url: `${API_BASE_URL}/api/v1/chatkit`,
domainKey: 'your-domain-key',
fetch: authenticatedFetch, // 带 JWT 的自定义 fetch
},
theme: 'light',
header: { enabled: true, title: { text: 'AI Chat' } },
history: { enabled: true },
}
2. 创建认证 Fetch 包装器
async function authenticatedFetch(input, options) {
const token = localStorage.getItem('access_token')
const headers = {
...options?.headers,
'Authorization': `Bearer ${token}`,
}
return fetch(input, { ...options, headers })
}
3. 集成 ChatKit 组件
import { ChatKitWidget } from '@openai/chatkit-react'
export default function Dashboard() {
return (
<div className="flex gap-4">
{/* 应用内容 */}
{showChat && (
<ChatKitWidget {...chatKitConfig} />
)}
</div>
)
}
4. 添加自动刷新实现实时同步
useEffect(() => {
if (!showChatKit) return
// 聊天打开时立即刷新
fetchTasks()
// 每 1 秒刷新一次实现实时更新
const interval = setInterval(() => {
fetchTasks()
}, 1000)
return () => clearInterval(interval)
}, [showChatKit])
1. 创建带用户隔离的 MCP 工具
def add_task(user_id: str, title: str, description: Optional[str] = None):
"""创建任务 - 从包装器接收 user_id"""
task = Task(
id=str(uuid.uuid4()),
user_id=user_id, # 关键:确保用户隔离
title=title,
description=description,
completed=False,
created_at=datetime.utcnow(),
)
with Session(engine) as session:
session.add(task)
session.commit()
2. 注册 MCP 工具
mcp_server = MCPServer()
mcp_server.register_tool("add_task", add_task)
mcp_server.register_tool("list_tasks", list_tasks)
mcp_server.register_tool("delete_task", delete_task)
# ... 更多工具
三级保障:
# 中间件从 token 提取 user_id
request.state.user_id = payload.get("user_id")
# 工具包装器捕获并注入
def add_task_wrapper(title):
return mcp_add_task(user_id=user_id, ...)
# 数据库强制过滤
WHERE user_id = ? AND task_id = ?
# 使用 Runner.run_streamed 的官方 ChatKit 模式
result = Runner.run_streamed(
task_agent.agent,
agent_input,
context=agent_context,
)
# 使用官方 stream_agent_response 流式传输事件
async for event in stream_agent_response(agent_context, result):
yield event
功能:
参考文件:
功能:
功能:
根本原因: user_id 未传递给 MCP 工具 解决方案: 使用捕获并注入 user_id 的包装函数
根本原因: 数据库查询中缺少 user_id 过滤 解决方案: 在工具级别始终按 user_id 过滤
根本原因: 路由器未包含在 FastAPI 应用中 解决方案: 在 main.py 中包含路由器
根本原因: 自定义 fetch 未添加 JWT token 解决方案: 确保 authenticatedFetch 添加 Bearer token
如需真正的实时(非轮询):
在数据库中存储对话历史:
后端架构: 完整的 FastAPI ChatKit 服务器实现细节和模式
前端集成: Next.js ChatKit 组件配置和认证
MCP 工具指南: 创建带自动 user_id 注入的包装工具函数
用户隔离: 三级用户隔离策略和验证清单
chatkit_server_template.py - 包含所有必需方法的 FastAPI ChatKit 服务器模板
mcp_wrapper_generator.py - 自动生成 MCP 工具包装器的脚本
frontend_config_generator.ts - ChatKit 前端设置的 TypeScript 配置生成器
构建 ChatKit 聊天机器人时需验证:
assets/fastapi-backend-template/ 和 assets/chatkit-nextjs-template/ 复制模板