我用 Rust 构建了本地优先的 Agent Runtime(以及为何包装现有 CLI 不起作用)
抱歉,我目前无法直接访问外部链接获取文章内容。请您把需要翻译的文本粘贴在这里,我会按照要求保留源链接并将内容翻译成简体中文。
为什么我构建了它
我一直在本地 20–30B 模型中看到相同的失败模式:
- 脆弱的工具行为
- 偶尔的无答案情况
- 步骤执行不一致
- 难以调试的失败,且没有可重放的状态
答案不仅仅是“换一个更好的模型”。
答案是要强化运行时流程:
- 明确的安全门
- 确定性的产出
- policy + approvals
- eval + baseline comparisons
- replay + verification
什么是 LocalAgent
LocalAgent 是一个本地‑优先的代理运行时 CLI,专注于控制和可靠性。它支持:
- 本地提供者:LM Studio、Ollama、llama.cpp 服务器
- 带硬性门控的工具调用
- 信任工作流(策略、批准、审计)
- 可重放的运行产物
- MCP stdio 工具来源(包括 Playwright MCP)
- 确定性的评估框架
- TUI 聊天模式
GitHub:
Safety defaults (important)
Defaults are intentionally restrictive:
- trust 已关闭
- shell 已禁用
- write tools 未公开
- file‑write execution 已禁用
You have to explicitly enable risky capabilities.
架构(高级)
在高级别上,每次运行执行:
- 构建运行时上下文(提供者/模型/工作目录/状态/设置)
- 准备提示消息(如果启用,则包括会话/任务记忆/指令)
- 应用压缩(如果已配置)
- 调用模型(流式或非流式)
如果返回工具调用:
- 首先运行 TrustGate 决策
- 仅在被允许时执行
- 标准化工具结果封装
- 将工具结果反馈给模型
- 重复此过程,直至得到最终输出或满足退出条件
- 尽力写入制品/事件,以便重放/调试
该设计将副作用置于显式的门控之后,并使失败可被检查。
为什么它比仅使用包装器更好
外部包装器很有用,但当工具执行发生在你无法控制的其他运行时中时,它们的作用有限。
使用 LocalAgent:
- 工具标识/参数是一级内部数据
- 在产生副作用之前评估策略和批准
- 在同一执行图中生成事件/审计/运行产物
- 重放和验证使用相同的运行时语义
简而言之:安全性和可靠性控制是执行模型的一部分,而不是事后附加的。
快速入门
cargo install --path . --force
localagent init
localagent doctor --provider lmstudio
localagent --provider lmstudio --model chat --tui
一次性运行
localagent --provider ollama --model qwen3:8b --prompt "Summarize README.md" run
慢速硬件注意事项
在较慢的 CPU / 首令牌占用较高的设置下,重试可能导致糟糕的用户体验(在完成之前重新发送提示)。调试时,使用更大的超时时间并禁用重试:
localagent --provider llamacpp \
--base-url http://localhost:5001/v1 \
--model default \
--http-timeout-ms 300000 \
--http-stream-idle-timeout-ms 120000 \
--http-max-retries 0 \
--prompt "..." run
我迄今为止的收获
最大的可靠性提升来自于流程约束,而不是模型炒作:
- 有界任务
- 严格的输出预期
- 执行前参数验证
- 确定性的评估 + 基线
- 可重放的工件用于根因调试
对于高度模糊的推理,我仍然会使用更强大的托管模型。对于大量的生产力辅助工作,只要运行时保持纪律,本地模型也是可行的。
当前文档
- README: 项目概述 + 工作流
- CLI reference: 完整的命令/标志映射
- Provider setup guide: LM Studio / Ollama / llama.cpp
- 模板、政策文档和评估文档
Repo:
我想要的反馈
- 哪些本地模型 + 运行时组合在工具调用方面最稳定?
- 哪些提示/输出约束对您提升可靠性最有帮助?
- 什么能让本地优先的编码工作流感觉“可投入生产”?
如果这有帮助,我可以写一篇后续,提供具体的评估/基线工作流和模型路由策略。