从 StarryClaw 项目入手调试 StarryOS 的 HTTP 库使用问题
项目背景
StarryClaw 是一个基于 StarryOS 开发的 raw Agent 项目,目前处于 Demo 阶段,支持以下功能:
- 目录查询
- 文件列表展示
- 内容查询
当前测试使用的是 Ollama 的云端模型,这是一个免费的模型服务。
遇到的问题
在 StarryOS 上运行时,系统响应特别缓慢,单次交互耗时约 30 秒到 1 分钟。
调试过程
初步排查
起初怀疑是 StarryOS 本身的网络问题,想要测试网络连通性。但遗憾的是:
- StarryOS 的网络工具支持尚不完善
- 由于是 QEMU 虚拟环境,无法使用
ping命令 - 系统中也没有
curl命令
巧妙验证
经过反复尝试,想到一个测试方案:在 Ollama 和 StarryOS 之间添加一个代理,以此来定位是发送端还是接收端的问题。
问题定位
经过多次测试,最终发现问题根源:StarryOS 上的 reqwest HTTP 库存在发送性能问题,数据需要很长时间才能发送出去。
验证方案
为了验证这一结论,用 C 语言编写了一个 socket 测试程序,发现速度提升明显。因此采用了 Rust + C 混合方案 作为临时解决方案。
最终解决
经过进一步探索,找到了更优雅的解决方案:将 HTTP 库从 reqwest 替换为 ureq。
✅ 问题已解决!
总结
| 阶段 | 方案 | 结果 |
|---|---|---|
| 问题排查 | 代理测试 | 定位到发送端问题 |
| 临时方案 | Rust + C 混合 | 可行但不够优雅 |
| 最终方案 | 替换为 ureq 库 | ✅ 完美解决 |
