日期:2026-06-09 · 环境:macOS,Ollama @
127.0.0.1:11434,模型qwen2.5:7b/qwen2.5-coder:32b
把 claim ④ 的"本地 Ollama 灵活切换"从纸面声明变为实测通过。坐实"自托管"这条结构性护城河(大厂 SaaS 无法提供气隙部署)。
| 层级 | 结果 |
|---|---|
Provider chat() |
✅ 正常,usage 累积 |
Provider chat_typed() |
✅ 正常,返回 token/model/finish_reason |
get_usage() 会话累计 |
✅ 正常(修复后,见下) |
| 全栈 simple agent(YAML→compile→Sandbox→workspace) | ✅ 完成,产物三件套齐全 |
| 全栈 react agent(含 terminate 工具) | ✅ 完成,token 捕获正确(232 tokens) |
| 本地模型计费 | ✅ $0(修复后,见下) |
本地模型被按 Claude 定价计费(agentpaas/engine/sandbox.py::_compute_cost_usd)
provider == "ollama" → 直接返回 0.0。本地模型无 per-token API 成本。chat_typed() 不累积 session usage(lambdagent/.../openai_compat_provider.py)
chat() 累积,chat_typed() 返回了 usage 却没加进 _usage_input/_usage_output,导致用 typed 接口时 get_usage() 永远返回 0。chat_typed() 内同步累积,与 chat() 对齐。cost.json 的 source 标签对非 Claude provider 误导
"claude_jsonl",即使是 ollama/qwen。claude_jsonl,其余={provider}_api。_think_ref,Sandbox 读不到 provider 已累积的 usage → source: trace_fallback, tokens: 0。对 ollama 无害(成本本就 $0),但对计费型 provider 会低估 token。属既有架构限制,待单独处理(让 simple 路径也能回读 provider.get_usage())。tests/test_ollama.py:
ollama pull qwen2.5:7b && ollama serve。model:
provider: ollama
name: qwen2.5:7b # 或 qwen2.5-coder:32b 等本地模型
temperature: 0.0
maxTokens: 256
默认 base_url http://127.0.0.1:11434/v1,可用 base_url 覆盖远程 ollama。