跳转至

Nexa 错误索引

本索引收录了 Nexa 编译器和运行时可能产生的所有错误代码、原因分析和解决方案。


📖 如何使用本索引

  1. 按错误码查找:如果你看到类似 E001 的错误码,直接在下方表格中查找
  2. 按类别浏览:错误按编译时错误、运行时错误、契约错误、类型错误等分类
  3. 查看解决方案:每个错误都附带详细的原因分析和解决建议

1. 编译时错误 (E0xx)

编译时错误在代码编译阶段检测,表示代码存在语法或语义问题。

E001 - 未声明的标识符

错误信息

Error E001: Undeclared identifier 'X'
  --> main.nexa:15:5
   |
15 |     result = UnknownAgent.run(input);
   |              ^^^^^^^^^^^^^ 'UnknownAgent' not found

原因: - 引用了未定义的 Agent、Tool 或 Protocol - 标识符拼写错误 - 忘记引入必要的模块

解决方案

// ❌ 错误:未声明
result = WeatherBot.run(input);

// ✅ 正确:先声明再使用
agent WeatherBot {
    role: "天气助手",
    prompt: "回答天气相关问题"
}

result = WeatherBot.run(input);

E002 - 类型不匹配

错误信息

Error E002: Type mismatch
  --> main.nexa:23:20
   |
23 | protocol Report { score: "number" }
   |                    ^^^^^ expected 'number', found 'string'

原因: - Protocol 字段类型与实际输出不匹配 - 类型标注格式错误

解决方案

// ❌ 错误:类型标注格式错误
protocol Report {
    score: number    // 类型未加引号
}

// ✅ 正确:类型标注需要加引号
protocol Report {
    score: "number"  // 正确格式
}

E003 - 缺少必需属性

错误信息

Error E003: Missing required property 'role'
  --> main.nexa:10:1
   |
