Skip to content
On this page

自定义插件开发

自定义插件用于适配不同后端协议,把后端原始流式数据转换为 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 插件

Released under the MIT License.