故障排查与错误码说明
本文汇总 Desktop、Control API 和 Runtime 中常见、可操作的错误。先看错误码和完整消息, 再看运行状态、最近事件,最后看日志。大多数问题都能据此确定是附件、合同、模型、插件、 执行器还是存储层出错。
最短诊断流程
CLI:
scientific-agent status RUN_ID
scientific-agent status RUN_ID --events
Control API:
curl -sS http://127.0.0.1:8000/api/v1/health | jq
curl -sS http://127.0.0.1:8000/api/v1/diagnostics | jq
curl -sS http://127.0.0.1:8000/api/v1/runs/RUN_ID/state | jq
桌面端:打开 Control Room,先看 State 的 current_terminal_failure 和 Recent failures,再看 Timeline 的 Failures 过滤器、Jobs 和 Model calls。Settings → About 可以打开日志位置。
怎样阅读一条错误
Control API 的应用错误通常使用统一结构:
{
"error": {
"code": "AUTONOMOUS_PLANNER_UNAVAILABLE",
"message": "The language-model task planner could not produce a validated decomposition: ..."
}
}
桌面端会把它显示为“控制 API 错误 · 错误码”,下一行是完整消息。诊断时注意:
code是稳定的错误类别,适合检索文档和日志;message才包含本次失败的具体原因,例如文件类型冲突、模型路由不存在或插件依赖缺失;- HTTP
409表示当前状态或已冻结数据发生冲突,不等于服务器宕机; - HTTP
422表示请求或科学合同不合法; - HTTP
502多见于上游模型服务调用失败或其返回值始终无法通过校验; - Timeline 中的 failure type 和事件名不一定是 Control API 错误码,应结合所属 Job、Model call
和
current_terminal_failure一起判断。
例如:
AUTONOMOUS_PLANNER_UNAVAILABLE
data_roles[0] role research_dataset conflicts with trusted attachment kind unknown
真正根因是第二行:规划模型把附件当作数据集,但 Runtime 的可信静态分析没有识别出该格式。 这不是网络错误,也不表示文件内容损坏。
理解运行状态
| 状态 | 含义 | 下一步 |
|---|---|---|
CREATED |
合同已创建,尚未开始 | Start 或 resume |
RUNNING |
正在规划或执行 | 等待;检查 Timeline/SSE |
PAUSED |
已安全暂停 | 修正外部条件后 Resume |
BLOCKED |
当前决策无法前进 | 看失败、备注和缺失输入,必要时介入 |
CAPABILITY_MISSING |
合同需要的能力不可用 | 启用/修复插件后 Resume |
BUDGET_EXHAUSTED |
某项预算到上限 | 审查结果;有限更新预算后 Resume |
INTERRUPTED |
进程在非安全终态退出 | Recover 或 resume |
RECOVERING |
正在恢复未完成工作 | 等待并检查 Jobs |
CANCELLING |
正在请求作业停止 | 等待 Executor 确认 |
CANCELLED |
已取消,终态 | 创建新运行继续 |
SUCCESS |
所有指标和产物条件满足 | 审查并导出 |
FAILED |
不可恢复失败或失败预算耗尽 | 查根因,修复后创建新运行 |
不要只根据“进度条不动”判断卡死。长求解器可能没有中间指标;检查 Jobs 的状态和 Timeline 是否仍有心跳更新。
运行生命周期与预算错误码
| 错误码 | 含义 | 解决方案 |
|---|---|---|
RUN_NOT_FOUND |
当前数据目录中不存在该 run ID | 核对 ID 和 Settings → Storage;确认没有切换到另一数据目录 |
INVALID_TRANSITION |
当前状态不允许 Start、Pause、Resume 或 Cancel | 先查看当前状态,只执行状态卡片允许的动作 |
RUN_ACTIVE |
运行仍有活跃 Runtime worker | 等待安全检查点或先 Pause;不要同时发多个控制命令 |
RUN_TERMINAL |
运行已是 SUCCESS、FAILED 或 CANCELLED |
终态不可继续执行;保留旧运行并创建新运行 |
RECOVERY_NOT_ALLOWED |
当前状态不是 INTERRUPTED 或可恢复的孤立 RUNNING |
普通暂停使用 Resume;终态创建新运行 |
RECOVERY_FAILED |
事件重放或检查点恢复失败 | 保存日志和数据目录备份,检查损坏事件/产物,再决定新建运行 |
RUN_LIFECYCLE_UNREADABLE |
事件流无法重放,Runtime 无法可靠判断生命周期 | 不要手改事件文件;备份数据目录并检查首个损坏事件 |
BUDGET_EXHAUSTED |
wall time、动作、实验、模型调用或 token 等达到上限 | 审查已有结果;确有必要时通过受控介入只增加需要的预算 |
SOLVER_CALL_BUDGET_EXCEEDED |
action 请求的求解器调用数超过剩余量;剩余量大于零时只是要求缩小/重规划,等于零时进入耗尽 | 先看详情中的 requested_solver_calls 与 remaining_solver_calls;能缩小批次就不要增额,确需继续时审查 UI 建议的新总上限 |
TRAINING_SAMPLE_BUDGET_EXCEEDED |
action 请求的训练样本数超过剩余量;剩余量大于零时只是要求缩小/重规划,等于零时进入耗尽 | 先看 requested_samples 与 remaining_samples;优先缩小数据批次,必要时有限提高 max_training_samples |
HARD_SAFETY_LIMIT_REACHED |
达到进程级有限保险丝,不是可通过普通预算介入提高的用户上限 | 保存结果并检查失控循环或任务规模;修正合同后创建新任务 |
BUDGET_INCREASE_REQUIRED |
请求的操作必须明确增加预算才能继续 | 给出理由并增加有限额度;不要改成无限预算来掩盖问题 |
NO_BUDGET_CHANGE |
提交的预算与当前值相同 | 无需重试;修改实际需要调整的字段 |
NO_ACCEPTANCE_CHANGE |
新验收条件与当前条件相同 | 无需提交;如需改变,修改 metric、阈值或 trusted 要求 |
INVALID_ACCEPTANCE_UPDATE |
新条件违反状态或验收合同约束 | Pause 后修改,并确保指标有合法 producer |
INVALID_DIRECTIVE |
干预命令类型、理由或参数不合法 | 从 Control Room 可用操作发起,或按 API schema 修正请求 |
附件上传与格式识别
“上传成功”和“已识别为数据集”是两件事。上传阶段会保存并校验文件的名称、大小和 SHA-256,
同时进行不执行文件内容的静态分析;无法识别格式并不会让上传失败,而是把静态类型记为
unknown。自主规划随后必须服从这个可信类型。
自主任务附件格式
| 文件 | 静态类型 | 注意事项 |
|---|---|---|
.csv、.tsv |
dataset |
第一行应为列名,每行一条记录 |
.xlsx |
dataset 或 unknown |
自动选择前几个工作表中的首个安全二维表;只读单元格值和公式缓存值,不执行公式、宏或外部关系 |
.json |
dataset 或 json |
对象数组、等长列数组可识别为数据集;普通配置对象只识别为 JSON |
.py |
python_source |
只做 AST/名称等静态检查,不会在上传阶段执行 |
.lte、.madx、.seq、.tfs、.lattice、.lat |
lattice |
用于加速器晶格输入 |
.zip |
zip_archive 或 solver_bundle |
普通 ZIP 只检查归档结构;同时含非空 README/usage 与 ELF、PE 或 Mach-O 文件头的安全 ZIP 可升格为原生求解器包,画像阶段不执行或整体解压 |
| 选择的文件夹 | directory_bundle 或 solver_bundle |
ZIP 仅作内部传输编码;安全单根目录保留目录身份并报告源码成员,含文档与原生二进制时可进一步识别为求解器包 |
.xls、.parquet、.feather、.npy、普通 .txt 等 |
unknown |
当前自主规划器不能把它们直接认定为研究数据集 |
文件夹上传与 solver_bundle
使用 选择文件夹 时,客户端发送 source_kind=directory,后端验证单根目录后识别为
directory_bundle;固定 ZIP 只作内部传输编码,不再把目录降格为普通压缩包。目录仍占用一个
附件名额。Web 与 Desktop 都限制为最多 512 个普通文件、编码前合计 50 MiB、编码后最多
10 MiB、路径最多 32 层且 UTF-8 路径不超过 1,024 字节。危险路径、多个根、规范化后重复路径、
读取失败或过程中变化的文件和超限内容会被拒绝;Desktop 原生选择还会拒绝 symlink 与特殊
文件。支持目录项的 WebUI 浏览器可以直接拖入文件夹;否则请使用 选择文件夹。
Web File API 无法保留 Unix mode,浏览器归档因此把普通文件写成非执行条目;这本身不会阻止
求解器识别,Runtime 会在隔离工作区中确保选中的求解器二进制可执行。后端仅在安全 ZIP 同时
包含非空 README/usage 和 ELF、PE 或 Mach-O 文件头时升格为 solver_bundle。README 最多读取
64 KiB,作为不可信文档上下文;二进制不会启动,归档也不会整体解压。危险或重复路径、symlink、
加密成员、膨胀风险、成员过多会阻止目录画像;手工上传的 ZIP 未声明目录来源时仍显示
zip_archive。
正常的 XLSX 现在可以直接用于自主回归研究。为保证上传内容不会变成执行入口,解析器有意采用以下边界:
- 选择扫描范围内首个具有非空、唯一表头且至少一行数据的二维工作表;
- 不运行公式,只使用文件中已有的缓存标量值;没有缓存值的公式单元格按空值处理;
- profile 阶段会忽略并报告宏部件;需要密封 holdout 的回归任务会拒绝含宏的工作簿;
- 不跟随外部关系,不接受加密、重复、符号链接或危险路径成员;
- XML、工作表数量、行列、单元格、文本和 ZIP 解压体积都有固定上限。
复杂或不安全的 XLSX 仍可能被标成 unknown,或在回归 holdout 阶段返回
HOLDOUT_DATASET_INVALID。此时按下面方式整理:
- 使用唯一、非空的首行列名,取消合并单元格,避免标题、说明文字和数据混在同一区域。
- 如果表格包含公式,在 Excel 中重新计算并保存,确保缓存值已写入文件。
- 移除 VBA/宏、外部链接和加密;或把需要分析的工作表另存为 CSV UTF-8。
- 如果另存为 CSV,一个文件只保留一张二维表,然后重新上传并发起任务。
- 如果文件只是背景材料而不是数据表,在任务描述中明确写“该附件仅作为
research_input, 不作为 dataset”。
仅修改扩展名不能把 XLSX 变成 CSV;必须实际导出或转换文件内容。
常见上传错误码
| 错误码 | 含义 | 解决方案 |
|---|---|---|
REQUEST_VALIDATION_FAILED |
文件数、字段长度或请求结构不符合接口 schema | 检查字段名和类型;Desktop 单个自主任务最多添加 20 个附件,打包后的一个文件夹占一个名额 |
INVALID_UPLOAD_FILENAME / INVALID_FILE_NAME |
文件名包含路径、反斜杠或不是纯文件名 | 只传 data.csv,不要传绝对路径或 ../data.csv |
EMPTY_UPLOAD |
文件是空文件 | 确认源文件大小大于 0 后重新选择 |
UPLOAD_TOO_LARGE |
超过当前接口配置的单文件限制 | 拆分文件、使用受控数据导入能力,或调整服务端明确允许的限制 |
INVALID_UPLOAD_ID / INVALID_UPLOAD_MEDIA_TYPE |
API 客户端传入的上传 ID 或媒体类型格式错误 | 让服务生成 upload ID,并使用标准 MIME type |
INVALID_UPLOAD_SHA256 |
声明的 SHA-256 不是 64 位十六进制字符串 | 重新计算并传入小写或大写均可的完整 SHA-256 |
UPLOAD_SIZE_MISMATCH / UPLOAD_HASH_MISMATCH |
声明的大小或 hash 与收到的字节不一致 | 不要在计算 hash 后再次转换文件;对最终上传字节重新计算 |
UPLOAD_ALREADY_EXISTS |
自定义 upload ID 已被占用 | 使用新 ID,或省略 ID 让服务生成 |
UPLOAD_NOT_FOUND |
暂存 ID 不存在、已删除或已过期 | 在同一 Desktop 数据目录重新上传,并使用新返回的 ID |
UPLOAD_INTEGRITY_ERROR |
暂存文件与记录的大小、hash 或元数据不一致 | 停止使用该暂存项,保留日志,重新上传原始文件;同时检查磁盘和同步软件 |
UPLOAD_NOT_ALLOWED |
当前幂等恢复流程不允许引入新的上传内容 | 使用原请求重试,或用新幂等键创建新任务 |
大数据集更适合由受控能力从明确位置导入,不要把超大二进制内容塞进普通 JSON/Base64 请求。
自主规划错误
Desktop 的“一句话开干”流程必须先由已连接的 Scientific Reasoner 生成严格结构化的意图草案, 再由 Runtime 对附件角色、能力、验收条件和权限进行确定性校验。
| 错误码 | 含义 | 解决方案 |
|---|---|---|
SCIENTIFIC_REASONER_REQUIRED |
没有已连接的科学推理模型配置 | 在 Settings → Providers 配置并测试具有 scientific_reasoning 角色的模型 |
AUTONOMOUS_PLANNER_UNAVAILABLE |
模型路由不可用、调用失败,或模型输出在有限修复后仍未通过严格校验 | 先读消息尾部;路由问题测试 Provider,字段/附件冲突按具体消息修复后重试 |
AUTONOMOUS_TASK_INVALID |
请求或可信附件无法安全编译为任务;模型给出的能力建议冲突不会再单独触发此错误 | 检查附件 ID、任务字段和完整消息;若只看到旧版 executor suggestion conflict,请升级并重新创建任务 |
AUTONOMOUS_PLAN_NEEDS_CLARIFICATION |
规划置信度不足,或目标存在会改变合同的歧义 | 在 Planning Control Room 的 等待输入 Timeline 卡片中补充信息,或明确授权采用合理默认值继续;这不是运行错误 |
AUTONOMOUS_INPUT_REQUIRED |
计划需要但当前没有提供数据集、求解器或其他输入 | 根据消息列出的角色补传输入;不需要该步骤时改写任务目标 |
AUTONOMOUS_CAPABILITY_MISSING |
项目中没有能力满足某个必需步骤 | 安装/启用对应项目插件,或改写为现有能力能够完成的任务 |
AUTONOMOUS_CATALOG_CHANGED |
规划冻结后,能力目录或 Provider 绑定发生变化 | 以当前能力目录重新提交一个自主任务,不要复用旧冻结计划 |
AUTONOMOUS_RECOVERY_CONFLICT |
保存的计划、附件、目录或恢复检查点彼此不再匹配 | 保留旧运行用于审计;使用当前附件和能力新建任务 |
AUTONOMOUS_IDEMPOTENCY_UNAVAILABLE |
无法安全持久化或恢复幂等创建记录 | 检查数据目录和磁盘;状态恢复后用相同请求重试,避免随意更换请求体 |
INVALID_IDEMPOTENCY_KEY |
幂等键为空、过长或包含控制字符 | 使用 1–256 个可打印字符 |
IDEMPOTENCY_KEY_CONFLICT |
同一个幂等键被用于不同请求体 | 原请求使用原键重试;修改后的任务必须换新键 |
AUTONOMOUS_PLANNER_UNAVAILABLE 是一个外层类别。以下消息尾部最常见:
| 消息片段 | 根因 | 处理 |
|---|---|---|
role research_dataset conflicts with trusted attachment kind unknown |
附件格式或结构未被静态识别为数据集;旧版本也会对 XLSX 返回此消息 | 升级后重新上传 XLSX;其他格式转成 CSV/TSV 或表格型 JSON |
role reference_solver conflicts with ... |
普通源文件被模型误判为参考求解器 | 提供真正的求解入口并在任务中说明;否则把附件作为 source_code 或 research_input |
role accelerator_lattice conflicts with ... |
非晶格文件被规划成晶格输入 | 使用受支持的晶格格式,或明确附件的实际用途 |
references an unknown attachment |
模型或恢复计划引用了不在本次请求中的附件 ID | 重新上传并重新规划,不要手工复用过期 ID |
duplicate attachment_id |
同一附件被分配了多个角色 | 一个附件只能有一个整体角色;同时包含特征和目标列时使用 research_dataset |
unknown ... / fields are invalid |
模型返回了 schema 外字段、枚举或权限字段 | 检查模型是否支持严格结构化输出;必要时更换模型或 API format |
no route / route is not configured |
科学推理路由不存在或没有可用 fallback | 在 Settings → Providers 修正模型和任务路由后测试连接 |
timeout / rate limit / quota |
上游超时、限流或额度不足 | 缩小任务、等待限流恢复、检查额度;仅对瞬时错误重试 |
附件角色必须服从画像中的确定性 allowed_data_roles:数据集角色只接受 dataset;配置只接受普通
json;source_code 接受单个 .py 或含已识别源码成员的 directory_bundle;参考求解器必须是
静态判断为 solver-like 的 Python/目录/ZIP 或已确认的 solver_bundle;插件包必须含项目插件
manifest;无法更具体分类的文件只能安全地作为 research_input。
模型给出的 suggested_capability 只用于审计对照,不是授权。确定性编译器会根据已确认的研究意图
和可信附件重新推导必需步骤;即使建议在 Catalog 中精确且唯一命中,也不能新增 lease、选择生成能力
或触发安装。冲突、目录外、多余 executor 以及其他未被独立选择的建议会写入 warning,不会让任务
创建失败。只有确定性推导出的必需能力确实不存在时,才返回
AUTONOMOUS_CAPABILITY_MISSING。语义意图来自结构化 LLM 草案,不由另一套关键词规则重新解释;复用
Runtime 生成代码、发布新的持久插件、降级到有界符号基线分别需要显式的 UI/API 权限,默认全部
关闭,绝不从原文子串推断。
规划失败和需要澄清都发生在创建 Research Run 及准备项目插件之前:不会创建输入产物,项目插件状态不变, 暂存附件会保留。Desktop 会把需要澄清投影到 Planning Control Room Timeline,而不是错误横幅;这个页面是 会话级的预运行规划界面,不是一个半配置的 Research Run。Desktop 不会把失败的 LLM 规划悄悄替换成关键词规则。
无法创建研究合同
acceptance metric has no producer / CRITERION_METRIC_UNAVAILABLE
所选能力的 metric_outputs 中没有验收指标,或要求 trusted 指标却没有 authorized trusted
evaluator 能够产生它。
- 打开能力详情核对实际指标名。
- 检查大小写、点号和下划线;指标会规范化,但不能凭近似名称匹配。
- 项目插件开发者需同时更新
plugin.yaml与 Python manifest。 - 如果指标必须独立评估,加入对应 trusted evaluator 能力;否则不要虚假降低可信要求。
重复或冲突的验收条件
acceptance_criteria 中每个 metric 只能出现一次,且第一项必须与 acceptance 完全相同。
合并同名条件或选择更严格的一项。
CAPABILITY_CONSTRAINT_UNKNOWN 或能力约束无效
约束引用了未授权能力,或 when / require 不是合法映射。先把能力加入合同,从能力示例跑通,
再增加冻结参数;嵌套字段必须与项目插件的实际输入一致。
Provider 或模型失败
| 错误码或现象 | 含义 | 解决方案 |
|---|---|---|
PROVIDER_NOT_CONFIGURED |
请求引用了未保存的 Provider | 在 Settings → Providers 新建或改用已有 Provider |
PROVIDER_NOT_CONNECTED |
Provider 存在但未连接,或凭据测试失败 | 重新保存凭据并运行 Test connection;检查代理、证书和网络 |
MODEL_ROUTE_NOT_CONFIGURED |
指定模型没有所需任务路由 | 为 scientific_reasoning、代码生成等任务配置 profile 与 routing |
MODEL_ROUTE_NOT_AVAILABLE |
运行时没有可用 profile 或 fallback | 查看 Model calls 中每条路由失败原因,恢复至少一条可用路由 |
PROVIDER_MODEL_MISMATCH |
Provider 与模型/profile 绑定不一致 | 选择该 Provider 实际提供的模型,重新保存绑定 |
MODEL_ROUTING_MANAGED_EXTERNALLY |
当前路由由外部配置管理,UI 不能修改 | 修改外部配置源并重启/刷新,不要在 UI 反复提交 |
LIVE_MODEL_SWITCH_UNAVAILABLE |
当前运行阶段不允许实时切换模型 | 等待安全检查点,或为新运行配置模型 |
ASK_MODEL_NOT_CONFIGURED |
只读 Ask 功能没有模型 | 配置 Ask/科学推理路由 |
ASK_MODEL_UNAVAILABLE |
Ask 调用失败 | 查看上游状态、凭据、限流和 Model call 记录后重试 |
ASK_MODEL_INVALID_RESPONSE |
Ask 返回值不符合预期结构 | 核对 structured-output 模式,或更换兼容模型 |
ASK_MODEL_BUDGET_EXHAUSTED |
Ask 模型调用或 token 预算耗尽 | 审查已用预算;需要时通过受控介入增加有限预算 |
找不到密钥
CLI 配置中的 auth_env 是环境变量名,不是密钥值:
export OPENAI_API_KEY="..."
python -c 'import os; print(bool(os.environ.get("OPENAI_API_KEY")))'
从不同终端、systemd 或 IDE 启动时,环境变量可能没有传入。桌面端应在 Settings → Providers 重新保存凭据并运行 Test connection。
Codex CLI 未登录
codex login
完成浏览器登录后,回到 Settings 重新检测。确保 Desktop 与终端使用同一操作系统用户和同一个 Codex 配置目录。
连接成功但结构化输出失败
- 核对 API format 与端点:Responses、Chat Completions、Anthropic Messages 不可混用。
- 为兼容端点尝试其确实支持的
json_schema、json_object或tool_call。 - Anthropic Messages 不支持这里的
json_object模式。 - 增加 schema repair 只能处理有限格式偏差,不能修复不兼容 API。
超时或频繁重试
查看 Model calls 的延迟、错误码、重试数和 fallback。若显式设置了 max_output_tokens,可先调整该值或任务规模,再谨慎增加 timeout_seconds。持续的 401/403、model not found 和配额错误不会因为重试而改善。
插件问题
这里的“插件”均指本项目的科学能力插件。
| 错误码 | 含义 | 解决方案 |
|---|---|---|
PLUGIN_NOT_FOUND |
当前项目插件目录中没有该 ID | 刷新插件列表并核对 manifest 中的精确 ID |
PLUGIN_NOT_INSTALLED |
尝试 Enable/Disable 时插件尚未安装 | 先 Install,再 Enable |
PLUGIN_UNAVAILABLE |
插件已登记但依赖、入口或环境不可用 | 查看 missing_dependencies、load_error 和 worker 日志 |
PLUGIN_INSTALL_FAILED |
安装、依赖环境创建或 manifest 校验失败 | 根据完整消息修复归档、版本或依赖;不要只重复安装 |
PLUGIN_UPDATE_FAILED |
更新包或重建环境失败 | 确认源包可读、磁盘充足、版本有效且插件未被运行占用 |
PLUGIN_IN_USE |
活跃运行正在使用该插件 | 先等待运行终态,或安全暂停/取消后再更新或停用 |
PLUGIN_ID_RESERVED |
自定义插件使用了 Runtime 保留 ID | 修改 manifest ID 和包目录后重新打包 |
INVALID_PLUGIN_ARCHIVE |
ZIP/Base64 或归档结构无效 | 重新生成干净 ZIP;不要包含路径穿越、符号链接或多个 manifest |
PLUGIN_ACTIVATION_REQUIRED |
自主计划需要未安装/未启用插件,但自动准备关闭 | 手工安装并启用,或允许本次任务自动准备项目插件 |
PLUGIN_PREPARATION_FAILED |
自主准备选中插件时安装或启用失败 | 打开插件详情读取具体依赖/入口错误,修复后重新提交任务 |
UNKNOWN_CAPABILITY / CAPABILITY_NOT_FOUND |
合同引用的能力不存在或已被停用 | 从当前 Capabilities 列表重新选择精确名称 |
CAPABILITY_PROVIDER_MISMATCH |
能力绑定到不存在或版本不匹配的 provider | 删除过期 pin,或选择当前已启用插件提供的版本与 operation |
Installed 但能力不可选
插件还没有 Enable,或启用后发现依赖缺失。打开详情检查 status、missing_dependencies 和 load_error。
entrypoint 无法导入
entrypoint 使用 package.module:ClassName,不是文件路径。确认:
- ZIP 或目录中包含该 Python package;
- package 目录有
__init__.py; - 类继承
ScientificPlugin; - 依赖装在 Scientific Agent 实际使用的 Python 环境中;
- import 阶段没有执行依赖外部文件或网络的副作用。
ZIP 被拒绝
常见原因是多个 plugin.yaml、压缩包内含虚拟环境/符号链接、路径穿越、加密条目,或超过 10 MiB/50 MiB/512 文件限制。只打包清单、源代码和少量必要资源。
能力调用输入错误
从能力详情复制 example,再逐项替换。普通输入不能有清单未声明的键;需要的产物必须放在 artifact_inputs,不能把 artifact ID 当普通路径字段传入。
求解器适配插件没有发布
识别为 solver_bundle 不等于获得发布权限。请先在新建页勾选 允许发布可复用插件。随后合同
要求产出 file-solver-adapter-v1 源码和 Local Executor 的通过验证记录;固定 publisher 只接受
solver_bundle、adapter_source、validation 三个不可变来源,并在 Control 进入受管理安装和
启用前,核对记录声明的通过状态、接口、精确来源 hash 与 Artifact 谱系。
| 错误码 | 含义与处理 |
|---|---|
ADAPTER_VALIDATION_NOT_PASSED / INVALID_ADAPTER_VALIDATION |
重新执行有界、文档化的冒烟测试;不要手改摘要或伪造通过记录 |
SECURITY_REVIEW_FAILED / SECURITY_REVIEW_DENIED |
检查配置的 ExternalBinarySecurityReviewer 决定,不要绕过拒绝或异常 |
SOLVER_ADAPTER_CANDIDATE_MISSING |
核对运行是否生成 bundle、adapter source 与 validation,且三者谱系一致 |
SOLVER_ADAPTER_PUBLICATION_FAILED |
查看发布消息中的包结构、谱系、hash、身份冲突、安装或启用错误 |
SOLVER_ADAPTER_DELIVERY_FAILED |
科学运行仍可能成功;单独检查发布/导出阶段,未完成前不要声称插件可用 |
默认 reviewer 状态 permissive_deferred 只表示允许继续发布,并明确记录没有独立恶意软件扫描、
签名验证、来源认证或二进制安全审查;它不是安全批准。validation 记录和摘要 attestation 只证明
所声明的状态、身份与谱系,也不是冒烟测试确实执行或二进制安全的独立证明。
Local Executor 问题
JOB_FAILED、EXPERIMENT_FAILED 等通常是 Timeline 事件或运行 failure type,不是 Control API
错误码。它们只说明执行失败,根因应从对应 Job 的 failure_type、退出码、stdout 和 stderr 读取。
- 命令找不到:依赖工具没有安装在应用进程的 PATH 中。用同一用户和环境在终端确认。
- 输出缺失:生成代码没有写入 JobSpec 声明的相对文件名。
- 退出码非零:查看 Jobs 中保存的 stdout、stderr 和结构化 failure type。
MEMORY_ERROR/ OOM /SIGKILL:Runtime 生成的普通本地作业当前申请 8,192 MiB;POSIX Local Executor 会施加地址空间上限。先缩小样本 mini-batch、对坐标或推理分块,并确认算法没有把完整场重复复制到内存;不要只把科学模型换掉来掩盖实现问题。- 取消很慢:外部进程没有及时处理终止信号;等待状态完成,必要时在隔离环境中清理。
- 路径被拒绝:输入/输出必须留在工作区,不能使用绝对路径或
..。
不要通过放宽路径检查来修复任务;应修正 JobSpec 或代码的文件约定。
产物或谱系问题
| 错误码 | 含义 | 解决方案 |
|---|---|---|
ARTIFACT_NOT_FOUND |
当前运行中没有该 artifact ID,或记录已不可用 | 核对 run ID 与 artifact ID;从 Lineage 重新打开,不要猜测 ID |
ARTIFACT_ACCESS_DENIED |
请求访问 evaluator-private 或其他受保护产物 | 不要尝试绕过;通过公开指标、证据或 trusted evaluator 结果审查 |
ARTIFACT_HASH_MISMATCH |
文件内容与冻结 SHA-256 不一致 | 停止运行、备份现场,检查磁盘/同步/手工修改,再恢复或重算 |
ARTIFACT_METADATA_MISMATCH |
文件大小、类型或其他记录元数据不一致 | 按完整消息检查记录与文件;不要手工“修平”元数据 |
ARTIFACT_PATH_INVALID |
产物路径越界、含绝对路径/.. 或不满足工作区约束 |
修改项目插件/JobSpec,只使用声明的工作区相对路径 |
ARTIFACT_CONTENT_UNAVAILABLE |
记录存在但内容无法读取、下载或安全公开 | 检查文件是否仍在、权限和底层 I/O;私有内容不会因下载接口而解密公开 |
SCIENTIFIC_OBJECT_NOT_FOUND |
查询的 claim、evidence、hypothesis 等科学对象不存在 | 从当前运行的 Science/Lineage 视图重新获取 ID |
SCIENTIFIC_EXPORT_FAILED |
科学结果导出失败 | 检查磁盘、目标路径和相关产物完整性;科学结果本身不因此变成成功或失败 |
hash mismatch / 产物损坏
底层文件与记录的 SHA-256 不一致。不要覆盖记录或重新计算 hash 来掩盖问题。
- 停止该运行。
- 保存日志和损坏文件的副本。
- 从已验证备份恢复整个相关运行,或创建新运行重算。
- 检查同步盘、手工编辑和磁盘故障。
Lineage 中没有预期关系
插件应通过 artifact inputs、已有 artifact ID 或同一次返回中的 parent_names 声明关系。仅在 metadata 的自由文本中写文件名不会形成谱系边。
无法预览文件
控制室内置文本和 CSV 预览;大型或二进制产物可能只能下载。下载后使用领域工具打开,并核对 UI 中的类型、大小和 hash。
结果交付与自动导出问题
科学运行达到 SUCCESS 后,生成插件发布和结果包导出是独立的交付阶段。交付失败不会把已经满足
验收条件的科学结果改成失败,但也不能把未准备完成的包报告为“已交付”。
| 错误或事件 | 含义 | 解决方案 |
|---|---|---|
REUSABLE_PLUGIN_CANDIDATE_MISSING |
合同要求可复用插件,但没有合格候选产物 | 检查运行是否生成模型、推理源码、评估和 predictor output 等必需产物 |
MINIMAL_EXAMPLE must ... |
最小示例不是 UTF-8 .py、语法无效,或只有 import/说明文字而没有实际调用 |
生成一个可直接运行的最小调用脚本,并把输出 Artifact type 声明为 MINIMAL_EXAMPLE |
USAGE_GUIDE must ... |
使用说明不是 UTF-8,或没有明确覆盖 input、output、domain、fallback | 在说明中补齐这四项接口/适用域/回退约定,并声明为 USAGE_GUIDE;当前校验查找这四个英文关键词 |
GENERATED_PLUGIN_PUBLICATION_FAILED |
候选插件安装、冻结或发布失败 | 查看 publication 事件的具体缺失产物、谱系、hash 或安装错误 |
GENERATED_PLUGIN_DELIVERY_FAILED |
已发布插件的交付步骤失败 | 确认发布事件成功,再检查目标目录、归档和权限 |
SOLVER_ADAPTER_CANDIDATE_MISSING |
合同要求求解器适配插件,但三源候选不完整或谱系不匹配 | 核对 solver_bundle、adapter_source 和 validation 的 Artifact ID、hash 与 producer |
SOLVER_ADAPTER_PUBLICATION_FAILED |
适配包、三源校验、安装或启用失败 | 查看发布失败详情;不要绕过 reviewer、hash、attestation 或受管理安装检查 |
SOLVER_ADAPTER_DELIVERY_FAILED |
求解器适配插件交付阶段失败 | 保留成功科学运行,单独修复适配器发布/导出条件后再交付 |
AUTONOMOUS_EXPORT_FAILED |
自主结果导出失败 | 检查产物完整性、磁盘空间和导出日志后重新导出 |
AUTONOMOUS_DELIVERY_PREPARATION_FAILED |
自动结果包准备失败 | 保留成功运行,修复消息指出的发布/导出条件,再单独重试交付 |
存储与恢复问题
| 错误码 | 含义 | 解决方案 |
|---|---|---|
INVALID_STORAGE_STRATEGY |
迁移策略不是 move 或 keep |
在 Settings 选择受支持策略,或修正 API 请求 |
STORAGE_LOCATION_BUSY |
仍有 RUNNING、CANCELLING、RECOVERING 运行或后台任务 |
等待完成或安全暂停后再迁移 |
STORAGE_LOCATION_INVALID |
新位置不是绝对路径或不可作为数据目录 | 选择本机可写的绝对目录 |
STORAGE_LOCATION_OVERLAP |
数据目录与 cache/config 目录互相包含 | 选择完全独立的目录,不要选其父目录或子目录 |
STORAGE_LOCATION_EMPTY |
keep 指向的目录没有已有 Scientific Agent 数据 |
选择真实旧数据目录;新目录迁移应使用 move |
STORAGE_MIGRATION_FAILED |
目标非空、复制/校验失败或文件系统报错 | 保留源目录不动,检查空间和权限;修复后通过 Settings 重试 |
RUNTIME_BACKUP_FAILED |
备份创建失败 | 检查磁盘空间、目录权限和底层 I/O 后重试 |
找不到旧运行
最常见原因是 --data-dir 不同。运行:
scientific-agent --data-dir EXPECTED_DIR status RUN_ID
桌面端在 Settings → Storage 查看当前目录。不要把 cache 目录误当 data 目录。
数据目录不可写或空间不足
检查目录权限、挂载状态和可用空间。先暂停运行并创建备份,再通过 Settings 或 /storage/location 迁移。不要在应用运行时手工移动一半目录。
resume 被拒绝
只有可继续状态才能 resume。SUCCESS、FAILED 和 CANCELLED 是终态。对 INTERRUPTED 使用 Recover;对 BUDGET_EXHAUSTED 先审查并通过受控介入增加有限预算。
Control API 问题
| HTTP 状态 | 常见含义 |
|---|---|
| 401 | 正在访问 Desktop 内部 API,但缺少或使用了错误临时令牌 |
| 403 | 通过了会话边界,但所请求的私有产物不允许当前接口公开 |
| 404 | Run/artifact/plugin ID 不存在,或在开发模式调用 Desktop-only shutdown |
| 409 | 生命周期冲突、重复命令或当前状态不允许该操作 |
| 413 | 上传体超过当前端点限制 |
| 422 | JSON 字段、枚举、分页或科学命令契约无效 |
| 500 | 本地存储、导出或其他服务端操作失败;读取完整错误并保留日志 |
| 502 | 上游模型/Provider 失败,或其返回值没有通过结构化校验 |
| 错误码 | 含义 | 解决方案 |
|---|---|---|
DESKTOP_SESSION_REQUIRED |
缺少 Desktop 进程生成的临时 bearer token | 从 Desktop UI 调用;自建客户端需使用当前会话令牌,不能复用旧令牌 |
DESKTOP_ONLY |
在开发/非 Desktop 模式调用了 Desktop 专用接口 | 使用对应模式支持的接口,不要通过伪造 mode 绕过 |
INVALID_PAGINATION |
limit、cursor 组合或范围非法 |
回到第一页并使用响应返回的 cursor |
INVALID_CURSOR |
cursor 超过当前事件流/结果集 | 丢弃旧 cursor,从当前有效位置重新请求 |
REQUEST_VALIDATION_FAILED |
请求体没有通过 API schema | 查看字段级 detail,修正类型、必填字段、枚举或长度 |
先访问 /api/v1/health 确认端口与 mode。开发服务的交互式 schema 在 /api/v1/docs。SSE 断线后使用上次 cursor 重连,不要同时启动大量从 after=0 开始的流。
Benchmark 问题
--prepare-only失败:先确认 Xsuite/ML 依赖和 spec 中相对base_config路径。- spec hash 不一致:冻结规格、基础配置或协议相关文件发生改变;不要强行复用旧结果目录。
- 没有有效成功结果:查看各 trial 的 Runtime 状态和可信验收指标,而不仅是聚合报告。
- integrity 失败:该报告无效;检查私有数据泄漏、事件冻结、predictor hash 和跨运行隔离。
- 重跑没有从头开始:difficulty runner 设计为按 slot 恢复;若要独立实验,使用新的
--data-dir。
更新检查不可用
About 页面会显示当前 Desktop 和 Runtime 版本。若发行版没有配置更新源,Check for updates 会明确显示不可用;这不是网络故障。按项目的正式发布渠道安装新版本,并在升级前创建备份。
提交问题时附带什么
提供最小且已脱敏的信息:
- Desktop、Runtime、操作系统和 Python 版本;
- run ID 与最终状态;
diagnostics输出;- Timeline 中相关事件类型和错误码;
- 插件 ID/版本、能力 ID和
load_error; - 可复现的最小配置(删除密钥、私有数据和绝对个人路径)。
不要发送 API key、操作系统凭据、evaluator-private 内容或整份敏感数据目录。
系统 VPN、代理与证书设置
桌面应用遵循操作系统的路由表、DNS 配置和 VPN 路由。Desktop Runtime 还会继承标准代理环境变量、
Windows/macOS 原生代理设置、GNOME 代理设置、Linux 桌面 Portal/PAC 解析、代理绕过规则以及系统证书库;
支持 HTTP、HTTPS 和 SOCKS 代理。显式设置的 HTTP_PROXY、HTTPS_PROXY、ALL_PROXY、
NO_PROXY、SSL_CERT_FILE 和 SSL_CERT_DIR 具有最高优先级。
系统路由变化会立即生效;应用会在模型服务请求前刷新代理设置,因此切换系统网络后无需重新配置模型服务商。