goccy/go-llama
不依赖C语言库,纯Go代码就能跑大语言模型
go-llama把广泛使用的推理引擎llama.cpp先编译成WebAssembly,再转换成纯Go源代码,由此得到的库可以直接运行GGUF格式的模型文件,不需要cgo(Go调用C语言的机制)也不需要任何共享库,只需一个静态二进制文件。因为已经变成原生Go代码,运行时完全不需要wasm运行环境。
它做什么
- 项目先通过llama-wasm把llama.cpp编译成WebAssembly,再用wasm2go工具将其翻译成Go源代码,所以运行时不涉及任何wasm运行环境。
- 一个Llama实例内可以加载多个模型,每个模型又能创建多个上下文(各自维护独立的KV缓存),既能让一个模型同时服务多个独立对话,也能同时加载多个模型来实现推测解码——用小模型先做预测、大模型一次性验证以加速生成。
- 支持流式输出,生成的文本会按片段实时回调给调用者;也支持中断功能,可以从另一个goroutine(Go的轻量级线程)立即停止正在进行的生成。
- 提供沙箱选项,可以限制引擎能访问的目录范围并设置内存上限,让过大的模型在受限环境内失败,而不会拖垮宿主进程。
- 受限于wasm32架构,线性内存上限为4GiB,模型权重和所有上下文的KV缓存都要装在这个空间里,因此实际适合的规模大约是30亿参数、Q4量化的模型。
为什么重要
由于不需要cgo也不需要额外的共享库,一次Go构建就能生成可移植的二进制文件,可以交叉编译后部署到服务器、命令行工具乃至嵌入式设备等任何Go能运行的地方。这消除了在Go项目中集成大语言模型推理功能时,通常需要安装原生推理库带来的麻烦。
本仓库术语
- cgo · Go语言中用于调用C语言库的机制
- GGUF · llama.cpp生态中常用的一种紧凑的模型权重文件格式
- WebAssembly(wasm) · 一种为跨环境可移植运行而设计的低级字节码格式
- KV缓存 · 为每个对话保存此前计算结果、用于加速生成下一个词的临时存储
- 推测解码 · 先用小模型预测多步、再用大模型一次性验证的加速生成技术
仓库简介(英文)
llama.cpp in pure Go
在 GitHub 打开热门仓库
- liustack/modlens给DeepSeek这类只能读文字的AI装上一双眼睛:粘贴图片就能把内容变成结构化文字数据
- vorssaint/vorssaint-utils一个免费菜单栏应用,顶替十几款付费Mac工具
- MadsLorentzen/ai-job-search一个用Claude Code自动完成整个求职流程的开源框架,作者本人就是靠它找到了工作
- rohitg00/ai-engineering-from-scratch一套从数学到智能体全部亲手实现的免费AI工程课程,511节课都能产出可用工具
- AgriciDaniel/claude-obsidian一个开源“第二大脑”,让Claude Code帮你整理Obsidian笔记,文件所有权始终留在你手里
- openclaw/openclaw一个跑在你自己设备上、通过你已经在用的聊天软件跟你对话的个人AI助手
- tashfeenahmed/freellmapi一个把34家AI公司的免费额度合并成单一API的开源路由工具
- Alishahryar1/free-claude-code一个本地代理,把编程AI助手接到49家免费或低价模型服务商,不再只能用一家付费服务