跳到正文
曾亮懿 ZengLiangYi Blog

Ollama 本地流程:分别验收生成、向量与笔记检索

安装本地 Ollama,独立测试两类模型请求,再接入 ChatCrystal,检查真实笔记与检索结果,明确资源和数据流边界。

曾亮懿

曾亮懿

阅读约 4 分钟
目录 展开 收起

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

本文按 ChatCrystal 提交 7642768 的 Ollama 适配路径说明如何验收一条笔记。不使用未经测量的硬件速度、模型排名或“零成本”承诺:本地运行仍消耗下载带宽、存储、内存和电力。

安装并确认本地服务

按照 Ollama 官方入门文档 选择对应系统的安装方式,并选择本地模型。先检查:

ollama --version
ollama list

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

ChatCrystal 0.6.1 的 npm 入口还要求 Node.js 24 或更高版本。这是应用的运行要求,不是 Ollama 的安装要求;安装与桌面界面的区别见 入门指南。

为两类任务准备模型

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

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

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

独立测试生成与向量接口

官方 OpenAI 兼容说明 描述了兼容接口及其支持范围。用与 ChatCrystal 适配器一致的路径测试生成:

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}'

另行测试向量:

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

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

接入 ChatCrystal

在默认本机连接上设置:

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

应用适配器 会在 Ollama 地址后追加 /v1,这里填写服务根地址。若已有向量,部分配置变更需要确认并重新建立索引;按 模型配置与重建步骤 处理,不能将配置保存成功当作重建完成。

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

验收一条真实笔记

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

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

核对离线与数据边界

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

同时检查 LLM 与 Embedding 两套实际配置。一个本地后端与一个远端后端混用时,材料仍可能沿远端路径离开机器;向量索引和应用数据库也仍需妥善管理,详见 本地优先的数据边界。

分享:

相关文章

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

对照五个固定适配器,区分 JSONL 容器、事件语义与 SQLite 键布局,用两个内存数据库观察消息索引、孤立数据和未知版本。

曾亮懿 曾亮懿
阅读约 4 分钟
#ChatCrystal #Node.js #SQLite

AI 对话管理方案:四种存储路径与迁移验收

比较 Claude Code、Cursor、Copilot、Trae 的固定适配器输入,区分原始副本、可读导出与知识库,并用合成清单验证身份和信息保留。

曾亮懿 曾亮懿
阅读约 4 分钟
#ChatCrystal #Node.js #SQLite

五种 AI 对话解析器:字段保留与损失边界

从 Claude Code、Codex、Cursor、Trae 和 Copilot 的实际解析器建立验收矩阵,检查工具标记、思考文本、顺序与快照覆盖范围。

曾亮懿 曾亮懿
阅读约 4 分钟
#ChatCrystal #TypeScript #Node.js

从文章到代码

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