阅读方法与范围¶
参考的拆解方式¶
本项目借鉴 refs/dg-ai-notes 中 Pi-Agent 教程的组织方式:每章不只描述文件名,而是建立一个可运行的心智模型,并在三个层次之间往返:
- 是什么:先定义组件的责任和边界。
- 怎么做:沿着真实函数调用和数据结构看实现。
- 为什么这样做:解释缓存、队列、适配层、错误处理和可替换接口背后的取舍。
每个章节尽量包含:一张主流程图、关键类型、源码入口、失败路径和可复现实验思路。
源码快照与证据规则¶
工作区中的 ollama-main 目录没有可用的 .git 元数据,因此无法可靠地声称它对应某个 tag 或 commit。能确认的事实包括:
- Go module 是
github.com/ollama/ollama。 go.mod声明 Go1.26.0。version.Version当前源码默认值为0.0.0,实际发行构建可能通过注入覆盖。- 快照包含
agent/、server/、model/、x/mlxrunner/、桌面app/等目录。
文档中出现的 server/routes.go#L... 等行号指向本地快照的阅读证据;GitHub 外链默认使用 upstream main,它可能随上游提交发生漂移。
不在本书范围内的内容¶
- 不逐一解释 100+ 个 CLI 命令函数的每一行。
- 不复述 Ollama 官方用户文档中的安装教程。
- 不复制
ollama-main源码进文档仓库;代码只通过链接和短片段说明。 - 不把没有在快照中验证的性能数字写成结论。
如何验证自己的理解¶
即使本机没有完整 Go/CMake 工具链,也可以先做静态阅读:
rg -n '^type |^func ' ollama-main/server ollama-main/agent
rg -n 'r\.(GET|POST|DELETE|HEAD)' ollama-main/server/routes.go
rg -n 'NewLlamaServer|getRunner|load\(' ollama-main/server ollama-main/llm
如果要运行完整代码,需要遵守 Ollama 的平台构建说明,准备 Go、CMake、C/C++ 编译器和对应 GPU SDK;这不是本书在线站点的构建前置条件。