Skip to content

需求分析

我们要做什么

做一个能回答你文档问题的机器人。你上传 PDF、Word 或者文本文件,它就能回答关于这些文件的问题。

比如你上传一份产品手册,然后问"这个产品支持哪些操作系统?",机器人会从手册里找到答案告诉你。

为什么做这个

RAG(检索增强生成)是现在最实用的 AI 应用之一。很多公司都在用它做知识库问答、客服机器人、文档助手。学会了这个,你就能做:

  • 公司内部知识库问答
  • 客户服务自动回复
  • 个人学习笔记助手
  • 合同条款智能查询

核心功能

必须要有的

  1. 文档上传:支持 PDF、Word、TXT
  2. 问答功能:根据文档内容回答问题
  3. 显示来源:告诉你答案来自文档的哪部分

最好有的

  1. 多文档同时上传
  2. 多轮对话(记住上下文)
  3. 导出对话记录
  4. 简单的用户界面

技术选型

向量数据库选什么

选项优点缺点适合场景
Chroma免费开源,Python 友好,上手快性能一般,不适合大规模数据学习、小型项目
Pinecone性能好,稳定,托管服务免费额度有限,需要信用卡中大型项目
Weaviate功能强大,支持过滤配置复杂需要高级功能
pgvector用 PostgreSQL,不用额外装数据库性能不如专用向量库已有 PostgreSQL 基础设施

建议:新手用 Chroma,简单够用。熟悉后可以试试 Pinecone。

前端用什么

选项优点缺点
StreamlitPython 原生,几行代码就能出效果定制能力弱,不适合复杂交互
Gradio快速原型,适合 AI 应用UI 样式固定
Chainlit专门为聊天应用设计文档少
React/Vue完全可控需要前端基础

建议:先做出来,用 Streamlit。如果需要更好的 UI 再学 React。

用什么大模型

选项优点缺点价格
OpenAI GPT-4o质量高,文档全需要国外支付昂贵
Claude 3.5 Sonnet中文好,长文本强需要国外支付中等
通义千问国内直接用,便宜质量稍弱便宜
DeepSeek极便宜,中文好稳定性一般很便宜

建议:国内用户先用通义千问或 DeepSeek,跑通了再尝试国外服务。

项目架构

用户上传文档

解析文档(PDF/Word → 文本)

切分文本(chunk)

向量化(embedding)

存入向量数据库

用户提问

问题向量化

检索相关片段

组合 Prompt(问题 + 相关片段)

LLM 生成答案

返回给用户

数据流向

┌─────────┐
│ 用户上传 │
└────┬────┘


┌─────────────┐
│ 文档解析器   │ PDF/Word → 纯文本
└────┬────────┘


┌─────────────┐
│ 文本切分器   │ 分成小块(每块 500-1000 字)
└────┬────────┘


┌─────────────┐
│ Embedding   │ 文本 → 向量(1536 维)
└────┬────────┘


┌─────────────┐
│ 向量数据库   │ Chroma/Pinecone
└─────────────┘

用户提问


┌─────────────┐
│ 检索相关片段 │ 向量相似度搜索
└────┬────────┘


┌─────────────┐
│ LLM 生成答案 │ GPT/Claude/千问
└────┬────────┘


┌─────────────┐
│ 显示结果     │ + 来源引用
└─────────────┘

可能遇到的问题

1. 文档解析失败

症状:上传后提示解析错误

原因

  • PDF 是扫描件(图片格式)
  • 文档有密码保护
  • 格式特殊

解决

  • 用 OCR 工具(如 pytesseract)处理扫描件
  • 提示用户输入密码
  • 先转换成纯文本格式

2. 答案不准确

症状:答非所问或胡说八道

原因

  • 检索到的片段不相关
  • 切分太大或太小
  • Prompt 写得不清楚

解决

  • 调整检索策略(多检索几个片段)
  • 优化 chunk 大小(一般 500-1000 字合适)
  • 改进 Prompt 模板

3. 成本太高

症状:API 费用超过预期

原因

  • 每次都用 GPT-4
  • 文档太大,embedding 费用高
  • 用户频繁提问

解决

  • 简单问题用便宜模型(GPT-3.5 或 DeepSeek)
  • 限制文档大小
  • 加缓存(重复问题不重复调用)

下一步

确认了需求和架构,接下来就搭建环境。

继续:环境搭建 →


← 返回项目一

最近更新

基于 Apache 2.0 许可发布