Multi-LLM-Agent

Multi-LLM-Agent

多模型协作系统提升小型语言模型工具学习效能

α-UMi是一个创新的多模型协作系统,将语言模型能力分解为规划、调用和总结三个组件。通过全局到局部的渐进式微调策略和灵活的提示设计,该系统显著提升了小型语言模型在工具学习任务中的表现,甚至超越了某些大型闭源模型。α-UMi为复杂AI任务提供了新的高效解决方案。

Multi-LLM Agentα-UMi工具学习大语言模型人工智能Github开源项目

✨α-UMi: 小型语言模型是弱工具学习者:多语言模型代理

<div align="center"> 沈伟洲<sup>1</sup>,李陈亮<sup>2</sup>,陈鸿展<sup>1</sup>,闫明<sup>2*</sup>,全晓军<sup>1*</sup>,陈鹤鸿<sup>2</sup>,张骥<sup>2</sup>,黄飞<sup>2</sup> </div> <div align="center"> shenwzh3@mail2.sysu.edu.cn, quanxj3@mail.sysu.edu.cn, ym119608@alibaba-inc.com </div> <div align="center"> <sup>1</sup>中山大学 <sup>2</sup>阿里巴巴集团 </div> <div align="center"> *通讯作者 </div> <div align="center"> <a href="https://github.com/modelscope/modelscope-agent/tree/alpha_umi"><img src="https://yellow-cdn.veclightyear.com/835a84d5/6c9afbf6-38f0-4bb7-a953-07131d892eeb.svg" alt="Demo ModelScope"></a> <a href="https://arxiv.org/pdf/2401.07324.pdf"><img src="https://yellow-cdn.veclightyear.com/835a84d5/19748688-7e7d-4bab-bd7f-cca832483595.svg" ></a> <a href="https://hits.seeyoufarm.com"><img src="https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2FX-PLUG%2FMulti-LLM-Agent&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=hits&edge_flat=false"/></a> </div> <div align="center"> <a href="README.md">English</a> | <a href="README_zh.md">简体中文</a> <hr> </div> <div align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/39c53806-60c5-48b8-b065-5bfa0e73cc65.png" width="70%">

传统单一语言模型代理框架(上)与alpha-UMi(下)的概念对比。

</div>

α-UMi是一个用于工具学习的多语言模型协作代理。它将单一语言模型的能力分解为三个组件,即规划器、调用器和总结器。对于代理执行的每个步骤,规划器根据系统状态生成当前步骤的理由,并选择调用器或总结器生成下游输出。调用器由理由指导,负责调用特定工具进行交互。总结器在规划器的指导下,根据执行轨迹制作最终的用户答案。

<div align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/568e95c0-1f75-4911-9225-e2bbbf216278.png" width="95%">

α-UMi如何完成任务的示意图。

</div> <div align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/d5cfa5ea-16ad-404c-bf48-b03122e6a4f7.png" width="95%">

α-UMi如何通过反思完成任务的示意图。

</div>

亮点

  • 使小型语言模型能够协作,在工具学习方面超越强大的闭源大型语言模型。
  • 比单一语言模型代理系统更灵活的提示设计。
  • 两阶段全局到局部渐进式微调(GLPFT)成功训练多语言模型代理。

新闻

  • [04.23] 我们已经在modelscope上传了处理后的数据!您可以直接下载数据并使用,无需任何预处理。
  • [01.30] 我们发布了✨α-UMi的代码及其预训练和指令微调检查点。

检查点

模型7b13b
backbone (GLPFT 第1阶段检查点)-/modelscope-/modelscope
plannerhuggingface / modelscopehuggingface / modelscope
callerhuggingface / modelscopehuggingface / modelscope
summarizerhuggingface / modelscopehuggingface / modelscope

使用方法

安装依赖

  1. 创建conda环境
conda create -n multi_llm_agent python=3.10 conda activate multi_llm_agent
  1. 安装PyTorch
pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2
  1. 安装其他依赖
pip install -r requirements.txt

数据准备

注意: 我们现在已经在modelscope上传了处理后的数据!您可以直接下载数据并使用,无需任何预处理。

ToolBench

  1. 首先从Google Drive清华云下载原始ToolBench数据集,并将数据放入./data文件夹。

  2. 为训练预处理数据

cd ./GLPFT

ORI_DATA_DIR="../data/toolbench/data" # 保存toolbench原始数据的路径
RAW_DATA_OUT_DIR="dataset/toolbench/train/raw_data"
TRAIN_DATA_OUT_DIR="dataset/toolbench/train"
export PYTHONPATH=./


