OpenHands 实战:TaoToken 跑通 llama.cpp 的 CMake 交叉编译

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度

1. 为什么用 OpenHands 跑 llama.cpp 交叉编译

这次我把 OpenHands 接到 TaoToken 的统一 API 端点上,目标是让它独立完成 llama.cpp 的 CMake 交叉编译。Key 在 https://taotoken.net/?utm_source=taotoken_aicg_blog_generate&utm_content= 创建,模型选 DeepSeek V4.1 Flash(模型 ID 以模型广场为准)。选交叉编译这个任务,是因为它比普通编译更容易暴露 Agent 的短板:它要自己安装交叉工具链、写 CMake toolchain file、理解目标架构,还要分清「编译成功」和「能本机运行」是两回事。

llama.cpp 是推理框架里构建链路比较清晰的一个仓库,CMake 配置项多,交叉编译时经常踩到 GGML_NATIVE、OpenMP 这类和宿主机 CPU 绑定的选项。我手头有一块 aarch64 的开发板,但平常开发都在 x86 云主机上,正好用这个场景看一看 OpenHands 能不能把「为目标架构构建」这一步做完整。整个实验放在临时容器里跑,不碰生产环境。OpenHands 本身是一个开源 Agent,它在自己的 work 目录里执行命令、读报错、改文件,我这边只挂载一个临时 workspace。它要完成的不只是执行一段 cmake 命令,而是要先装工具链、判断该传什么参数、最后验证产物格式。

这一篇不引用任何公榜分数。像 Terminal-Bench 或 SWE-bench Verified 这类基准,在没有官方快照和完整复现条件时不硬凑。只看一次具体任务能不能独立跑通,这对选型有更直接的参考意义。实验环境是这样的:OpenHands 用 Docker 方式运行,宿主机是 x86_64 Ubuntu 22.04,工作区目录挂载到容器 /opt/workspace;目标架构 aarch64,大致对应 RK3588 或树莓派 5 这一类开发板;llama.cpp 用主分支当日快照,不锁定到具体 commit,因为这次关注的是流程能否打通,而不是复现某一个 commit 的构建行为。

2. OpenHands 接入 TaoToken:配置片段与几个注意点

OpenHands 支持通过环境变量指定大模型服务的地址和 Key。最核心的三个变量如下,Base URL、API Key、模型 ID 各对应一个:

export LLM_BASE_URL="https://taotoken.net/api"
export LLM_API_KEY="YOUR_API_KEY"
export LLM_MODEL="<DeepSeek V4.1 Flash 的模型 ID,以模型广场展示为准>"

三个变量各有各的作用:LLM_BASE_URL 是统一 API 端点,LLM_API_KEY 是从 TaoToken 控制台 创建的 Key,LLM_MODEL 是在模型广场里选中 DeepSeek V4.1 Flash 后得到的模型 ID。这里有一个容易踩的坑:LLM_MODEL 不要凭记忆写,从模型广场复制,因为同一个模型在版本迭代后可能对应不同的 ID。TaoToken 只是统一 API 通道,公榜上出成绩的是模型本身,这里我只是用同一把 Key 和同一个 Base URL 把模型接到 OpenHands。

我用 UI 模式启动 OpenHands,环境变量直接传进 Docker:

# 镜像 tag 以 OpenHands 官方仓库为准,本次用 main
docker run -d --name openhands-tt \
  -e LLM_BASE_URL="https://taotoken.net/api" \
  -e LLM_API_KEY="YOUR_API_KEY" \
  -e LLM_MODEL="<模型 ID>" \
  -e WORKSPACE_MOUNT_PATH="/opt/workspace" \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v "$(pwd)/workspace:/opt/workspace" \
  -p 3000:3000 \
  ghcr.io/all-hands-ai/openhands:main

这里有几个细节需要说明。第一,Base URL 直接填 https://taotoken.net/api,不加 /v1,也不用拼 /chat/completions,OpenHands 会按 OpenAI 兼容协议自己补全后面的请求路径;不要给 Base URL 地址加 UTM 参数,那是给网页落地页用的,API 请求只认地址本身。第二,WORKSPACE_MOUNT_PATH 把宿主机当前目录下的 workspace 挂到容器里,Agent 写文件只发生在工作区内,不会碰宿主机其他路径。第三,不同版本的 OpenHands 对环境变量字段名可能有细微差别,以你自己安装的版本为准。

