Koharu 运行时同步技能解析:用编码 Agent SKILL 维护 llama.cpp 与 stable-diffusion.cpp 绑定
【免费下载链接】koharuML-powered manga translator, written in Rust.项目地址https://gitcode.com/gh_mirrors/ko/koharu点击查看免费下载本文围绕 Koharu 仓库中面向编码 Agent 的runtime技能.agents/skills/runtime/SKILL.md展开完整讲解如何通过一条命令同步 llama.cpp 与 stable-diffusion.cpp 的 vendored C/C 头文件、触发 Rust FFI 绑定重新生成并联动更新koharu-runtime中的运行时版本常量。读完本文你将掌握 Koharu 原生运行时的标准升级流程、绑定生成的底层机制以及如何用聚焦的 Cargo 检查验证五个运行时 crate 的改动。一、.agents目录为编码 Agent 准备的资源库Koharu 仓库根目录下存在一个面向编码 Agent 的专用资源目录 .agents/README.md它只说明了两件事skills/目录存放面向特定维护任务的可复用工作流仓库级的长期约束仍然保留在根目录的 AGENTS.md 中由 Codex 等 Agent 自动发现。这种分工与 AGENTS.md 开头的规定完全一致仓库级文件只记录持久、与仓库绑定的约束如变更策略、源码边界、ML 架构、上游对齐、性能与验证规则而把当前文件布局、临时路径、模型清单、辅助工具名等实现细节排除在外——这些容易在重构中变化的内容恰恰被放进了.agents/skills/的技能描述与脚本里便于随实现演进而更新。二、runtime技能元数据与适用场景技能本体是 SKILL.md其 frontmatter 定义了 Agent 触发该技能的条件name: runtime description: Sync Koharus llama.cpp and stable-diffusion.cpp headers and Rust bindings. Use when updating native runtime releases, vendored C/C headers, koharu-llama, or koharu-diffusion after upstream API changes.即当需要更新原生运行时发布版本、vendored C/C 头文件、koharu-llama、koharu-diffusion例如上游 llama.cpp / stable-diffusion.cpp API 发生变化时就应该进入这个技能的工作流。配套的 Agent 界面描述位于 .agents/skills/runtime/agents/openai.yaml它为配置了该技能的 Agent 提供默认提示词把同步 llama.cpp 与 stable-diffusion.cpp 运行时、头文件和绑定这一任务与$runtime技能绑定方便模型在工具选择阶段直接命中正确技能。三、核心工作流一条命令同步头文件在仓库根目录运行 sync.sh 即可完成头文件同步.agents/skills/runtime/scripts/sync.sh脚本以set -euo pipefail开头任何一步失败都会立即终止并返回非零退出码避免留下半更新状态。它的工作分为四步1. 解析上游发布版本source_tag() { local repository$1 local release$2 local source${release%.*} if [[ $source $release ]] || ! gh api repos/$repository/releases/tags/$source --silent 2/dev/null; then source$release fi printf %s $source } llama_release$(gh api repos/koharu-rs/llama/releases/latest --jq .tag_name) diffusion_release$(gh api repos/koharu-rs/diffusion/releases/latest --jq .tag_name)脚本依赖ghGitHub CLI查询 koharu-rs/llama 与 koharu-rs/diffusion 两个 fork 的最新 release tag。source_tag处理了主 tag 补丁号的常见情况例如 release 为b11317.1时先尝试去掉最后一个点之后的内容得到b11317作为源码 tag只有当剥离后的值与 release 相同本就没有点号或该 tag 在仓库中不存在时才退回使用完整 release 名。2. 同步 llama.cpp 系列头文件脚本通过while read -r source target循环逐行把上游源码文件下载到仓库内的 vendored 位置上游 llama.cpp 源路径仓库内目标路径include/llama.hcrates/koharu-llama-sys/include/llama.hggml/include/gguf.hcrates/koharu-llama-sys/include/gguf.hggml/include/ggml.hcrates/koharu-llama-sys/include/ggml.hggml/include/ggml-alloc.hcrates/koharu-llama-sys/include/ggml-alloc.hggml/include/ggml-backend.hcrates/koharu-llama-sys/include/ggml-backend.hggml/include/ggml-cpu.hcrates/koharu-llama-sys/include/ggml-cpu.hggml/include/ggml-opt.hcrates/koharu-llama-sys/include/ggml-opt.htools/mtmd/mtmd.hcrates/koharu-llama-sys/include/mtmd.htools/mtmd/mtmd-helper.hcrates/koharu-llama-sys/include/mtmd-helper.h注意mtmd.h与mtmd-helper.h来自 llama.cpp 仓库的tools/mtmd/目录——mtmd 是 llama.cpp 生态中的多模态标记multimodal tokenizer辅助库它通过 wrapper.h 与 llama.h、gguf.h 一起被纳入 FFI 绑定范围这也解释了为什么运行时包中同时需要libllama.so与libmtmd.so两个动态库见下文第四节。3. 同步 stable-diffusion.cpp 头文件curl -fsSL \ https://raw.githubusercontent.com/leejet/stable-diffusion.cpp/$diffusion/include/stable-diffusion.h \ -o crates/koharu-diffusion-sys/include/stable-diffusion.hstable-diffusion.cpp 侧只 vendored 一个 stable-diffusion.h目标位于 crates/koharu-diffusion-sys/include/与 wrapper.h 中的#include stable-diffusion.h一一对应。4. 打印最新版本号printf llama.cpp: %s\nstable-diffusion.cpp: %s\n $llama_release $diffusion_release脚本结束时会把两个 fork 的最新 release tag注意是 release 名而非剥离后的源码 tag打印到终端这些版本号将作为下一步手动更新的输入。一个容易被忽略的事实是sync.sh 只更新头文件并不直接生成 Rust 绑定。绑定由各 sys crate 在cargo build时通过build.rs调用 koharu-bindgen 自动生成因此运行脚本 → 更新版本常量 → 触发一次构建就是完整的同步闭环。四、同步之后更新运行时版本与安全包装SKILL.md 明确给出了脚本运行后的后续步骤Use those versions to updatecrates/koharu-runtime/src/runtime/packages/llama.rsandcrates/koharu-runtime/src/runtime/packages/diffusion.rs.1. 更新版本常量在 crates/koharu-runtime/src/runtime/packages/llama.rs 中运行时包通过一个RELEASE常量固定下载资产的发布版本const RELEASE: str b11317;而 crates/koharu-runtime/src/runtime/packages/diffusion.rs 对应为const RELEASE: str master-929-3f8527a.3;这两个常量不仅用于拼接下载 URL还决定包在本地 Store 中的缓存路径Store::root()/llama/{RELEASE}/{variant}与Store::root()/diffusion/{RELEASE}/{variant}见 store.rs 的Store::directory逻辑。因此升级上游后必须同步修改否则会出现头文件已更新但下载的二进制仍为旧版本的不一致状态。2. 审查生成的绑定两个 sys crate 的 build.rs 会在编译期用koharu_bindgen::Generator从 wrapper 头文件生成绑定并写入OUT_DIR/bindings.rssrc/lib.rs 则通过include!(concat!(env!(OUT_DIR), /bindings.rs))引入。升级头文件后需要检查新生成的绑定是否包含预期的 API、类型与常量。为此koharu-bindgen/src/main.rs 还提供了一组 CLI 参数可在 CI 或本地独立复现生成过程参数说明--header/-o指定 C 头文件与输出路径--library-name声明动态库名决定__KOHARU_BINDGEN_LIBRARY_NAMES--clang-arg透传 clang 参数如-I头文件搜索路径--allowlist-function/type/var仅保留指定前缀的符号--blocklist-function/type/var排除指定符号--no-layout-tests/--use-core关闭布局测试 / 使用core而非std两个 sys crate 的 build.rs 都通过正则 allowlist 收窄符号面koharu-llama-sys 只保留^(ggml|gguf|llama|mtmd)_.*的函数、类型与变量koharu-diffusion-sys 则精确列出sd_*、new_sd_ctx、generate_image、new_upscaler_ctx、adetail_image等一组合法符号超出范围的符号不会被绑定。3. 更新安全包装并做聚焦检查审查绑定后需要按需更新安全包装 cratekoharu-llama与koharu-diffusion最后只对五个运行时 crate 运行聚焦的 Cargo 检查——即koharu-llama-sys、koharu-llama、koharu-diffusion-sys、koharu-diffusion、koharu-runtime这五个与 llama/diffusion 运行时直接相关的 crate。这与 AGENTS.md 的验证规则一致默认只运行最小相关检查或聚焦测试一次debug profile不跑全量测试套件既保证改动被验证又避免不必要的构建开销。五、绑定生成链路从 C 头文件到动态加载适配器理解同步流程的价值需要先看懂 koharu-bindgen 做了什么。以 koharu-llama-sys/build.rs 为例生成过程是以 wrapper.h 为入口它依次 include 了 llama.h、gguf.h、mtmd.h、mtmd-helper.h配置bindgen::Builder追加-Iinclude 路径、关闭布局测试、开启derive_partialeq、设置三个 allowlist 正则、关闭枚举名前缀调用Generator::from_header(..., llama).with_libraries([llama, mtmd])——两个库名意味着生成的绑定会尝试在llama与mtmd两个动态库中查找符号。koharu-bindgen/src/lib.rs 的Generator::generate()先跑 bindgen再把输出交给 rewrite.rs 的rewrite_bindings_for_libraries做一次语法树级重写把原始的extern C函数声明改写成顶层动态加载适配器。改写后的绑定具备以下特性见 rewrite.rs 中的loader_tokens与adapter_tokens用OnceLock缓存符号指针每个 C 函数只解析一次按平台映射库文件名Windows 为llama.dll、macOS 为libllama.dylib、Linux 为libllama.so先尝试复用进程内已加载的同名库Windows 用open_already_loadedLinux 用RTLD_NOLOAD再尝试可执行文件目录与 macOSFrameworks下的捆绑路径最后回退到系统搜索路径所有库加载失败时直接 panic找不到符号时 panic 并列出缺失符号名生成的源文件头部写有 Automatically generated by koharu-bindgen. Do not edit by hand.——与 AGENTS.md 中不得手改生成或派生源码应修改权威输入并重新运行生成器的源码边界规则严格对应。这套动态加载设计的直接受益者正是koharu-runtime运行时在启动阶段决定加载哪个平台的二进制绑定层则保持与具体库解耦。六、运行时激活链路下载、硬件发现与依赖排序同步工作流的最终目的是让koharu-runtime能在目标机器上正确激活对应平台的 llama/diffusion 二进制。整条链路在 crates/koharu-runtime/src/runtime/mod.rs 中可见Feature::{Torch, Llama, Diffusion}表示消费方请求的运行时能力Runtime::discover(features)先做硬件发现Hardware::discover()再对每个候选设备尝试生成安装计划Runtime::initialize()按计划安装并激活所有包最终返回进程级Device。包层面的平台与后端选择位于 llama.rs 的DiscoverablePackage::discover在 Windows/Linux x86_64 上依次探测 CUDA → ROCm → VulkanmacOS 上选择 MetalLinux aarch64 仅支持 CUDA每个变体对应一个带strum属性的资产名如x86_64-pc-windows-msvc-cuda.tar.gz。dependencies()进一步声明CUDA 变体依赖Cuda::Runtime13与Cuda::Blas13ROCm 变体依赖Rocm目标Vulkan/Metal 无额外依赖diffusion 包的逻辑与 llama 完全对称diffusion.rs。依赖关系在 graph.rs 中被组织成 petgraph 有向图同一 CUDA 组件在图中共享唯一节点避免重复安装并通过toposort保证按依赖顺序激活graph.rs内置的测试cuda_dependencies_are_shared_and_ordered验证了 CUDA Runtime13 → Blas13 → Llama 的先后顺序。激活本身由 loader.rs 完成Windows 使用LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR | LOAD_LIBRARY_SEARCH_SYSTEM32标志加载Unix 平台默认以RTLD_LOCAL加载避免污染符号表加载成功后forget句柄使库常驻进程。七、与 AGENTS.md 仓库规则的呼应runtime 同步工作流并非孤立脚本它处处体现 AGENTS.md 的长期约束Source Boundaries头文件由 sync.sh 统一 vendored绑定由 koharu-bindgen 自动生成均修改权威输入、运行生成器禁止手改生成物Upstream Alignmentsync.sh 从 fork 的固定 release tag拉取头文件而非跟踪滚动分支保证移植可追溯到某个具体版本同步后还需审查绑定与包装确认参数路径、布局、执行顺序未偏离上游Change Policy不添加向后兼容层——上游 API 变化时直接更新所有仓库内消费方并删除旧形式这正是 SKILL 要求更新 koharu-llama / koharu-diffusion 安全包装的原因Verification默认只对五个运行时 crate 运行聚焦的 debug 检查与快速迭代的验证基调一致。八、给 Agent 的实操检查清单完成一次 llama.cpp / stable-diffusion.cpp 运行时升级推荐按以下顺序执行在仓库根目录运行bash .agents/skills/runtime/scripts/sync.sh需安装gh与curl确认脚本打印的 llama.cpp 与 stable-diffusion.cpp 最新版本号用git diff审查 crates/koharu-llama-sys/include/ 与 crates/koharu-diffusion-sys/include/stable-diffusion.h 的头文件变更关注 API 增删与结构体重排将打印的版本更新到 llama.rs 与 diffusion.rs 的RELEASE常量构建 sys crate 重新生成绑定用--allowlist检查确认新旧符号面符合预期可参照 build.rs 中的正则按需更新koharu-llama/koharu-diffusion安全包装移除被上游删除的 API对koharu-llama-sys、koharu-llama、koharu-diffusion-sys、koharu-diffusion、koharu-runtime五个 crate 运行聚焦的cargo checkdebug profile确认无编译错误后提交。这套流程把上游发布 → 头文件 → 绑定 → 运行时包 → 验证串成了一条可重复执行的维护链路也让任何编码 Agent 都能在不需要人工干预的情况下安全地把 Koharu 的原生推理与图像生成运行时升级到新的上游版本。赞分享【免费下载链接】koharuML-powered manga translator, written in Rust.项目地址https://gitcode.com/gh_mirrors/ko/koharu点击查看免费下载相关推荐stable-diffusion.cpp 运行 SeFi-Image双时步 Transformer 图像生成全指南stable diffusion.cpp 运行 SeFi Image双时步 Transformer 图像生成全指南 本篇技术指南以 docs/sefi_ima人工智能大模型本地部署推理引擎媒体生成LobeHub deep-review 的 Skill Freshness 维度让 Agent 技能库与代码演进保持同步LobeHub deep review 的 Skill Freshness 维度让 Agent 技能库与代码演进保持同步 LobeHublobehub仓库人工智能AI 应用大模型AI Agent多智能体工具调用前端后端opendataloader-pdf 代码贡献实战指南构建、CLI 选项同步与 Agent Skill 维护opendataloader pdf 代码贡献实战指南构建、CLI 选项同步与 Agent Skill 维护 本篇指南以仓库根目录的 CONTRIBUTINGAI 应用OCRMCP 服务上一篇Wing语言终极指南如何用革命性云原生编程语言快速构建应用下一篇YOLO-World 的 DeepStream 部署实战MMYOLO 模型自定义 BBox Parser 与 TensorRT 端到端推理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

