保险单设计与分析研究助理
一个多代理人工智能系统,旨在分析、总结和比较保险文件,重点是将突尼斯的保险政策与国际标准进行比较。
📋 概述
该应用程序利用先进的自然语言处理(NLP)和大型语言模型(LLM)来处理保单文档。它提供智能文档分析、语义搜索功能,以及突尼斯和国际保险政策之间的比较见解。
主要特点
- 📄 文档处理:从PDF保险文档中提取和处理文本
- 🤖 多代理系统:文件分析和丰富的专门代理人
- 📝 全球总结:根据块级分析生成综合摘要
- 🔍 语义搜索:基于向量的相似性搜索,用于查找相关信息
- 💡 智能问答:使用上下文感知AI回答有关保险政策的问题
- 📊 文档丰富:自动生成摘要、关键字和相关问题
- 🌐 政策比较将突尼斯的保险政策与国际标准进行比较
- ⚡ 并行处理:高效的多线程文档丰富
分析仪接口
Analyzer是一个代理检索增强生成(RAG)管道,它将异构文档转换为结构化、可查询的知识。它强调对原始结构(表、标题、格式)的忠实性、丰富的元数据和快速的语义检索,因此LLM可以用准确的、来源支持的上下文来回答问题。
摘要生成器代理
这 摘要代理 是一个专门的组件,可以从文档块生成全面的全局摘要。与简单的连接不同,它智能地将块级摘要合成为整个文档的连贯、执行级概述。
分析仪接口
How it Works
- 上下文感知处理:通过共享MCP(多代理上下文协议)上下文接收块摘要
- 智能合成:使用高级LLM提示组合块摘要,同时:
- 消除冗余 - 保持逻辑流程 - 保存关键信息和关系 - 确定反复出现的主题和主要部分
- 忠实的总结:确保没有幻觉——只包括块摘要中存在的信息
- 专业输出:生成适合高管和研究人员的简洁、结构良好的摘要
主要特点
- 回退机制:可以从上下文或元数据中提取摘要
- 结构化提示:使用详细的说明来确保高质量的输出
- 主题辨识:确认并突出文件各节中反复出现的主题
- 关系维护:保持源材料的因果关系和程序关系
管道级
- 结构感知分块——在保留表格、标题、列表和其他结构线索的同时对文本进行分段,以避免意义丧失。
- 元数据丰富——为每个块生成简洁的摘要、语义关键字和候选问题,以提高检索精度。
- 重构和规范化——将异构源(PDF、图像、代码片段、表格)合并到一个具有出处链接的一致内部模式中。
- 并行富集——同时运行摘要、关键字提取和问答提示以提高速度(ThreadPoolExecutor)。
- 嵌入和向量数据库——为丰富的块创建嵌入,并将其存储在FAISS中,以实现快速语义搜索。
- 关系元数据存储——持久化结构化元数据、块来源和索引状态,用于审计和选择性重新索引。
- 检索器+重新排序器——通过语义相似性检索候选块,并应用元数据感知的重新排序(日期、部分、置信度)。
- RAG答案生成——LLM使用检索到的块、摘要和源引用来编写答案;反应包括来源和置信信号。
- 连续索引和反馈循环——支持增量更新、用户反馈合并和更改文档的重新丰富。
主要优势
- 相关性更高:丰富的元数据和结构感知分块提高了检索准确性。
- 可解释性:答案包括引用和块级出处。
- 效率:并行丰富和紧凑的嵌入减少了延迟和令牌使用。
- 可扩展性:双存储(FAISS+关系型)使大型语料库能够进行选择性重新索引。
快速配置指针
- 分块:可通过src/agents/analyzer_agent.py中的CHUNK_SIZE和CHUNK_OVERLAP进行配置
- 嵌入:在src/utils/vector_store.py中设置(默认:句子转换器/all-MiniLM-L6-v2)
- LLM:在src/agents/analyzer_agent.py中更改模型/温度(默认值:ollama llama3:8b)
- 并行性:调整ThreadPoolExecutor max_workers的CPU/内存权衡
🏗️ 项目结构
Research_Assistant_for-Insurance_Policy_Design_Tech/
│
├── src/ # Source code directory
│ ├── agents/ # AI agents for document processing
│ │ ├── __init__.py
│ │ ├── analyzer_agent.py # Main document analyzer agent
│ │ └── summarizer_agent.py # Document summarization agent
│ │
│ ├── components/ # UI components
│ │ ├── __init__.py
│ │ └── document_uploader.py # Document upload handler
│ │
│ ├── config/ # Configuration files
│ │ ├── __init__.py
│ │ └── settings.py # Application settings
│ │
│ ├── utils/ # Utility functions
│ │ ├── __init__.py
│ │ ├── text_extractor.py # PDF text extraction
│ │ ├── text_cleaner.py # Text preprocessing and cleaning
│ │ ├── chunker.py # Document chunking utilities
│ │ └── process_document.py # Main document processing pipeline
│ │
│ ├── mcp.py # Shared context management for agents
│ └── app.py # Main Streamlit application
│
├── results/ # Output directory for enriched chunks
├── uploads/ # Directory for uploaded documents
├── requirements.txt # Python dependencies
├── .gitignore # Git ignore rules
└── README.md # This file🔧 技术栈
- 前端:流光灯
- PDF处理:PyPDF
- LLM框架:LangChain,LlamaIdex
- 向量存储:FAISS
- 嵌入:拥抱脸句子转换器(全MiniLM-L6-v2)
- LLM:Ollama(火焰3 8B模型)
- 并行处理:Python线程池执行器
📦 安装
先决条件
- Python 3.8或更高版本
- Ollama在本地安装(用于运行LLaMA型号)
- Git
步骤1:克隆存储库
git clone https://github.com/ner001/Research_Assistant_for-Insurance_Policy_Design_Tech.git
cd Research_Assistant_for-Insurance_Policy_Design_Tech第二步:创建虚拟环境
# Create virtual environment
python -m venv venv
# Activate virtual environment
# On Windows:
venv\Scripts\activate
# On macOS/Linux:
source venv/bin/activate步骤3:安装依赖项
pip install -r requirements.txt步骤4:安装和设置Olama
- 安装Ollama 从 奥拉玛
- 拉动LLaMA 3型号:
ollama pull llama3:8b- 确认Ollama正在运行:
ollama list步骤5:配置环境变量(可选)
创建一个 .env 如果要自定义设置,请将文件放在根目录中:
# API Configuration (if using external APIs)
API_KEY=your_api_key_here
API_URL=your_api_url_here
# Model Configuration
MODEL_NAME=llama3
CHUNK_SIZE=1000
CHUNK_OVERLAP=200备注:即使没有默认设置,应用程序也可以使用默认设置 .env 文件。🚀 如何跑步
方法1:使用Streamlit(推荐)
- 导航到项目目录:
cd Research_Assistant_for-Insurance_Policy_Design_Tech- 运行Streamlit应用程序:
streamlit run src/app.py- 打开浏览器
http://localhost:8501
方法2:直接使用Python
cd src
python -m streamlit run app.py📖 使用指南
上传和分析文档
- 启动应用程序 使用上述方法之一
- 上传PDF文档 使用文件上传器
- 等待处理:该系统将:
- 从PDF中提取文本 - 清理和预处理文本 - 将文档分为可管理的部分 - 用摘要、关键字和问题丰富每个块 - 创建用于语义搜索的向量存储
- 提出问题 关于查询输入字段中的文档
- 获取人工智能驱动的答案 基于文档内容
- 生成全局摘要:单击“生成全局摘要”按钮,创建整个文档的全面执行摘要
示例查询
- “人寿保险的承保限额是多少?”
- “本保单的除外责任是什么?”
- “比较不同保险类型之间的免赔额”
- “本文件中概述的索赔程序是什么?”
- “总结此保险单的主要好处”
🎯 用例
1.文件分析
自动分析保险单文档以提取关键信息、条款和条件。
2.政策比较
将突尼斯的保险政策与国际标准进行比较,以确定差异和相似之处。
3.研究助理
通过智能问答快速查找大型保险文件中的具体信息。
4.知识提取
生成摘要,提取关键字,并从保险单中识别重要概念。
🔬 运作原理
文档处理管道
- 文本提取:使用PyPDF从PDF中提取原始文本
- 文本清理:删除页眉、页脚、页码和格式工件
- 分块:将文档拆分为重叠的块(配置:2000个字符,200个字符重叠)
- 富集 (并行处理):
- 为每个块生成摘要 - 提取相关关键词 - 创建假设问题
- 嵌入:将增强文本转换为向量嵌入
- 向量存储:存储在FAISS中以进行快速相似性搜索
- 查询处理:使用LLM查找相关块并生成答案
多代理架构
- DocumentAnalyzerAgent:负责文档处理、丰富和查询应答的主要代理
- 摘要代理:用于从块级摘要生成全面全局摘要的专业代理
- 将多个块摘要合成为连贯的全局摘要 - 通过共享MCP(多代理上下文协议)使用上下文感知处理 - 消除冗余,同时保持文档保真度 - 生成适合快速理解文档的执行级摘要
- 文本预处理:智能清洁,将令牌负载减少20-30%
- 并行扩充:使用ThreadPoolExecutor进行并发块处理
- 情境感知问答:利用文档摘要、关键字和原始文本提供全面的答案
- 共享上下文(MCP):线程安全上下文管理使代理能够高效地共享元数据和摘要
🛠️ 配置
块大小设置
修改中的块设置 src/agents/analyzer_agent.py:
# In process_document method
self.chunks = self.chunk_text(
self.cleaned_text,
chunk_size=2000, # Currently configured chunk size
chunk_overlap=200 # Currently configured overlap
)注: chunk_text 方法的默认参数为 chunk_size=2500 和 chunk_overlap=300但是 process_document 明确使用2000和200来获得当前LLM设置的最佳性能。
LLM设置
在中更改LLM模型 src/agents/analyzer_agent.py:
self.llm = Ollama(
model="llama3:8b", # Change model here
temperature=0.3 # Adjust temperature
)嵌入模型
修改中的嵌入模型 src/utils/vector_store.py:
embeddings = HuggingFaceEmbeddings(
model_name="sentence-transformers/all-MiniLM-L6-v2"
)🔒 安全说明
- 这
.env文件不应提交到版本控制 - API密钥和敏感凭据应存储在环境变量中
- 上传的文档是临时存储的,应根据您的数据保留策略进行管理
📊 演出
- 并行处理:使用4个工作线程进行块富集
- 文本缩减:预处理可将文本减少约20-30%
- 快速搜索:FAISS支持亚秒级相似性搜索
- 高效嵌入:轻量级的全MiniLM-L6-v2型号,用于快速嵌入生成
🤝 贡献
欢迎投稿!请随时提交pull请求或打开bug和功能请求的问题。
📝 许可证
本项目按原样提供,用于研究和教育目的。
🐛 故障排除
常见问题
问题:“Ollama连接错误”
- 解决方案:确保Ollama已安装并运行。跑
ollama list以验证。
问题:“找不到模块”错误
- 解决方案:确保安装了所有依赖项:
pip install -r requirements.txt
问题:“处理过程中出现内存错误”
- 解决方案:减小块大小或处理较小的文档
问题:“处理速度慢”
- 解决方案:调整
max_workers在ThreadPoolExecutor中或使用较小的LLM模型
📧 联系
如有疑问或支持,请在GitHub存储库上打开问题。
🎓 学术背景
该项目旨在研究保险政策分析,特别侧重于理解突尼斯保险法规并将其与国际标准进行比较。它是保险专业人员、研究人员和政策制定者的工具。