启动后打开 3000 端口,新建会话,右侧就能看到 Agent 开始工作。选 DeepSeek V4.1 Flash 而不是更大的模型,原因很实际:这类 Agent 构建任务有大量「试错-改-再跑」的循环,Flash 类模型在延迟和成本上更适合快速迭代。如果用顶配模型,一次工具调用要多等好几秒,整个任务的卡顿感会很明显。模型 ID 如果填错,会话一开始会报 404 或 model not found,回模型广场复制完整 ID 再重启会话即可。我这次运行没有遇到这个问题,但值得单独列出来,因为它是 OpenHands 接任意 API 网关时最常见的配置错误。

3. 让 Agent 跑通 llama.cpp 的 CMake 交叉编译

在 OpenHands 新建会话后,我给了它一段比较明确的任务描述,故意把验证方式也写进去:

在 /opt/workspace 下完成 llama.cpp 的 aarch64 交叉编译。

要求:
1. 拉取 llama.cpp 源码到 /opt/workspace/llama.cpp。
2. 安装交叉编译工具链 gcc-aarch64-linux-gnu 和 g++-aarch64-linux-gnu。
3. 在源码根目录创建 toolchain-aarch64.cmake,指定 target 为 Linux + aarch64。
4. 用 CMake 配置到 build-aarch64 目录,构建类型 Release,关闭 GGML_NATIVE。
5. 执行构建,最后用 file 命令确认生成的 llama-cli 是 aarch64 格式。

Agent 的处理路径比较直接:先更新 apt 并安装工具链,再 clone 源码,然后自己写了一个 toolchain 文件。它生成的 toolchain 文件整理后大概是这样:

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)

set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)

set(CMAKE_FIND_ROOT_PATH /usr/aarch64-linux-gnu)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

第一次跑 CMake 配置时,Agent 没有加 GGML_NATIVE=OFF,交叉编译工具链在探测宿主机 CPU 特性时直接报错。Agent 读了报错信息后,把配置命令改成下面这样才通过:

cmake -B build-aarch64 \
  -DCMAKE_TOOLCHAIN_FILE=toolchain-aarch64.cmake \
  -DCMAKE_BUILD_TYPE=Release \
  -DGGML_NATIVE=OFF

构建阶段是常规操作:

cmake --build build-aarch64 -j 4

-j 4 给得比较保守,整个构建持续三分钟左右。构建日志的尾部长这样:

[ 96%] Building CXX object tools/llama-cli/CMakeFiles/llama-cli.dir/llama-cli.cpp.o
[ 98%] Building C object common/CMakeFiles/common.dir/sampling.cpp.o
[100%] Linking CXX executable bin/llama-cli
[100%] Built target llama-cli

这一步之后的验证很关键。Agent 一开始尝试直接执行 build-aarch64/bin/llama-cli -h,我当然清楚这是交叉编译出来的 aarch64 二进制,在 x86 宿主机上跑不了。Agent 看到 exec format error 后换成 file 验证,输出是这样的:

file /opt/workspace/llama.cpp/build-aarch64/bin/llama-cli
/opt/workspace/llama.cpp/build-aarch64/bin/llama-cli: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1 ...

到这里,任务才算真正完成。交叉编译的完成标准不是构建命令退出码为 0,而是生成的产物确实属于目标架构。llama.cpp 还有 GGML_OPENMPGGML_BACKEND_DL 等选项,但交叉编译场景下配置越少越稳,只保留 CMAKE_BUILD_TYPE=ReleaseGGML_NATIVE=OFF 即可。GGML_NATIVE=OFF 是这次能配置成功的关键:如果开着,CMake 会在宿主机上探测 x86 指令集,生成的目标代码就偏了。Agent 在第一次失败后能自己定位到这个开关,说明它读报错的能力比预想中好。

4. Token 消耗、上下文长度与三个实际观察

这次运行的过程记录整理成了下面的表,只描述 Agent 的行为,不涉及模型能力评分:

阶段Agent 关键动作备注
拉源码git clone --depth 1未带 submodule,主仓够用
装工具链apt-get install gcc/g++-aarch64-linux-gnu耗时约 2 分钟
写 toolchain生成 toolchain-aarch64.cmake内容符合预期
CMake 配置第一次失败,补 GGML_NATIVE=OFF自动修正
构建cmake --build -j 4约 3 分钟
验证file 确认 aarch64初始误用 exec,随即纠偏

