使用说明
用于最新PDF文档的MCP服务器
一个获取最新PDF文档(来自serlyfjaskra.is的SmPC文件)的系统,使用基于节的分块对其进行处理,并使用LangChain与谷歌的Gemini或OpenAI的GPT-4.1提供会话MCP服务器,针对冰岛语进行了优化。
项目概述
该项目实施了一个检索增强生成(RAG)系统,该系统:
- 更新时获取最新的PDF文档
- 将PDF分解为可管理的、语义连贯的片段
- 使用LangChain提供会话式MCP服务器
- 基于带有来源归因的PDF内容回答问题
域上下文
- 文件:SmPC(产品特性摘要)文件
- 来源: 特殊药物档案.is
- 语言:冰岛语(所有文件和用户查询)
- 用户:医疗保健专业人员(医生、药剂师)
主要特点
- 基于分段的分组:通过从不将部分拆分为块来保持语义完整性
- 消息来源:所有答案都包括对特定文档部分的引用
- 冰岛语支持:针对准确的冰岛语理解和生成进行了优化
- RAG架构:使用向量嵌入进行高效检索和生成
- 双LLM支持:可配置支持Google Gemini和OpenAI GPT-4.1
建筑
该系统遵循RAG管道:
- PDF更新事件→ PDF提取管道
- 文档分割(基于节的分块)
- 矢量存储(嵌入和索引)
- MCP服务器(查询处理、检索和生成)
快速开始
先决条件
- Python 3.11或更高版本(httpx>=0.27和Opik兼容性所需)
- Google Gemini或OpenAI GPT-4.1的API密钥
安装
-
克隆仓库 (如果适用)或导航到项目目录
-
确保已安装Python 3.11+:
python3 --version # Should show 3.11 or higher如果你需要安装Python 3.11+:
- macOS(使用Homebrew):
brew install python@3.11 - 使用pyenv:
pyenv install 3.11.9 && pyenv local 3.11.9 - Linux:使用您的发行版的包管理器
- 视窗:从下载 python.org
- macOS(使用Homebrew):
-
创建虚拟环境:
python3 -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate -
安装依赖项:
pip install -r requirements.txt -
配置环境变量:
cp .env.example .env编辑
.env并添加您的API密钥:# Choose one LLM provider LLM_PROVIDER=gemini # or "gpt4" # For Gemini GOOGLE_API_KEY=your_google_api_key_here # For GPT-4.1 OPENAI_API_KEY=your_openai_api_key_here # PDF URL (update with actual SmPC PDF URL) PDF_URL=https://serlyfjaskra.is/example/smpc.pdf
运行应用程序
启动Streamlit界面:
streamlit run src/streamlit_app.py
应用程序将在您的浏览器中打开 http://localhost:8501.
用法
-
处理PDF:
- 在侧边栏中输入PDF URL
- 选择您的法学硕士提供者(Gemini或GPT-4.1)
- 点击“Vinnaúr PDF”(流程PDF)按钮
- 等待文档被下载、分块和索引
-
提问:
- 在查询框中输入您的冰岛语问题
- 点击“Leita”(搜索)按钮
- 查看带有源引用的答案
-
查看源代码:
- 展开源代码部分,查看用于生成答案的确切文本
- 每个源都包括节名称、文档名称和页码
项目结构
fwh/
├── README.md # This file
├── REFERENCE.md # Detailed technical documentation
├── requirements.txt # Python dependencies
├── .env.example # Environment variable template
├── config.py # Configuration management
├── src/
│ ├── __init__.py
│ ├── pdf_fetcher.py # PDF download and text extraction
│ ├── chunker.py # Section-based chunking
│ ├── vector_store.py # Vector store management
│ ├── rag_chain.py # RAG chain setup
│ └── streamlit_app.py # Streamlit UI
└── data/
├── pdfs/ # Downloaded PDFs
└── vector_store/ # Persisted vector store
配置
配置是通过环境变量进行管理的 .env 文件:
LLM_PROVIDER:“双子座”或“gpt4”GOOGLE_API_KEY:Google Gemini API密钥(如果使用Gemini,则需要)OPENAI_API_KEY:OpenAI API密钥(如果使用GPT-4.1,则为必需项)PDF_URL:要处理的默认PDF URLCHUNK_SIZE:目标块大小(以字符为单位)(默认值:300)CHUNK_OVERLAP:块之间的重叠(默认值:0)EMBEDDING_MODEL:嵌入模型名称(默认:释义多语言MiniLM-L6-v2)RETRIEVAL_TOP_K:要检索的块数(默认值:5)
API密钥
Google Gemini API密钥
- 访问 谷歌人工智能工作室
- 使用您的Google帐户登录
- 创建新的API密钥
- 将密钥复制到您的
.env文件
OpenAI API密钥
- 访问 OpenAI平台
- 登录或创建帐户
- 创建新的API密钥
- 将密钥复制到您的
.env文件
技术细节
基于分段的分组
该系统使用智能截面检测来保持语义完整性:
- 使用模式匹配检测节标题
- 从不在一个部分内拆分内容
- 用元数据标记每个块(节、页、源文档)
- 仅在必要时细分大块
向量存储
- 使用Chroma进行持久载体存储
- 采用多语言嵌入(意译multilingual-MiniLM-L6-v2)来支持冰岛语
- 存储用于过滤和源归因的元数据
RAG链条
- 基于语义相似度检索前k个相关块
- 使用自定义冰岛语提示,强调准确性和来源引用
- 支持Gemini和GPT-4.1,可配置选择
- 返回包含源引用的答案
故障排除
常见问题
-
API密钥错误:
- 确保在中正确设置了API密钥
.env - 验证密钥是否有效,是否有足够的学分/配额
- 确保在中正确设置了API密钥
-
PDF下载失败:
- 检查PDF URL是否可访问
- 验证网络连接
- 确保URL指向有效的PDF文件
-
导入错误:
- 确保安装了所有依赖项:
pip install -r requirements.txt - 验证您使用的Python版本是否正确(3.11+)
- 确保安装了所有依赖项:
-
矢量存储问题:
- 通过删除来清除矢量存储
data/vector_store/目录 - 重新处理PDF以重建索引
- 通过删除来清除矢量存储
发展
运行测试
(待实施)
代码风格
- 遵循PEP 8标准
- 全程使用类型提示
- Google风格的公共函数文档字符串
文档
看 参考.md 详细的架构、实施计划和技术规范。
状态
✅ POC完成 -已准备好进行测试和评估
许可证
[在此处添加您的许可证]
