Spaces:
Sleeping
Sleeping
title: 文献综述助手 (又名不想看文献) | |
emoji: 📚 | |
colorFrom: blue | |
colorTo: indigo | |
python_version: 3.10.13 | |
sdk: gradio | |
sdk_version: "4.25.0" | |
app_file: app.py | |
pinned: false | |
# MedicalReviewAgent 不想看文献 | |
## 项目概述 | |
- 整一个帮我写综述的Agent,希望他能完成文献内容的收集,文本分类和总结,科学事实对比,撰写综述等功能 | |
- 计划用到RAG, function calling等技术 | |
- 还在不断摸索中,欢迎大佬指导! | |
## 流程图 | |
基本上就是在上海AIlab的茴香豆上面改的 这里主要讲解使用流程 架构和茴香豆一样 [茴香豆架构](https://github.com/InternLM/HuixiangDou/blob/main/docs/architecture_zh.md) | |
### 文献库和知识库构建 | |
![image](https://github.com/jabberwockyang/MedicalReviewAgent/assets/52541128/d70a2ec1-7a20-4b5b-a91c-bf649f657319) | |
### 人机合作写文章 | |
<img width="847" alt="image" src="https://github.com/jabberwockyang/MedicalReviewAgent/assets/52541128/fc394d8b-1668-4349-9adc-1c4c0a7e0a8b"> | |
## 功能 | |
1. **模型服务配置** | |
- **远程模型选择**:允许用户选择使用远程大模型或本地模型。提供多种大模型提供商选择,如kimi、deepseek、zhipuai、gpt。 | |
2. **文献查找+数据库生成** | |
- **文献查找**: | |
- 用户可以输入感兴趣的关键词,设置查找数量,并进行PubMed PMC文献查找。 | |
- 支持用户上传已有的PDF文献文件,可处理复杂PDF结构。 | |
- **文献库管理**: | |
- 支持删除现有文献库。 | |
- 提供文献库概况的实时更新。 | |
- **数据库生成**: | |
- 用户可以设置块大小用于构建数据库 | |
- 用户可以设置聚类数量用于文本聚类 | |
- **数据库管理**: | |
- 支持生成新的数据库,删除现有数据库,并查看数据库概况。 | |
3. **写综述** | |
- **抽样标注文章聚类**: | |
- 用户可以选择特定的块大小和聚类数,设置抽样标注比例,并开始标注过程。 | |
- **获取灵感**: | |
- 基于标注的文章聚类,大模型提供灵感,帮助用户生成综述所需的问题框架。 | |
- **综述生成**: | |
- 用户可以输入想写的内容或主题,点击生成综述按钮,系统将自动生成综述文本并提供参考文献。 | |
## 亮点 | |
1. **高效的文献查找和管理** | |
- 通过关键词快速查找相关文献,支持上传已有PDF文献,方便文献库的构建和管理。 | |
2. **灵活的数据库生成** | |
- 提供灵活的数据库生成参数设置,支持多次生成和更新数据库,保证数据的及时性和准确性。 | |
3. **智能的综述生成** | |
- 基于先进的大模型技术,提供自动化的文章聚类标注和灵感生成功能,帮助用户快速生成高质量的综述文本。 | |
4. **用户友好界面** | |
- 直观的操作界面和详细的使用指导,让用户能够轻松上手和使用各项功能。 | |
5. **远程和本地模型支持** | |
- 支持多种大模型提供商的选择,满足不同用户的需求,无论是本地模型还是远程大模型,都能灵活配置和使用。 | |
## 安装运行 | |
新建conda环境 | |
```bash | |
conda create --name ReviewAgent python=3.10.14 | |
conda activate ReviewAgent | |
``` | |
拉取github仓库 | |
```bash | |
git clone https://github.com/jabberwockyang/MedicalReviewAgent.git | |
cd MedicalReviewAgent | |
pip install -r requirements.txt | |
``` | |
huggingface-cli下载模型 | |
```bash | |
cd /root && mkdir models | |
cd /root/models | |
# login required | |
huggingface-cli download Qwen/Qwen1.5-7B-Chat --local-dir /root/models/Qwen1.5-7B-Chat | |
huggingface-cli download maidalun1020/bce-embedding-base_v1 --local-dir /root/models/bce-embedding-base_v1 | |
huggingface-cli download maidalun1020/bce-reranker-base_v1 --local-dir /root/models/bce-reranker-base_v1 | |
``` | |
启动服务 | |
```bash | |
conda activate ReviewAgent | |
cd MedicalReviewAgent | |
python3 app.py | |
``` | |
gradio在本地7860端口运行 | |
## 技术要点 | |
基于茴香豆加了几个功能 | |
1. 本地和远程模型灵活配置 | |
- 本地模型是qwen1.5 7b chat | |
- 用户也可以在前端界面填写自己的API,本地远程模型任意切换 | |
3. 文献搜索和文本清洗 | |
- 用户键入文献检索关键词,自动从PubMed公开数据库上搜索并下载文献全文 | |
- xml到txt的文本清洗,去除reference 等无关信息 | |
4. 基于[Ragflow](https://github.com/infiniflow/ragflow/blob/main/README_zh.md)的deepdoc库的PDF识别 | |
- 输出文献中的文字和表格,其中文字存储为 txt, 表格存储为图片,json, html三个格式 | |
- 目前工作流中仅利用文字,表格数据的利用开发中 | |
5. chunk size可调的数据库生成 | |
- default 1024 [ref](https://www.llamaindex.ai/blog/evaluating-the-ideal-chunk-size-for-a-rag-system-using-llamaindex-6207e5d3fec5) | |
6. 嵌入kmeans聚类 | |
- 基于Faiss库 | |
- k可调 | |
7. 基于LLM的聚类内容标注 | |
- 为节省算力,可以抽样标注 | |
- 标注后本地储存避免重复标注 | |
8. 基于LLM的子问题生成 | |
- 聚类标注内容作为context,生成对应的子问题 | |
9. 基于LLM的综述生成 | |
- 输入可以是用户自己的问题,也可以参考之前llm生成的子问题 | |
- 为了比较同一个科学问题的不同来源的观点,修改了一部分茴香豆的Retriever逻辑 | |
- retreiver 优化 [ref](https://medium.aiplanet.com/evaluating-naive-rag-and-advanced-rag-pipeline-using-langchain-v-0-1-0-and-ragas-17d24e74e5cf) | |
- 返回topk =10的分段 | |
- 由于LLM捞针能力在头尾两端较靠谱,用langchain_community.document_transformers.LongContextReorder 将相关性较高的文本分布在头尾两端 | |
10. gradio前端 | |
<div style="display: flex;"> | |
<img src="https://github.com/jabberwockyang/MedicalReviewAgent/assets/52541128/83a1cefe-ebe6-499a-9ca7-214e90089815" style="width: 30%;" /> | |
<img src="https://github.com/jabberwockyang/MedicalReviewAgent/assets/52541128/c369aeaa-6749-4d56-b71a-d62ff1cb780f" style="width: 30%;" /> | |
<img src="https://github.com/jabberwockyang/MedicalReviewAgent/assets/52541128/27f1d440-2b79-4cbb-9b15-a5e2fa037d33" style="width: 30%;" /> | |
</div> | |
<div style="display: flex;"> | |
<img src="https://github.com/jabberwockyang/MedicalReviewAgent/assets/52541128/db2443ff-b6a2-4c35-83e6-21e478c39eba" style="width: 30%;" /> | |
<img src="https://github.com/jabberwockyang/MedicalReviewAgent/assets/52541128/77496f38-f1e6-4919-a439-c06b4fd52aab" style="width: 30%;" /> | |
</div> | |
## TODO | |
1. 自然语言到文献搜索参数的functional call功能 | |
- 比如: | |
- 输入:帮我搜索近五年特应性皮炎相关的孟德尔随机化文章,不要综述 | |
- 输出: | |
```json | |
{"keywords":["atopic dermatitis","mendelian randomisation"], | |
"min-year":2019, | |
"max-year":2024, | |
"include-type":null, | |
"exclude-type":"review" | |
} | |
``` | |
2. 摸索适用于不同需求的chunk size和 k值 | |
- 比方说用来找某个实验方法用多大浓度的试剂,和总结某研究领域的前沿进展所用到的chunksize应该是不一样的吧🤔 | |
- 后者的大小其实取决于前者叭🤔 | |
3. 表格数据利用 | |
## 感谢 | |
1. [茴香豆](https://github.com/InternLM/HuixiangDou) | |
2. [E-utilities](https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pmc&id=PMCID) | |
3. [Ragflow](https://github.com/infiniflow/ragflow/blob/main/README_zh.md) | |
4. [Advanced RAG pipeline](https://medium.aiplanet.com/evaluating-naive-rag-and-advanced-rag-pipeline-using-langchain-v-0-1-0-and-ragas-17d24e74e5cf) | |