跳转至

阅读方法与范围

参考的拆解方式

本项目借鉴 refs/dg-ai-notes 中 Pi-Agent 教程的组织方式:每章不只描述文件名,而是建立一个可运行的心智模型,并在三个层次之间往返:

  1. 是什么:先定义组件的责任和边界。
  2. 怎么做:沿着真实函数调用和数据结构看实现。
  3. 为什么这样做:解释缓存、队列、适配层、错误处理和可替换接口背后的取舍。

每个章节尽量包含:一张主流程图、关键类型、源码入口、失败路径和可复现实验思路。

源码快照与证据规则

工作区中的 ollama-main 目录没有可用的 .git 元数据,因此无法可靠地声称它对应某个 tag 或 commit。能确认的事实包括:

  • Go module 是 github.com/ollama/ollama
  • go.mod 声明 Go 1.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;这不是本书在线站点的构建前置条件。