蓝鲸配置平台(bk-cmdb)批量创建项目接口 batch_create_project 实战指南

蓝鲸配置平台(bk-cmdb)批量创建项目接口 batch_create_project 实战指南

后端企业应用运维 【免费下载链接】bk-cmdb 蓝鲸智云配置平台(BlueKing CMDB) 项目地址: https://gitcode.com/gh_mirrors/bk/bk-cmdb 点击查看 免费下载 本篇以 docs/apidoc/apigw/open/en/batch_create_project.md 为核心,结合 bk-cmdb 源码&#xff…

2026/10/12 1:36:52 阅读更多 →
浏览器里剪视频成真了:FilmCraft Web 版架构全拆解(WebCodecs + OPFS)

浏览器里剪视频成真了:FilmCraft Web 版架构全拆解(WebCodecs + OPFS)

浏览器里剪视频成真了:FilmCraft Web 版架构全拆解(WebCodecs OPFS) 【免费下载链接】filmcraft An open-source, clean-room reimplementation of Adobe Premiere Pro built in pure Rust. 项目地址: https://gitcode.com/gh_mirrors/fi/…

2026/10/12 1:36:52 阅读更多 →
指针模块总结

指针模块总结

1.指针的认识和应用int val 0 char* a &val; char* *b &a; //指针就是取地址,分指针等级 char* pa,pb; //pa是char* pb是char char* pa,*pb; //pa pb都是char* typedef; 是对变量进行重命名 // typedef char* PChar PChar pa,pb char* pa,*pb 变量名升…

