Python库的AI文档机器人
Python版本:3.9+
一个使用MCP(多层感知器)分类器进行源优先级排序的智能RAG(检索增强生成)机器人。使用Python、Pinecone、OpenAI/Ollama、Scikit-learn和Streamlit构建。此机器人回答以下问题 熊猫, 数值Python,以及 Scikit学习 文档,优先考虑官方来源而非社区示例。
特性
- 检索增强生成(RAG): 从矢量数据库中查找相关文档片段。
- 来源优先级: 使用经过训练的MLP分类器来预测检索片段的源类型(API规范、教程、社区)。
- 智能应答: 利用LLM(OpenAI的GPT或本地Ollama模型)和自定义提示,指示其优先考虑官方文档源而不是社区源(如Stack Overflow)。
- 多库支持: 目前使用Pandas、NumPy和Scikit-learn的文档进行索引。
- 交互式用户界面: 使用Streamlit构建的简洁明了的web界面。
技术栈
- 后端和机器学习: Python 3.9+
- Web框架: 溪流
- 矢量数据库: 松果(云)
- LLM OpenAI API(GPT-4o/GPT-3.5-turbo)或本地Ollama(例如,Llama 3.1)
- 机器学习: Scikit-learn(MLP分类器、Tfidf矢量器)
- 嵌入: 句子转换(
all-MiniLM-L6-v2) - 网页抓取: 请求,BeautifulSoup4
- 核心库: LangChain(用于文本分割)
安装说明
- 克隆存储库:
git clone
cd your-repo-name- 创建虚拟环境:
python -m venv venv
# Activate it:
# Windows: .\venv\Scripts\activate
# macOS/Linux: source venv/bin/activate- 安装依赖关系:
pip install -r requirements.txt- 设置API密钥:
- 创建一个 .env 根目录中的文件。 - 添加API密钥:
PINECONE_API_KEY="your-pinecone-key"
OPENAI_API_KEY="your-openai-key"
# (Remove OpenAI key if using Ollama exclusively)- (可选)为Olama设置本地LLM:
- 从以下位置安装Ollama ollama.com. - 下载模型: ollama pull llama3.1:8b (或其他型号)。 - 确保Ollama在后台运行。 - 修改 streamlit_app.py 使用 ChatOllama 而不是 OpenAI 如果需要的话。
运行项目
- 报废数据(仅限第一次):
- 运行scraper以收集文档并创建 corpus.json.
python scraper.py- 列车分类器(仅限首次):
- 运行培训脚本以创建 .pkl 模型文件。
python train_classifier.py- 构建矢量数据库(仅限首次):
- 确保您的 PINECONE_API_KEY 已设置 .env. - 运行脚本以填充松果索引。
python build_vectordb.py- 运行Streamlit应用程序:
- 确保你的 .env 文件存在并且API密钥正确。 - 确保您的 .pkl 文件存在。 - 如果使用Ollama,请确保它正在运行。
streamlit run streamlit_app.py- 应用程序应在浏览器中自动打开(通常在 http://localhost:8501).
测试
涉及外部API(Pinecone、OpenAI)和复杂ML模型的AI应用程序的单元测试可能具有挑战性。有意义的测试通常侧重于组件集成或需要模拟。
- 当前状态: 目前还没有实施正式的单元测试。
- 单元测试的潜在区域:
- 刮板: 解析特定HTML结构的测试函数(使用保存的示例HTML文件)。 - 数据处理: 测试文本清理或元数据生成逻辑。 - API交互(模拟): 使用以下库 unittest.mock 或 pytest-mock 模拟Pinecone和OpenAI API的响应。这允许测试 get_priority_answer 函数的逻辑(如提示构造),而不进行实际的API调用。例如,你可以嘲笑 index.query 返回预定义的结果和模拟 openai_client.chat.completions.create 检查是否发送了正确的提示。 - 分类器加载: 测试是否 .pkl 文件正确加载。
- 手动测试: 使用涵盖不同库和复杂性的各种查询彻底测试Streamlit应用程序。检查引用是否正确,以及来源优先级是否符合逻辑。
未来工作
- 添加更多Python库(例如Matplotlib、TensorFlow、PyTorch)。
- 实施更复杂的查询分析来检测目标库。
- 允许用户选择要在其中搜索的特定库。
- 改进MCP分类器(例如,使用句子嵌入而不是TF-IDF,调整超参数)。
- 使用Docker将应用程序容器化。
- 使用mocking实现正式的单元和集成测试。
- 部署Streamlit应用程序(例如,使用Streamlit社区云)。
