10 分钟用 TaoToken 跑通 OpenHands 的 CodeAct Agent

发布时间:2026/9/18 11:37:02

10 分钟用 TaoToken 跑通 OpenHands 的 CodeAct Agent 告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度1. OpenHands 的 CodeAct Agent 到底在做什么OpenHands 是开源社区里比较活跃的编码 Agent 运行时它把「模型输出」和「真实执行环境」绑在一起模型不是只吐代码片段而是通过一套动作空间去读写文件、跑命令、看报错、再改。CodeAct 是它自带的 Agent 策略之一核心思路是让模型用可执行的代码块表达动作而不是用 JSON 描述动作。这个差别在补测试这种任务上很明显——模型可以直接写pytest命令、直接cat文件、直接看 traceback然后决定下一步。我这次要跑的场景很具体拿一个小型 Python 仓库让 CodeAct Agent 给它补测试并执行。仓库不大两三个模块函数逻辑清晰但没有测试文件。任务目标是让 Agent 自己读源码、生成test_*.py、运行pytest、根据失败结果迭代直到测试通过。整个过程要在 OpenHands 的沙箱里完成模型侧走统一 API 通道。这里 TaoToken 出现的位置是「默认供应商」这一步。OpenHands 启动时需要指定 LLM 端点我把https://taotoken.net/api填进去模型选 GLM 5.3 FlashKey 从 TaoToken 控制台创建。这样 OpenHands 的 CodeAct Agent 就有了一个稳定的模型出口不用在多个供应商配置之间来回切。需要先说清楚一件事OpenHands 是执行方TaoToken 是模型通道GLM 5.3 Flash 是被调用的模型。三者角色不要混。下面所有配置和日志都是围绕「怎么让 CodeAct Agent 在这个通道上跑起来」展开的。2. 把 OpenHands 的默认供应商改成 TaoTokenOpenHands 的安装方式有两种Docker 镜像和 CLI。我两种都试了Docker 更适合快速验证CLI 更适合改配置。先说 Docker 这条路径。官方镜像启动命令大致是这样关键是把 LLM 相关的环境变量传进去docker run -it --rm \ --pullalways \ -e SANDBOX_RUNTIME_CONTAINER_IMAGEdocker.all-hands.dev/all-hands-ai/runtime:0.20-nikolaik \ -e LOG_ALL_EVENTStrue \ -e LLM_API_KEYYOUR_API_KEY \ -e LLM_BASE_URLhttps://taotoken.net/api \ -e LLM_MODELglm-5.3-flash \ -v /var/run/docker.sock:/var/run/docker.sock \ -p 3000:3000 \ --add-host host.docker.internal:host-gateway \ --name openhands-app \ docker.all-hands.dev/all-hands-ai/openhands:0.20几个点要盯住。LLM_BASE_URL写https://taotoken.net/api末尾不要加/v1OpenHands 内部会自己拼路径。LLM_MODEL这里我写的是glm-5.3-flash但模型 ID 一定要以模型广场为准不同时间广场上的命名可能有调整填之前先去 TaoToken 的模型列表确认一遍。LLM_API_KEY就是YOUR_API_KEY从控制台创建。如果你用 CLI 方式安装后配置写在~/.openhands/config.toml或者通过环境变量注入。CLI 的好处是改完不用重启容器直接重跑会话就行。我后来固定用 CLI因为要反复调 prompt 和模型参数。配置里 LLM 段落长这样[llm] model glm-5.3-flash base_url https://taotoken.net/api api_key YOUR_API_KEY注意这里没有ANTHROPIC_*前缀OpenHands 用的是自己的 LLM 抽象层不要把它和 Claude Code 的配置混在一起。Claude Code 那套是ANTHROPIC_BASE_URL/ANTHROPIC_AUTH_TOKEN/ANTHROPIC_MODELCodex 是~/.codex/config.toml三者的配置字段互不通用。我见过有人把 Claude Code 的 env 直接贴到 OpenHands 里结果 401排查半天发现是字段名不对。启动之后OpenHands 会在 3000 端口起一个 Web UI也可以纯 CLI 交互。我这次用 CLI因为要看完整的 CodeAct 动作流。3. CodeAct 会话日志补测试并执行的全过程任务仓库我选了一个自己写的小工具库两个文件calc.py里有add、sub、mul、div四个函数utils.py里有一个normalize函数。没有测试。目标就是让 Agent 补上test_calc.py和test_utils.py然后跑pytest。启动会话后CodeAct Agent 的第一轮动作是浏览仓库结构。日志片段大致如下我做了截断保留关键动作[Agent] Action: execute_bash Command: ls -la find . -name *.py | head -20 Observation: total 16 drwxr-xr-x 3 root root 4096 . -rw-r--r-- 1 root root 312 calc.py -rw-r--r-- 1 root root 198 utils.py [Agent] Action: execute_bash Command: cat calc.py Observation: def add(a, b): return a b def sub(a, b): return a - b def mul(a, b): return a * b def div(a, b): if b 0: raise ValueError(division by zero) return a / b第一轮它没有急着写测试而是先把源码读完。这是 CodeAct 比较稳的地方——它用 bash 动作获取真实文件内容而不是靠模型记忆猜函数签名。第二轮开始生成测试文件[Agent] Action: create_file Path: test_calc.py Content: import pytest from calc import add, sub, mul, div def test_add(): assert add(1, 2) 3 assert add(-1, 1) 0 def test_sub(): assert sub(5, 3) 2 def test_mul(): assert mul(2, 3) 6 def test_div(): assert div(6, 2) 3 def test_div_by_zero(): with pytest.raises(ValueError): div(1, 0)然后它继续生成test_utils.py接着执行[Agent] Action: execute_bash Command: python -m pytest -v Observation: test session starts collected 6 items test_calc.py::test_add PASSED test_calc.py::test_sub PASSED test_calc.py::test_mul PASSED test_calc.py::test_div PASSED test_calc.py::test_div_by_zero PASSED test_utils.py::test_normalize PASSED 6 passed in 0.42s 6 个测试全过。Agent 在观察到6 passed之后输出了一条总结动作然后会话结束。整个流程从启动到结束我这边计时大约 7 分钟其中模型调用占了大部分时间沙箱执行本身很快。这里有个细节值得说CodeAct 的「动作」是模型生成的代码块OpenHands 解析后丢进沙箱执行再把 observation 回传给模型。所以模型的质量直接决定动作是否有效。GLM 5.3 Flash 在这个任务上没有出现「生成无效 bash」或者「路径写错」的情况第一轮就定位到了两个源文件第二轮测试文件一次成型。4. 用量统计与这次运行的 Token 账跑完之后我在 TaoToken 控制台看了这次会话的用量。OpenHands 的 CodeAct 每一轮都会把历史 observation 拼进上下文所以 Token 消耗是累积的。这次任务一共 4 轮模型调用轮次动作类型输入 Token输出 Token累计1浏览仓库约 1.2k约 1801.38k2读源码约 1.8k约 2203.4k3生成测试约 2.6k约 6406.64k4执行并总结约 3.4k约 31010.35k总计大约 10.35k Token其中输入占大头因为每轮都要把之前的 bash 输出和文件内容重新送进去。这是 CodeAct 这类 Agent 的典型特征上下文随动作累积Token 消耗不是线性的而是每轮都在涨。这个数字是我这次运行的实测只代表这一个仓库、这一个任务、这一次会话。不同仓库大小、不同测试覆盖要求Token 量会差很多。如果你要拿它做容量规划建议按「输入 Token ≈ 轮次 × 平均 observation 长度」去估而不是按固定值乘。控制台的用量页面能看到每次调用的时间戳和模型 ID对账比较方便。我习惯跑完一个 Agent 任务就去 TaoToken 看一眼这次调用有没有入账确认模型 ID 和实际使用一致。5. 跑通过程里踩到的三个配置坑第一个坑是 Base URL 末尾的/v1。OpenHands 的 LLM 客户端在拼请求路径时如果 base_url 已经带了/v1会变成/v1/v1/chat/completions直接 404。我一开始就是复制了别处的配置多带了一段报错信息只显示 404不显示具体路径排查了一会儿才定位到。正确写法就是https://taotoken.net/api干净结尾。第二个坑是模型 ID。OpenHands 的LLM_MODEL字段对命名比较敏感写错一个字符就会在启动时报「model not found」。我建议先去模型广场复制准确的 ID再填进配置。不要凭记忆写也不要用别家平台的模型名去套。模型 ID 以模型广场为准这句话在配置阶段特别重要。第三个坑是 Docker 网络。如果你用 Docker 跑 OpenHands容器内部访问外部 API 需要网络通。我这边没有遇到额外问题但如果你在受限网络环境里要确认容器能出网。另外--add-host host.docker.internal:host-gateway这行是为了让容器能访问宿主机服务如果你不需要本地回连可以去掉。这三个坑都不涉及模型能力纯粹是配置层面的。配好之后CodeAct Agent 的行为是稳定的。6. 用同一把 Key 复现这次 CodeAct 任务如果你想复现这次任务步骤不复杂。先去 TaoToken 控制台创建一把 Key然后在 OpenHands 的配置里把base_url指向https://taotoken.net/api模型选 GLM 5.3 Flash模型 ID 以广场为准。仓库你可以用我上面描述的那个结构也可以换成自己的小项目。复现的时候建议把LOG_ALL_EVENTStrue打开这样能看到完整的动作流和 observation。跑完之后对比两件事一是测试是否全部通过二是控制台的用量是否和会话轮次对得上。如果测试没通过先看 Agent 的最后一轮 observation 是什么通常是某个 import 路径或者断言写错了让 Agent 再迭代一轮就行。这次运行不含任何公榜排行分数所有数字都是本地一次会话的实测。CodeAct 的价值在于它把「模型输出」和「真实执行」接在一起而 TaoToken 在这个链路里提供的是稳定的模型出口。两者配合起来补测试这种任务可以在十分钟内跑完一轮。跑完这次会话后可以打开 模型对话 确认 GLM 5.3 Flash 的模型 ID 与广场一致如果打算长期跑 Agent 任务可以看 Coding PlanKey 在 控制台 创建Claude Code 接入的三件套配置对照 接入文档。 告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度
延伸阅读

