Skip to content

使用Vercel AI SDK 的兼容api遇到问题 #50

@wenhacx

Description

@wenhacx

和AI聊天第一句是ok的。当它接收到一个任务,例如:"分析BTC现在行情" 后,可以返回正常的分析结果。但再接着问它问题,就会这样:

web: unhandled error: MissingToolResultsError [AI_MissingToolResultsError]: Tool results are missing for tool calls tooluse_FGaIcngPrz2jJ7hvhSMuEZ, tooluse_2t0u86jpO64tRsh5omvmz0, tooluse_AYrcsdjrdKqxI9NBwZyDrz, tooluse_NXQFD8FJeO4Dd6pRgttrle.
    at convertToLanguageModelPrompt (/home/ai/project/OpenAlice/node_modules/.pnpm/ai@6.0.86_zod@4.3.6/node_modules/ai/src/prompt/convert-to-language-model-prompt.ts:140:17)
    at async fn (/home/ai/project/OpenAlice/node_modules/.pnpm/ai@6.0.86_zod@4.3.6/node_modules/ai/src/generate-text/generate-text.ts:531:36)
    at async <anonymous> (/home/ai/project/OpenAlice/node_modules/.pnpm/ai@6.0.86_zod@4.3.6/node_modules/ai/src/telemetry/record-span.ts:32:24)
    at async generateText (/home/ai/project/OpenAlice/node_modules/.pnpm/ai@6.0.86_zod@4.3.6/node_modules/ai/src/generate-text/generate-text.ts:375:12) {
  cause: undefined,
  toolCallIds: [
    'tooluse_FGaIcngPrz2jJ7hvhSMuEZ',
    'tooluse_2t0u86jpO64tRsh5omvmz0',
    'tooluse_AYrcsdjrdKqxI9NBwZyDrz',
    'tooluse_NXQFD8FJeO4Dd6pRgttrle'
  ],
  Symbol(vercel.ai.error): true,
  Symbol(vercel.ai.error.AI_MissingToolResultsError): true

我在deepwiki里问ai的时候,它这么回答:

_

MissingToolResultsError 诊断
这个错误表明 AI 模型发起了工具调用,但系统没有收到对应的工具执行结果。错误显示有 8 个工具调用缺少结果。

错误原因分析
在 OpenAlice 的会话系统中,工具调用和结果通过 ContentBlock 数组存储 session.ts:28-56 :

tool_use 块:AI 调用工具的请求
tool_result 块:工具执行的结果
当 toModelMessages() 转换会话条目到 Vercel AI SDK 格式时,它会查找匹配的 tool_result 块 session.ts:205-272 。如果找不到对应的结果,就会抛出 MissingToolResultsError。

可能的原因
工具执行失败:工具调用后没有正确追加结果到会话
会话数据损坏:tool_result 条目丢失或格式错误
异步执行问题:工具结果还未写入就开始下一次转换
调试步骤
检查会话文件:

查看最新的会话条目

tail -n 20 data/sessions/{sessionId}.jsonl | jq .
验证工具结果格式:
确认 tool_result 块包含正确的 tool_use_id:

{
"type": "tool_result",
"tool_use_id": "tooluse_G3EPgAoSYF15sJQIPJtPyw",
"content": "执行结果"
}
检查工具执行日志:
查看是否有工具执行错误:

grep -i "error|failed" data/events/eventlog.jsonl | tail -n 10
修复建议
重启应用:清除内存中的临时状态
检查工具配置:确认所有工具都正确注册并可用 tool-center.ts:17-25
手动清理会话:如果会话文件损坏,可以删除有问题的条目或整个会话文件
预防措施
确保工具执行函数总是返回结果
添加错误处理,即使工具失败也要追加错误结果
考虑在 toModelMessages() 中添加容错逻辑
Notes
这个错误通常出现在使用 Vercel AI SDK 作为 AI 提供者时
Claude Code 提供者使用不同的格式转换逻辑,可能不会遇到此问题
会话文件采用 JSONL 格式,每行都是一个完整的 JSON 对象 session.ts:1-18

_

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions