/** * Agent服务 * 实现浏览器代理的核心逻辑 */ import { BaseChatModel } from '@langchain/core/language_models/chat_models'; import { BaseMessage } from '@langchain/core/messages'; import { Browser } from '../browser/browser'; import { BrowserContext } from '../browser/context'; import { Controller } from '../controller/service'; import { ActionResult, AgentHistoryList, AgentOutput, AgentStepInfo } from './views'; import { SystemPrompt } from './prompts'; import { BrowserState } from '../browser/views'; import { z } from 'zod'; export interface AgentParams { /** 任务描述 */ task: string; /** 语言模型 */ llm: BaseChatModel; /** 浏览器实例 */ browser?: Browser; /** 浏览器上下文 */ browserContext?: BrowserContext; /** 控制器 */ controller?: Controller; /** 是否使用视觉 */ useVision?: boolean; /** 是否为规划器使用视觉 */ useVisionForPlanner?: boolean; /** 保存对话路径 */ saveConversationPath?: string; /** 保存对话路径编码 */ saveConversationPathEncoding?: string; /** 最大失败次数 */ maxFailures?: number; /** 重试延迟 */ retryDelay?: number; /** 系统提示类 */ systemPromptClass?: typeof SystemPrompt; /** 最大输入令牌数 */ maxInputTokens?: number; /** 是否验证输出 */ validateOutput?: boolean; /** 消息上下文 */ messageContext?: string; /** 是否生成GIF */ generateGif?: boolean | string; /** 敏感数据 */ sensitiveData?: Record; /** 可用文件路径 */ availableFilePaths?: string[]; /** 包含的属性 */ includeAttributes?: string[]; /** 最大错误长度 */ maxErrorLength?: number; /** 每步最大动作数 */ maxActionsPerStep?: number; /** 是否在内容中使用工具调用 */ toolCallInContent?: boolean; /** 初始动作 */ initialActions?: Record>[]; /** 记录新步骤回调 */ registerNewStepCallback?: (browserState: any, agentOutput: AgentOutput, step: number) => void; /** 完成回调 */ registerDoneCallback?: (history: AgentHistoryList) => void; /** 工具调用方法 */ toolCallingMethod?: string; /** 页面提取语言模型 */ pageExtractionLlm?: BaseChatModel; /** 规划器语言模型 */ plannerLlm?: BaseChatModel; /** 规划器间隔 */ planningInterval?: number; } export declare class Agent { private agentId; private sensitive_data?; private page_extraction_llm; private available_file_paths?; private task; private useVision; private use_vision_for_planner; private llm; private save_conversation_path?; private save_conversation_path_encoding?; private _last_result; private include_attributes; private max_error_length; private generate_gif; private planner_llm?; private planning_interval; private last_plan; private controller; private max_actions_per_step; private injected_browser; private injected_browser_context; private message_context?; private browser?; private browser_context; private system_prompt_class; private telemetry; private ActionModel; private AgentOutput; private max_input_tokens; private modelName?; private plannerModelName?; private chatModelLibrary?; private tool_calling_method?; private message_manager; private register_new_step_callback?; private register_done_callback?; private history; private n_steps; private consecutive_failures; private max_failures; private retry_delay; private validate_output; private initial_actions?; private action_descriptions; private _paused; private _stopped; version?: string; source?: string; ActionModelSchema?: z.ZodObject; constructor(params: AgentParams); private _setVersionAndSource; private _setModelNames; private _setupActionModels; setToolCallingMethod(toolCallingMethod: string): string | undefined; addNewTask(task: string): void; private _checkIfStoppedOrPaused; step(stepInfo?: AgentStepInfo): Promise; _handleStepError(e: Error): Promise; _makeHistoryItem(modelOutput: AgentOutput | undefined, state: BrowserState, result: ActionResult[]): void; private _removeThinkTags; /** * 转换输入消息为适合规划器模型的格式 * @param inputMessages 输入消息列表 * @param modelName 模型名称 * @returns 转换后的消息列表 */ private _convertInputMessages; getNextAction(inputMessages: BaseMessage[]): Promise; private _logResponse; private _saveConversation; private _writeMessagesToFile; private _writeResponseToFile; private _logAgentRun; run(maxSteps?: number): Promise; /** * 判断是否有太多失败 * @returns 是否有太多失败 */ private _tooManyFailures; private _handleControlFlags; /** * 验证输出 * @returns 验证是否通过 */ private _validateOutput; rerunHistory(history: AgentHistoryList, maxRetries?: number, skipFailures?: boolean, delayBetweenActions?: number): Promise; /** * 执行历史步骤 * @param historyItem 历史项 * @param delay 动作之间的延迟(秒) * @returns 动作结果 */ private _executeHistoryStep; private _updateActionIndices; /** * 从文件加载历史并重新运行 * @param historyFile 历史文件路径,可选 * @param kwargs 传递给rerunHistory的额外参数 * @returns 动作结果的Promise */ loadAndRerun(historyFile?: string, kwargs?: any): Promise; saveHistory(file_path?: string): void; pause(): void; resume(): void; /** * 停止代理 */ stop(): void; private _convertInitialActions; private _runPlanner; } export declare class InterruptedError extends Error { constructor(message: string); }