基于Qwen2大模型实现的中药智能化筛选助手

本文涉及的产品
NLP自然语言处理_高级版,每接口累计50万次
视觉智能开放平台,分割抠图1万点
NLP自然语言处理_基础版,每接口每天50万次
简介: 本文介绍了利用大语言模型微调技术在中药方剂智能化筛选与优化中的应用。项目涵盖微调环境搭建、数据预处理、智能体构建及效果评估等环节,展示了模型在生成新中药方剂上的创新能力和实用性。

目录

  1. 引言
  2. 微调模型
    • 微调环境
    • 微调脚本与超参数
    • 微调过程与结果
  3. 数据预处理
    • 数据来源
    • 数据筛选
    • 大模型筛选与整理
  4. 智能体构建
    • 工具注册
    • API 构建
    • Agent的构建
    • 对话界面实现
  5. 效果对比
    • 原模型输出示例
    • 微调后模型输出示例
  6. 结论与展望

1. 引言

中医药是中华民族的瑰宝,历史悠久、源远流长。中药方剂作为中医的重要组成部分,具有极高的理论和实践价值。
自古以来,对中药方剂的研究历经了多个阶段。
在古代,中药方剂的研究主要依赖于前人积累的丰富经验。《黄帝内经》、《伤寒论》、《本草纲目》等经典著作为中药方剂的理论与实践奠定了基础,药材的配伍和应用也大多基于代代相传的经验。
到近代,随着科学的进一步大众,中药研究逐渐引入了,开始对方剂的药理、毒理等方面进行深入研究。这一时期推动了中药方剂研究的标准化与规范化,为其现代化应用打下了重要基础。
进入现代,科学技术的快速发展使信息技术、大数据和人工智能等新兴方法广泛应用于中药方剂的研究与开发。通过这些技术的助力,中药方剂研究效率大幅提升。
虽然方法不断进步,但对传统经验的依赖始终贯穿其中。我们日常使用的许多经典药剂仍然源自古籍的智慧积累。
本项目旨在微调出一个具备丰富中药方剂知识和经验的大模型,实现中药方剂的智能化筛选与优化,助力中医药现代化发展。


2. 微调模型

2.1 微调环境

模型微调过程中,使用了魔搭社区提供的免费GPU算力,微调环境如下:

- 操作系统:Ubuntu-22.04  
- CUDA 版本:12.1.0  
- Python 版本:3.10  
- PyTorch 版本:2.3.0  
- 显存:24GB  
- 运行内存:32GB  
- Swift 版本:2.4.0

2.2 微调超参数

微调采用魔搭开源的 swift框架,在经过了不断的测试后,筛选出了合适的超参数,以下为模型微调主要使用的超参数:

模型类型:qwen2-7b-instruct
学习率:1e-5
优化器:AdamW
权重衰减:0.01
训练轮数:1
批量大小(Batch Size):16
学习率调度策略:Cosine
初始随机种子:42
混合精度训练:bf16
最大序列长度:1024
训练集条数:20000

2.3 微调过程与结果

训练过程中的显存占用、损失值变化和梯度更新情况如下图所示:
train_loss.png
train_acc.png
train_grad_norm.png

微调所用时间大约60min


3. 数据预处理

3.1.数据来源

我们的数据主要来源于《本草纲目》以及其他经典中华传统医书。这些医书中包含了丰富的中医药方剂、药材基本信息及其适应病症等内容,数据质量较高,污染程度较低。

3.2 数据筛选

在原始数据的基础上,进行人工筛选,去除冗余、无关的信息。通过这一步骤,筛选后的数据基本只包含了方剂组成、适用病症、用法用量等各种信息。

3.3 大模型筛选与整理

将筛选后的数据分割后,采用合适的提示词,输入大模型进行处理,提取数据中的药方和其所能治疗的病症,并整理成以下格式:

    {
   
        'system': 
                '您是一位非常专业的的中医药学专家。您始终会根据提问人的问题来提供准确、全面和详细的答案。', 
        'query': 
                '(病症描述)', 
        'response': 
                "对(病症)有以下药方:['药方1:()','药方2:()']"
    }

4. 智能体构建

使用魔搭创空间进行部署,创空间(失效)

4.1 工具注册

通过 modelscope_agent 的编写工具,在本地对工具进行注册,以下为工具注册代码:

import requests
import json
from typing import Dict, Optional
from modelscope_agent.tools.base import BaseTool, register_tool
#定义工具和格式
@register_tool('create_chinese_medicine')
class CreateChineseMedicine(BaseTool):
    description = '根据病症描述生成新型中药的开发建议'
    name = 'create_chinese_medicine'
    parameters: list = [{
   
        'name': 'text',
        'type': 'string',
        'description': '病症的名称',
        'required': True
    }]