2026/10/12 1:35:51 阅读更多 →

最新新闻

【深度学习新浪潮】Meta Muse 智能体:它是什么?有哪些特点?为什么突然火了?

【深度学习新浪潮】Meta Muse 智能体:它是什么?有哪些特点?为什么突然火了?

1. 引言 近期,Meta Muse 智能体在 AI 领域引发广泛关注,开发者、创作者与科技从业者纷纷展开讨论。许多初次接触者不禁疑惑:这是 Meta 推出的又一款大模型?抑或仅是蹭热度的 AI 玩具? 事实并非如此。Meta Muse 是 Meta 在 AI 智能体方向的一次战略性布局,它并非简单的对…

2026/10/12 2:24:22 阅读更多 →
Spring-boot-3 -注解 yaml配置 -日志

Spring-boot-3 -注解 yaml配置 -日志

4、核心技能1. 常用注解SpringBoot 摒弃 XML 配置方式,改为全注解驱动1. 组件注册Configuration 自定义配置类、SpringBootConfiguration 用来标注SpringBoot主启动类的Bean 可以在自定义配置类面创建对象交给ioc容器,组件在容器中的名字为方法名、Scope…

2026/10/12 2:24:22 阅读更多 →
Neuroimage: 动态功能连接方法的重测信度比较

Neuroimage: 动态功能连接方法的重测信度比较

本篇文献发表在Neuroimage杂志。所发布内容旨在与大家分享学术新知,促进交流学习版权归原作者或原出处所有,感谢各位学者的辛勤付出与研究成果。1.引言大脑的功能组织具有丰富的时空结构,可以使用功能连接指标进行探测。功能连接被定义为两个…

2026/10/12 2:24:22 阅读更多 →
page_alloc __rmqueue

page_alloc __rmqueue

__rmqueue() 是伙伴系统分配路径的核心调度器。它在持有 zone->lock 的前提下,按照碎片化风险从低到高的顺序,依次尝试不同的分配策略,直到成功或彻底失败。核心作用与策略链它的本质是一个多级降级策略链:先尝试最“干净”的方…

2026/10/12 2:24:22 阅读更多 →
游戏引擎中物理步进与动画采样的同步机制解析

游戏引擎中物理步进与动画采样的同步机制解析

1. 这不是教科书,是我在三个项目里拆过七次引擎后写下的物理与动画系统手记“游戏引擎架构深度解析(三):物理与动画系统”——看到这个标题,你大概率正卡在某个角色落地时穿模、布料抖动像癫痫发作、或者刚加完一个新关…

2026/10/12 2:24:22 阅读更多 →
产业与汇率全景分析深入分析多表格形成一篇文章

产业与汇率全景分析深入分析多表格形成一篇文章

产业与汇率全景深度分析:汇率是外生变量,产业是底层根基引言汇率从来不是孤立的数字,它是一国产业竞争力、贸易结构、资本流动、宏观政策、全球供需格局共同定价的结果;反过来,汇率波动又会重塑产业成本、订单、利润、…

2026/10/12 2:23:21 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/11 14:36:54 阅读更多 →