Ollama vs OpenAI vs Claude 做摘要,质量差距有多大

本文面向:想了解不同 LLM 摘要质量差异的 ChatCrystal 用户。

预计阅读时间:10 分钟

为什么要横评

ChatCrystal 的核心功能之一是把冗长的 AI 编程对话压缩成结构化笔记------标题、摘要、关键结论、代码片段、标签。这个过程完全依赖 LLM 的理解能力。

问题在于:不同模型之间的摘要质量差距,可能远超你的预期。

本地模型(Ollama + qwen2.5:7b)零成本、无隐私泄露,但 7B 参数的小模型能不能胜任结构化知识提炼?云端模型(GPT-4o、Claude Sonnet)能力毋庸置疑,但每条对话都要付费,批量总结几百条对话时成本不可忽视。

这篇文章的目的很简单:帮你在质量、成本、速度之间做出 informed decision。

测试方法

测试对象

选取同一条中等复杂度的编程对话(约 15 轮交互,涉及 bug 调试 + 方案讨论 + 代码实现),分别用以下模型生成摘要:

模型 提供商 类型 默认模型
qwen2.5:7b Ollama 本地
gpt-4o OpenAI 云端 -
claude-sonnet-4-20250514 Anthropic 云端 -
gemini-2.0-flash Google 云端 -
deepseek-chat DeepSeek (Custom) 云端 -

评测维度

ChatCrystal 的摘要 Schema 定义了 5 个结构化字段(来自 server/src/services/summarize.tsSummarizeSchema),配合 SYSTEM_PROMPT 中的详细要求一起控制输出质量:

  1. 标题准确性 --- 是否精准概括对话主题,20 字以内
  2. 摘要完整性 --- 2-4 段 Markdown,覆盖决策上下文、实施要点、可复用知识(由 SYSTEM_PROMPT 约束)
  3. 关键结论提取 --- 3-5 条独立可理解的结论
  4. 代码片段识别 --- 0-3 个最关键代码片段,附语言和描述
  5. 标签生成 --- 3-6 个英文小写标签,覆盖技术栈、问题类型、领域

预处理逻辑

所有模型收到的输入是相同的。ChatCrystal 的 prepareTranscript 函数(server/src/services/transcript.ts)会做智能截断:

  • 总预算:maxInputChars = 32000(约 8000 tokens)
  • 保留首 Turn 和末尾两个 Turn(完整渲染)
  • 中间 Turn 按得分排序,高分保留原文,低分压缩为一行摘要
  • 确认类 Turn(用户输入 < 20 字符)直接标记 [确认] 跳过

这意味着即使对话很长,每个模型看到的内容是一致的。

各模型表现

Ollama (qwen2.5:7b) --- 免费但粗糙

优势:

  • 零成本,本地运行,无隐私问题
  • 速度尚可(取决于硬件,通常 10-30 秒)
  • 能正确识别对话的主要话题

