需求分析
我们要做什么
做一个能回答你文档问题的机器人。你上传 PDF、Word 或者文本文件,它就能回答关于这些文件的问题。
比如你上传一份产品手册,然后问"这个产品支持哪些操作系统?",机器人会从手册里找到答案告诉你。
为什么做这个
RAG(检索增强生成)是现在最实用的 AI 应用之一。很多公司都在用它做知识库问答、客服机器人、文档助手。学会了这个,你就能做:
- 公司内部知识库问答
- 客户服务自动回复
- 个人学习笔记助手
- 合同条款智能查询
核心功能
必须要有的
- 文档上传:支持 PDF、Word、TXT
- 问答功能:根据文档内容回答问题
- 显示来源:告诉你答案来自文档的哪部分
最好有的
- 多文档同时上传
- 多轮对话(记住上下文)
- 导出对话记录
- 简单的用户界面
技术选型
向量数据库选什么
| 选项 | 优点 | 缺点 | 适合场景 |
|---|---|---|---|
| Chroma | 免费开源,Python 友好,上手快 | 性能一般,不适合大规模数据 | 学习、小型项目 |
| Pinecone | 性能好,稳定,托管服务 | 免费额度有限,需要信用卡 | 中大型项目 |
| Weaviate | 功能强大,支持过滤 | 配置复杂 | 需要高级功能 |
| pgvector | 用 PostgreSQL,不用额外装数据库 | 性能不如专用向量库 | 已有 PostgreSQL 基础设施 |
建议:新手用 Chroma,简单够用。熟悉后可以试试 Pinecone。
前端用什么
| 选项 | 优点 | 缺点 |
|---|---|---|
| Streamlit | Python 原生,几行代码就能出效果 | 定制能力弱,不适合复杂交互 |
| 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)
- 限制文档大小
- 加缓存(重复问题不重复调用)
下一步
确认了需求和架构,接下来就搭建环境。