FastAPI + RAG + LlamaIndex 设计智能问答系统

418 阅读7分钟

一、技术栈部署方案(FastAPI + RAG + LlamaIndex)

1. 系统架构设计

graph TD
    A[用户提问] --> B(FastAPI 网关)
    B --> C[LlamaIndex 检索]
    C --> D[向量数据库]
    C --> E[大模型调用]
    E --> F[RAG 结果生成]
    F --> B
    D[向量数据库] --> G[文档预处理]
    G --> H[阿里云/腾讯云存储]

2. 核心组件选型

  • 文档处理:使用LlamaIndex的SimpleDirectoryReader批量加载PDF,结合GPTSimpleVectorIndex自动分块并生成向量索引。
  • 向量存储
    • 高性能场景:阿里云全托管Milvus(性能提升3-10倍,支持千亿级向量存储)
    • 低成本场景:腾讯云向量数据库(内置AI套件,支持PDF图文混排解析)
  • 大模型集成
    • 通义千问:通过阿里云百炼平台API调用,支持流式响应和多轮对话
    • 文心一言:通过百度智能云API接入,支持自定义prompt优化
  • API服务:FastAPI + Gunicorn部署,支持异步请求和高并发

3. 关键技术实现步骤

步骤1:文档预处理与索引构建

# 使用LlamaIndex处理文档并构建云端索引(以阿里云为例)
from llama_index import GPTVectorStoreIndex, SimpleDirectoryReader
from dashscope import Generation

# 配置阿里云百炼大模型
Generation.api_key = "your_aliyun_api_key"

# 加载并解析PDF文档
documents = SimpleDirectoryReader("pdfs/").load_data()

# 构建向量索引并存储到阿里云Milvus
index = GPTVectorStoreIndex.from_documents(
    documents,
    vector_store_config={
        "provider": "aliyun_milvus",
        "params": {
            "endpoint": "https://milvus.aliyuncs.com",
            "access_key": "your_milvus_key",
            "secret_key": "your_milvus_secret"
        }
    }
)

步骤2:FastAPI服务开发

# FastAPI 核心接口实现
from fastapi import FastAPI
from llama_index import StorageContext, load_index_from_storage

app = FastAPI()

# 初始化LlamaIndex检索器
storage_context = StorageContext.from_defaults(
    vector_store=AliyunMilvusVectorStore(...)
)
index = load_index_from_storage(storage_context)
retriever = index.as_retriever(similarity_top_k=3)

@app.post("/chat")
async def chat(query: str):
    # 检索相关文档片段
    response = retriever.retrieve(query)
    
    # 调用大模型生成回答
    result = Generation.call(
        model="qwen-turbo",
        prompt=f"根据以下资料回答问题:{response}\n用户问题:{query}"
    )
    
    return {"answer": result.output.text}

步骤3:容器化部署(Docker + Kubernetes)

# Dockerfile示例
FROM python:3.10-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .
CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:8000", "main:app"]

二、国内云平台推荐与选型指南

1. 阿里云(推荐指数:★★★★★)

  • 核心优势
    • 全栈RAG解决方案:百炼平台提供从文档处理、向量存储到模型调用的端到端能力,支持分钟级部署
    • 高性能向量数据库:全托管Milvus性能比开源版提升3-10倍,支持万亿级向量检索
    • 安全合规:通过等保四级认证,支持国密算法和数据脱敏
  • 典型案例:阿里云百炼官方文档问答助手,日均处理数万次查询
  • 成本参考
    • 向量存储:0.5元/GB/月(按量)
    • 模型调用:通义千问Turbo约0.01元/千token

2. 腾讯云(推荐指数:★★★★☆)

  • 核心优势
    • AI套件集成:向量数据库内置文档解析、自动向量化功能,支持PDF图文混排处理
    • 弹性资源调度:GPU云服务器支持抢占式实例,成本降低70%
    • 生态兼容性:与微信生态深度集成,支持小程序/公众号接入
  • 典型案例:识货APP电商推荐系统,QPS峰值达10万+
  • 成本参考
    • 向量数据库:0.6元/GB/月(包年)
    • 模型调用:混元大模型约0.015元/千token

3. 华为云(推荐指数:★★★★☆)

  • 核心优势
    • 高性能算力:ModelArts平台支持昇腾910B芯片,推理速度提升30%
    • 混合云能力:支持私有云+公有云混合部署,满足政企合规需求
    • 数据安全:通过ISO 27001和GDPR认证,提供全链路加密
  • 典型案例:中石油勘探研究平台,处理PB级地质数据
  • 成本参考
    • 向量存储:0.45元/GB/月(按需)
    • 模型调用:盘古大模型约0.02元/千token

