我如何为我的文档构建一个问答机器人(以及我学到的经验)

发布日期:2026-05-29 10:03:41   浏览量 :1
发布日期:2026-05-29 10:03:41  
1

2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家 

几个月前,我发现自己淹没在文档的海洋中。我的团队积累了数百个 Markdown 文件——应用程序接口参考、内部指南、架构决策——分散在一个单体仓库中。每当有人问“我们如何部署到预发布环境?”或“那个端点的速率限制是多少?”时,我要么在文件中翻找,要么去联系编写该文档的人(而他们通常已经忘记了)。

我想要一个机器人,可以用自然语言向它提问,并立即获得准确的答案。以下是这段旅程——包括走过的死胡同、“顿悟”时刻,以及我至今仍需面对的权衡取舍。

问题所在(我的问题)

我们的文档组织良好,但搜索过程非常痛苦。grep -r 能找到关键词,却找不到上下文。“最大请求大小是多少?”这样的查询会返回包含“max_request_size: 10MB”的文件,但也会返回十几个无关的结果。我需要的是语义理解能力。

那些行不通的尝试

尝试一:简单的关键词搜索

我写了一个简单的脚本,对查询进行分词,并根据词频对文件进行排序。速度很快,但很笨拙。“如何重置密码?”这一查询没有返回任何关于“密码重置”的内容,因为文档中使用的是“更改密码”。处理同义词是一个我不想深入涉及的复杂难题。

尝试二:微调小型模型

我想,“让我们在文档上微调一个 BERT 模型来回答问题吧。”我花了一个周末从 Slack 历史记录中收集问答对。该模型学会了机械地重复常见答案,但对于稍有新颖性的问题则束手无策。此外,每次文档更新都意味着需要重新训练。这不可持续。

尝试三:将完整文档填入提示词以调用 GPT-3

我尝试将整个文档集塞入一个提示词中。令牌限制让我苦不堪言。即使进行了截断处理,模型仍会根据无关部分编造答案。成本也是一个担忧——每次查询只需几美分,但在大规模使用时,费用会累积起来。

最终奏效的方案:检索增强生成(RAG)

RAG 是最佳平衡点:你检索文档中最相关的片段,然后仅将这些片段输入大型语言模型以生成答案。无需微调,不受上下文限制,且模型的回答始终基于你的实际内容。

以下是高层级的流程:

  1. 分块:将文档分割成小块(例如,每块 500 个令牌)。
  2. 嵌入:使用嵌入模型(例如,OpenAI text-embedding-3-small)将每个块转换为向量。
  3. 存储:将向量存储在向量数据库中(为了简单起见,我使用了 ChromaDB)。
  4. 查询:将用户的问题转换为向量,找到最相似的 k 个片段,然后将这些片段和问题一起发送给大型语言模型以获取最终答案。

代码实现

我将展示一个用 Python 编写的最小可行版本。你需要安装 openaichromadbtiktoken

import os
import openai
import chromadb
from chromadb.utils import embedding_functions
import tiktoken

# 设置
openai.api_key = os.getenv("OPENAI_API_KEY")
client = chromadb

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
支持 反馈 订阅 数据
回到顶部