关于 better-chatbot-patterns
面向构建 AI 聊天机器人的开发者,提供可移植并可按项目调整的实现模式,涵盖服务端操作、工具抽象、多 AI 提供商、状态管理与验证。
主要功能
- 01服务端操作的认证与验证模式
- 02可扩展的多类型工具抽象
- 03多 AI 提供商配置与回退
- 04Zustand 状态管理模式
- 05Zod 跨字段验证
适用场景
- 01为表单操作加入认证与权限检查
- 02构建支持 MCP 工具和工作流的系统
- 03在多个 AI 提供商间切换或设置回退
- 04管理复杂工作流状态并验证关联字段
MCP 相关
提供 MCP 工具抽象与集成的实现模式,供开发者用于构建聊天机器人中的工具系统。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ secondsky/ claude-skills --skill better-chatbot-patterns安装后在 Claude Code 中输入/better-chatbot-patterns确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/example-template.txtreferences/example-reference.mdprovider-integration-patterns.mdserver-action-patterns.mdstate-validation-patterns.mdtool-abstraction-patterns.mdscripts/example-script.sh详细介绍
better-chatbot-patterns
状态:生产就绪 最后更新:2025-11-21 依赖项:无 最新版本:[email protected]、[email protected]、[email protected]、[email protected]
概述
此技能从 better-chatbot 项目中提取可复用的模式,供自定义 AI 聊天机器人实现使用。与 better-chatbot 技能(讲解项目约定)不同,此技能提供了可移植的模板,你可以将其调整到任何项目中。
包含的模式:
- 服务端操作验证器(身份验证、验证、FormData)
- 工具抽象系统(多类型工具处理)
- 多 AI 提供商设置
- 工作流执行模式
- 状态管理约定
模式 1:服务端操作验证器
完整实现:实现服务端操作验证器、身份验证验证或 FormData 解析时,加载 references/server-action-patterns.md。
解决的问题:身份验证检查不一致、重复的 FormData 解析样板代码、非标准错误处理,以及服务端操作中的类型安全问题。
三种验证器模式:
validatedAction- 简单验证(无身份验证)validatedActionWithUser- 带用户上下文(需要身份验证)validatedActionWithPermission- 带权限检查(基于角色)
快速示例:
// Server action with automatic auth + validation
export const updateProfile = validatedActionWithUser(
z.object({ name: z.string(), email: z.string().email() }),
async (data, formData, user) => {
// user is authenticated, data is validated
await db.update(users).set(data).where(eq(users.id, user.id))
return { success: true }
}
)
适配你的身份验证系统:Better Auth、Clerk、Auth.js 或自定义身份验证系统。
模式 2:工具抽象系统
完整实现:构建多类型工具系统、MCP 集成或可扩展的工具架构时,加载 references/tool-abstraction-patterns.md。
解决的问题:运行时类型不匹配、重复的类型检查样板代码,以及难以添加新工具类型(TypeScript 无法强制执行运行时类型)。
工作原理:品牌化类型标签可在确保完整 TypeScript 安全性的同时,实现运行时类型收窄。
快速示例:
// Runtime type checking with branded tags
async function executeTool(tool: unknown) {
if (VercelAIMcpToolTag.isMaybe(tool)) {
return await tool.execute() // TypeScript knows tool is MCPTool
} else if (VercelAIWorkflowToolTag.isMaybe(tool)) {
return await executeWorkflow(tool.nodes) // TypeScript knows tool is WorkflowTool
}
throw new Error("Unknown tool type")
}
// Create tagged tools
const mcpTool = VercelAIMcpToolTag.create({
type: "mcp",
name: "search",
execute: async () => { /* ... */ }
})
可扩展:添加新的工具类型,而不会破坏现有代码。
模式 3:多 AI 提供商设置
完整实现:设置多 AI 提供商支持、配置 Vercel AI SDK 或实现提供商回退时,加载 references/provider-integration-patterns.md。
解决的问题:不同的 SDK 初始化模式、特定于提供商的配置,以及用于在运行时切换提供商的统一接口。
支持的提供商:OpenAI、Anthropic(Claude)、Google(Gemini)、xAI(Grok)、Groq。
快速示例:
// Provider registry in lib/ai/providers.ts
export const providers = {
openai: createOpenAI({ apiKey: process.env.OPENAI_API_KEY }),
anthropic: createAnthropic({ apiKey: process.env.ANTHROPIC_API_KEY }),
google: createGoogleGenerativeAI({ apiKey: process.env.GOOGLE_API_KEY })
}
// API route with user provider selection
export async function POST(req: Request) {
const { messages, provider, model } = await req.json()
const selectedModel = getModel(provider, model)
return streamText({ model: selectedModel, messages }).toDataStreamResponse()
}
功能:回退策略、健康检查、成本感知型选择。
模式 4:状态管理(Zustand)
完整实现:实现 Zustand store、工作流状态或复杂的嵌套状态管理时,加载 references/state-validation-patterns.md。
解决的问题:无需变更即可管理复杂的嵌套状态、避免重新渲染问题,并防止状态更新错误。
快速示例:
// Zustand store with shallow update pattern
export const useWorkflowStore = create<WorkflowStore>((set) => ({
workflow: null,
// Shallow update - no deep mutation
updateNodeStatus: (nodeId, status) =>
set(state => ({
workflow: state.workflow ? {
...state.workflow,
nodes: state.workflow.nodes.map(node =>
node.id === nodeId ? { ...node, status } : node
)
} : null
}))
}))
包含的模式:多 store 组织、Immer 集成、持久化中间件。
模式 5:跨字段验证(Zod)
完整实现:实现跨字段验证、密码确认或日期范围时,加载 references/state-validation-patterns.md。
解决的问题:使用一致的错误消息和业务规则验证相关字段(密码确认、日期范围、条件要求)。
快速示例:
// Zod superRefine for cross-field validation
const passwordSchema = z.object({
password: z.string().min(8),
confirmPassword: z.string()
}).superRefine((data, ctx) => {
if (data.password !== data.confirmPassword) {
ctx.addIssue({
path: ["confirmPassword"],
code: z.ZodIssueCode.custom,
message: "Passwords must match"
})
}
})
用例:密码匹配、日期范围、条件字段、业务规则、数组验证。
何时加载参考资料
实现特定的聊天机器人模式时,加载参考文件:
server-action-patterns.md
在以下情况下加载:
- 基于模式:实现服务端操作验证器、身份验证验证、FormData 解析
- 基于身份验证:设置身份验证检查、用户上下文、权限系统
- 基于验证:构建表单验证、模式验证、错误处理
- 基于适配:将模式适配到 Better Auth、Clerk、Auth.js 或自定义身份验证系统
tool-abstraction-patterns.md
加载时机:
- 基于工具:构建多类型工具系统、MCP 集成、工作流工具
- 基于类型:实现运行时类型检查、品牌类型、类型收窄
- 基于执行:创建工具执行器、工具分发器、可扩展工具系统
- 基于扩展:向现有系统添加新的工具类型
provider-integration-patterns.md
加载时机:
- 基于提供方:设置多 AI 提供方支持(OpenAI、Anthropic、Google、xAI、Groq)
- 基于集成:配置 Vercel AI SDK、提供方 SDK、模型注册表
- 基于切换:实现提供方回退、用户模型选择、动态模型加载
- 基于配置:管理 API 密钥、基础 URL、提供方专属设置
state-validation-patterns.md
加载时机:
- 基于状态:实现 Zustand 存储、工作流状态、复杂的嵌套状态
- 基于更新:构建浅层更新模式、无变更更新、状态同步
- 基于验证:创建跨字段验证、密码确认、日期范围验证
- 基于工作流:管理工作流执行状态、节点状态跟踪、动态数据更新
关键规则
始终遵循
✅ 根据你的身份验证系统(Better Auth、Clerk、Auth.js 等)调整模式
✅ 使用品牌类型标签进行运行时类型检查
✅ 对嵌套的 Zustand 状态使用浅层更新
✅ 使用 Zod superRefine 进行跨字段验证
✅ 正确地为工具抽象添加类型
绝不
❌ 不调整代码以适配你的身份验证/角色系统就直接复制 ❌ 未进行运行时检查就假定工具类型 ❌ 直接修改 Zustand 状态 ❌ 对相关字段使用单独的验证器 ❌ 在可扩展系统中省略类型品牌标记
预防已知问题
此技能可预防 5 个常见问题:
问题 #1:身份验证检查不一致
预防措施:使用 validatedActionWithUser 模式(根据你的身份验证系统进行调整)
问题 #2:工具类型不匹配
预防措施:使用带 .isMaybe() 检查的品牌类型标签
问题 #3:状态变更错误
预防措施:使用 Zustand 浅层更新模式
问题 #4:跨字段验证失败
预防措施:使用 Zod superRefine 验证相关字段
问题 #5:提供方配置错误
预防措施:使用统一接口的提供方注册表
使用捆绑资源
模板(templates/)
templates/action-utils.ts- 完整的服务端操作验证器templates/tool-tags.ts- 完整的工具抽象系统templates/providers.ts- 多 AI 提供方设置templates/workflow-store.ts- Zustand 工作流存储
复制到你的项目中,并调整占位符(getUser()、checkPermission() 等)
依赖项
必需:
- [email protected] - 验证(所有模式)
- [email protected] - 状态管理(模式 4)
- [email protected] - Vercel AI SDK(模式 3)
可选(取决于所用模式):
- @ai-sdk/openai - OpenAI 提供方
- @ai-sdk/anthropic - Anthropic 提供方
- @ai-sdk/google - Google 提供方
官方文档
- Vercel AI SDK:https://sdk.vercel.ai/docs
- Zod:https://zod.dev
- Zustand:https://zustand-demo.pmnd.rs
- better-chatbot(来源):https://github.com/cgoinglove/better-chatbot
生产环境示例
这些模式摘自 better-chatbot:
- 在线体验:https://betterchatbot.vercel.app
- 测试:48+ 项 E2E 测试通过
- 错误:0(已在生产环境验证)
- 验证:✅ 多用户、多提供方、工作流执行
Token 效率:约节省 65% | 预防错误数:5 | 已通过生产环境验证:是