Skip to content

Repository files navigation

基于 RAG 的简历问答助手

一个基于 LangChain + Flask 构建的简历问答 Demo,支持文档检索增强生成(RAG)、多轮对话记忆、模型自动 Fallback,并配有简单的前端界面。


功能特性

  • RAG 检索增强:基于 Chroma 向量库 + HuggingFace Embedding,实现语义相似度检索
  • 多轮对话记忆:不同浏览器会话独立隔离,刷新页面后历史不丢失
  • 模型自动 Fallback:本地模型不可用时自动切换到 DeepSeek API,保证服务可用性
  • 前端实时交互:简洁的 Web 界面,支持 loading 状态、换行保留和错误提示
  • 对话历史持久化:每个 session 的历史自动保存为本地 JSON,程序重启后可恢复

技术栈

模块 技术
大模型调用 LangChain + ChatOpenAI(兼容 OpenAI 格式)
向量库 Chroma + HuggingFaceEmbeddings (BAAI/bge-small-zh-v1.5)
文本切分 RecursiveCharacterTextSplitter
Web 服务 Flask
前端 原生 HTML / CSS / JavaScript

项目结构

langchain_mycode/
├── app.py                 # Flask 入口,负责路由、编排调用流程
├── chains.py              # LangChain Prompt / Chain / Fallback 封装
├── config.py              # API 配置、文件路径、环境初始化
├── history_manager.py     # 对话历史:内存缓存 + JSON 持久化
├── vector_store.py        # Embedding 模型加载、向量库构建与检索
├── test.py                # 命令行测试入口(无 Web 服务时调试用)
├── static/
│   └── index.html         # 前端页面
├── chat_history/          # 对话历史 JSON 存储目录
└── db/                    # Chroma 向量库持久化文件

快速开始

1. 安装依赖

pip install langchain langchain-openai langchain-community langchain-huggingface chromadb flask

2. 配置 API

复制环境变量模板并填入你的真实密钥:

cp .env.example .env

然后编辑 .env

DEEPSEEK_API_KEY=your-deepseek-api-key

.env 已被加入 .gitignore,不会提交到仓库,确保密钥安全。

3. 准备文档

将简历或知识文档放到 config.pyDOC_PATH 指定的路径,首次运行会自动构建向量库。

4. 启动服务

python app.py

访问 http://127.0.0.1:5000/ 即可使用。


架构设计

RAG 流程

用户提问
   ↓
retriever.invoke(question)  →  语义检索 Top-K 文档片段
   ↓
组装 Prompt:system(参考文档) + history(多轮记忆) + human(当前问题)
   ↓
safe_invoke()  →  优先调用 local_llm,失败自动 fallback 到 DeepSeek
   ↓
AI 回复 + 更新对话历史 + 持久化到 JSON

对话记忆隔离

  • 前端首次打开页面时通过 crypto.randomUUID() 生成唯一 session_id,存入 localStorage
  • 后端根据 session_id 区分不同用户,get_session_history() 从内存缓存读取,缺失时从 JSON 文件加载
  • 每次请求结束后在 finally 块中调用 save_session_history(),确保无论模型调用成功与否都会尝试持久化

Fallback 机制

  • safe_invoke() 内部先尝试 local_chain_with_memory.invoke()
  • 若本地模型不可用(网络不通、认证失败),捕获异常后自动切换到 primary_chain_with_memory(DeepSeek)
  • 返回结果中附带 model_usedretried 字段,便于上层判断本次请求是否触发了 fallback

注意事项

  • API Key 安全config.py 中的密钥不要提交到公共仓库,生产环境建议使用环境变量
  • 向量库重建:如果更换了原始文档,需要删除 db/ 目录,下次启动会自动重新构建
  • 本地模型:如果不需要 local fallback,可将 safe_invoke() 中 fallback 逻辑简化,避免等待超时

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages