自定义插件开发
自定义插件用于适配不同后端协议,把后端原始流式数据转换为 SDK 标准结构。
插件类型
| 插件类型 | 接口 | 适用场景 |
|---|---|---|
| Stream 插件 | IChatPlugin | 配合 useStream / StreamMixin 使用,转换单次流式输出 |
| Agent 插件 | IAgentPlugin | 配合 useAgent / AgentMixin / AgentBehavior 使用,支持工具和状态 |
Stream 插件示例
ts
import type {
IChatPlugin,
ChatPluginContext,
ChatStreamResponseData,
} from '@tencent/ssv-ai-sdk-shared';
export class MyStreamPlugin implements IChatPlugin {
name = 'MyStreamPlugin';
transformResponse(raw: any): ChatStreamResponseData {
return {
id: raw.id,
messageID: raw.message_id || raw.id,
content: raw.delta?.content,
reason: raw.delta?.reasoning,
error: raw.error,
};
}
onComplete(context: ChatPluginContext) {
context.setAssistantStatus('idle');
}
}
在 Stream 中使用
tsx
import { useStream } from '@tencent/ssv-ai-sdk-react';
import { MyStreamPlugin } from './MyStreamPlugin';
const { parts, generate } = useStream({
api: {
streamEndpoint: {
url: 'https://your-api.com/stream',
},
},
mode: 'stream',
plugins: [new MyStreamPlugin()],
});
await generate({ input: '请帮我总结这段内容' });
Agent 插件示例
Agent 插件继承 Stream 插件能力,额外可以提供工具定义和初始状态。
ts
import type {
IAgentPlugin,
AgentPluginContext,
AgentState,
ExecutableTool,
} from '@tencent/ssv-ai-sdk-shared';
export class MyAgentPlugin implements IAgentPlugin {
name = 'MyAgentPlugin';
getInitialState(): AgentState {
return { ready: true };
}
getTools(): ExecutableTool[] {
return [];
}
init(context: AgentPluginContext) {
context.setAgentState('ready', true);
}
}
大多数 Agent 场景推荐直接使用 AG-UI 插件。
@ssv-lab