会话结束后,TaoToken 控制台对账页显示本次消耗约 5 万 token。这个数字只代表我这次单次运行的结果,不代表公榜,也不代表模型排名。如果 Agent 在第一步没有找到合适的工具链安装方式,或者反复尝试不同的 CMake 参数,token 消耗会明显更高。实际跑任务时,token 数量主要取决于 Agent 的探索路径,而不是任务文本本身的长度。

关于上下文长度,我观察到一些实际情况。DeepSeek V4.1 Flash 的上下文窗口以模型广场标注为准,而这次任务里最长的工具输出是 apt 安装日志,几千行文本。OpenHands 会把长输出折叠成摘要再交给模型,因此整个任务过程中上下文没有被日志刷爆。Agent 始终记得最初的验证要求,CMake 配置改完直接进入构建阶段,没有重新解释任务,也没有把之前的命令重复一遍。

三个值得记录的观察。第一个是 Agent 对装工具链的处理比预期顺,它没有下载大而全的 SDK,直接用发行版自带的 aarch64 交叉编译器,这对依赖不复杂的项目足够。第二个是交叉编译产物不能直接执行,这一点需要验证步骤兜底;如果不把 file 命令写进任务要求,Agent 很可能把链接成功当成终点,它不是不会验证,而是默认按本机场景处理。第三个是这个任务需要的上下文其实不多,长日志经过折叠后不再干扰决策;像这种结构化任务,Flash 类模型的响应速度比更重的模型更跟手,Agent 每一步都要等模型返回,低延迟比纸上高几个点的编码分更影响体感。

5. 用同一把 Key 复现对照表

如果你想复现这次任务,只需要四步:先在 TaoToken 控制台 创建一把 Key,再到模型广场复制 DeepSeek V4.1 Flash 的模型 ID,然后按第 2 节的 Docker 命令启动 OpenHands,把第 3 节的任务描述粘贴进去。跑完后回控制台对账页,就能看到本次会话真实消耗的 token 数,可以和我上面那张执行记录表对比。

如果是团队长期跑 Agent 任务,建议看一下 Coding Plan,按会话量选套餐比按量计费更容易预估成本。模型 ID 忘了的话,打开 模型对话 确认 Flash 模型是否与你选的一致,再回去改配置。创建 Key 的入口在 控制台,历史会话的 token 消耗也能在同一个控制台里按时间拉出来核对,方便和这篇的执行记录对账。

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度

相关推荐

Windows 系统优化 + 运维工具 + 一键优化脚本 + 装机必备

================================================== Win7/Win10/Win11 优化增强版 v3.5 功能明细表 ================================================== 【一、系统优化类】 [1] 备份当前系统注册表 作用:优化前自动备份注册表到桌面, 出问题可双击.reg文件还原 包含:HKLM(系统级)+ HKCU(用户级) [2] 执行全面优化(先恢复默认再优化,共53项) 作用:一键优化系统性能、关闭无用服务、 关闭广告推送、加快开机和响应速度 包含53项优化: 1. 显示此电脑和控制面板图标 2. 暂停Windows自动更新 3. 关闭删除文件确认提示 4. 任务栏搜索改图标+关闭资讯 5. 关闭锁屏广告 6. 关闭开始菜单推荐 7. 关闭系统知提示 8. 关闭遥测和广告ID 9. 关闭传递优化P2P上传 10. 移除Edge/OneDrive开机启动 11. 关闭Edge游戏助手 12. 启用高性能电源计划 13. 开启休眠启用快速启动 14. 开启存储感知 15. 视觉效果调最佳性能 16. 启动菜单等待0秒 17. 修正CPU核心设置 18. 关闭开机启动延迟 19. 关闭开机启动音效 20. 减少菜单延迟 21. 减少关机等待时间 22. 禁用SysMain(原Superfetch)服务 23. 禁用Windows Search索引 24. 关闭后台应用 25. 关闭Windows提示推送

Python 寄存器位域解析与 JSON 配置工具(芯片开发+寄存器/位域+解析源码+寄存器转储分析)

根据 JSON 指定位宽和字段起止位,解析寄存器数值并显示枚举含义。包含重叠字段、重复名称、位范围和输入数值检查。 适用于嵌入式软件开发人员、驱动开发入门者及相关技术学习者。资源包含源码或模板、使用说明及验证范围说明。Python 3.10+,仅使用标准库;寄存器宽度 1 至 64 位。 功能边界见 README.md,实际验证情况见 TESTING.md。

