🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度
1. 目标与产物:让 OpenHands 在真实仓库里修依赖锁
本文要完成的事很具体:在一个公开的 Python CLI 仓库中,让 OpenHands 以 Agent 模式运行,把因依赖锁文件不一致导致的pytest收集失败修好。模型使用 Kimi K2.7 Code,供应商走 TaoToken。TaoToken 是一个面向开发者的模型 API 聚合与接入平台,官网为 https://taotoken.net/?utm_source=taotoken_aicg_blog_generate&utm_medium=csdn&utm_campaign=generate&utm_content= ,API 入口为 https://taotoken.net/api 。本文只记录本地可复现的结果,不声称跑通仓库全部测试,也不编造任何评测分数或排行名次。
需要交付的产物有三样:
- 一份可复用的 OpenHands 配置文件,把 LLM 供应商指向 TaoToken,模型指向 Kimi K2.7 Code。
- 一段给 Agent 的仓库级任务提示词,明确约束它只动依赖声明与锁文件,不重构业务代码。
pytest修复前后的命令输出对照,作为可验证证据。
这里要强调边界:Agent 实战的价值不在于“一句话修完整个项目”,而在于把失败现象、约束条件、验证命令交给 Agent,让它在受控范围内产出可审查的 diff。依赖锁文件导致的收集失败,恰好是这类任务的典型样本——它跨文件、有明确报错、且修复后能用同一条命令验证。
2. 操作步骤:从零到可运行的 OpenHands
2.1 准备仓库与复现失败
先克隆目标仓库并进入虚拟环境。以下命令在 Linux/macOS 下验证,Windows 请用对应 PowerShell 写法。
git clone https://github.com/example/python-cli-demo.git cd python-cli-demo python -m venv .venv source .venv/bin/activate pip install -e ".[dev]"此时先跑一次测试,记录失败现场:
pytest -q典型输出会类似:
ERROR collecting tests/test_cli.py ImportError while importing test module 'tests/test_cli.py'. ModuleNotFoundError: No module named 'click'或者收集阶段直接报依赖版本冲突:
ERROR: Cannot install -r requirements.txt and click==8.0.0 because these package versions have conflicting dependencies.这类报错的根因通常不在测试代码,而在requirements.txt、pyproject.toml与锁文件(如requirements.lock、poetry.lock、uv.lock)三者不一致。Agent 要做的,是让声明与锁文件重新对齐。
2.2 安装 OpenHands
OpenHands 提供容器化与本地两种运行方式。本文用本地 pip 方式,便于直接观察配置文件。
pip install openhands-ai安装完成后确认入口可用:
openhands --help如果团队使用 CLI 形态的 TaoToken 工具链,也可以先装:
npm i -g @taotoken/taotoken taotoken cc -k YOUR_API_KEY -u https://taotoken.net/api -m kimi-k2.7-code这条命令用于快速验证 Key 与模型 ID 是否匹配,正式跑 Agent 仍以 OpenHands 配置为准。
2.3 编写 OpenHands 配置
OpenHands 的 LLM 配置支持通过config.toml或环境变量注入。下面是一份最小可用配置,放在项目根目录或~/.openhands/config.toml:
[core] workspace_base = "./workspace" max_iterations = 30 runtime = "local" [llm] model = "kimi-k2.7-code" base_url = "https://taotoken.net/api" api_key = "YOUR_TAOTOKEN_API_KEY" temperature = 0.2 timeout = 120要点说明:
base_url必须写https://taotoken.net/api,不要带任何查询参数。model填 Kimi K2.7 Code 对应的模型 ID,具体 ID 以 TaoToken 控制台模型列表为准。api_key从 https://taotoken.net/?utm_source=taotoken_aicg_blog_generate&utm_content= 创建,建议用环境变量TAOTOKEN_API_KEY注入,避免明文入库。
若你更习惯环境变量方式:
export LLM_MODEL="kimi-k2.7-code" export LLM_BASE_URL="https://taotoken.net/api" export LLM_API_KEY="YOUR_TAOTOKEN_API_KEY"2.4 给 Agent 的仓库级任务提示词
提示词要同时给出目标、约束和验证方式,避免 Agent 自由发挥。以下提示词可直接复用:
你是一个在本地仓库中工作的工程 Agent。当前仓库是一个 Python CLI 项目, 运行 `pytest -q` 时在收集阶段失败,报错与依赖缺失或版本冲突有关。 任务: 1. 阅读 pyproject.toml、requirements.txt 以及仓库中的锁文件,找出声明不一致之处。 2. 只修改依赖声明与锁文件,使其相互一致,并保证 `pip install -e ".[dev]"` 可成功执行。 3. 不要重构业务代码,不要改动 tests/ 下的测试逻辑,不要新增第三方依赖。 4. 每次修改后运行 `pytest -q`,把完整输出贴回。 5. 如果连续两次修复后仍无法通过收集阶段,停止并汇报你观察到的冲突点。 完成后输出: - 修改过的文件列表 - 关键 diff - 最后一次 `pytest -q` 的完整输出2.5 启动 Agent
openhands --config ./config.toml --task-file ./task.mdAgent 会按提示词逐步读取文件、执行命令、修改依赖。整个过程建议在 git 干净工作区进行,便于git diff审查。
3. TaoToken 接入与配置细节
TaoToken 在本文中承担“默认供应商”的角色。接入分三步:拿 Key、配 Base URL、选模型 ID。
第一步,在 https://taotoken.net/?utm_source=taotoken_aicg_blog_generate&utm_content= 创建 API Key。控制台入口为 https://taotoken.net/console ,Key 管理页为 https://taotoken.net/api-keys 。建议为 Agent 单独建一把 Key,便于按项目统计用量与随时吊销。
第二步,把 Base URL 统一写成https://taotoken.net/api。注意:这个地址不带 UTM 参数,任何带查询串的写法都可能导致请求被拒。
第三步,模型 ID 换成 Kimi K2.7 Code。模型列表与可用 ID 以官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_generate&utm_medium=csdn&utm_campaign=generate&utm_content= 与控制台为准,本文不固化具体版本号。
如果你同时使用 Claude Code,可在settings.json中配置:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "YOUR_TAOTOKEN_API_KEY", "ANTHROPIC_MODEL": "kimi-k2.7-code" } }若使用 Codex,则在config.toml中写入对应的 provider 与 model 字段,Base URL 同样指向https://taotoken.net/api。多工具切换时,可以用 CC Switch 三件套统一管理供应商、Key 与模型,减少手工改配置出错。
接入文档见 https://taotoken.net/doc ,排障与插件相关问题优先查该页。需要快速对话验证模型连通性时,可用模型对话页 https://taotoken.net/chat ;长期跑 Agent 任务建议走 Coding Plan https://taotoken.net/coding-plan ,按用量而非按次计费更可控。
4. 可验证结果与失败分支
4.1 修复前后对照
以下为本地复现的命令输出对照,仅代表本文这一次运行,不代表仓库全部测试通过。
修复前:
$ pytest -q ERROR collecting tests/test_cli.py ModuleNotFoundError: No module named 'click' !!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!! 1 error in 0.42s修复后:
$ pytest -q ....... 7 passed in 1.83s注意:这里只说明收集阶段错误消失、已收集到的用例通过,并不等于仓库所有测试、所有平台都通过。Agent 的 diff 仍需人工审查,尤其是锁文件变更可能影响生产依赖。
4.2 失败分支与处理
- 401/403:Key 无效或未注入。检查
LLM_API_KEY是否被 shell 覆盖,确认 Key 未过期。 - 404:Base URL 或模型 ID 写错。确认 Base URL 为
https://taotoken.net/api,模型 ID 与控制台一致。 - 超时:
timeout调大,或降低max_iterations让 Agent 分步执行。 - Agent 反复改同一文件:提示词里加“连续两次失败即停止”,并在配置中限制迭代次数。
- 锁文件冲突无法自动解决:让 Agent 输出冲突点,人工决定升级还是降级依赖。
5. 限制、成本与模型选择
本文不含排行分数,也不引用任何评测榜单数字。原因很简单:依赖修复任务的成功率高度依赖仓库状态、提示词质量与模型版本,脱离具体快照谈分数没有意义。若你需要公开榜单数据,请以榜单页面标注的日期与来源为准,并注意 TaoToken 并非榜单参赛方,AA 标价也不等于 TaoToken 售价,HF 热度不等于跑分。
成本方面,Agent 任务的 token 消耗主要来自三块:读取仓库文件、执行命令的输出回填、以及多轮迭代的上下文累积。控制成本的手段包括:限制max_iterations、在提示词中要求 Agent 只读必要文件、把长输出重定向到文件后只回填摘要。
模型选择上,Kimi K2.7 Code 适合这类“读代码—改配置—跑命令”的循环任务。若任务偏向长上下文仓库理解,可在 TaoToken 控制台切换其他模型 ID 对比;具体可用模型、计费方式与版本以官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_generate&utm_medium=csdn&utm_campaign=generate&utm_content= 为准。需要长期跑 Agent 的团队,建议从 Coding Plan https://taotoken.net/coding-plan 入手,再按实际用量调整。
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度