# llmrag **Repository Path**: yu-hualai/llmrag ## Basic Information - **Project Name**: llmrag - **Description**: 一个公司内部知识问答机器人。LangChain 用于加载公司文档、分割文本、存入向量库;当用户提问时,执行 RAG 流程,最终由 LLM 生成答案 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2025-11-21 - **Last Updated**: 2026-03-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 公司知识问答机器人 一个功能完整的公司内部知识库问答系统,使用 LangChain 和 OpenAI API 实现 RAG(检索增强生成)流程。 ## ✨ 核心功能 - 📚 **多格式文档支持**:支持 PDF、TXT、Markdown 等多种格式 - 🔍 **智能检索**:使用 FAISS 向量库进行高效相似性检索 - 🤖 **智能生成**:基于 GPT 系列模型生成精准答案 - 💬 **对话历史**:保留完整的对话记录,支持上下文理解 - 🎯 **相关文档推荐**:展示答案依据的源文档 - 📝 **对话保存**:自动保存对话记录供查询 ## 🏗️ 项目结构 ``` llmrag/ ├── .env # 环境变量配置(需要配置API密钥) ├── .env.example # 环境变量示例 ├── requirements.txt # Python依赖 ├── main.py # 主程序入口 ├── document_loader.py # 文档加载模块 ├── text_processor.py # 文本分割模块 ├── vector_store.py # 向量存储管理 ├── rag_pipeline.py # RAG管道和LLM集成 ├── documents/ # 文档目录 │ ├── company_policy.txt │ ├── technical_guide.txt │ └── benefits.md └── vector_store/ # 向量数据库(自动生成) ``` ## 🚀 快速开始 ### 1. 环境准备 ```bash # 克隆项目 cd llmrag # 创建虚拟环境(可选,推荐) python -m venv venv source venv/bin/activate # Linux/Mac venv\Scripts\activate # Windows # 安装依赖 pip install -r requirements.txt ``` ### 2. 配置API密钥 编辑 `.env` 文件,添加你的 OpenAI API 密钥: ```env OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx OPENAI_API_BASE=https://api.openai.com/v1 DOCUMENTS_DIR=./documents VECTOR_STORE_DIR=./vector_store CHUNK_SIZE=1000 CHUNK_OVERLAP=200 TOP_K=3 ``` **获取API密钥:** 1. 访问 https://platform.openai.com 2. 创建或登录账户 3. 获取 API Key 4. 确保账户有充足的配额 ### 3. 添加文档 在 `documents/` 目录下放入你的知识库文档: ```bash documents/ ├── policy.txt # 公司政策 ├── procedures.md # 工作流程 ├── handbook.pdf # 员工手册 └── faq.txt # 常见问题 ``` 支持的格式: - `.txt` - 文本文件 - `.md` - Markdown 文档 - `.pdf` - PDF文件 ### 4. 运行机器人 ```bash python main.py ``` ## 📖 使用指南 ### 基本操作 运行程序后,你会看到欢迎界面: ``` ============================================================ 📖 欢迎使用公司知识问答机器人 ============================================================ 命令说明: 输入问题 - 提出关于公司知识的问题 help - 显示帮助信息 history - 显示对话历史 clear - 清除对话历史 config - 显示当前配置 exit/quit - 退出程序 ============================================================ ``` ### 提问示例 ``` 🤔 请提问: 公司的核心价值观是什么? ⏳ 正在思考中... ============================================================ 💬 机器人回答: ============================================================ 公司的核心价值观包括: 1. 创新驱动:不断追求技术进步和产品创新 2. 用户至上:以用户需求为中心,持续提供优质服务 3. 诚信透明:建立信任,遵守承诺 4. 开放合作:拥抱开放生态,实现互利共赢 5. 可持续发展:关注环境、社会和治理(ESG) ============================================================ 📎 参考文档: ============================================================ 【文档 1】 来源: documents/company_policy.txt 相似度: 95% 内容: 公司核心价值观:... ``` ### 特殊命令 | 命令 | 说明 | |------|------| | `help` | 显示帮助信息 | | `history` | 显示对话历史(最近20条) | | `clear` | 清除对话历史,开始新对话 | | `config` | 显示当前配置参数 | | `reload` | 重新加载文档和向量存储 | | `exit`/`quit` | 退出程序 | ## 🔧 系统架构 ### 工作流程 ``` 用户输入 ↓ [向量化] - 使用 OpenAI Embeddings 将问题转换为向量 ↓ [检索] - 在 FAISS 向量库中检索相似文档 ↓ [排序] - 按相似度分数排序,获取 top-k 文档 ↓ [增强] - 将检索到的文档作为上下文 ↓ [生成] - 使用 GPT 模型生成答案 ↓ 用户输出 + 参考文档 ``` ### 核心模块说明 #### DocumentLoader (document_loader.py) - **功能**:加载各种格式的文档 - **支持**:PDF、TXT、Markdown - **输出**:Document 对象列表 #### TextProcessor (text_processor.py) - **功能**:分割长文本为合适大小的块 - **策略**:递归分割,保留上下文 - **配置**:chunk_size 和 chunk_overlap #### VectorStore (vector_store.py) - **功能**:管理向量数据库 - **引擎**:FAISS(Facebook AI Similarity Search) - **嵌入**:OpenAI Embeddings - **操作**:创建、保存、加载、检索 #### RAGPipeline (rag_pipeline.py) - **功能**:整合检索和生成过程 - **LLM**:GPT-3.5-turbo / GPT-4 - **特性**:支持对话历史、批量查询 ## 🎨 自定义配置 ### 模型选择 在 `rag_pipeline.py` 中修改: ```python self.llm = ChatOpenAI( model_name="gpt-4", # 改为 gpt-4 获得更强能力 temperature=0.7, # 0-1,数值越小越确定 max_tokens=2000 ) ``` ### 检索参数 在 `.env` 中调整: ```env CHUNK_SIZE=1000 # 较大的块包含更多上下文 CHUNK_OVERLAP=200 # 块之间的重叠确保连贯性 TOP_K=5 # 检索更多参考文档 ``` ### 系统提示词 在 `rag_pipeline.py` 中修改 `system_prompt`: ```python self.system_prompt = """你是一个专业的公司知识助手... (自定义你的指示) """ ``` ## 📊 性能优化建议 ### 1. 向量库优化 - 定期重建向量库以包含新文档 - 使用更高维度的嵌入模型 - 考虑使用混合检索(关键词+语义) ### 2. 提示工程 - 优化 system_prompt 的表述 - 使用少样本学习(few-shot) - 添加输出格式要求 ### 3. 成本优化 - 使用 gpt-3.5-turbo 而不是 gpt-4 - 实现查询缓存(重复问题) - 考虑使用本地嵌入模型 ## 🐛 常见问题 ### Q: 向量库提示 "cannot access..." A: 确保 `documents/` 目录存在且包含文档文件。 ### Q: API 报错 "rate limit exceeded" A: OpenAI API 有速率限制,请稍候或升级账户。 ### Q: 答案质量不好 A: - 检查文档质量和相关性 - 调整 `CHUNK_SIZE` 和 `TOP_K` - 使用更强的模型(gpt-4) ### Q: 内存占用太大 A: - 减少 `CHUNK_SIZE` - 使用更小的嵌入模型 - 定期清理对话历史 ## 🔐 安全建议 1. **API密钥保管** - 不要提交 `.env` 到版本控制 - 使用环境变量或密钥管理服务 2. **文档隐私** - 敏感信息做好标记 - 限制访问权限 3. **输入验证** - 对用户输入进行长度限制 - 防止 Prompt Injection ## 📈 监控和日志 机器人会在以下位置生成日志: - 标准输出:实时进度提示 - `conversation_history.txt`:完整对话记录 ## 🤝 贡献 欢迎提交改进建议和bug报告! ## 📝 许可证 MIT License ## 📞 支持 如有问题,请检查: 1. API 密钥是否正确配置 2. 文档目录是否存在 3. 网络连接是否正常 4. Python 和依赖版本是否兼容 --- **版本**:1.0.0 **最后更新**:2024年1月1日