SAP-NetWeaver-RFC-SDK-750-18 ( Windows+Linux 平台 )

SAP NetWeaver RFC SDK 750 Patch 18 The SAP NetWeaver Remote Function Call (RFC) Software Development Kit (SDK) offers a simplified programming model that relieves the application programmer of the necessity to deal with the difficult low level details of RFC programming. In important connectivity projects it has proven to be state-of-the-art in terms of connecting C/C++ programs with SAP backend systems. 包含:帮助文档 [ sap_nwrfcsdk_750_19_documentation ] zfiori studio tag-260920

MATLAB实现的两级OPF与电动车充电调度,用于配电网络.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

UAC白名单设置-软件使用

代码下载链接: https://pan.quark.cn/s/a4b39357ea24 用户账户控制(UAC)白名单的配置 Windows7环境中 UAC(User Account Control,用户帐户控制)是由微软在Windows Vista版本中推出的一项旨在增强系统安全性的创新技术,该技术强制要求用户在执行可能干扰计算机正常运作的操作或进行更改会波及其他用户设置的变动前,必须提供相应的权限或管理员密码进行验证。过对这些操作启动前进行授权确认,UAC能够有效阻止恶意软件及间谍软件在未获授权的状态下于计算机内进行安装或实施修改。 自从Vista版本问世以来,微软便开始推行这一全新的安全机制,可视为对系统安全防护的显著提升。尽管UAC确实能够在一定程度上对某些非法程序起到防御作用,但与此同时,这一功能也给众多用户带来了诸多不便。 因此,许多用户开始探寻是否存在类似于白名单的功能,以便将那些值得信赖的程序直接赋予运行权限。事实上,这类功能确实存在,不过微软并未将其作为标准配置提供。 网络上关于此问题的绝大多数建议都是建议禁用UAC,这种说法显然缺乏针对性,因为若用户希望禁用此功能,本就不会提出相关疑问。 过运用微软官方发布的Microsoft Application Compatibility Toolkit 5.6版本,可以将信任的程序纳入系统白名单范畴。 获取Application Compatibility Toolkit 安装程序成功后会出现三个可执行文件 以管理员身份启动Compatibility Administrator 在Custom DataBases部分创建新的数据库,并添加一个Application Fix(在下方空白处点击右键,选择...

DELL服务器操作系统安装

下载代码方式:https://pan.quark.cn/s/a4b39357ea24 DELL服务器的操作系统部署流程包含一系列细致的环节,其适用范围涵盖多种操作系统类型,例如Windows Server与Red Hat Linux等。在启动部署之前,必须确认服务器的光驱设备为DVD驱动器,并且需准备对应的系统安装媒介。下面将详细列出完整的部署步骤: 1. **启动准备**:将随服务器提供的Systems Management Tools and Documentation version 6.0光盘置入服务器光驱,随后设定服务器以光驱作为启动设备。此环节旨在确保服务器在启动阶段能够读取安装光盘内容。 2. **语言设定**:服务器启动后,选定简体中文作为部署语言,并确认接受许可协议条款。 3. **时区选择**:在部署期间,需设定时区为北京、香港、重庆或乌鲁木齐,依据实际地理位置进行适配选择。 4. **系统类型选择**:随后,需选定计划部署的操作系统,支持的版本包括Server 2003 SP2、Server 2003 SP2 64位版本、Windows 2003 SBS SP2、Server 2008、Windows 2008 SBS/EBS x64版本等,以及多种Red Hat和SUSE Linux版本。 5. **RAID设定**:若服务器出厂时已预设RAID配置,则可选择跳过此步骤。若需重新设定RAID,操作时需格外小心,因为这一过程可能引发硬盘数据遗失。 6. **引导分区规划**:设定引导分区的大小,常C盘建议预留至少20GB的空间,具体容量需根据系统需求进行调整。 7. **网络设定**:网络设定可在系统部署完成后执行,部署期间建议暂时拔除...

老人自动接视频appp

老人自动接视频app的

HTML5 audio player

代码下载地址: https://pan.quark.cn/s/a4b39357ea24 这是一款模仿酷狗的基于HTML5技术的网络音乐播放器,能够兼容全部mp3格式的音乐文件,用户既可以在联网状态下,也能够在无网络环境下欣赏自己偏爱的歌手作品。对于具备开发兴趣的人员,可以获取其源代码,将其解压并载入MM开发平台实施调整与改进,支持制作成apk(适用于Android系统)和ipa(适用于iOS系统)的应用程序包,随后安装至移动设备使用;或者将该应用项目文件配置到MM应用引擎中,过网页浏览器来预览实际运行状况。MM应用引擎的展示页面:http://html5player.mmapp.cn/client/www/app.html 有关更多应用范例的代码资料,可以访问MM开发环境官方网站进行获取:http://dev.10086.cn/ude/index.do

如何高效推动高校科技成果转化落地,解决产学研对接难的问题?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

Delphi 13.2控件之WizFile.7z

Delphi 13.2控件之WizFile.7z

厦门侠客行 厦门旅游景点 KML矢量数据

本资源为厦门侠客行主题旅游地图KML矢量数据。标注了厦门市主要旅游景点、历史文化遗迹与城市地标位置,涵盖鼓浪屿、南普陀寺、厦门大学、曾厝垵、环岛路、胡里山炮台等厦门经典景点,以及环岛骑行路线、步行游览路径等旅行轨迹数据,可在Google Earth中沉浸式规划厦门旅游路线,适用于厦门旅游攻略制定、城市历史文化研究、自由行路线规划等场景。

如何突破高校科研经费不足与产学研合作的瓶颈?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

高校科技成果转化难,如何高效对接企业需求并提升转化率?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

如何过创新服务,提升高校技术转移中心影响力,吸引更多优质企业合作?.docx

如何过创新服务,提升高校技术转移中心影响力,吸引更多优质企业合作?

C语言函数手册-入门必备

下载代码方式:https://pan.quark.cn/s/a4b39357ea24 linux-c-functions 这是一份开源的《Linux 常用 C 函数参考手册》中文版,文档托管在 GetIoT.tech 网站,你可以点击 这里 在线阅读。 如果你在阅读过程中发现错误或者遗漏,欢迎给本仓库提交 issue 和 PR! 示例代码均可在 linux-c 仓库找到。 目录 字符测试篇 字符串转换篇 内存控制篇 日期时间篇 内存及字符串操作篇 常用数学函数篇 用户组篇 数据结构及算法篇 文件操作篇 文件内容操作篇 进程操作篇 进程间信篇 线程管理篇 文件权限控制篇 信号处理篇 网络接口篇 I/O 复用篇 环境变量篇 终端控制篇 函数 新增函数 mallocusablesize 模板 简介 头文件 函数原型 功能: 返回值: 附加说明: 相关函数: 示例 执行 如何参与 linux-c-functions 文档系统的目录结构很简单,所有文档均放置在 source 目录中,source 目录的大致结构和简要说明如下。 source 目录下包含多个 .md 文档,每个文档是一个大类的 C 函数。 你可以找到其中的某个函数进行修改,对于不存在的函数,你可以新增。 如果找不到想要的分类,可以在提 issue 讨论。 如何构建 Sphinx 文档系统支持本地构建、部署,这里以 Ubuntu 为例(其他 Linux 发行版、MacOS 或 Windows 也行),介绍如何构建出可在本地访问的 linux-c-functions 在线文档。 首先需要安装 Python3、Git、Make 等基础软件。 然后安装最新版本的 Sphinx 及依赖。 为了完成本示例,还需要安装以下软...

EA体育FC27足球游戏球员评分数据集

EA SPORTS FC 27官方评分API中的所有19789名玩家,快照拍摄于2026-09-12。每位玩家一行。snapshot_date列在版本的每一行都是相同的,并且随着每个新版本而变化,因此您可以排列连续的版本,并过显示窗口、发布日和以后的标题更新跟踪评级变化。 该文件包含EA发布的所有统计数据:六张牌面(过身体速度)、其背后的34个详细属性,以及该组2204名守门员的守门员统计数据。 playstyles列出了玩家的playstyles,逗号分隔(41%的玩家至少有一个)。PlayStyle+排在最后,并保留EA自己的尾随+,就像Finesse Shot+一样。 适用于体育数据分析、球员评分建模、游戏数据挖掘和机器学习。

上一篇: CC Switch 切到 TaoToken:Cline 继续用同一 Key 的切换耗时
下一篇: Kimi K2.7 Code 上了 SWE-bench Verified:同一把 Key 在 TaoToken 跑单任务
ceshi01
博客等级 码龄18年 1粉丝 4603原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值