如何在Go中本地运行开源大语言模型:Hugot + ONNX Runtime GenAI完全实战 【免费下载链接】hugotOnnx transformer pipelines in Golang项目地址https://gitcode.com/gh_mirrors/hu/hugot点击查看免费下载Hugot是一个用 Go 语言实现开源大语言模型本地推理的开源库基于 ONNX 格式与 ONNX Runtime GenAI 后端你可以在 Go 应用内直接加载并对话 Qwen、Phi、Gemma 等 LLM——无需 Python 服务、无需 REST API模型与数据全部留在自己的机器上。本文带你在 5 个步骤内从零搭出本地大模型对话并覆盖 GPU 加速、流式输出与工具调用等进阶玩法。 Hugot 是什么为什么需要它Hugot 把 Hugging Face 风格的 Transformer 流水线Pipelines搬到了 Go 生态中核心设计目标有四点特点说明Hugging Face 兼容Python 侧训练的模型导出 ONNX 后预测结果与 Python 版一致仅支持 ONNX统一模型格式PyTorch 模型可经 Optimum 一键导出进程内推理模型直接跑在你的 Go 进程里避免 RPC/HTTP 开销可插拔后端纯 Go、ONNX RuntimeORT、OpenXLA 三种后端按场景选择它的后端选择逻辑可以这样理解Go 后端纯 Go 实现、零 cgo 依赖适合小模型如 all-MiniLM-L6-v2和禁止 cgo 的环境但不支持生成式流水线ORT 后端通过构建标签-tags ORT编译启用是目前最快的推理后端唯一支持文本生成LLM 对话的方式底层使用 ONNX Runtime GenAIXLA 后端-tags XLA启用唯一支持 TPU 的后端暂不支持生成式流水线 所以本文主题本地跑 LLM走的就是ORT 后端 ONNX Runtime GenAI这条路线。第 1 步环境准备与依赖安装Hugot 当前在amd64 Linux上构建和测试需要 Go 1.27。1获取代码git clone https://gitcode.com/gh_mirrors/hu/hugot2下载 ONNX Runtime 动态库ORT 后端需要libonnxruntime.so。库默认从/usr/lib/libonnxruntime.so查找路径解析逻辑见 options/options.go你可以通过三种方式指定其他位置设置环境变量ONNXRUNTIME_DIR创建会话时传options.WithOnnxLibraryPath(/path/to/lib/dir)直接把库放进默认目录仓库中的 scripts/download-onnxruntime.sh 演示了如何从 ONNX Runtime 官方发布页拉取并安装到/usr/lib加--cuda参数则下载 GPU 版。参考 Dockerfile 可以看到完整的生产环境依赖组合。3在你的 Go 项目中引入go get github.com/knights-analytics/hugotORT 后端需要编译时打开构建标签go build -tags ORT第 2 步下载 ONNX 格式的大语言模型Hugot 内置了模型下载器可直接从 Hugging Face 拉取 ONNX 模型核心入口是DownloadModel实现位于 downloader.go。它会在下载前校验模型目录中包含.onnx与 tokenizer 文件保证只接受 ONNX 模型。以仓库测试用例中的Qwen3-4Bint4 量化为例模型清单见 testcases/downloadModels.gomodelPath, err : hugot.DownloadModel(ctx, KnightsAnalytics/qwen3-4B-int4, ./models/, hugot.NewDownloadOptions())DownloadOptions可以指定OnnxFilePath、ExternalDataPath大模型权重常拆成.onnx.data外部数据文件以及AdditionalFilePaths。生成式模型通常需要额外的genai_config.jsonONNX Runtime GenAI 的配置文件参考 testcases/downloadModels.go 中 Phi-3.5-vision 的完整示例。⚠️ 如果你只需要核心引擎、模型已自备可以用构建标签-tags NODOWNLOAD编译以排除下载器。第 3 步创建会话与文本生成流水线现在到了最核心的一步。会话创建逻辑见 hugot_ort.go——注意一个细节一个进程中同一时间只能有一个原生 ORT 会话ONNX Runtime 每进程单环境所以长生命周期服务只需创建一个会话复用给所有流水线。session, err : hugot.NewORTSession(ctx) check(err) defer session.Destroy() config : hugot.TextGenerationConfig{ ModelPath: modelPath, Name: chat, Options: []hugot.TextGenerationOption{ pipelines.WithSystemPrompt(You are a helpful assistant.), pipelines.WithMaxLength(2000), }, } pipeline, err : session.NewPipeline(config) check(err)TextGenerationPipeline由 pipelines/textGeneration.go 定义常用选项一览选项作用WithSystemPrompt(s)为每轮对话预置系统提示词WithMaxLength(n)限制生成 token 数默认 4096WithStreaming()开启流式输出逐 token 返回WithTemperature(t)/WithTopP(p)/WithSeed(s)控制采样随机性WithStopSequences(ss)指定停止序列对话通过消息backends.Message定义见 backends/generative.go进行支持多轮历史与批量输入inputs : [][]backends.Message{ {{Role: user, Content: what is the capital of the Netherlands?}}, } output, err : pipeline.RunMessages(ctx, inputs) fmt.Println(output.Responses[0]) // The capital of the Netherlands is Amsterdam.上面这段正是官方测试 tests/pipelines.go 的玩法用 Qwen3-4B-int4 问答荷兰首都断言答案包含 Amsterdam。完整的 ORT 文本测试入口在 tests/ort/hugot_ort_text_test.go。流式输出像 ChatGPT 一样逐字打印开启WithStreaming()后返回值不再是完整响应而是两条 channel——TokenStream与ErrorStream见 pipelines/textGeneration.go用 Go 原生 channel 实现自然逐字渲染for token : range output.TokenStream { fmt.Print(token.Token) // 实时打印每个 token }第 4 步进阶玩法 并发批量推理默认逐会话生成创建会话时加上options.WithGenerativeEngine()可启用 ONNX Runtime GenAI 的 Engine 模式获得并发请求与推理批处理能力仅纯文本消息参考 tests/ort/hugot_ort_text_test.go。CPU 吞吐调优高并发场景下每核一个 goroutine 共享同一流水线建议按 README 的 Performance Tuning 章节设置WithInterOpNumThreads(1)、WithIntraOpNumThreads(1)、WithCpuMemArena(false)等选项可大幅提升吞吐。工具调用与约束生成WithTools()支持 Hermes 风格工具定义 JSONWithGuidance()支持用 Lark 语法、JSON Schema 或正则约束输出强制模型输出合法结构如 JSON。官方测试 tests/pipelines.go 演示了让模型查时间 查巴黎天气并严格输出两个工具调用的完整案例。多模态Message结构体带ImageURLs/AudioURLs字段结合 Phi-3.5-vision-onnx 等模型即可跑视觉问答视觉测试见 tests/ort/hugot_ort_multimodal_test.go。NVIDIA GPU 加速安装 CUDA 版 ONNX Runtime 与匹配的 CUDA/cuDNN 库后创建会话时传入options.WithCuda(map[string]string{device_id: 0})即可。ORT 还支持 TensorRT、CoreML、OpenVINO 等执行器。微调训练Hugot 已内置训练器基于 goMLX可对 FeatureExtraction 类模型做语义相似度微调服务于 RAG 与语义搜索场景示例在 tests/training/hugot_training_test.go。常见问题速查避坑指南Q1编译时提示找不到NewORTSessionORT 后端受构建标签保护-tags ORT或-tags ALL才能启用不加标签编译的是 hugot_ort_disabled.go 中的存根。Q2报 another session is currently activeONNX Runtime 每进程只允许一个原生环境销毁旧会话session.Destroy()后再创建新会话或全程复用同一个会话。Q3模型下载失败或想换模型来源Hugot 只认 ONNX 格式。用 Optimum 把 PyTorch 模型导出 ONNX 后把genai_config.json、tokenizer 等文件与模型放好直接以本地路径传给TextGenerationConfig.ModelPath即可跳过下载。Q4能用纯 Go 后端跑 LLM 吗暂不能。生成式流水线目前仅 ORT 后端支持纯 Go 后端面向小批量、小模型的轻量场景。Q5内存够吗优先选 int4 量化模型如本文的 Qwen3-4B-int44B 级别量化模型在 16GB 内存的普通服务器上即可流畅本地推理GPU 上训练与推理都更快更省内存。项目结构速览路径内容hugot.go会话核心创建/注册/销毁流水线统计信息hugot_ort.goORT 后端会话入口与单会话互斥控制pipelines/textGeneration.go文本生成流水线与全部生成选项backends/后端抽象、消息与生成选项定义options/options.go会话级配置线程、CUDA、库路径等downloader.goHugging Face 模型下载器tests/ort/各流水线的 ORT 后端集成测试testcases/downloadModels.go官方测试所用模型清单写在最后Hugot 让在 Go 中本地运行开源大语言模型变成了一件很自然的事NewORTSession→DownloadModel→NewPipeline→RunMessages四步完成一次对话模型不出内网、依赖不进 Docker 之外的生态还顺带拿到了流式输出、工具调用与 GPU 加速这些生产级能力。如果你的生产栈是 Go这就是把 Hugging Face 模型平移进 Go 的完整路径 赞分享【免费下载链接】hugotOnnx transformer pipelines in Golang项目地址https://gitcode.com/gh_mirrors/hu/hugot点击查看免费下载相关推荐开发者指南如何用ONNX Runtime GenAI接入本地大模型Qwen2.5-Coder-1.5B-Instruct_rai_1.8.0_hybrid开发者指南如何用ONNX Runtime GenAI接入本地大模型Qwen2.5 Coder 1.5B Instruct_rai_1.8.0_hybrid 本如何在Go中直接从Hugging Face获取ONNX模型Hugot DownloadModel实战手册如何在Go中直接从Hugging Face获取ONNX模型Hugot DownloadModel实战手册 Hugot 是一个 Go 语言库它把 HugginGutenberg 区块编辑器数据层实战用 Selectors 和 Actions 驾驭 core/block-editor 的五个任务域Gutenberg 区块编辑器数据层实战用 Selectors 和 Actions 驾驭 core/block editor 的五个任务域 你的插件想在用户删后端前端上一篇脚本不生效、直播突然黑屏TwitchAdSolutions调试排错完全指南下一篇MOSS-Image-Base 文生图组件级加载实战from_components_pretrained 灵活组合完全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考