python process_data/toolbench/prepro_raw_stage_1.py \
 --data_dir $ORI_DATA_DIR \
 --output_path $RAW_DATA_OUT_DIR


python process_data/toolbench/prepro_raw_stage_2.py \
 --input_path $RAW_DATA_OUT_DIR/raw_data_stage_1.json \
 --output_path $RAW_DATA_OUT_DIR
对于 'backbone' 'planner' 'caller' 'summarizer' 中的每个 MODE
执行
    python process_data/toolbench/prepro_$MODE.py \
        --input_path $RAW_DATA_OUT_DIR/raw_data_stage_2.json \
        --output_path $TRAIN_DATA_OUT_DIR/train_$MODE.json \
        --prompt_type toolbench_$MODE
完成

执行上述脚本后,你将创建 ToolBench 的 GLPFT 训练数据,这些数据将存储在 ```./GLPFT/dataset/toolbench/train``` 中。

### GLPFT 训练

我们的 α-UMi 采用两阶段 GLPFT 微调,首先预热一个主干 LLM,然后分别微调规划器、调用器和总结器。

1. 首先,我们为整个工具学习代理任务微调一个 LLM。

cd ./GLPFT

LLAMA_PATH="" # 你的初始 LLM 检查点路径 NNODE=8 PORT=12345 BSZ=6 GA=1

EXP_NAME=/toolbench/backbone # 保存模型的路径 export PYTHONPATH=./ torchrun --nproc_per_node=$NNODE --master_port=$PORT train_mem.py
--model_name_or_path $LLAMA_PATH
--data_path dataset/toolbench/train/train_backbone.json
--output_dir saved_models/$EXP_NAME
--num_train_epochs 2
--per_device_train_batch_size $BSZ
--per_device_eval_batch_size $BSZ
--gradient_accumulation_steps $GA
--evaluation_strategy "no"
--eval_steps 0
--save_strategy "steps"
--save_steps 500
--save_total_limit 8
--learning_rate 5e-5
--warmup_ratio 0.4
--lr_scheduler_type "cosine"
--gradient_checkpointing True
--deepspeed ds_configs/stage3-a100.json
--bf16
--logging_steps 2
--model_max_length 4096
--report_to none
--lazy_preprocess True


2. 获得主干后,我们开始微调规划器、调用器和总结器:

cd ./GLPFT

NNODE=8 PORT=12345 BSZ=6 GA=1

BB_PATH="saved_models/toolbench/backbone"

EXP_NAME=/toolbench/planner export PYTHONPATH=./ torchrun --nproc_per_node=$NNODE --master_port=$PORT train_mem.py
--model_name_or_path $BB_PATH
--data_path dataset/toolbench/train/train_planner.json
--output_dir saved_models/$EXP_NAME
--num_train_epochs 1
--per_device_train_batch_size $BSZ
--per_device_eval_batch_size $BSZ
--gradient_accumulation_steps $GA
--evaluation_strategy "no"
--eval_steps 0
--save_strategy "steps"
--save_steps 500
--save_total_limit 8
--learning_rate 1e-5
--weight_decay 0.01
--warmup_ratio 0.2
--lr_scheduler_type "cosine"
--gradient_checkpointing True
--bf16
--logging_steps 2
--model_max_length 4096
--report_to none
--lazy_preprocess True

EXP_NAME=/toolbench/caller export PYTHONPATH=./ torchrun --nproc_per_node=$NNODE --master_port=$PORT train_mem.py
--model_name_or_path $BB_PATH
--data_path dataset/toolbench/train/train_caller.json
--output_dir saved_models/$EXP_NAME
--num_train_epochs 1
--per_device_train_batch_size $BSZ
--per_device_eval_batch_size $BSZ
--gradient_accumulation_steps $GA
--evaluation_strategy "no"
--eval_steps 0
--save_strategy "steps"
--save_steps 500
--save_total_limit 8
--learning_rate 1e-5
--weight_decay 0.01
--warmup_ratio 0.2
--lr_scheduler_type "cosine"
--gradient_checkpointing True
--bf16
--logging_steps 2
--model_max_length 4096
--report_to none
--lazy_preprocess True

