File size: 7,666 Bytes
9114be4
 
 
 
 
 
c8bd26b
9114be4
 
 
7a919c0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
---
title: 文献综述助手 (又名不想看文献)
emoji: 📚
colorFrom: blue
colorTo: indigo
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)