📚 Harness 学习计划 / 第2周 / Day06_安装Ollama跑通

Day 6 · 安装 Ollama + 拉取 Hermes-3 跑通

属性
日期 2026-08-20(实际完成)
周次 第2周:动手体验+场景深挖
轨1 · Hermes 技术认知
时间 1 小时
状态 ✅ 已完成

📋 Checklist


📖 阅读材料

材料 链接
Ollama 下载 https://ollama.ai/download
Hermes3 on Ollama https://ollama.ai/library/hermes3
Ollama 文档 https://github.com/ollama/ollama
Hermes 3 8B Model Card https://huggingface.co/NousResearch/Hermes-3-Llama-3.1-8B

✍️ 学习笔记

新增概念:Ollama 的定位

Ollama 不是 Harness 框架,是模型服务层(接口层)。

Agent Harness(框架层)
    │ HTTP (OpenAI 兼容格式)
    ▼
Ollama(模型服务层)    ← 我们在这里
    │ 内部调用
    ▼
llama.cpp(推理引擎)
    │
    ▼
Hermes-3-8B(模型权重)

Ollama 只做一件事:收请求、管理推理、返回结果。不参与 Agent 决策循环。

类比:Ollama 是"外卖平台"(接单、派单、通知),推理引擎是"厨房"(真正做菜),模型权重是"厨师技艺"。

新增概念:Claude Messages API vs Hermes ChatML 的本质区别

Claude Hermes
顶层结构 3 个独立字段(system / tools / messages) 全塞进 messages 数组,拼成一个大字符串
Harness 操作 操作 JSON 对象 拼字符串 + 解析字符串
通用性 只适用 Claude 适用所有开源模型(Llama/Qwen/DeepSeek)

详见 Day03 补充文档

安装过程

步骤 耗时 备注
下载 Ollama 安装包 ~5min 约 400MB
安装 Ollama ~2min 默认安装到 C 盘
拉取模型 ~30min 4.7GB,1.4 MB/s
迁移到 D 盘 ~5min 用目录链接(Junction),Ollama 无感知

迁移方案

环境变量 OLLAMA_MODELS 在 Windows 上不生效,改用目录链接:

C:\Users\xielei\.ollama\models → D:\ollama-models(Junction)

Ollama 以为自己写 C 盘,Windows 实际写到了 D 盘。

英文测试

问题 回复质量 (1-5) 延迟 备注
What is a camera cage used for? 4 ~1s 5 点全覆盖,结构清晰,专业术语准确
Explain the difference between 15mm and 19mm rod systems 4 ~1s 覆盖尺寸/重量/兼容性/流行度/适配器,技术准确

中文测试

问题 回复质量 (1-5) 延迟 备注
推荐一款适合Sony A7III的兔笼 2 ~1s 拒绝推荐 + 中文生硬("兔笼拍照"、"购置建议")

System Prompt 测试


💡 关键认知

1. Hermes 8B 实测结论

✅ 英文能力:专业术语准确,结构化输出好
✅ 延迟:~1s 首字,Agent 场景可接受
✅ System prompt 可控行为
❌ 中文能力:生硬,英文翻译腔
❌ 领域知识:不知道 SmallRig 产品
❌ 知识截止:无法推荐具体产品(需 Tool 填补)

2. Agent 架构的核心逻辑(再次验证)

System Prompt → 控制"怎么回答"(不拒绝、角色定位)
Tool 调用     → 提供"回答什么"(实时商品数据、订单信息)
模型本身知识   → 只是"兜底",不是主力

3. Agent 核心四要素

┌─────────────────────────────────────────────┐
│                                             │
│  ① 模型(大脑)    —— 推理、决策             │
│  ② System Prompt —— 角色、行为边界           │
│  ③ Tool 工具      —— 外部能力(搜索、查库)   │
│  ④ Agent Loop     —— 循环调度(核心引擎)     │
│                                             │
└─────────────────────────────────────────────┘

"输入"不算核心要素——输入是燃料,不是引擎零件。

4. Agent Loop 的实现原理

Loop 的代码结构由 Harness 实现,但每轮「继续还是结束」由模型通过输出内容来决定。

模型只做一件事:收输入 → 吐输出。它不知道自己在循环里,但它的输出决定了循环的走向。

Harness 的 Loop 伪代码:

while True:
    response = 调模型(messages, tools)

    if response == 文本回复:          ← 模型选择:直接回答
        展示给用户,break

    if response == tool_use:          ← 模型选择:调工具
        结果 = 执行工具(tool_use.name, tool_use.input)
        messages.append(tool_result)
        continue  ← 回到 while,再调模型

Harness 铺好了两条路,模型每次选择走哪条——输出文本走结束分支,输出 tool_use 走继续分支。

类比:Harness = 十字路口的路,模型 = 开车的司机。路是 Harness 修的,但每次左转还是右转是司机决定的。

Claude vs Hermes 的 Loop 判断差异:

Claude Hermes
判断要调工具 stop_reason == "tool_use" 正则匹配 <tool_call>
判断结束 stop_reason == "end_turn" 没匹配到 <tool_call>
可靠程度 API 保证,100% 准确 靠正则,可能格式错误

ChatML 四角色完整对话示例

ChatML 有四个角色,比 Claude 多两个:

<|im_start|>system
你是一个助手,可以查天气。
<tools>{"type": "function", "function": {"name": "get_weather", ...}}</tools>
<|im_end|>
<|im_start|>user
巴黎天气怎么样?
<|im_end|>
<|im_start|>assistant
<tool_call>{"name": "get_weather", "arguments": {"city": "Paris"}}</tool_call>
<|im_end|>
<|im_start|>tool                          ← Harness 执行工具后回传
<tool_result>{"temperature": 22, "condition": "晴"}</tool_result>
<|im_end|>
<|im_start|>assistant
巴黎今天天气晴朗,22°C,适合出行。
<|im_end|>
角色 谁写 内容
system Harness 拼 系统指令 + <tools> 工具定义
user 用户 用户输入的问题
assistant 模型 文本回复 <tool_call> 工具调用
tool Harness <tool_result> 工具执行结果

tool 角色是 Harness 写的,不是模型写的。 对比 Claude:Claude 只有 user/assistant 两个角色,tool_result 塞进 user 角色。Hermes 专门给了一个 tool 角色,逻辑一样,角色体系不同。

5. 中文场景的制约

Hermes 8B 中文能力明显弱于英文。对 SmallRig 中文站 Agent 场景,可能出现:

Day 7 要验证:FC 准确率在中文场景下是否也受影响?


❓ 疑问

  1. Hermes 的 FC 准确率实际表现?(Day 7 实测验证)
  2. 中文场景下 FC 调用是否也会出现偏差?
  3. 如果 Hermes 8B 中文不够,是否考虑 Qwen 或 DeepSeek 作为替代?

📤 产出


🧪 Day 6 自测题

第 1 题:架构分层

在以下三层架构中,Ollama 属于哪一层?

A. Agent Harness —— 管理 agent 循环(用户输入→调模型→执行工具→循环)
B. 模型服务层 —— 收 HTTP 请求、管理模型加载、返回结果
C. 推理引擎 —— 真正的矩阵运算、逐 token 生成

点击看答案

B。 Ollama 是模型服务层,对上提供 OpenAI 兼容 API,对下调用 llama.cpp 推理引擎。它不参与 Agent 决策循环(那是 Harness 的事),也不做推理计算(那是 llama.cpp 的事)。


第 2 题:判断对错

「Ollama 是 Agent 框架,它负责管理工具调用和对话循环。」

点击看答案

错。 Ollama 是模型服务层(接口层),只负责收请求、管理推理、返回结果。Agent 循环(调工具、回传结果、再调模型)是 Harness 框架的职责。


第 3 题:Claude vs Hermes 协议

Claude Messages API 和 Hermes ChatML 最本质的区别是什么?

A. Claude 支持并行调用,Hermes 不支持
B. Claude 用 3 个独立顶层字段,Hermes 全塞进一个文本字符串
C. Claude 的回复更快
D. Claude 支持中文,Hermes 不支持

点击看答案

B。 Claude Messages API 用 systemtoolsmessages 三个独立顶层字段,API 层帮你做结构化处理。Hermes ChatML 把所有东西(系统指令、工具定义、对话历史)全拼成一个巨大的 prompt 字符串,靠 <|im_start|> 等特殊 token 分隔。


第 4 题:实测结论

今天测试 Hermes-3-8B 得出的关键结论是什么?选出错误的一项:

A. 英文能力约 4/5,专业术语准确,结构化输出好
B. 中文能力约 2/5,生硬如机翻
C. 本地推理首字延迟约 1 秒
D. 模型自带 SmallRig 产品知识,能直接推荐兔笼型号

点击看答案

D 是错的。 Hermes 8B 不知道 SmallRig 产品,推荐了相机而非兔笼。这正是 Agent 存在的意义——模型本身的知识只是"兜底",实时产品数据需要靠 Tool 调用获取。


第 5 题:场景应用题

今天测试中发现 Hermes 拒绝推荐产品。通过 system prompt 覆盖后,它不再拒绝,但推荐了错误的品类(相机而非兔笼)。这个问题在 Agent 架构中应该怎么解决?

A. 换一个更大的模型(如 70B)
B. 在 system prompt 里写更详细的 SmallRig 产品信息
C. 给 Agent 配置一个 search_product Tool,让模型调用商品搜索 API 获取实时数据
D. 放弃 Hermes,只用 Claude

点击看答案

C。 System prompt 只能控制行为,填不了知识缺口。即使你把产品信息写进 prompt,token 也是有限的。正确做法是给 Agent 配置 Tool——模型判断用户意图后调用 search_product 获取实时商品数据,再用数据生成推荐。

这验证了 Agent 架构的核心逻辑:System Prompt 控制行为,Tool 提供数据。


⏭️ 完成后:更新 当前进度