10 | agent MyAgent {
   | ^^^^^^^^^^^^^ 'role' property is required

原因: - Agent 缺少必需的 role 属性 - Agent 缺少必需的 prompt 属性

解决方案

// ❌ 错误:缺少必需属性
agent MyAgent {
    model: "gpt-4"
}

// ✅ 正确:添加必需属性
agent MyAgent {
    role: "助手",
    prompt: "帮助用户解决问题",
    model: "gpt-4"
}

E004 - 语法错误

错误信息

Error E004: Syntax error
  --> main.nexa:5:1
   |
5 | agent { }
   | ^^^^^^^^ Expected IDENTIFIER after 'agent'

原因: - 缺少标识符名称 - 语法结构不完整 - 使用了无效的语法构造

解决方案:检查语法是否符合 Nexa 规范,参考 语言参考手册


E005 - 重复声明

错误信息

Error E005: Duplicate declaration 'MyAgent'
  --> main.nexa:20:1
   |
20 | agent MyAgent { ... }
   | ^^^^^^^^^^^^^ 'MyAgent' already declared

原因: - 同一文件中重复声明了相同名称的 Agent、Tool 或 Protocol

解决方案:使用不同的名称或删除重复声明。


2. 运行时错误 (E1xx)

运行时错误在程序执行过程中发生。

E101 - Agent 执行失败

错误信息

Error E101: Agent execution failed
  Agent 'Analyst' failed after 3 retries

原因: - LLM API 调用失败(网络错误、API Key 无效) - 模型返回格式不符合预期 - 执行超时

解决方案

// 设置备用模型
agent MyAgent {
    model: "gpt-4",
    fallback: "gpt-3.5-turbo",
    timeout: 60,
    retry: 5
}

E102 - Tool 执行失败

错误信息

Error E102: Tool execution failed
  Tool 'web_search' returned error: HTTP timeout

原因: - 外部服务不可用 - 工具参数不正确 - 执行超时

解决方案:检查工具参数、网络连接和超时设置。


E103 - 管道执行失败

错误信息

Error E103: Pipeline execution failed
  Pipeline stage 'Reviewer' failed

原因: - 管道中某个 Agent 执行失败 - 数据传递格式不匹配

解决方案:检查管道中每个 Agent 的独立执行情况,确保数据格式兼容。


E104 - Intent 路由失败

错误信息

Error E104: Intent routing failed
  No matching intent for input: "..."

原因: - 意图匹配器无法识别用户输入 - 所有 intent 分支都未匹配

解决方案:添加 _ 通配符分支作为默认处理。

match user_input {
    intent("查询天气") => WeatherBot.run(user_input),
    intent("查询新闻") => NewsBot.run(user_input),
    _ => ChatBot.run(user_input)    // 默认分支
}

3. 契约错误 (E2xx) — v1.2.0+

E201 - ContractViolation (requires 前置条件违反)

错误信息

ContractViolation(requires:deterministic, message="amount must be positive")
  --> transfer.nexa:5

原因: - requires 确定性条件不满足(如 amount > 0 但传入负数) - requires 语义条件不满足(如 "sender has sufficient balance" 但余额不足)

解决方案

// 确定性契约:确保传入参数满足条件
flow transfer(amount: int) -> Result
    requires: amount > 0
{
    if (amount <= 0) {
        return Result::Err("Invalid amount");
    }
    // ...
}

// 语义契约:确保输入满足语义要求
flow review(code: string) -> Report
    requires: "input contains valid source code"
{
    // ...
}

E202 - ContractViolation (ensures 后置条件违反)

错误信息

ContractViolation(ensures:semantic, message="result must include actionable feedback")
  --> review.nexa:8

原因: - ensures 确定性条件不满足(如 result.success == true 但返回失败) - ensures 语义条件不满足(如 "result includes actionable feedback" 但输出无建议)

解决方案:确保函数返回值满足后置条件,或调整条件使其更合理。


E203 - ContractViolation (invariant 不变式违反)

错误信息

ContractViolation(invariant:deterministic, message="state must be idle or running")

原因: - invariant 条件在对象生命周期中被违反

解决方案:确保对象状态始终满足不变式约束。


4. 类型错误 (E3xx) — v1.3.1+

E301 - TypeViolation (strict 模式类型违反)

错误信息

TypeViolation: Expected Int, got String
  --> main.nexa:10
   |
10 | let x: Int = "hello"
   |               ^^^^^^^ Type mismatch

原因: - NEXA_TYPE_MODE=strict 模式下,类型不匹配导致运行时错误

解决方案

// 确保类型匹配
let x: Int = 42           // ✅ 正确
let y: String = "hello"   // ✅ 正确

// 或切换到 warn 模式
// 设置 NEXA_TYPE_MODE=warn

E302 - TypeWarning (warn 模式类型警告)

错误信息

TypeWarning: Expected Int, got String (mode: warn)
  --> main.nexa:10

原因: - NEXA_TYPE_MODE=warn 模式下,类型不匹配仅发出警告,程序继续执行

解决方案:修复类型标注或值,确保类型一致。


E303 - Protocol 类型验证失败

错误信息

Error E303: Protocol validation failed
  Protocol 'ReviewResult' field 'score' expected int, got string

原因: - Agent 输出不符合 protocol 定义的字段类型 - LLM 返回的 JSON 格式与协议不匹配

解决方案

// 使用 implements 约束 Agent 输出
agent Reviewer implements ReviewResult {
    prompt: "Review the code. Return JSON with score (int) and summary (string)."
}

5. 数据库错误 (E4xx) — v1.3.5+

E401 - DatabaseError (连接失败)

错误信息

DatabaseError: Failed to connect to sqlite://data.db

原因: - 数据库文件路径不存在 - SQLite 文件权限问题 - PostgreSQL 连接参数错误

解决方案:检查数据库路径、权限和连接参数。


E402 - DatabaseError (查询失败)

错误信息

DatabaseError: Query failed: SELECT * FROM nonexistent_table

原因: - SQL 语法错误 - 表或列不存在 - 参数绑定错误

解决方案:检查 SQL 语句和表结构。


E403 - DatabaseError (事务失败)

错误信息

DatabaseError: Transaction failed, rolled back

原因: - 事务中的操作失败导致回滚

解决方案:检查事务中的每个操作,确保数据一致性。


6. 认证错误 (E5xx) — v1.3.6+

E501 - AuthError (认证失败)

错误信息

AuthError: Invalid API key format

原因: - API Key 格式不正确(应为 nexa-ak-{32hex} 格式) - API Key 已过期或被撤销

解决方案:使用 std.auth.api_key_generate 生成正确格式的 API Key。


E502 - AuthError (JWT 错误)

错误信息

AuthError: JWT signature verification failed

原因: - JWT 签名验证失败 - JWT 过期 - JWT 格式不正确

解决方案:检查 JWT 密钥配置和 Token 有效期。


E503 - AuthError (CSRF 验证失败)

错误信息

AuthError: CSRF token validation failed

原因: - CSRF Token 不匹配 - Token 过期

解决方案:确保表单中包含正确的 CSRF Token。


E504 - AuthError (OAuth 流程错误)

错误信息

AuthError: OAuth PKCE flow failed

原因: - OAuth Provider 配置错误 - PKCE code_verifier 不匹配 - redirect_uri 不匹配

解决方案:检查 OAuth Provider 配置(client_id, client_secret, redirect_uri)。


7. KV 存储错误 (E6xx) — v1.3.6+

E601 - KVError (操作失败)

错误信息

KVError: Key 'user_prefs' not found

原因: - 键不存在 - KV Store 未打开 - TTL 过期

解决方案:使用 ?? 操作符提供默认值,或先检查键是否存在。

value = kv.get("user_prefs") ?? "default"
if (kv.has("user_prefs")) {
    value = kv.get("user_prefs")
}

E602 - KVError (序列化失败)

错误信息

KVError: Failed to deserialize value for key 'config'

原因: - 存储的数据类型与读取类型不匹配 - 数据损坏

解决方案:使用类型安全的读取方法(kv_get_int, kv_get_str, kv_get_json)。


8. 并发错误 (E7xx) — v1.3.6+

E701 - ConcurrencyError (任务取消)

错误信息

ConcurrencyError: Task 'my_task' was cancelled

原因: - 任务被 cancel_task 主动取消 - 任务超时被自动取消

解决方案:检查任务逻辑,确保取消是预期行为。


E702 - ConcurrencyError (通道关闭)

错误信息

ConcurrencyError: Channel is closed

原因: - 向已关闭的通道发送消息 - 从已关闭的通道接收消息

解决方案:在发送/接收前检查通道状态,或使用 try_recv 避免阻塞。


E703 - ConcurrencyError (race 全部失败)

错误信息

ConcurrencyError: All tasks in race failed

原因: - race 中所有任务都失败

解决方案:确保至少有一个任务能够成功完成。


9. 模板错误 (E8xx) — v1.3.6+

E801 - TemplateError (编译失败)

错误信息

TemplateError: Failed to compile template: unclosed {{#for}} block

原因: - 模板语法错误(未闭合的块) - 过滤器名称不存在

解决方案:检查模板语法,确保所有块正确闭合。


E802 - TemplateError (渲染失败)

错误信息

TemplateError: Failed to render template: variable 'name' not found

原因: - 模板中引用的变量在数据中不存在 - 数据格式不匹配

解决方案:使用 | default(val) 过滤器提供默认值。

template"""Hello {{name | default("Guest")}}!"""

10. 模式匹配错误 (E9xx) — v1.3.x+

E901 - PatternMatchError (无匹配分支)

错误信息

PatternMatchError: No matching pattern for value

原因: - match 表达式中没有分支匹配当前值 - 缺少 _ 通配符分支

解决方案:添加 _ 通配符分支作为默认匹配。

match result {
    Option::Some(v) => v
    Option::None => "no response"
    _ => "unknown"    // 通配符兜底
}

E902 - PatternMatchError (解构失败)

错误信息

PatternMatchError: Destructuring failed for pattern (a, b)

原因: - 解构模式与数据结构不匹配(如对非元组值使用元组模式)

解决方案:确保解构模式与数据结构类型一致。


11. ADT 错误 (EAx) — v1.3.x+

EA01 - ADTError (结构体操作失败)

错误信息

ADTError: Struct 'Point' not found

原因: - 引用未注册的结构体 - 字段访问不存在

解决方案:确保结构体已声明,字段名正确。


EA02 - ADTError (枚举操作失败)

错误信息

ADTError: Variant 'Some' not found in enum 'Option'

原因: - 引用未注册的枚举变体 - 变体名称拼写错误

解决方案:确保枚举和变体名称正确。


EA03 - ADTError (Trait 方法调用失败)

错误信息

ADTError: No impl found for trait 'Printable' on type 'Point'

原因: - 类型未实现该 trait - impl 声明缺失

解决方案:添加 impl 声明。

impl Printable for Point {
    fn format() -> String { ... }
}

12. Job 系统错误 (EBx) — v1.3.3+

EB01 - JobError (任务执行失败)

错误信息

JobError: Job 'SendEmail' failed after 2 retries

原因: - 任务逻辑执行失败 - 重试次数耗尽

解决方案:检查 on_failure 处理逻辑,增加 retry 次数。


EB02 - JobError (任务超时)

错误信息

JobError: Job 'AnalyzeDoc' timed out after 120s

原因: - 任务执行时间超过 timeout 设置

解决方案:增加 timeout 值或优化任务逻辑。


EB03 - JobError (死信任务)

错误信息

JobError: Job 'SendEmail' is in dead letter queue

原因: - 任务重试全部失败,进入死信队列

解决方案:使用 nexa jobs retry <job_id> 重试死信任务。


13. HTTP Server 错误 (ECx) — v1.3.4+

EC01 - HTTPError (路由未找到)

错误信息

HTTPError: No route found for GET /unknown

原因: - 请求路径未在 server DSL 中定义

解决方案:在 server 声明中添加对应路由。


EC02 - ContractViolation (HTTP 契约违反)

错误信息

ContractViolation(requires) → HTTP 401 Unauthorized
ContractViolation(ensures) → HTTP 403 Forbidden

原因: - HTTP 请求违反了路由的 requires 前置条件 → 401 - HTTP 响应违反了 ensures 后置条件 → 403

解决方案:确保请求满足前置条件,响应满足后置条件。


📊 错误码速查表

错误码 类别 说明
E001 编译时 未声明的标识符
E002 编译时 类型不匹配
E003 编译时 缺少必需属性
E004 编译时 语法错误
E005 编译时 重复声明
E101 运行时 Agent 执行失败
E102 运行时 Tool 执行失败
E103 运行时 管道执行失败
E104 运行时 Intent 路由失败
E201 契约 requires 前置条件违反
E202 契约 ensures 后置条件违反
E203 契约 invariant 不变式违反
E301 类型 TypeViolation (strict)
E302 类型 TypeWarning (warn)
E303 类型 Protocol 类型验证失败
E401 数据库 连接失败
E402 数据库 查询失败
E403 数据库 事务失败
E501 认证 认证失败
E502 认证 JWT 错误
E503 认证 CSRF 验证失败
E504 认证 OAuth 流程错误
E601 KV 操作失败
E602 KV 序列化失败
E701 并发 任务取消
E702 并发 通道关闭
E703 并发 race 全部失败
E801 模板 编译失败
E802 模板 渲染失败
E901 模式匹配 无匹配分支
E902 模式匹配 解构失败
EA01 ADT 结构体操作失败
EA02 ADT 枚举操作失败
EA03 ADT Trait 方法调用失败
EB01 Job 任务执行失败
EB02 Job 任务超时
EB03 Job 死信任务
EC01 HTTP 路由未找到
EC02 HTTP 契约违反

🔗 相关资源

快来问问agent吧!

Nexa Agent

Nexa 文档助手

我是Nexa文档AI助手,可以问我有关文档的一切!

由AI Hub提供支持