4. 火山引擎(推荐指数:★★★★☆)

  • 核心优势
    • 高性价比算力:与抖音共享算力池,抢占式实例成本低至0.1元/小时
    • 低代码开发:提供RAG应用模板,支持5分钟快速搭建知识库
    • 边缘计算:支持就近接入边缘节点,响应时间降低50%
  • 典型案例:OPPO智能客服系统,日均处理百万次咨询
  • 成本参考
    • 云服务器:1核2G实例约15元/月(抢占式)
    • 模型调用:火山引擎大模型约0.008元/千token

5. 天翼云(推荐指数:★★★★☆)

  • 核心优势
    • 云网安一体:整合中国电信网络资源,提供DDoS防护和威胁情报服务
    • 国产化适配:支持麒麟/统信操作系统,满足信创要求
    • 属地化服务:提供4小时内现场应急响应
  • 典型案例:某省级政务知识库,处理数万份政策文件
  • 成本参考
    • 向量存储:0.55元/GB/月(包年)
    • 模型调用:天智大模型约0.012元/千token

三、部署优化与最佳实践

1. 性能优化策略

  • 向量检索优化
    • 使用混合检索(向量检索+关键词过滤),召回率提升20%
    • 配置自适应索引(Auto Index),自动选择最优检索策略
  • 模型调用优化
    • 启用流式响应(chunked output),首字节响应时间<500ms
    • 缓存高频问题,QPS峰值降低30%
  • 硬件加速
    • 向量数据库部署在GPU实例(如阿里云gn7v),检索速度提升5倍
    • 大模型推理使用火山引擎T4实例,成本降低40%

2. 安全合规方案

  • 数据加密
    • 静态加密:向量数据库使用AES-256加密
    • 传输加密:API调用启用TLS 1.3协议
  • 权限控制
    • 细粒度访问控制(如按部门划分文档权限)
    • 集成企业SSO系统(如阿里云Ram)
  • 合规认证
    • 等保三级/四级认证(推荐阿里云、天翼云)
    • 金融级安全方案(支持PCI-DSS认证)

3. 监控与运维

  • 日志系统
    • 集成阿里云SLS或腾讯云CLS,存储全量请求日志
    • 异常请求自动告警(如错误率>5%)
  • 性能监控
    • 向量数据库QPS/时延监控(阿里云ARMS)
    • 大模型调用成本分析(腾讯云Cost Explorer)
  • 容灾备份
    • 向量数据库多可用区部署(RPO<15分钟)
    • 文档存储使用OSS归档存储(成本降低90%)

四、成本对比与选型建议

云平台基础架构成本(月)模型调用成本(万次)运维成本(月)推荐场景
阿里云¥2,500 - ¥8,000¥80 - ¥200¥500 - ¥1,500企业级生产环境
腾讯云¥2,000 - ¥6,500¥100 - ¥250¥400 - ¥1,200电商/社交类应用
华为云¥2,200 - ¥7,000¥120 - ¥300¥600 - ¥2,000政企/制造业场景
火山引擎¥1,500 - ¥4,500¥60 - ¥150¥300 - ¥800初创企业/中小规模应用
天翼云¥2,800 - ¥9,000¥90 - ¥220¥700 - ¥2,500高安全要求的政务/金融

选型决策树:

  1. 文档规模
    • <10GB:火山引擎(低成本)
    • 10GB-1TB:阿里云/腾讯云(高性能)
    • 1TB:华为云(分布式存储)

  2. 响应时间
    • ≤1秒:阿里云Milvus(性能优化)
    • ≤3秒:腾讯云向量数据库(性价比)
  3. 安全要求
    • 等保三级:天翼云
    • 等保四级:阿里云飞天企业版
  4. 预算限制
    • 月预算<¥5,000:火山引擎
    • 月预算>¥10,000:阿里云/华为云

五、典型故障处理

1. 向量检索异常

  • 现象:查询结果相关性低
  • 排查步骤
    1. 检查分块策略(chunk_size是否合理,建议500-1000字)
    2. 验证向量数据库连接(测试ping和端口连通性)
    3. 分析检索结果的cosine相似度(建议阈值>0.7)
  • 解决方案
    • 启用Query-Focused Retriever重新检索
    • 增加元数据过滤条件(如会议时间、文档类型)

2. 大模型响应超时

  • 现象:API调用超过5秒无响应
  • 排查步骤
    1. 检查模型调用参数(temperature是否过高)
    2. 分析网络延迟(使用curl测试API响应时间)
    3. 查看云平台监控指标(如GPU使用率)
  • 解决方案
    • 启用模型流式响应(stream=True)
    • 调整并发数(建议QPS≤100)

3. 文档解析失败

  • 现象:PDF文件无法加载
  • 排查步骤
    1. 检查文件路径是否正确
    2. 验证文件格式(是否为扫描件或加密文档)
    3. 测试OCR功能(是否需要额外配置)
  • 解决方案
    • 使用LlamaIndex的PDFToTextTransformer强制解析
    • 调用阿里云OCR服务处理扫描件

通过以上方案,可在国内云平台快速部署高可用的RAG系统,处理千万级文档的检索与问答,满足企业级应用的性能、安全和合规要求。