问 HN:到 2023 年 12 月,我该如何用自己的文档训练一个自定义 LLM/ChatGPT?

试图把 ChatGPT 风格模型“训练”到自己文档上的开发者,越来越发现完整微调往往并非必需,也不具成本效益;相反,大多数实用方案都依赖检索增强生成(RAG),即将外部数据建立索引,并在查询时注入提示词中。参与者比较了 LlamaIndex、LangChain、Haystack 以及各种托管服务(AWS Bedrock、Azure AI Studio、OpenAI Assistants、Notion、PrivateGPT 等),权衡易用性、成本和开放性,同时关注上下文窗口限制、分块策略、幻觉和向量数据库选择等问题。一个反复出现的主题是:RAG 对许多中小规模语料库和企业搜索/问答场景都很有效,而对于非常大或高度专有的数据集,最终可能需要更高级的方法,例如持续预训练或 RAG + 微调的混合方案。

“在你的文档上训练”通常是什么意思

  • 许多评论者强调,绝大多数声称“用你的文档训练”的产品,其实做的是 RAG(检索增强生成),而不是真正的微调或预训练。
  • RAG 流程:摄取文档 → 分块 + 向量化 → 存入向量数据库 → 每次查询时检索相关片段 → 填入 LLM 提示词。
  • 仅在原始文档上做真正微调,据说主要会教会模型风格/模式,而不是可靠的事实回忆;如果使用微调,推荐制作问答式数据集。
  • 有人认为 RAG 是正确的通用方案;少数人则称 RAG “从根本上有缺陷”,或主要只适用于较小数据集。

云端和托管方案

  • AWS Bedrock:知识库(RAG)加“持续预训练”;被认为很强大但很贵,尤其是自定义模型和 OpenSearch。
  • 建议的替代方案:用 pgvector/RDS 代替 OpenSearch;用 Pinecone 作为更便宜的向量存储。
  • 还提到的其他托管方案:Amazon Q、Azure AI Studio + Semantic Kernel、OpenAI Assistants API(内置 RAG)、Notion Q&A、NotebookLM、Office Copilot 风格构建器,以及各种 SaaS 工具。

开源和本地栈

  • 流行的 RAG 框架:LlamaIndex(广受好评)、LangChain(被批评为臃肿/不稳定)、Haystack、Langroid、txtai、embedchain、Buster。
  • 一体化/本地应用:PrivateGPT、h2oGPT、Gpt4All、Verba、anything-llm、Khoj、Cheshire Cat、GPT Researcher、安全 RAG 应用层。
  • 许多人通过 Ollama、llama.cpp 或类似工具在本地运行模型,常用模型包括 Mistral 或 Mixtral。

讨论中的技术挑战

  • 分块策略和元数据被视为 RAG 质量的关键;简单的固定大小分块往往表现不佳。
  • 扩展问题:随着语料库变大,只有少量分块能进入上下文窗口;长上下文模型有帮助,但仍存在“中间丢失”问题。
  • 推荐混合检索(向量 + BM25/词法),尤其适用于首字母缩略词和领域术语。
  • 幻觉仍未解决;最好的缓解方式是严格的提示词、检索约束,以及评估/监控。
  • 多语言 RAG 依赖多语言嵌入模型;拼写错误/OOV 词项则通过子词分词和嵌入相似性部分处理。

成本、硬件和可行性

  • 托管微调和自定义模型每月可能花费数千美元,对业余爱好者来说被认为过于昂贵。
  • 现成模型 + RAG + 更便宜的向量存储,被呈现为大多数用例的务实路径。