RAG 系统源码实现(结合 DeepSeek)
RAG 核心逻辑:用户提问→检索知识库相关内容→拼接为上下文→调用 DeepSeek 生成回答。
1. 检索模块(基于向量库)
python
def retrieve_knowledge(query, top_k=3): # 从向量库检索Zui相关的3个chunk docs = vector_db.similarity_search(query, k=top_k) # 拼接检索结果为上下文 context = "\n\n".join([doc.page_content for doc in docs]) # 提取来源信息(用于引用显示) sources = [doc.metadata for doc in docs] return context, sources2. 问答生成(结合 DeepSeek)
python
def rag_qa(query): # 1. 检索知识库 context, sources = retrieve_knowledge(query) # 2. 构建提示词(Prompt Engineering) prompt = f""" 你是公众号专属AI助手,需基于以下知识库内容回答用户问题。 知识库内容: {context} 用户问题:{query} 回答要求: 1. 严格依据知识库内容,不编造信息; 2. 若知识库无相关内容,直接回复“该问题暂未收录,可补充信息后再问”; 3. 结尾注明信息来源(如:来源:《文章》)。 """ # 3. 调用本地DeepSeek生成回答 response = generate_response(prompt) # 复用前文模型推理函数 # 4. 拼接来源信息 source_str = "\n".join([f"来源:《{s['source']}》" for s in sources]) return f"{response}\n\n{source_str}"公众号 AI 系统软件开发全流程
1. 系统架构设计
模块 | 技术选型 | 功能描述 |
---|---|---|
前端交互 | 微信公众号 H5(Vue3) | 用户提问输入、回答展示、历史记录 |
后端服务 | FastAPI + Celery(异步任务) | 接收请求、调度 RAG 流程、调用模型 |
模型服务 | DeepSeek 本地部署(GPU 服务器) | 负责文本生成 |
知识库服务 | Chroma + 定时更新脚本 | 向量存储、每日同步公众号新文章 |
数据存储 | SQLite(用户数据)+ 本地文件(向量) | 存储用户对话历史、知识库向量数据 |
2. 公众号对接(核心交互流程)
(1)公众号消息接收与回复通过微信公众平台开发者模式,配置服务器 URL(后端 API 接口),接收用户消息并调用 RAG 接口:
python
# FastAPI接收公众号消息示例from fastapi import Request@app.post("/wechat/callback")async def wechat_callback(request: Request): data = await re() # 解析微信XML消息 user_query = data.find("Content").text # 获取用户提问 openid = data.find("FromUserName").text # 用户唯一标识 # 调用RAG生成回答 answer = rag_qa(user_query) # 回复用户(XML格式) return f""" {int(time.time())} """(2)定时更新知识库通过 Celery 定时任务每日同步公众号新文章:
python
from celery import Celeryfrom celery.schedules import crontabapp = Celery('wechat_kg', broker='redis://localhost:6379/0')# 每天凌晨2点更新知识库app.conf.beat_schedule = { 'update-wechat-knowledge': { 'task': 'tasks.update_kb', 'schedule': crontab(hour=2, minute=0), },}# 任务:爬取新文章并更新向量库@app.taskdef update_kb(): new_articles = crawl_new_articles() # 爬取当日新文章 for article in new_articles: process_and_add_to_db(article) # 预处理并添加到向量库3. 性能优化
检索加速 :对高频查询词建立缓存(Redis),缓存有效期 1 小时。
- 模型推理优化 :使用vllm部署 DeepSeek(支持 PagedAttention, throughput 提升 3-5 倍)。
- 批量处理 公众号文章更新采用批量嵌入(一次处理 10 篇),减少向量库写入次数。
关键注意事项
1.合规性 :公众号文章爬取需遵守《微信公众平台运营规范》,避免商用侵权;用户数据存储需符合《个人信息保护法》。
2. 硬件成本 :7B 模型本地部署Zui低需 RTX 3090(约 1 万元),若预算有限可先使用 CPU 推理(速度较慢,适合测试)。
3. 效果调优 通过调整top_k(检索数量)、提示词模板、文本分割长度优化回答准确性,建议top_k=3-5效果zuijia。