---
title: Ollama 本地流程：分别验收生成、向量与笔记检索
description: 安装本地 Ollama，独立测试两类模型请求，再接入 ChatCrystal，检查真实笔记与检索结果，明确资源和数据流边界。
image: "https://zengliangyi.com/og/blog/ollama-local-workflow.png"
---

把模型部署在本机，可以减少向远端服务发送材料，但首先要确认调用的是本地模型。Ollama 也支持云模型；服务地址是 localhost，不能单独证明每次推理都在本机完成。

本文按 [ChatCrystal](/projects/chatcrystal) 提交 [`7642768`](https://github.com/ZengLiangYi/ChatCrystal/tree/764276814e5c5a33ecbfeae63754f74b9261a3a8) 的 Ollama 适配路径说明如何验收一条笔记。不使用未经测量的硬件速度、模型排名或“零成本”承诺：本地运行仍消耗下载带宽、存储、内存和电力。

## 安装并确认本地服务

按照 [Ollama 官方入门文档](https://docs.ollama.com/quickstart) 选择对应系统的安装方式，并选择本地模型。先检查：



```bash
ollama   --version  
  ollama   list
```



在没有服务运行的终端环境中，可以启动 `ollama serve`。如果提示端口被占用，先确认占用者与实际 API 响应，不要直接将任意占用视为 Ollama 正常运行。

ChatCrystal 0.6.1 的 npm 入口还要求 Node.js 24 或更高版本。这是应用的运行要求，不是 Ollama 的安装要求；安装与桌面界面的区别见 [入门指南](/blog/chatcrystal-getting-started)。

## 为两类任务准备模型

以下名称是应用固定版本默认配置中的示例，不是质量排名：



```bash
ollama   pull   qwen2.5:7b  
  ollama   pull   nomic-embed-text  
  ollama   list
```



第一项用于生成，第二项用于向量。实际下载大小和运行资源取决于模型版本、量化、上下文与并发。模型文件能放进磁盘，不代表推理所需内存足够。先完成短输入测试，再尝试真实摘要长度；资源不足时选择适合当前机器的模型，并重新验证任务能力。

## 独立测试生成与向量接口

[官方 OpenAI 兼容说明](https://docs.ollama.com/api/openai-compatibility) 描述了兼容接口及其支持范围。用与 ChatCrystal 适配器一致的路径测试生成：



```bash
curl   --fail-with-body   http://localhost:11434/v1/chat/completions   \  
    -H   'Content-Type: application/json'   \  
    -d   '{"model":"qwen2.5:7b","messages":[{"role":"user","content":"用一句话解释笔记索引。"}],"stream":false}'
```



另行测试向量：



```bash
curl   --fail-with-body   http://localhost:11434/v1/embeddings   \  
    -H   'Content-Type: application/json'   \  
    -d   '{"model":"nomic-embed-text","input":"笔记索引测试"}'
```



检查 HTTP 状态与返回结构：生成路径应有助手文本，向量路径应有 `data` 内的数值向量。不要用生成请求成功推断向量也可用；兼容接口存在也不表示某个模型支持所有特性。以上命令会执行本地推理，本文未据此报告实际性能。

## 接入 ChatCrystal

在默认本机连接上设置：



```bash
crystal   config   set   llm.provider   ollama  
  crystal   config   set   llm.baseURL   http://localhost:11434  
  crystal   config   set   llm.model   qwen2.5:7b  
  crystal   config   set   embedding.provider   ollama  
  crystal   config   set   embedding.baseURL   http://localhost:11434  
  crystal   config   set   embedding.model   nomic-embed-text  
  crystal   config   get  
  crystal   config   test
```



[应用适配器](https://github.com/ZengLiangYi/ChatCrystal/blob/764276814e5c5a33ecbfeae63754f74b9261a3a8/server/src/services/providers.ts) 会在 Ollama 地址后追加 `/v1`，这里填写服务根地址。若已有向量，部分配置变更需要确认并重新建立索引；按 [模型配置与重建步骤](/blog/llm-and-embedding-separation) 处理，不能将配置保存成功当作重建完成。

`config test` 分别报告两类连接结果。短测试能通过，仍可能在长摘要或结构化输出阶段失败；保留具体错误、输入长度和模型信息，以便定位。

## 验收一条真实笔记

导入已知会话，选择非演示且包含可复用经验的记录，生成笔记并核对正文，再读取笔记 JSON 的 `embedding_status`。经验门槛可能正常过滤某些会话；摘要成功后向量也可能单独失败。

状态为 `done` 后，用应找到该笔记的查询和没有相关答案的查询检查检索。过程见 [找回调试方案](/blog/recover-debugging-notes)。随后再扩大输入与并发，记录加载时间、响应时间、失败率和资源峰值，避免把冷启动与稳定推理混为一谈。

## 核对离线与数据边界

本地所需模型已经下载、调用未切换到云模型且依赖服务可用时，可以进一步测试断网后的完整流程。只验证一句本地聊天，不足以证明导入、摘要、关系生成和查询都不需要网络。

同时检查 LLM 与 Embedding 两套实际配置。一个本地后端与一个远端后端混用时，材料仍可能沿远端路径离开机器；向量索引和应用数据库也仍需妥善管理，详见 [本地优先的数据边界](/blog/local-first-ai-data-boundaries)。

分享：

##  相关文章

[##  AI 对话格式差异：事件、快照与跨库消息定位

对照五个固定适配器，区分 JSONL 容器、事件语义与 SQLite 键布局，用两个内存数据库观察消息索引、孤立数据和未知版本。          曾亮懿       2026年10月7日      阅读约 4 分钟

#ChatCrystal

#Node.js

#SQLite](/blog/ai-conversation-format-divergence)    [##  AI 对话管理方案：四种存储路径与迁移验收

比较 Claude Code、Cursor、Copilot、Trae 的固定适配器输入，区分原始副本、可读导出与知识库，并用合成清单验证身份和信息保留。          曾亮懿       2026年10月7日      阅读约 4 分钟

#ChatCrystal

#Node.js

#SQLite](/blog/ai-conversation-management-options)    [##  五种 AI 对话解析器：字段保留与损失边界

从 Claude Code、Codex、Cursor、Trae 和 Copilot 的实际解析器建立验收矩阵，检查工具标记、思考文本、顺序与快照覆盖范围。          曾亮懿       2026年10月7日      阅读约 4 分钟

#ChatCrystal

#TypeScript

#Node.js](/blog/ai-conversation-parser-boundaries)

##  从文章到代码

到我的 GitHub 看看 ChatCrystal、开发者工具和日常学习记录，欢迎交流实现细节。

[访问我的 GitHub](https://github.com/ZengLiangYi)

```json
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "ZengLiangYi Blog",
  "alternateName": [
    "Zeng Liangyi",
    "ZengLiangYi",
    "zengliangyi.com"
  ],
  "url": "https://zengliangyi.com",
  "description": "曾亮懿的个人网站。记录 AI Native 探索、开发者工具与全栈产品实践。"
}
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "Ollama 本地流程：分别验收生成、向量与笔记检索",
  "description": "安装本地 Ollama，独立测试两类模型请求，再接入 ChatCrystal，检查真实笔记与检索结果，明确资源和数据流边界。",
  "url": "https://zengliangyi.com/blog/ollama-local-workflow/",
  "image": "https://zengliangyi.com/images/blog/ollama-local-workflow.svg",
  "datePublished": "2026-10-03T00:00:00.000Z",
  "dateModified": "2026-10-03T00:00:00.000Z",
  "author": {
    "@type": "Person",
    "name": "曾亮懿",
    "url": "https://zengliangyi.com/about"
  },
  "publisher": {
    "@type": "Organization",
    "name": "ZengLiangYi Blog",
    "logo": {
      "@type": "ImageObject",
      "url": "https://zengliangyi.com/favicon-96x96.png"
    }
  },
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://zengliangyi.com/blog/ollama-local-workflow/"
  }
}
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "首页",
      "item": "https://zengliangyi.com/"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "文章",
      "item": "https://zengliangyi.com/blog"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "Ollama 本地流程：分别验收生成、向量与笔记检索",
      "item": "https://zengliangyi.com/blog/ollama-local-workflow/"
    }
  ]
}
```
