主题
常见错误与解决方案
本文引用的源码文件
本文引用的文件
- agent/src/server.js
- agent/src/locales/en.json
- agent/src/locales/zh.json
- agent/src/logger.js
- agent/src/rag/errors.js
- src/background/tool-executor.js
- src/background/local-agent-client.js
- test/unit/fetch-url-network-scope.unit.test.js
- test/unit/workspace-manager.unit.test.js
- test/unit/memory-panel.unit.test.js
- docs/AUDIT_REPORT.md
目录
引言
本文件面向用户、测试人员与开发者,系统化整理 AI Helper 扩展端(Chrome 扩展)与 Agent 本地代理端之间的常见错误。文档按错误类型组织,覆盖网络连接错误、权限拒绝错误、参数验证错误和内部服务器错误四类;每类包含错误码说明、发生原因、正则匹配模式、解决步骤、预防策略、上报与反馈方式,以及社区已知案例与官方修复建议。
本项目为双进程架构:
- Chrome 扩展端(Manifest V3,版本 2.3.1)。
- 独立本地 Agent 代理端(Node.js,入口 agent/src/server.js,npm 包 ai-helper-agent,版本 2.3.1)。 两端通过 HTTP/WebSocket 通信,Agent 修改源码后必须重启进程,新接口才生效。
项目结构与错误边界总览
错误在以下边界产生并被捕获:
- 扩展侧工具执行层:网络访问、浏览器能力、工具参数校验。
- 扩展侧 Agent 客户端:配对、HTTP 请求、WebSocket 连接、上传下载。
- Agent 服务端:路由解析、认证鉴权、文件/命令/MCP/Skill/RAG 等子系统。
- 日志系统:Agent 审计日志 JSON Lines 文件与扩展侧控制台日志。
graph TB UI["用户界面<br/>side_panel / options"] --> ToolExec["工具执行器<br/>tool-executor.js"] ToolExec --> AgentClient["Agent 客户端<br/>local-agent-client.js"] AgentClient --> Server["Agent 服务端<br/>server.js"] Server --> FS["文件系统与安全校验"] Server --> Exec["命令执行"] Server --> MCP["MCP 工具注册与调用"] Server --> Skill["技能系统"] Server --> RAG["知识库检索"] Server --> Logger["审计日志<br/>logger.js"]
图表来源
- src/background/tool-executor.js#L2975-L3093
- src/background/local-agent-client.js#L399-L443
- agent/src/server.js#L388-L425
- agent/src/logger.js#L132-L172
章节来源
核心错误分类与处理机制
- 网络连接错误:包括 Agent 不可达、超时、CORS、协议限制、内网访问拦截、URL 非法、响应读取失败等。
- 权限拒绝错误:包括未提供 token、token 无效、路径不在允许列表、高危命令被拦截、RAG 依赖缺失、端口占用等。
- 参数验证错误:包括缺少 path/url/command/name 等参数、非绝对路径、Windows 非法字符、空数组、大小超限、JSON 解析失败等。
- 内部服务器错误:包括 server.js 顶层异常兜底、RAG 模块加载失败、ZIP/URL 导入失败、打包/解析失败等。
Agent 服务端统一使用 i18n 文案键 error.* 返回结构化错误;扩展侧对网络异常进行降级与友好提示,并保留原始错误用于诊断。
章节来源
- agent/src/locales/zh.json#L1-L91
- agent/src/locales/en.json#L1-L91
- agent/src/server.js#L417-L425
- src/background/local-agent-client.js#L399-L443
架构总览与错误流转图
sequenceDiagram participant User as "用户" participant Panel as "侧边栏/选项页" participant Tool as "工具执行器<br/>tool-executor.js" participant Client as "Agent 客户端<br/>local-agent-client.js" participant Server as "Agent 服务端<br/>server.js" participant Log as "审计日志<br/>logger.js" User->>Panel : 发起任务 Panel->>Tool : 调用工具如 fetch_url Tool->>Tool : 参数校验与网络范围判定 Tool->>Client : 发送 HTTP/WebSocket 请求 Client->>Server : 携带 Bearer Token 的请求 Server->>Server : 认证、路由、业务校验 Server-->>Client : 返回 success/error + httpStatus Client-->>Tool : 翻译后的错误信息 Tool-->>Panel : 展示用户友好提示 Server->>Log : 记录安全/系统/文件/命令日志
图表来源
- src/background/tool-executor.js#L2975-L3093
- src/background/local-agent-client.js#L399-L443
- agent/src/server.js#L417-L425
- agent/src/logger.js#L132-L172
详细错误类别与解决方案
一、网络连接错误
典型场景:
- Agent 服务未启动或不可达。
- 请求超时(AbortError)。
- CORS 跨域限制。
- fetch_url 工具被网络范围策略拦截(非 http/https、内网地址、白名单未命中)。
- URL 非法或缺失。
- 响应内容读取失败。
常见错误码与文案键:
- agentClient.cannotConnectAgent / agentClient.requestTimeout / agentClient.agentRequestFailed
- toolExec.missingUrlParam / toolExec.invalidUrlFormat / toolExec.schemeBlocked / toolExec.networkGateClosed / toolExec.networkNoAllowlist / toolExec.networkHostNotAllowed / toolExec.readResponseFailed / toolExec.requestFailed
- server.js 顶层异常兜底返回 error.internal
正则匹配模式(便于自动化处理与日志分析):
- 连接失败:/无法连接到 Agent|Cannot connect to Agent/
- 请求超时:/请求超时|Request timeout/
- 请求失败:/Agent 请求失败|Agent request failed/
- URL 缺失:/缺少 url 参数|Missing url parameter/
- URL 非法:/无效的 URL|Invalid URL|not a url/
- 协议受限:/仅支持 http/https|Only http/https protocols are supported/
- 内网拦截:/本机/内网地址|private network|localhost|127.0.0.1/
- 响应读取失败:/读取响应内容失败|Failed to read response content/
解决步骤:
- 确认 Agent 已启动且可访问:检查 /api/status 健康检查是否返回成功。
- 若提示“代理服务未连接”,先确认 Agent 进程运行状态,再重试。
- 若出现超时,适当增大超时时间或检查目标服务可用性。
- 若 fetch_url 被拦截:
- 确保 URL 为 http/https。
- 打开“推理”标签的“内网地址访问”总开关。
- 将目标主机加入允许列表(例如 127.0.0.1 或 intranet.example.com)。
- 不要建议用户放开整个内网。
- 若出现 CORS 错误,确认目标服务器允许跨域访问。
- 若响应读取失败,检查响应体是否为有效文本或过大导致截断。
预防最佳实践:
- 在工具入口处严格校验 URL 是否存在、是否合法。
- 在网络范围判定处优先拒绝非 http/https 与非白名单内网地址。
- 对 AbortError 明确区分“超时”与“其他网络错误”。
- 避免把敏感请求头写入控制台日志。
错误上报与反馈:
- 用户侧显示:使用 i18n 文案键(如 toolExec.、agentClient.),给出可操作指引。
- 开发者侧记录:保留 originalError、url、httpStatus,便于定位。
社区已知案例与官方修复建议:
- 审计指出 fetch_url 存在 SSRF 风险,需纳入确认流程、增加目标校验、屏蔽敏感请求头日志。
- 参考修复建议见审计报告中关于 fetch_url 的安全修复条目。
章节来源
- src/background/tool-executor.js#L2975-L3093
- test/unit/fetch-url-network-scope.unit.test.js#L206-L227
- docs/AUDIT_REPORT.md#L190-L222
- agent/src/locales/zh.json#L1-L91
- agent/src/locales/en.json#L1-L91
二、权限拒绝错误
典型场景:
- 未提供认证 token。
- token 无效。
- 路径不在允许列表。
- 高危命令被拦截(sudo、rm -rf、chmod 777、systemd 修改等)。
- RAG 依赖未安装或环境不满足要求。
- 端口已被占用。
常见错误码与文案键:
- error.noToken / error.invalidToken
- security.pathNotInAllowedDir / security.commandBlocked / security.cmd*
- error.ragNotAvailable / error.portInUse
正则匹配模式:
- 认证缺失:/未提供认证 token|No authentication token provided/
- 认证无效:/认证 token 无效|Invalid authentication token/
- 路径不允许:/路径不在允许的目录范围内|Path is not within allowed directories/
- 命令被拦截:/高危命令被拦截|High-risk command blocked/
- RAG 不可用:/RAG 功能依赖未安装|RAG dependencies are not installed/
- 端口占用:/端口已被占用|Port already in use/
解决步骤:
- 若提示未提供 token,重新完成 Agent 配对流程。
- 若 token 无效,检查配对是否过期或被篡改,必要时重新配对。
- 若路径不在允许列表,调整 workdir 或 allowedPaths,确保目标路径在允许范围内。
- 若命令被拦截,评估命令风险,必要时改用受控命令或通过确认流程。
- 若 RAG 不可用,按扩展页面引导安装 RAG 依赖,或运行 aha rag install。
- 若端口占用,停止已有 Agent 进程后再启动。
预防最佳实践:
- 所有需要认证的接口统一校验 Authorization 头。
- 路径与命令在进入业务逻辑前做安全检查。
- RAG 相关功能在检测失败时给出明确安装指引。
- 启动前检查端口占用情况,避免重复监听。
错误上报与反馈:
- 用户侧:显示具体错误原因与操作指引(如“请在设置中打开内网访问并添加主机到白名单”)。
- 开发者侧:记录 security 类别日志,包含 path、command、remote 等信息。
章节来源
- agent/src/server.js#L502-L548
- agent/src/locales/zh.json#L161-L202
- agent/src/locales/en.json#L161-L202
- agent/src/locales/zh.json#L297-L309
- agent/src/locales/en.json#L297-L309
三、参数验证错误
典型场景:
- 缺少 path/url/command/name/steps 等必需参数。
- path/workdir 不是绝对路径。
- Windows 非法字符。
- paths 为空数组。
- 请求体过大、JSON 解析失败、multipart 数据格式不正确。
- RAG 导入内容过大、URL 重定向过多、向量维度不匹配。
常见错误码与文案键:
- error.missingPath / error.missingWorkdir / error.missingCommand / error.missingName / error.missingNameAndSteps
- error.workdirNotAbsolute / error.pathNotAbsolute / error.newNameInvalidChars
- error.bodyTooLarge / error.invalidJson / error.invalidMultipart / error.malformedMultipart
- rag.err_contentTooLarge / rag.err_urlTooManyRedirects / rag.err_embeddingDimensionMismatch
正则匹配模式:
- 缺少参数:/缺少 .* 参数|Missing .* parameter/
- 非绝对路径:/必须是绝对路径|must be an absolute path/
- Windows 非法字符:/Windows 非法字符|Windows invalid characters/
- 请求体过大:/请求体过大|Request body too large/
- JSON 解析失败:/请求体不是有效的 JSON|Request body is not valid JSON/
- multipart 格式错误:/multipart 数据格式不正确|Malformed multipart data format/
- RAG 内容过大:/导入内容超过大小限制|Import content exceeds the size limit/
- 向量维度不匹配:/向量维度不匹配|Embedding dimension mismatch/
解决步骤:
- 补全缺失参数,确保类型正确(字符串、数组、对象)。
- 将 path/workdir 改为绝对路径。
- 清理文件名中的 Windows 非法字符。
- 检查请求体大小与 JSON 格式,避免超大 payload。
- 对于 multipart 上传,确保 boundary、headers、file data 完整。
- RAG 导入时控制文件大小、URL 重定向次数,并确保向量模型维度与配置一致。
预防最佳实践:
- 在路由与工具入口处集中校验参数,尽早返回错误。
- 对超大请求体与文件流式上传设置上限。
- 对 RAG 导入与检索参数进行白名单与范围校验。
- 对向量维度、embedding endpoint 进行预检。
错误上报与反馈:
- 用户侧:提示具体缺失字段或非法值,并给出修正建议。
- 开发者侧:记录 error.* 与 rag.err_* 错误码及 params,便于统计与优化。
章节来源
四、内部服务器错误
典型场景:
- server.js 顶层异常兜底返回 internal。
- RAG 模块加载失败。
- ZIP/URL 导入失败。
- 打包/解析失败。
- npm 更新超时或退出码异常。
常见错误码与文案键:
- error.internal
- error.ragLoadFailed
- error.zipImportFailed / error.urlImportFailed
- error.packFailed / error.parseFailed
- error.npmInstallTimeout / error.npmInstallExitCode / error.updateFailed
正则匹配模式:
- 内部错误:/服务器内部错误|Internal server error/
- RAG 加载失败:/知识库模块加载失败|Failed to load knowledge base module/
- 导入失败:/Zip 导入失败|URL 导入失败|Zip import failed|URL import failed/
- 打包/解析失败:/打包失败|解析失败|Pack failed|Parse failed/
- npm 更新失败:/npm install 超时|npm install exit code|Update failed/
解决步骤:
- 若出现 internal 错误,查看 Agent 终端输出与审计日志,定位异常堆栈。
- 若 RAG 加载失败,尝试重启 Agent 后重试;必要时重装 RAG 依赖。
- 若 ZIP/URL 导入失败,检查压缩包结构或 URL 可达性。
- 若打包/解析失败,检查输入数据完整性与格式。
- 若 npm 更新失败,手动执行 npm install -g ai-helper-agent@latest,并检查网络与镜像源。
预防最佳实践:
- 对异步初始化与外部依赖加载增加 try/catch 与降级策略。
- 对 npm 子进程增加超时与进程树终止保护。
- 对 ZIP/URL 导入增加结构校验与大小限制。
- 对打包/解析过程增加错误码与详细 message。
错误上报与反馈:
- 用户侧:提示“请重启代理端后重试”或“请手动执行更新命令”。
- 开发者侧:记录 system/security/fs/exec 类别日志,附带错误 message 与上下文。
章节来源
依赖关系与耦合分析
- 工具执行器依赖网络范围策略与 i18n 文案,负责前端侧的参数校验与错误翻译。
- Agent 客户端封装 HTTP/WebSocket 请求,统一处理超时、不可达、配对状态。
- Agent 服务端承担认证、路由、业务逻辑与日志记录。
- RAG 错误采用 RagError 类与 translateRagError 函数,保证错误码与参数可翻译。
classDiagram
class ToolExecutor {
+executeFetchUrl(args, toolCallId)
+参数校验()
+网络范围判定()
}
class AgentClient {
+agentRequest(path, body, method, timeoutMs)
+agentGet(path, timeoutMs)
+createExecWebSocket(wsUrl, onMessage, onClose, onError)
}
class Server {
+handleRequest(req, res)
+parseBody(req)
+parseMultipartBody(req)
+jsonResponse(res, status, data)
}
class RagError {
+code
+params
+translateRagError(err, t)
}
ToolExecutor --> AgentClient : "调用"
AgentClient --> Server : "HTTP/WebSocket"
Server --> RagError : "RAG 错误转换"
图表来源
- src/background/tool-executor.js#L2975-L3093
- src/background/local-agent-client.js#L399-L443
- agent/src/server.js#L271-L383
- agent/src/rag/errors.js#L1-L30
章节来源
- src/background/tool-executor.js#L2975-L3093
- src/background/local-agent-client.js#L399-L443
- agent/src/server.js#L271-L383
- agent/src/rag/errors.js#L1-L30
性能与稳定性考量
- 请求体与文件上传大小限制:MAX_BODY_SIZE、MAX_UPLOAD_SIZE,防止内存溢出。
- npm 更新超时保护:90 秒超时,终止整棵进程树防孤儿。
- 日志清理:保留最近 MAX_LOG_FILES 个日志文件,单文件最大 MAX_LOG_SIZE。
- WebSocket 空闲超时由调用方统一管理,避免双重超时冲突。
- Service Worker 生命周期硬约束:保活与消息传递是常见故障点,需在扩展侧做降级与重试。
章节来源
- agent/src/server.js#L132-L137
- agent/src/server.js#L628-L670
- agent/src/logger.js#L8-L11
- src/background/local-agent-client.js#L652-L661
故障排查指南
快速定位步骤:
- 确认 Agent 是否在线:访问 /api/status,观察 version、running、platform 等字段。
- 检查认证:Authorization 头是否携带有效 Bearer token。
- 检查网络范围:fetch_url 是否被 scheme/gate/allowlist 拦截。
- 检查参数:path/url/command/name 是否齐全且类型正确。
- 查看 Agent 审计日志:~/.ai-helper-agent/logs/agent-YYYY-MM-DD.log,过滤 category 与 action。
- 查看扩展侧控制台日志:[AIH] 前缀日志,关注 warn/error。
- 若为 RAG 问题,检查 Node 版本、可选依赖、向量模型维度与 endpoint。
常见错误对照:
- 401/403:认证缺失或 token 无效。
- 400:参数错误或请求体格式错误。
- 404:文件不存在或 API 路径未知。
- 429:操作过于频繁。
- 500:内部服务器错误。
章节来源
结论
通过对扩展端与 Agent 端的错误边界进行系统化梳理,可将常见错误归并为网络连接、权限拒绝、参数验证与内部服务器四类。每类均具备明确的错误码、正则匹配模式与解决步骤。结合 i18n 文案、审计日志与单元测试,可实现用户友好的错误提示与开发者友好的详细日志。建议在工具入口与网络访问处加强参数校验与安全策略,在 Agent 端完善依赖检测与降级处理,以提升整体稳定性与可维护性。
附录:错误复现模板与调试报告格式
错误复现步骤模板:
- 环境信息:操作系统、Node 版本、Agent 版本、扩展版本。
- 触发条件:操作步骤、输入参数、网络环境。
- 预期结果:期望的成功响应或错误提示。
- 实际结果:实际错误码、错误文案、HTTP 状态码。
- 日志附件:Agent 审计日志片段、扩展控制台日志。
- 截图/录屏:关键界面与错误弹窗。
调试报告格式建议:
- 标题:错误类别 + 简要描述。
- 复现步骤:编号步骤,尽量最小化。
- 错误信息:复制粘贴错误文案与原始错误。
- 日志摘要:category、action、timestamp、details。
- 根因分析:参数校验失败、网络范围拦截、认证失败、依赖缺失等。
- 解决方案:用户操作指引与开发者修复建议。
- 回归测试:对应单元测试或集成测试用例链接。
章节来源