#调用本地部署微调后的模型的API
    def __init__(self, cfg: Optional[Dict] = None):
        super().__init__(cfg)
        #  API 调用
        self.api_url = 'http://localhost:8888/call/'

    def call(self, params: str, **kwargs) -> str:
        params = self._verify_args(params)
        if isinstance(params, str):
            return '参数错误'
        # 输入数据
        text = params['text']
        data = {
   "input": text + '给出几种新型中药制剂'}
        headers = {
   'Content-Type': 'application/json'}
        # 调用 API
        response = requests.post(self.api_url, json=data, headers=headers)
        # 返回 API 响应
        return response.content.decode('utf-8')

4.2 API 构建

使用 FastAPI 构建 API 服务,使智能体可以调用工具,以下为关键代码片段:

"""
以上包含模型部署部分,主要使用swift进行模式部署
"""
from fastapi import FastAPI
@app.post("/call/")
async def generate(data: InputData):
    response = await generate_response(data.input)
    return {
   "response": response}

4.3 Agent 的构建

构建智能体,使用Qwen-max作为中枢大模型,封装其功能为函数。以下是代码:

from modelscope_agent.agents import RolePlay
#定义一个智能体
def create_agent():
    role_template = '你将扮演一个小助手,会根据用户的指令来调动工具完成任务'
    llm_config = {
   
        'model': 'qwen-max',
        'model_server': 'dashscope',
    }
    function_list = ['create_chinese_medicine']

    bot = RolePlay(function_list=function_list, llm=llm_config, instruction=role_template)  
    return bot

# 初始化智能体对象
bot = create_agent()

4.4 对话界面的实现

使用 Gradio 构建了前端界面,使用户能与智能体进行交互。以下是代码:

import gradio as gr
from model_download import model_download
from agent import bot
import os
import subprocess
#调用agent
def call_large_model(input_text):
    response = bot.run(input_text, remote=False, print_info=True)
    text = ''
    for chunk in response:
        text += chunk
    return text

# 对话生成,历史记录
def generate_response(input_text, history):
    response = call_large_model(input_text)
    history = history + [[input_text, response]]
    return history

# 清除聊天记录
def clear_history():
    return []

# Gradio 界面
with gr.Blocks() as demo:
    gr.Markdown("<h1 style='text-align: center;'>新型中药开发小助手</h1>")
    with gr.Row():
        chatbot = gr.Chatbot(label="对话框")
    with gr.Row():
        with gr.Column():
            user_input = gr.Textbox(label="输入您的问题", placeholder="推理速度很慢,请耐心等待")
            submit_button = gr.Button("提交", variant="primary")
            clear_button = gr.Button("清除聊天记录", variant="secondary")
    # 按钮绑定
    submit_button.click(generate_response, inputs=[user_input, chatbot], outputs=[chatbot])
    clear_button.click(clear_history, outputs=[chatbot])

# 下载模型并启动 API 服务
model_download()
api_process = subprocess.Popen(['python', 'API.py'])

# 启动 Gradio 界面
demo.launch()

5.效果对比

在对模型进行微调后,通过几个问题来对比了微调前和微调后模型的推理结果,以验证微调对大模型的改进。

原模型输出示例

对于有关风湿病和脚气的回答,原模型生成的内容主要是基于原有的中药方剂,传统的加减调整。例如:

问题 1:风湿病,请给出两个新的中药药方

回答
风湿病是由于风、寒、湿邪侵袭人体,导致经络阻塞、气血运行不畅的一种病症。中医治疗风湿病通常会结合辨证论治原则,通过补益肝肾、活血化瘀、祛风除湿等方法进行。以下是两个基于中医理论的药方,但请注意,在使用任何中药之前,最好咨询专业的中医师或医生,以确保安全性和有效性,并根据个人的具体情况调整剂量和方案。

方剂一:独活寄生汤加减

  • 组成:独活 15g、寄生 30g、细辛 10g、当归 15g、川芎 10g、羌活 15g、白芍 15g、杜仲 15g、牛膝 15g、防风 10g、秦艽 10g、人参 10g、肉桂 6g、干姜 6g、甘草 6g。
  • 用法:每日一剂,水煎分两次服用。

方剂二:桂枝芍药知母汤加减

  • 组成:桂枝 15g、芍药 30g、知母 15g、生姜 15g、大枣 10枚、防风 10g、甘草 6g、白术 15g。
  • 用法:每日一剂,水煎分两次服用。
问题 2:患者患有脚气,请给出两个新的药方

回答
脚气是由真菌感染引起的常见皮肤病,主要表现为瘙痒、脱皮、红斑、裂口等。以下为两个传统中药方剂:

药方一:黄柏地肤子汤

  • 组成:黄柏 15g、地肤子 15g、苦参 10g、白鲜皮 10g、茯苓 10g、薏苡仁 15g、荆芥穗 6g、甘草 6g。
  • 用法:煎煮后取汁,用于外洗患处,每日 2 次。

药方二:白矾甘草汤

  • 组成:白矾 10g、甘草 6g。
  • 用法:煎煮后用于泡脚,每次 30 分钟,每日 1 次,同时涂抹患处。

微调后模型输出示例