更多相关文章

2026/9/18 11:37:02

多模态AI编目系统架构设计与高并发实践

做编目系统做了好几年,早些年一提“编目”,大家默认就是人工给视频、图片、文档打标签、写著录项。一条素材从入库到可检索,少则几分钟,多则一两天。后来接了中启联信时空智影这个项目,才算把AI、多模态处理、高并发这…

2026/9/18 11:37:01

ESP32-S3 多SPI并发翻车?3套引脚方案一次讲透

ESP32-S3 多SPI并发翻车?3套引脚方案一次讲透 【免费下载链接】arduino-esp32 Arduino core for the ESP32 family of SoCs 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 刚上电的板子,TFT 花屏还没持续三秒,SD 卡…

2026/9/18 12:57:08

Objective-C Runtime 底层原理与工程实践指南

1. 这不是“背八股”,而是 iOS 工程师的底层操作系统思维 Objective-C Runtime,这个词在面试现场常被问得人头皮发麻——“请讲讲 method swizzling 的原理”“isa 指针指向哪里?”“class_ro_t 和 class_rw_t 有什么区别?”但如…

2026/9/18 12:57:08

Agent 跑 Function Calling,Base URL 填 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/18 12:52:07

Photoshop核心概念复盘:从分辨率、图层蒙版到路径工具全解析

