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

本文涉及的产品
NLP 自学习平台,3个模型定制额度 1个月
视觉智能开放平台,图像资源包5000点
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. 提升交互界面的用户体验。

相关文章
|
1天前
|
人工智能 算法 搜索推荐
《主动式智能导购AI助手构建》解决方案评测
《主动式智能导购AI助手构建》解决方案评测:该方案提供详尽的部署指南与文档支持,采用微服务架构设计,利用百炼大模型实现精准推荐。但在特定配置参数说明、数据流描述及非专业开发人员使用便捷性方面存在提升空间。总体而言,适合寻求高效个性化服务的企业采用,需关注生产环境下的异常处理指导。
44 24
|
1天前
|
人工智能 弹性计算 自然语言处理
主动式智能导购AI助手构建评测
《主动式智能导购AI助手构建》评测报告,涵盖2024年12月至2025年1月。报告详细评估了部署体验、文档帮助、实践原理、架构理解、百炼大模型与函数计算的应用,以及生产环境部署指导。整体评价积极,建议增加初学者教程和定制化选项。
28 15
|
8天前
|
机器学习/深度学习 人工智能 缓存
《主动式智能导购AI助手构建》解决方案深度评测
《主动式智能导购AI助手构建》解决方案利用先进的人工智能技术,旨在提升零售行业的顾客购物体验和优化销售流程。本文基于实际部署经验,从部署引导、实践原理、大模型应用及生产环境部署四个方面对该方案进行了深入评测,探讨了其优势与改进空间,为企业提供参考。
29 10
|
8天前
|
人工智能 Serverless 数据库连接
《主动式智能导购AI助手构建》解决方案评测报告
本文介绍了《主动式智能导购AI助手构建》解决方案的部署体验与文档帮助、实践原理和架构理解、百炼大模型和函数计算的应用,以及生产环境应用步骤指导。尽管部署过程中遇到一些技术问题,但通过查阅官方文档和社区资源得以解决。文章指出,官方文档在错误排查、系统架构细节、模型训练优化及生产环境调优等方面仍有改进空间,建议增加更多实例和详细说明以提升用户体验。
|
9天前
|
人工智能 Serverless 决策智能
评测:主动式智能导购AI助手构建解决方案
评测:主动式智能导购AI助手构建解决方案
22 1
|
21天前
|
物联网 Swift Python
基于qwen模型实现大模型应用探索-党务知识小助手
本项目基于qwen2-7b-instruct模型,采用LoRA技术,在党务知识数据集与通用数据集上进行微调,专为党务领域问答设计,涵盖党员教育等场景。通过数据准备、模型微调、推理测试及部署应用。
111 0
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
评测:AI 大模型助力客户对话分析
该评测报告详细介绍了Al大模型在客户对话分析中的应用,涵盖了实践原理、实施方法、部署体验、示例代码及业务适应性。报告指出,该方案利用NLP和机器学习技术,深度解析对话内容,精准识别用户意图,显著提升服务质量与客户体验。实施方法清晰明了,文档详尽,部署体验顺畅,提供了丰富的引导和支持。示例代码实用性强,但在依赖库安装和资源限制方面需注意调整。整体上,该方案能够满足基本对话分析需求,但在特定行业场景中还需进一步定制化开发。
|
2月前
|
存储 人工智能 Serverless
AI大模型助力客户对话分析评测文章
在数字化时代,企业面临客户对话数据处理的挑战。阿里云推出的AI大模型助力客户对话分析方案,通过整合多种云服务,实现对话数据的自动化分析,提升服务质量和客户体验。本文将详细介绍该方案的优势与实际应用效果。
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
AI 大模型助力客户对话分析评测
《AI大模型助力客户对话分析》解决方案通过先进的AI技术实现高效客服对话分析。方案详细阐述了利用自然语言处理和机器学习技术解析客户对话的方法,并提供了具体实施步骤。然而,在技术细节、案例研究和定制化指导方面仍有改进空间,建议增强技术文档、增加案例研究并提供更多的定制化支持。
57 2
|
2月前
|
人工智能 数据挖掘 API
评测报告:AI大模型助力客户对话分析
《AI大模型助力客户对话分析》解决方案详细介绍了如何利用AI大模型进行语音识别、情感分析和关键词提取,帮助企业提升服务质量。方案内容清晰,但部分技术细节和环境配置说明有待完善。示例代码基本可用,但在特定配置和行业术语方面需进一步优化。总体而言,该方案在实际业务场景中表现出色,但仍需改进以提升用户体验。
47 1