可以进行重复测量的方差分析的AI agent
前几天做了机器学习的AI agent,把一个糖尿病机器学习模型采用API的形式接入到LLM模型中,结合LLM的智能性和机器学习模型的准确性,利用两者的有点,有可以避免两者的缺点,是一条合理且有发展前景的技术路线。 循着同样的思路,这次,尝试将医学统计学的“重复测量的方差分析”接入到LLM,因为这种分析方法算是相对复杂一点的方法,需要多步完成,中间还会用到球形检验等不太熟悉的检验方法,并且对结果进行专业的解释也是一个困难,正好可以接入LLM的智能来克服以上的部分。
现在已经上线百度千帆平台,「AI重复测量的方差分析」网页版地址,也可以在小程序上体验,还处于体验阶段。个人感觉这个API集合LLM的思路还是有很强的通用型,可以把之前自己的专业接入到LLM模型中。
1. 构建重复测量分析的API
使用python 的pingouin包可以实现重复测量的方差分析的各种分析函数,然后使用fastapi包装这些函数并部署到Render网站上(简便免费,但是算力有限),这样就形成了可以对外服务的API,建议使用api调试工具进行一下调试,比如apifox,还可以直接生成curl形式的代码,用来黏贴到百度的千帆大模型中的API组件中。
对于这种API,输入和原来机器学习的不一样,是List形式的,输出是json形式的,代码关键部分贴在下边。
python">from fastapi import FastAPI
from pydantic import BaseModel
import pandas as pd
import pingouin as pg
import json
from typing import List, Optionalapp = FastAPI()class RepeatedMeasuresAnovaInput(BaseModel):value_column: List[int]group_column: Optional[List[object]]=Nonetime_column: List[object]subject_column: List[int]@app.post("/sphericity_test")
def sphericity_test(input_data: RepeatedMeasuresAnovaInput):"""Perform a Mauchly's test of sphericity.Args:input_data: RepeatedMeasuresAnovaInputReturns:A JSON string containing the results of the sphericity test"""data_frame = pd.DataFrame({'value': input_data.value_column,'time': input_data.time_column,'subject': input_data.subject_column})try:spher, W, chisq, dof, pval = pg.sphericity(data=data_frame, dv='value', within='time', subject='subject')output = {'sphericity': spher,'W': W,'chisq': chisq,'dof': dof,'pval': pval}return json.dumps(output, allow_nan=True,ensure_ascii=False)except Exception as e:return str(e)
2. 千帆平台构建API组件并接入LLM
构建组件这一块还算顺利,新增加几个参数作为输入,是array形式,值放在[]中,最后会以json的形式导入到模型中,输出是json格式的str形式,原始的输出会有反斜杠,可以不管。因为有多个API,所以增加了几个分支,通过关键词触发相应的分析步骤,分析之后直接进行输出,让用户知道是API输出的,不是大模型输出的。
下一步是构建一个应用,把组件接进去,应用设定上选择使用组件输出。这一块浪费了一些时间,一直提示数据格式不正确,调用组件失败,原因居然是因为有些低版本的大模型不理解数据形式,换了高版本的LLM模型后就可以了。
编写了一些promot之后,应用可以跑通了,算是版本1.0,后面还需要加工,欢迎大家体验。
3. 与shiny和streamlit等可视化界面应用比较
这里简单比较一下说一下,后续可能还会专门比较一下。
1、功能上来说,各有各的特点,无非是输入数据,展示结果,背后的运算都是一样的;
2.从易用性上来说,可视化界面可能更直观一些,更加符合数据处理的习惯,而大模型是通过一个对话框来实现这些功能,略显局促。
但是LLM比较了解的知识更全面,在处理用户意向不到的需求的时候,更加具有灵活性,另一方面随着,LLM组件功能的扩展,可能会有意想不到的设计。