简介:Photoshop CS(PS)基础知识教程与经典实例教程是一份面向零基础与初级用户的PDF电子文档,定位于帮助读者快速熟悉PS界面结构,理解像素、分辨率、点阵图与矢量图、设备分辨率、位分辨率、颜色模式(RGB、…

2026/9/16 12:52:37

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/18 0:01:09

Google Colab 实战:运行模型、数据加载与报错排查

1. 为什么我劝你先搞懂 Colab 的运行模型1.1 Colab 到底是什么,跟本地跑代码差在哪Google Colab 简单说就是一台跑在浏览器里的 Linux 虚拟机,你打开一个 Notebook,背后就连上了一台带 GPU 的远程机器。你在单元格里敲的每一行 Python&#x…

2026/9/18 0:01:09

C语言数据类型与表达式详解

1. C语言数据与数据类型概述在C语言编程中,数据是程序处理的核心对象。理解数据的分类和特性是掌握C语言的基础。C语言中的数据主要分为四大类:常量、变量、表达式和函数。这些数据类型构成了C语言程序的基本元素,每种类型都有其独特的特性和…

2026/9/18 0:01:09

SQL时间字段指定时间段查询:区间语义、索引与时区避坑

上周排查一个线上问题&#xff0c;用户反馈"昨天的订单一条都没查到"&#xff0c;但数据库里明明躺着两千多条。最后定位下来&#xff0c;不是数据丢了&#xff0c;也不是接口挂了&#xff0c;而是那个查询条件把时间段写成了> 2024-05-20 00:00:00 AND < 2024…

2026/9/16 22:55:57

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行&#xff0c;Type-C接口算是典型的“看着简单&#xff0c;做起来全坑”的东西。光引脚就24个&#xff0c;高低速信号、电源、控制线全部塞在一个小小的连接器里&#xff0c;如果PCB布局不做规划&#xff0c;打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/16 22:56:09

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/16 22:56:16

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码