问题:

  • 标题过于宽泛:倾向于生成 "修复 Bug"、"代码优化" 这类泛化标题,缺乏具体性
  • 摘要深度不足:能覆盖 "做了什么",但对 "为什么这样做" 的决策上下文提取较弱
  • 关键结论雷同:3-5 条结论之间区分度低,有时只是换了个说法重复同一件事
  • 代码片段选择随意:经常选取冗长的完整实现而非最能说明方案的核心片段
  • 标签过少或过泛 :有时只生成 2 个标签,且偏向通用词汇(如 debugfix

适合场景: 个人使用、对话量大但对质量要求不高、隐私敏感环境。

OpenAI (gpt-4o) --- 全面均衡

优势:

  • 标题精准且具体,能抓住对话的核心技术点
  • 摘要结构清晰,决策上下文和实施要点分离得很好
  • 关键结论之间有明确的层次和区分度
  • 代码片段选择准确,倾向于选取最有说明力的片段
  • 标签覆盖全面,技术栈 + 问题类型 + 领域三个维度都能兼顾

问题:

  • 偶尔在摘要中加入对话中没有的 "推测性" 内容
  • 对中文对话的摘要有时会中英混杂(技术术语保留英文是合理的,但偶尔连描述性文字也会混入英文)

适合场景: 团队使用、需要高质量知识库、预算可控。

Anthropic (claude-sonnet-4) --- 最佳摘要质量

优势:

  • 标题最精准:既能概括主题,又保持简洁,几乎不需要人工修改
  • 摘要最具可读性:段落之间的逻辑连贯性最好,读起来像人写的文档
  • 关键结论最有价值:提取的结论往往是真正 "可复用" 的知识,而非对对话的简单复述
  • 代码片段描述最清晰:不仅选对了代码,描述文字也能准确说明这段代码解决什么问题
  • 严格遵循 Schema:字段长度、数量限制都控制得最好

问题:

  • 成本最高(Sonnet 级别的 token 单价高于 GPT-4o)
  • 速度较慢,尤其是长对话(需要更多 thinking time)

适合场景: 对知识库质量有高要求、预算充裕、对话量不大但每条都很重要。

Google (gemini-2.0-flash) --- 速度之王

优势:

  • 速度最快,通常 3-5 秒完成
  • 有免费额度,成本极低
  • 标题和标签质量不错
  • 支持 Embedding(text-embedding-004),可以一套 Google 方案走到底

问题:

  • 摘要深度不如 GPT-4o 和 Claude,倾向 "点到为止"
  • 关键结论有时过于简短,缺乏上下文
  • 对复杂多步骤对话的理解力稍弱,偶尔会遗漏中间的方案切换

适合场景: 对速度敏感、预算有限、对话复杂度中等。

DeepSeek (deepseek-chat via Custom) --- 性价比之选

优势:

  • 价格极低(远低于 OpenAI 和 Anthropic)
  • 中文对话摘要质量出乎意料地好,中文表达自然
  • 通过 ChatCrystal 的 Custom provider 接入,配置简单
  • 关键结论的提取质量接近 GPT-4o

问题:

  • API 稳定性偶有波动,高峰期可能变慢
  • 英文对话的摘要质量不如中文
  • 代码片段描述有时过于简略

适合场景: 预算敏感、中文对话为主、能接受偶尔的不稳定。

质量 vs 成本 vs 速度的三角权衡

用一句话总结每个维度的冠军:

  • 质量天花板:Claude Sonnet > GPT-4o > DeepSeek > Gemini Flash > Ollama
  • 成本友好度:Ollama > Gemini Flash > DeepSeek > GPT-4o > Claude Sonnet
  • 速度体验:Gemini Flash > Ollama > DeepSeek > GPT-4o > Claude Sonnet

但真实决策不是选冠军,而是找平衡点。

真实成本估算

假设你有 200 条对话需要总结,每条约 8000 tokens 输入 + 2000 tokens 输出:

模型 单条成本(约) 200 条总计 摘要质量
Ollama qwen2.5:7b ¥0 ¥0 ★★☆☆☆
Gemini 2.0 Flash ¥0.01-0.02 ¥2-4 ★★★☆☆
DeepSeek Chat ¥0.02-0.05 ¥4-10 ★★★★☆
GPT-4o ¥0.10-0.15 ¥20-30 ★★★★☆
Claude Sonnet ¥0.15-0.25 ¥30-50 ★★★★★

注:价格基于 2025 年中的公开定价,实际费用因 token 计数方式略有差异。

推荐方案

预算为零:Ollama + qwen2.5:7b

本地跑,完全免费。接受质量上的妥协,后续可以手动编辑笔记来弥补。ChatCrystal 默认就是这个配置,开箱即用。

进阶: 如果你的机器有 16GB+ 显存,可以试 qwen2.5:14b 甚至 qwen2.5:32b,质量提升明显。

小预算、大对话量:DeepSeek

通过 Custom provider 接入,200 条对话不到 10 块钱。中文对话的质量甚至可以媲美 GPT-4o。配置方式:

bash 复制代码
crystal config set llm.provider custom
crystal config set llm.baseURL https://api.deepseek.com/v1
crystal config set llm.apiKey your-key
crystal config set llm.model deepseek-chat

均衡之选:GPT-4o

质量稳定,生态成熟,出问题时社区资源最多。适合团队环境和需要可靠性的场景。

追求极致:Claude Sonnet

如果你的对话记录包含复杂的技术决策、架构讨论,Claude 的摘要质量是最好的。特别是关键结论的提取,往往能捕捉到真正有价值的决策逻辑。

速度优先:Gemini 2.0 Flash

批量总结时体验最好,几秒钟一条。免费额度够个人用很久。质量虽然不如 GPT-4o 和 Claude,但对大多数场景够用了。

ChatCrystal 的设计考量

几点技术细节值得注意:

Schema 约束保证了下限。 ChatCrystal 使用 Vercel AI SDK 的 generateObject 配合 Zod Schema 强制结构化输出。无论用哪个模型,输出一定是合法的 JSON,字段类型和数量都有约束。这避免了 "模型自由发挥导致输出不可解析" 的问题。

队列限速保护 API。 摘要任务通过 p-queue 串行执行(concurrency: 1),每秒最多 1 次请求,429 错误自动指数退避重试。这意味着即使你选了有 rate limit 的免费 API,也不会被封号。

Embedding 和 LLM 可以分开选。 这是很多人忽略的一点:你可以用 DeepSeek 做摘要(便宜),同时用 Ollama 的 nomic-embed-text 做语义搜索(免费本地)。两者独立配置,互不影响。

输入预处理是公平的基础。 prepareTranscript 的智能截断确保每个模型看到的内容是一致的------首 Turn 和末尾两个 Turn 完整保留,中间按重要性排序填充。这消除了 "模型 A 看到了更多上下文所以表现更好" 的变量。

下一步

  • 实测你自己的对话:本文的结论基于特定对话模式,你的实际场景可能不同。建议先用 Ollama 跑几条,再用云端模型对比,找到自己的质量阈值。
  • 混合策略:日常导入用 Ollama 自动总结,重要对话手动触发 Claude 重新生成。ChatCrystal 支持覆盖已有笔记。
  • 关注 Custom provider:国内的 DeepSeek、Moonshot、智谱等都兼容 OpenAI API 格式,通过 Custom 接口接入后,选择空间比表中列出的 5 种大得多。

本文基于 ChatCrystal v0.4.x 的摘要服务实现。模型定价和能力会持续变化,建议以实际测试为准。


项目地址:github.com/ZengLiangYi/ChatCrystal

相关推荐
石山代码9 小时前
基于现有日志系统的功能扩展方案
网络
哼?~9 小时前
多路复用I/O之Epoll
网络
MepSUxjvy9 小时前
拆解 OpenHands(11)--- Runtime主要组件
java·windows·microsoft
开开心心就好10 小时前
免费无广告的批量卸载与系统清理工具
linux·服务器·网络·智能手机·rabbitmq·excel·memcached
wanhengidc10 小时前
高防服务器中的数据安全
运维·服务器·网络
艾莉丝努力练剑10 小时前
【Linux网络】Linux 网络编程:HTTP(五)HTTP收尾,从Cookie会话保持、抓包问题到 HTTPS 初识
linux·运维·服务器·网络·c++
时夜_Ryan10 小时前
JumpServer堡垒机:一键部署运维安全审计
linux·运维·服务器·网络·安全·centos
车软派开发学长10 小时前
零基础学习车软嵌入式AUTOSAR,以一帧CAN报文实战讲解AUTOSAR的学习
网络·stm32·车载系统·autosar·嵌入式实时数据库
源远流长jerry10 小时前
LVS 与 Nginx 负载均衡:从原理到生产实战
运维·网络·网络协议·tcp/ip·nginx·负载均衡·lvs