Skip to content
On this page

Agent

Agent 是 v2.0 的多轮对话与工具调用能力,适用于需要接入 AG-UI、工具注册、工具结果回传、Agent 状态管理的业务场景。

只需要单次流式生成时,请使用 Stream

核心特征

  • 主 API:send(params, options)
  • 输出结构:messages[].parts
  • 维护多轮消息历史
  • 支持 AgentState 状态管理
  • 支持 setTools() / setTool() 运行时注册工具
  • 支持 Frontend 工具结果回传:toolExecutedsetMessages()send({}, { type: 'tools' })

框架接入案例

框架接入方式示例
ReactuseAgentReact 示例
Vue 3useAgentVue 3 示例
Vue 2AgentMixinVue 2 示例
小程序AgentBehavior小程序示例

与 Stream 的核心差异

特性StreamAgent
对接场景单次流式生成多轮 Agent 对话
核心方法generate()send()
输出结构partsmessages[].parts
消息历史不维护维护
工具注册不支持setTools() / setTool()
状态管理agentStateagentState
ReactuseStreamuseAgent
Vue 3useStreamuseAgent
Vue 2StreamMixinAgentMixin
小程序当前未导出 StreamBehaviorAgentBehavior

快速使用

tsx
import { useAgent } from '@tencent/ssv-ai-sdk-react';
import { AGUIPlugin } from '@tencent/ssv-ai-sdk-plugin-agui';

const { messages, send, setTools, setMessages, on, off } = useAgent({
  api: {
    chatEndpoint: {
      url: 'https://your-api.com/agent',
    },
  },
  mode: 'stream',
  plugins: [new AGUIPlugin()],
});

await send({ input: '你好' });
vue
<script setup>
import { useAgent } from '@tencent/ssv-ai-sdk-vue';
import { AGUIPlugin } from '@tencent/ssv-ai-sdk-plugin-agui';

const { messages, send, setTools, setMessages, on, off } = useAgent({
  api: {
    chatEndpoint: {
      url: 'https://your-api.com/agent',
    },
  },
  mode: 'stream',
  plugins: [new AGUIPlugin()],
});
</script>
js
import { AgentMixin } from '@tencent/ssv-ai-sdk-vue2';
import { AGUIPlugin } from '@tencent/ssv-ai-sdk-plugin-agui';

export default {
  mixins: [
    AgentMixin({
      api: {
        chatEndpoint: {
          url: 'https://your-api.com/agent',
        },
      },
      mode: 'stream',
      plugins: [new AGUIPlugin()],
    }),
  ],
};
js
import { AgentBehavior } from '@tencent/ssv-ai-sdk-miniprogram';
import { AGUIPlugin } from '@tencent/ssv-ai-sdk-plugin-agui';

Component({
  behaviors: [
    AgentBehavior({
      api: {
        chatEndpoint: {
          url: 'https://your-api.com/agent',
        },
      },
      plugins: [new AGUIPlugin()],
    }),
  ],
});

Messages 与 Parts

Agent 的助手消息使用 parts 表示时序内容:

ts
interface Message {
  id: string;
  role: 'user' | 'assistant' | 'system' | 'tool';
  content?: string;
  extraInfo: any;
  parts?: Part[];
  toolCallId?: string;
}

常见 Part

ts
interface TextPart {
  type: 'text';
  text: string;
  status: 'streaming' | 'done';
}

interface ReasoningPart {
  type: 'reasoning';
  reason: string;
  status: 'streaming' | 'done';
}

interface ToolCallPart {
  type: 'tool_call';
  id: string;
  name: string;
  rawArgs: string;
  args: any;
  status: 'input-streaming' | 'input-available' | 'output-available' | 'output-error';
  result?: any;
  rawResult?: string;
  error?: string;
}

渲染原则:message.parts 顺序逐段渲染,不要只读取 message.content

工具注册

推荐在组件生命周期中注册工具,这样工具 handler 可以通过闭包访问组件状态。

ts
setTools([
  {
    name: 'setThemeColor',
    description: 'Set the page theme color. Use hex format like #1890ff.',
    type: 'frontend',
    parameters: {
      type: 'object',
      properties: {
        color: { type: 'string', description: 'Hex color' },
      },
      required: ['color'],
    },
    handler: async ({ color }) => {
      setThemeColor(color);
      return { success: true, color };
    },
  },
]);

工具结果回传

Frontend 工具执行完成后会触发 toolExecuted。业务层负责把结果追加为 tool 消息,并调用 send({}, { type: 'tools' }) 继续 Agent Run。

ts
on('toolExecuted', ({ toolCallId, toolCallName, result }) => {
  if (UI_ONLY_TOOLS.includes(toolCallName)) return;

  const toolMessage = {
    id: `tool-${Date.now()}`,
    role: 'tool',
    content: typeof result === 'string' ? result : JSON.stringify(result),
    toolCallId,
    extraInfo: {},
  };

  setMessages([...messages, toolMessage]);
  send({}, { type: 'tools' });
});

状态 State

ts
interface AgentChatState {
  messages: Message[];
  error: AIErrorOptions | null;
  status: 'idle' | 'loading' | 'success' | 'failed' | 'stopped';
  assistantStatus: 'idle' | 'loading' | 'reasoning' | 'answering' | 'tool_calling';
  agentState: Record<string, any>;
}

方法 Action

方法说明
send(params, options)发送消息或工具结果
stop()停止当前生成
setMessages(messages)设置消息列表
setTools(tools)批量注册工具
setTool(tool)注册单个工具
setAgentState(path, value)设置 Agent 状态
getAgentState()获取 Agent 状态
resetAgent()重置 Agent
on(event, handler)监听事件
off(event, handler)移除事件监听

事件 Events

事件名说明
toolCallStart工具调用开始
toolCallArgs工具参数流式到达
toolCallEnd工具参数接收完成
toolCallResult后端工具结果到达
toolExecuted前端工具执行完成
runStartedAgent Run 开始
runFinishedAgent Run 结束
runErrorAgent Run 出错
stateSnapshot完整状态快照
stateDelta状态增量更新

Released under the MIT License.