EXP_NAME=/toolbench/summarizer export PYTHONPATH=./ torchrun --nproc_per_node=$NNODE --master_port=$PORT train_mem.py
--model_name_or_path $BB_PATH
--data_path dataset/toolbench/train/train_summarizer.json
--output_dir saved_models/$EXP_NAME
--num_train_epochs 2
--per_device_train_batch_size $BSZ
--per_device_eval_batch_size $BSZ
--gradient_accumulation_steps $GA
--evaluation_strategy "no"
--eval_steps 0
--save_strategy "steps"
--save_steps 500
--save_total_limit 8
--learning_rate 1e-5
--weight_decay 0.01
--warmup_ratio 0.4
--lr_scheduler_type "cosine"
--gradient_checkpointing True
--bf16
--logging_steps 2
--model_max_length 4096
--report_to none
--lazy_preprocess True


### 推理和评估

我们在 ```./GLPFT/dataset/toolbench/test``` 中提供了论文第 4.1 节实验的静态测试数据,我们可以通过运行以下脚本来推理和评估 α-UMi 系统,如第 4.1 节所述:

cd ./GLPFT

NNODE=8 PORT=12345

PLAN_PATH="saved_models/planner" CAL_PATH="saved_models/caller" SUM_PATH="saved_models/summarizer"

LAB_DIR=output_res/toolbench P_TYPE_PLAN=toolbench_planner P_TYPE_CAL=toolbench_caller P_TYPE_SUM=toolbench_summarizer

for DOMAIN in 'in_domain' 'out_of_domain' do export PYTHONPATH=./ torchrun --nproc_per_node=$NNODE --master_port=$PORT inference_utils/toolbench/infer_pipeline.py
--planner_model_name_or_path $PLAN_PATH
--planner_use_lora False
--caller_model_name_or_path $CAL_PATH
--caller_use_lora False
--summarizer_model_name_or_path $SUM_PATH
--summarizer_use_lora False
--per_device_eval_batch_size 1
--data_path dataset/toolbench/test/$DOMAIN.json
--bf16_full_eval
--assistant_prompt_type $P_TYPE_PLAN
--caller_prompt_type $P_TYPE_CAL
--conclusion_prompt_type $P_TYPE_SUM
--max_input_length 3750
--output_dir $LAB_DIR/$DOMAIN

python inference_utils/toolbench/evaluate-multi_agent.py \
--input_path $LAB_DIR/$DOMAIN/predictions.json \
--output_path $LAB_DIR/$DOMAIN/metrics.json 

done


## 使用 RapidAPI 模拟器的 α-UMi

