import { streamText, generateText, ToolSet } from 'ai'; import { IAgentModelProviderOption, McpServerConfig } from './type'; import { ProviderV2 } from '@ai-sdk/provider'; import { OpenAIProvider, createOpenAI } from '@ai-sdk/openai'; import { createDeepSeek, DeepSeekProvider } from '@ai-sdk/deepseek'; import { WebMcpClient } from '../WebMcpClient'; export declare const AIProviderFactories: { openai: typeof createOpenAI; deepseek: typeof createDeepSeek; }; /** 一个通用的ai-sdk的Agent封装 * @summary 内部自动管理了 llm, mcpServer, ai-sdk的clients 和 tools * @returns 暴露了 chat, chatStream方法 */ export declare class AgentModelProvider { llm: ProviderV2 | OpenAIProvider | DeepSeekProvider; /** 当前mcpServers对象集合。键为服务器名称,值为 McpServerConfig 或任意的 MCPTransport * 参考: https://ai-sdk.dev/docs/ai-sdk-core/tools-and-tool-calling#initializing-an-mcp-client */ mcpServers: Record; /** 当前ai-sdk的 mcpClient 对象集合,键为服务器名称 */ mcpClients: Record; /** 当前 mcpClients 所对应的tools,键为服务器名称 */ mcpTools: Record>; /** 需要实时过滤掉的tools name*/ ignoreToolnames: string[]; /** Agent 自动更新所有的tools 后的事件 */ onUpdatedTools: (() => void) | undefined; /** Agent 内部报错时,抛出的错误事件 */ onError: ((msg: string, err?: any) => void) | undefined; /** 缓存 ai-sdk response 中的 多轮会话的上下文 */ responseMessages: any[]; /** 是否使用 ReAct 模式(通过提示词而非 function calling 进行工具调用) */ useReActMode: boolean; constructor({ llmConfig, mcpServers }: IAgentModelProviderOption); /** 创建一个 ai-sdk的 mcpClient, 创建失败则返回 null */ private _createOneClient; /** 关闭一个 mcpClient */ private _closeOneClient; /** 创建所有 mcpClients */ private _createMpcClients; /** 兼容两种 client 类型的 tools 获取方法 */ private _getClientTools; /** 查询所有 mcpClients 的 tools, 失败则保存为null */ private _createMpcTools; /** 关闭所有的 clients */ closeAll(): Promise; /** 创建所有的 mcpClients,并更新它们的tools */ initClientsAndTools(): Promise; /** 仅刷新已连接 clients 的 tools(不重建 client,适合工具目录动态变化场景) */ refreshTools(): Promise; /** 全量更新所有的 mcpServers */ updateMcpServers(mcpServers?: Record): Promise; /** 插入一个新的mcpServer,如果已经存在则返回false */ insertMcpServer(serverName: string, mcpServer: McpServerConfig): Promise Promise; close: () => Promise; } | null>; /** 通过服务器名称删除mcpServer: mcpServers mcpClients mcpTools ignoreToolnames */ removeMcpServer(serverName: string): Promise; /** 创建临时允许调用的 tools 集合,合并 mcpTools 与 extraTool */ private _tempMergeTools; /** 获取当前激活的 tools 名称列表(过滤 ignoreToolnames) */ private _getActiveToolNames; /** 生成 ReAct 模式的系统提示词(包含工具描述) */ private _generateReActSystemPrompt; /** 执行 ReAct 模式下的工具调用 */ private _executeReActToolCall; /** ReAct 模式的对话实现 */ private _chatReAct; /** * 检查消息内容是否包含图片 * @param content 消息内容 * @returns 是否包含图片 */ private _messageHasImage; /** * 从消息中移除图片,但保留文本内容 * @param message 原始消息 * @returns 移除图片后的消息(如果只有图片没有文本,返回 null) */ private _removeImageFromMessage; /** * 构建用于模型调用的消息列表 * 策略:保留所有文本消息,仅限制图片数量(类似 magentic-ui 的 maybe_remove_old_screenshots) * * @param systemMessage 系统提示词 * @param allMessages 所有消息历史(包括初始消息和后续对话) * @param maxImages 最多保留的图片数量(默认3张) * @returns 构建好的消息列表 */ private _buildMessagesForModel; /** ReAct 模式非流式对话 */ private _chatReActNonStream; /** ReAct 模式流式对话 */ private _chatReActStream; private _chat; chat(options: Parameters[0] & { maxSteps?: number; message?: string; }): Promise; chatStream(options: Parameters[0] & { maxSteps?: number; message?: string; }): Promise; }