ワンクリックで
x-chat-provider
专注于自定义 Chat Provider 的实现,帮助将任意流式接口适配为 Antdv Next X 标准格式
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
专注于自定义 Chat Provider 的实现,帮助将任意流式接口适配为 Antdv Next X 标准格式
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
跨仓库 PR 同步追踪技能。当用户需要追踪一个上游仓库(如 ant-design)的 fix/feature 变更,并同步到下游移植仓库(如 antdv-next)时使用此技能。 触发场景:用户给出一个起始 commit SHA,需要列出从该 commit 往后所有需要同步的 PR, 并生成带优先级排序的同步表格和 checklist 模板。 也适用于:两个仓库之间的变更追踪、上下游组件库同步分析、跨框架移植任务管理。 如果用户提到"同步上游"、"追踪 PR"、"从某个 commit 开始"、"移植 fix"、"同步 issue" 等关键词,务必使用此技能。 特别地:若用户只说"同步仓库"、"继续同步"、"sync",应优先读取下游仓库根目录的 .sync-upstream.json 文件,从中获取上次同步位置,无需用户再次提供任何参数。
Focus on explaining how to use the useXChat Hook, including custom Provider integration, message management, error handling, etc.
Focus on implementing custom Chat Provider, helping to adapt any streaming interface to Antdv Next X standard format
Use when building or reviewing Markdown rendering with @antdv-next/x-markdown, including streaming Markdown, custom component mapping, plugins, themes, and chat-oriented rich content.
Focus on explaining the practical configuration and usage of XRequest, providing accurate configuration instructions based on official documentation
专注讲解如何使用 useXChat Hook,包括自定义 Provider 的集成、消息管理、错误处理等
| name | x-chat-provider |
| version | 0.0.1 |
| description | 专注于自定义 Chat Provider 的实现,帮助将任意流式接口适配为 Antdv Next X 标准格式 |
本技能专注解决一个问题:如何将你的流式接口快速适配为 Antdv Next X 的 Chat Provider。
不涉及的:useXChat 的使用教程(那是另一个技能)。
| 层级 | 包名 | 核心作用 | 典型使用场景 |
|---|---|---|---|
| UI层 | @antdv-next/x | Vue 3 UI 组件库 | 构建聊天界面、气泡、输入框 |
| 逻辑层 | @antdv-next/x-sdk | 开发工具包 | 数据流管理、Provider、Hook |
| 渲染层 | @antdv-next/x-markdown | Markdown 渲染器 | 内容展示、代码高亮 |
⚠️ 重要提醒:这三个包功能定位不同,请务必从正确的包导入所需功能
// ✅ 正确导入示例 import { Bubble } from "@antdv-next/x"; // UI组件 import { AbstractChatProvider } from "@antdv-next/x-sdk"; // Provider基类 import { XRequest } from "@antdv-next/x-sdk"; // 请求工具
graph LR
A[原始API接口] -->|适配| B[Chat Provider]
B -->|提供数据| C[useXChat Hook]
C -->|渲染| D[Antdv Next X UI]
E[XRequest] -->|网络请求| B
| 概念 | 角色定位 | 核心职责 | 使用场景 |
|---|---|---|---|
| Chat Provider | 🔄 数据适配器 | 将任意接口格式转换为Antdv Next X标准格式 | 私有API适配、格式转换 |
| useXChat | 🧩 Vue 3 Composable | 管理对话状态、消息流、请求控制 | 构建AI对话界面 |
| XRequest | 🌐 请求工具 | 处理所有网络通信、认证、错误处理 | 统一请求管理 |
| 依赖包 | 版本要求 | 自动安装 | 作用 |
|---|---|---|---|
| @antdv-next/x-sdk | ≥0.0.1 | ✅ | 核心SDK,包含Provider和Hook |
| @antdv-next/x | 最新版 | ✅ | UI组件库,构建聊天界面 |
# 自动检查并修复版本
npm ls @antdv-next/x-sdk
# 如版本不符,自动提示:
npm install @antdv-next/x-sdk@latest
| SDK版本 | 支持功能 | 兼容性 |
|---|---|---|
| ≥0.0.1 | 完整Provider功能 | ✅ 推荐 |
graph TD
A[开始] --> B{使用标准API?}
B -->|是| C[使用内置Provider]
B -->|否| D{私有API?}
D -->|是| E[自定义Provider]
D -->|否| F[特殊格式?]
F -->|是| E
F -->|否| C
C --> G[OpenAI/DeepSeek Provider]
E --> H[四步创建自定义Provider]
| Provider类型 | 适用场景 | 使用方式 |
|---|---|---|
| OpenAI Provider | 标准OpenAI API | 直接导入使用 |
| DeepSeek Provider | 标准DeepSeek API | 直接导入使用 |
| 场景 | 推荐方案 | 示例 |
|---|---|---|
| 调用官方OpenAI | 内置OpenAI Provider | new OpenAIProvider() |
| 调用官方DeepSeek | 内置DeepSeek Provider | new DeepSeekProvider() |
| 公司内部API | 自定义Provider | 见四步实现 |
| 第三方非标API | 自定义Provider | 见四步实现 |
journey
title 自定义Provider实现路径
section 分析阶段
接口分析: 2: 用户
section 开发阶段
创建类: 5: 用户
检查验证: 1: 用户
section 集成阶段
配置使用: 1: 用户
| 信息类型 | 示例值 | 你的接口 |
|---|---|---|
| 接口URL | https://your-api.com/chat | _____________ |
| 请求方法 | POST | _____________ |
| 请求格式 | JSON | _____________ |
| 响应格式 | Server-Sent Events | _____________ |
| 认证方式 | Bearer Token | _____________ |
// 你的实际请求格式
interface MyAPIRequest {
query: string; // 用户问题
context?: string; // 对话历史(可选)
model?: string; // 模型选择(可选)
stream?: boolean; // 是否流式(可选)
}
// 流式响应格式
// 实际响应:data: {"content": "回答内容"}
interface MyAPIResponse {
content: string; // 回答片段
finish_reason?: string; // 结束标记
}
// 结束标记:data: [DONE]
// MyChatProvider.ts
import { AbstractChatProvider } from "@antdv-next/x-sdk";
// ====== 第1处修改:定义你的接口类型 ======
interface MyInput {
query: string;
context?: string;
model?: string;
stream?: boolean;
}
interface MyOutput {
content: string;
finish_reason?: string;
}
interface MyMessage {
content: string;
role: "user" | "assistant";
timestamp: number;
}
// ====== 第2处修改:修改类名 ======
export class MyChatProvider extends AbstractChatProvider<
MyMessage,
MyInput,
MyOutput
> {
// 参数转换:将useXChat参数转为你的API参数
transformParams(
requestParams: Partial<MyInput>,
options: XRequestOptions<MyInput, MyOutput, MyMessage>,
): MyInput {
if (typeof requestParams !== "object") {
throw new Error("requestParams must be an object");
}
return {
query: requestParams.query || "",
context: requestParams.context,
model: "gpt-3.5-turbo", // 根据你的API调整
stream: true,
...(options?.params || {}),
};
}
// 本地消息:用户发送的消息格式
transformLocalMessage(requestParams: Partial<MyInput>): MyMessage {
return {
content: requestParams.query || "",
role: "user",
timestamp: Date.now(),
};
}
// ====== 第3处修改:响应数据转换 ======
transformMessage(info: {
originMessage: MyMessage;
chunk: MyOutput;
}): MyMessage {
const { originMessage, chunk } = info;
// 处理结束标记
if (!chunk?.content || chunk.content === "[DONE]") {
return { ...originMessage, status: "success" as const };
}
// 累加响应内容
return {
...originMessage,
content: `${originMessage.content || ""}${chunk.content || ""}`,
role: "assistant" as const,
status: "loading" as const,
};
}
}
| 检查项 | 状态 | 说明 |
|---|---|---|
| 类名正确 | ⏳ | MyChatProvider → 你的类名 |
| 类型匹配 | ⏳ | 接口类型与实际API一致 |
| 方法完整 | ⏳ | 3个方法都已实现 |
| 无request方法 | ⏳ | 确认没有实现request方法 |
| 类型检查通过 | ⏳ | tsc --noEmit 无错误 |
# 运行类型检查
npx tsc --noEmit MyChatProvider.ts
# 预期结果:无错误输出
// 1. 引入依赖
import { MyChatProvider } from "./MyChatProvider";
import { XRequest } from "@antdv-next/x-sdk";
// 2. 配置XRequest(由x-request技能负责)
const request = XRequest("https://your-api.com/chat", {
// 认证配置
headers: {
Authorization: "Bearer your-token-here",
"Content-Type": "application/json",
},
// 默认参数
params: {
model: "gpt-3.5-turbo",
max_tokens: 1000,
temperature: 0.7,
},
// 流式配置
manual: true,
});
// 3. 创建Provider实例
const provider = new MyChatProvider({
request, // 必须传入XRequest实例
});
// 4. 现在可以配合useXChat使用
// 这部分由use-x-chat技能负责
export { provider };
| 场景类型 | 难度 | 示例链接 | 说明 |
|---|---|---|---|
| 标准OpenAI | 🟢 简单 | [内置Provider示例](reference/EXAMPLES.md#场景1:OpenAI 格式) | 直接使用内置Provider |
| 标准DeepSeek | 🟢 简单 | [内置Provider示例](reference/EXAMPLES.md#场景2 DeepSeek 格式) | 直接使用内置Provider |
| 私有API | 🟡 中等 | [自定义Provider的一些细节场景](reference/EXAMPLES.md#场景3:自定义 provider) | 需要四步实现 |
📖 完整示例:EXAMPLES.md 包含所有实际场景的完整代码
graph TD
User[开发者] --> A{选择方案}
A -->|标准API| B[内置Provider]
A -->|私有API| C[自定义Provider]
B --> D[use-x-chat]
C --> E[x-chat-provider]
E --> D
D --> F[x-request]
F --> G[最终应用]
| 技能角色 | 技能名称 | 前置条件 | 核心职责 | 使用场景 |
|---|---|---|---|---|
| 🏗️ 创建者 | x-chat-provider | 无 | 创建自定义Provider | 适配私有/非标API |
| 🧩 使用者 | use-x-chat | 需要Provider | 构建AI对话界面 | Vue 3 组件开发 |
| 🔧 配置者 | x-request | 无 | 配置请求参数认证 | 统一网络请求管理 |
适用:从零构建完整的AI对话产品
sequenceDiagram
participant Dev as 开发者
participant CP as x-chat-provider
participant UX as use-x-chat
participant XR as x-request
Dev->>CP: 1. 创建自定义Provider
CP->>Dev: 返回适配后的Provider
Dev->>XR: 2. 配置XRequest参数
XR->>Dev: 返回配置好的request
Dev->>UX: 3. 使用Provider构建界面
UX->>Dev: 完整的AI对话应用
实施步骤:
适用:为其他框架或团队提供Provider
graph LR
A[私有API] -->|适配| B[自定义Provider]
B -->|导出| C[其他框架使用]
B -->|发布| D[NPM包]
核心价值:
适用:快速原型开发或标准API调用
graph LR
A[标准API] -->|内置| B[OpenAI/DeepSeek Provider]
B -->|直接使用| C[use-x-chat]
C -->|配置| D[x-request]
D --> E[快速上线]
优势:
强制要求:
request 方法❌ 严重错误(绝对禁止):
// ❌ 严重错误:自己实现 request 方法
class MyProvider extends AbstractChatProvider {
async request(params: any) {
// 禁止自己写网络请求逻辑!
const response = await fetch(this.url, { ... });
return response;
}
}
✅ 强制要求(唯一正确方式):
// ✅ 强制要求:使用 XRequest,禁止实现 request 方法
class MyProvider extends AbstractChatProvider {
// 禁止实现 request 方法!
transformParams(params) {
/* ... */
}
transformLocalMessage(params) {
/* ... */
}
transformMessage(info) {
/* ... */
}
}
// 强制使用 XRequest:
const provider = new MyProvider({
request: XRequest("https://your-api.com/chat"),
});
创建 Provider 前,确认:
完成后:
tsc --noEmit 确保无类型错误