我们支持使用 ToolBench 团队实现的 RapidAPI 模拟器([github](https://github.com/OpenBMB/ToolBench))与 α-UMi 一起使用,代码位于 ```./ToolBench-multiLLM``` 中。要做到这一点,你应该首先填写[表格](https://forms.gle/oCHHc8DQzhGfiT9r6)向 Toolbench 团队申请 Toolbench 密钥。然后你可以开始使用训练好的规划器、调用器和总结器运行模拟器:

cd ToolBench-multiLLM

DATA_DIR="../data/toolbench/data" PLAN_PATH="../GLPFT/saved_models/planner" CAL_PATH="../GLPFT/saved_models/caller" SUM_PATH="../GLPFT/saved_models/summarizer" EXP_NAME="multi-llm-agent" TBKEY="" # 你的 toolbench 密钥

for TEST_SET in 'G1_category' 'G1_instruction' 'G1_tool' 'G2_category' 'G2_instruction' 'G3_instruction' do export PYTHONPATH=./ python toolbench/inference/qa_pipeline.py
--backbone_model collab_agent_v3
--tool_root_dir $DATA_DIR/toolenv/tools/
--user_agent_collab True
--planner_model_path $PLAN_PATH
--planner_use_lora False
--caller_model_path $CAL_PATH
--caller_use_lora False
--summarizer_model_path $SUM_PATH
--summarizer_use_lora False
--use_multi_gpu True
--max_observation_length 1024
--observ_compress_method truncate
--method DFS_woFilter_w2
--input_query_file $DATA_DIR/test_instructions/$TEST_SET.json
--output_answer_file output_res/$EXP_NAME/$TEST_SET
--toolbench_key $TBKEY done


我们还支持计算 ToolBench 的通过率和胜率指标。
计算通过率:

export PYTHONPATH=./ export ORI_ANSWER_PATH=output_res/multi-llm-agent export CONVERTED_ANSWER_PATH=output_res/converted/multi-llm-agent

mkdir ${CONVERTED_ANSWER_PATH} for test_set in "G1_instruction" "G1_category" "G1_tool" "G2_category" "G2_instruction" "G3_instruction" do answer_dir=$ORI_ANSWER_PATH/$test_set output_file=${CONVERTED_ANSWER_PATH}/${test_set}.json python toolbench/tooleval/convert_to_answer_format.py
--answer_dir ${answer_dir}
--method DFS_woFilter_w2
--output ${output_file} done

export SAVE_PATH=pass_rate_results/multi-llm-agent export CANDIDATE_MODEL=multi-llm-agent export DATA_DIR="data/toolbench" export API_POOL_FILE=path/to/your/openai_key_json_file.json export PYTHONPATH=./ python toolbench/tooleval/eval_pass_rate.py
--converted_answer_path ${CONVERTED_ANSWER_PATH}
--save_path ${SAVE_PATH}
--reference_model ${CANDIDATE_MODEL}
--test_ids $DATA_DIR/test_query_ids
--max_eval_threads 1
--evaluate_times 7


计算胜率时,我们选择chatgpt_cot作为参考模型,首先需要转换chatgpt_cot的结果并计算其通过率:

为了评估胜率,我们需要先转换chatgpt_cot的结果并计算其通过率

export REF_ANSWER_PATH=data/toolbench/reproduction_data/model_predictions/chatgpt_cot export REF_CONVERTED_ANSWER_PATH=data/toolbench/reproduction_data/model_predictions_converted/chatgpt_cot for test_set in "G1_instruction" "G1_category" "G1_tool" "G2_category" "G2_instruction" "G3_instruction" do answer_dir=$ORI_ANSWER_PATH/$test_set output_file=${CONVERTED_ANSWER_PATH}/${test_set}.json python toolbench/tooleval/convert_to_answer_format.py
--answer_dir ${answer_dir}
--method DFS_woFilter_w2
--output ${output_file} done

export SAVE_PATH=pass_rate_results/chatgpt_cot export CANDIDATE_MODEL=chatgpt_cot export DATA_DIR="data/toolbench/data" export API_POOL_FILE=path/to/your/openai_key_json_file.json export PYTHONPATH=./ python toolbench/tooleval/eval_pass_rate.py
--converted_answer_path ${CONVERTED_ANSWER_PATH}
--save_path ${SAVE_PATH}
--reference_model ${CANDIDATE_MODEL}
--test_ids $DATA_DIR/test_query_ids
--max_eval_threads 1
--evaluate_times 7


然后我们开始评估:

export OUTPUT_CONVERTED_ANSWER_PATH=output_res/converted/multi-llm-agent export SAVE_PATH=win_rate_results export REF_PASS_TARE_PATH=pass_rate_results/chatgpt_cot export OUTPUT_PASS_TARE_PATH=pass_rate_results/v9/multi-llm-agent export REFERENCE_MODEL=chatgpt_cot export CANDIDATE_MODEL=multi-llm-agent

export API_POOL_FILE=path/to/your/openai_key_json_file.json

export PYTHONPATH=./ python toolbench/tooleval/eval_preference.py
--ref_converted_answer_path ${REF_CONVERTED_ANSWER_PATH}
--output_converted_answer_path ${OUTPUT_CONVERTED_ANSWER_PATH}
--reference_model ${REFERENCE_MODEL}
--output_model ${CANDIDATE_MODEL}
--test_ids data/test_query_ids/
--save_path ${SAVE_PATH}
--ref_pass_rate_result_path ${REF_PASS_TARE_PATH}
--output_pass_rate_result_path ${OUTPUT_PASS_TARE_PATH}
--max_eval_threads 1
--use_pass_rate true
--evaluate_times 7


## 实验结果

静态评估结果(与标注参考进行步骤级比较)

<div align="center">
<img src="https://yellow-cdn.veclightyear.com/835a84d5/18347e62-9f64-49a2-a105-e3b2bbe56a40.png"  width="95%"> 
</div>

实时评估结果(调用真实API解决用户任务)

<div align="center">
<img src="https://yellow-cdn.veclightyear.com/835a84d5/513c7aaa-bd71-4bd1-b788-f04bf42bef39.png"  width="95%"> 
</div>

## 待办事项

- [ ] 发布我们的ToolAlpaca模型和代码。
- [ ] 发布我们的MATH和GSM8K模型和代码,以及我们的训练数据(使用TORA收集(Gou等人,2023))
- [ ] 使α-UMi能够适用于更多代理任务!

## 引用

@misc{shen2024small, title={Small LLMs Are Weak Tool Learners: A Multi-LLM Agent}, author={Weizhou Shen and Chenliang Li and Hongzhan Chen and Ming Yan and Xiaojun Quan and Hehong Chen and Ji Zhang and Fei Huang}, year={2024}, eprint={2401.07324}, archivePrefix={arXiv}, primaryClass={cs.AI} }

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多