微调后的模型在推理中表现出较强的创新性。其生成的新药方通过网络检索和数据集检索未发现完全一致的方剂组合,且选用药材符合对应病症的治疗原则,与专家讨论后有一定的治疗效果,拥有了初步的新型中药方剂开发能力。

问题 1:患者患有风湿病,请给出两个新的药方

回答

  • 药方 1:用大黄、干姜各半斤,共研为末,加蜜做成丸子,如梧子大。每服三十丸,饭前服,米汤送下。一天服三次。
  • 药方 2:用白术一斤,锉成碎末,加水三斗,煮成一斗,去渣,熬成膏。每服二匙,酒送下。一天服三次。
问题 2:患者患有脚气,请给出两个新的药方

回答

  • 药方 1:用大蒜四两,捣烂,加醋三升,浸足,至夜洗去。此方名“醋蒜汤”。
  • 药方 2:用猪苓一两、木通五钱,共研为末。每服二钱,加温酒送下。一天服二次。

微调后的模型在生成新方剂时,相较原始模型表现出更强的创新能力,具体如下:

原始模型:主要生成基于经典中药方剂的加减方。
微调模型:能够生成经过检索后未发现重复的新方剂,药材选择具有治疗针对性,证明了其潜在的创新能力。

6. 结论与展望

本项目通过对大模型微调、智能体设计及系统集成,实现了新型中药方剂的智能化筛选与优化。未来的研究方向包括:

  1. 优化数据预处理与模型推理效率。
  2. 引入更多药效验证机制,确保生成方剂的实用性。
  3. 提升交互界面的用户体验。

相关文章
|
11天前
|
人工智能 安全 数据安全/隐私保护
文档智能 & RAG让AI大模型更懂业务测评
文档智能 & RAG让AI大模型更懂业务
133 73
|
2天前
|
人工智能 算法 搜索推荐
《主动式智能导购AI助手构建》解决方案评测
《主动式智能导购AI助手构建》解决方案评测
29 18
|
1天前
|
人工智能 自然语言处理 监控
解决方案评测:主动式智能导购AI助手构建
作为一名数据工程师,我体验了主动式智能导购AI助手构建解决方案,并进行了详细评测。该方案通过百炼大模型和函数计算实现智能推荐与高并发处理,部署文档详尽但部分细节如模型调优需改进。架构设计清晰,前端支持自然语言处理与语音识别,中间件确保实时数据同步。生产环境部署顺畅,但在系统监控方面可进一步优化。总体而言,该方案在零售行业具有显著应用潜力,值得尝试。
27 17
|
2天前
|
人工智能 自然语言处理 搜索推荐
主动式智能导购AI助手构建测评
主动式智能导购AI助手构建解决方案测评
11 4
|
2天前
|
人工智能 搜索推荐 数据库
主动式智能导购AI助手构建方案评测
阿里云推出的主动式智能导购AI助手方案,基于百炼大模型和Multi-Agent架构,通过多轮对话收集用户需求,实现精准商品推荐。其优势包括主动交互、灵活可扩展的架构、低代码开发及快速部署。商家可在10分钟内完成部署,并享受低成本试用。尽管技术细节尚需完善,该方案为电商提供了高效的客户服务工具,未来有望在个性化推荐和多模态交互方面取得突破。
|
8天前
|
人工智能 前端开发 算法
主动式智能导购 AI 助手构建方案评测
《主动式智能导购 AI 助手构建方案评测》详细评估了该方案在部署体验、技术原理理解及生产环境应用指导等方面的表现。方案在智能导购领域展现出一定潜力,但文档的详细程度和技术细节的阐述仍有改进空间,特别是在复杂操作和高级功能的指导上。总体而言,该方案具备优势,但需进一步优化以更好地满足企业需求。
51 10
|
8天前
|
存储 人工智能 Serverless
AI助手测评 | 3步快速构建主动式智能导购AI助手
本文介绍了如何利用阿里云的百炼平台构建主动式智能导购AI助手。在当前经济形势下,企业通过AI技术可以有效降低成本并提升服务质量。主动式智能导购AI助手不仅具备专业知识和耐心,还能24小时不间断服务用户,帮助企业节省夜班客服费用。通过创建API-KEY、部署函数计算应用和集成百炼商品检索应用,企业可以在短短几步内快速构建这一智能系统。此外,文章还提供了详细的部署步骤和测评建议,确保企业在实际应用中能够顺利实施。
|
10天前
|
人工智能 自然语言处理 监控
主动式智能导购AI助手构建评测
主动式智能导购AI助手构建评测
27 5
|
9天前
|
人工智能 运维 Serverless
主动式智能导购AI助手构建评测报告
主动式智能导购AI助手构建评测报告
30 1
|
10天前
|
人工智能 搜索推荐 Serverless
评测:《主动式智能导购AI助手构建》解决方案
这个解决方案为商家提供了一个强大的工具,可以显著提高顾客的购物体验。通过自动化和智能化的方式,商家可以更有效地满足顾客的需求,提高销售效率。
24 1
下一篇
DataWorks