AutoAct
通过自主规划实现从零开始的自动智能体问答学习
目录
🌻致谢
我们的训练模块代码参考并改编自FastChat,而推理模块的代码是基于BOLAA实现的。各种基线代码分别使用了ReAct、Reflexion、BOLAA、Chameleon、ReWOO和FireAct。我们通过Fastchat使用开放模型的LangChain。感谢他们的杰出贡献!
🌟概述
语言智能体在各种复杂任务上取得了相当不错的表现。尽管该领域不断探索,但现有的语言智能体系统仍然面临着昂贵、不可复现的数据依赖问题,以及单一模型需要承担多种功能的挑战。为此,我们提出了AutoAct,这是一个不依赖大规模标注数据和闭源模型(如GPT-4)合成轨迹的自动智能体学习框架。给定有限的数据和工具库,AutoAct首先在没有人类或强大闭源模型协助的情况下自动合成规划轨迹。然后,AutoAct利用分工策略,根据目标任务信息和合成的轨迹自动分化,生成一组子智能体来完成任务。我们使用不同的大语言模型进行了全面的实验,结果表明AutoAct与各种强基线相比,能够产生更好或相当的性能。
🔧安装
git clone https://github.com/zjunlp/AutoAct
cd AutoAct
pip install -r requirements.txt
✏️自我指导
我们对元智能体进行自我指导,以获取足够数量的任务数据并提供充足的训练资源。
python Self_Instruct/data_generation.py \
--source_data Self_Instruct/Meta_sample/Meta_Hotpotqa.json \
--target_data Self_Instruct/hotpotqa_metaqa.json \
--dataset_name hotpotqa \
--generate_all_num 800 \
--generate_per_round_num 10 \
--model_name llama-2-13b-chat \
source_data
包含来自目标任务信息的数据示例。target_data
包含通过自我指导生成的数据。变量generate_all_num
表示生成的数据实例总数。为了提高生成效率并避免重复,我们每轮生成generate_per_round_num
个数据实例。
📝自主规划
自动工具选择
有了工具库后,我们让元智能体自动为每个任务选择适用的工具。
python Self_Planning/Tool_Selection/tool_selected.py \
--model_name llama-2-13b-chat \
--task_name ScienceQA \
--top_k 40 \
--top_p 0.75 \
--max_tokens 1024 \
--tool_save_path Self_Planning/Tool_Selection/{task_name}_Tools.json
所选工具的信息将存储在tool_save_path
中。
轨迹合成
python Self_Plan/Traj_Syn/run_task.py \
--agent_name ZeroshotThink_HotPotQA_run_Agent \
--llm_name llama-2-13b-chat \
--max_context_len 4096 \
--task Hotpotqa \
--task_path Self_Instruct/hotpotqa_metaqa.json \
--save_path Self_Plan/Traj_Syn/output/hotpotqa_train_data.jsonl
为了获得高质量的合成轨迹,我们过滤掉所有$\texttt{reward}<1$的轨迹,并收集完全正确答案($\texttt{reward}=1$)的轨迹作为自我分化的训练源。我们在Google Drive上发布了经过过滤的Llama-{13,70}b-chat合成的轨迹(但您还应该运行filter_data.py
进行轨迹分化)。
python Scripts/filter_data.py \
--source_path Self_Plan/Traj_Syn/output/hotpotqa_train_data.jsonl \
--save_path Self_Plan/Traj_Syn/output \
--task_name HotpotQA \
--filter_num 200
自我分化
为了建立明确的分工,我们利用合成的规划轨迹将元代理分化为三个具有不同功能的子代理:
- 规划代理负责任务分解并确定在每个规划循环中调用哪个工具。
- 工具代理负责如何调用工具,决定工具调用的参数。
- 反思代理通过考虑所有历史轨迹进行反思并提供反思结果。
代理训练:
for agent in plan tool reflect
do
echo "####################"
echo $agent
echo "####################"
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 deepspeed Self_Plan/Train/train_lora.py \
--model_name_or_path llama-2-13b-chat \
--lora_r 8 \
--lora_alpha 16 \
--lora_dropout 0.05 \
--data_path Self_Plan/Traj_Syn/output/data_$agent.json \
--output_dir Self_Plan/Train/lora/HotpotQA/13b-$agent-5-epoch \
--num_train_epochs 5 \
--per_device_train_batch_size 2 \
--per_device_eval_batch_size 1 \
--gradient_accumulation_steps 1 \
--evaluation_strategy "no" \
--save_strategy "steps" \
--save_steps 10000 \
--save_total_limit 1 \
--learning_rate 1e-4 \
--weight_decay 0. \
--warmup_ratio 0.03 \
--lr_scheduler_type "cosine" \
--logging_steps 1 \
--fp16 True \
--model_max_length 4096 \
--gradient_checkpointing True \
--q_lora False \
--deepspeed Self_Plan/Train/deepspeed_config_s3.json \
--resume_from_checkpoint False
done
群体规划
获得任务特定的子代理后,任何新问题都会通过子代理之间的群体规划来处理,以达到预期结果。
python Self_Planning/Group_Planning/run_eval.py \
--agent_name ZeroshotThink_HotPotQA_run_Agent \
--plan_agent plan \
--tool_agent tool \
--reflect_agent reflect \
--max_context_len 4096 \
--task HotpotQA \
--task_path Self_Planning/Group_Planning/benchmark_run/data/hotpotqa \
--save_path Self_Planning/Group_Planning/output/13b
我们在Google Drive上发布了由Llama-{7,13,70}b-chat生成的文本集轨迹。
🚩引用
如果您在工作中使用了AutoAct,请引用我们的仓库。谢谢!
@article{DBLP:journals/corr/abs-2401-05268,
author = {Shuofei Qiao and
Ningyu Zhang and
Runnan Fang and
Yujie Luo and
Wangchunshu Zhou and
Yuchen Eleanor Jiang and
Chengfei Lv and
Huajun Chen},
title = {{AUTOACT:} Automatic Agent Learning from Scratch via Self-Planning},
journal = {CoRR},
volume = {abs/2401.05268},
year = {2024},
url = {https://doi.org/10.48550/arXiv.2401.05268},
doi = {10.48550/ARXIV.2401.05268},
eprinttype = {arXiv},
eprint = {2401.05268},
timestamp = {Thu, 25 Jan 2024 15:41:08 +0100},
biburl = {https://dblp.org/rec/journals/corr/abs-2401-05268.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
🎉贡献者
我们将提供长期维护以修复错误和解决问题。因此,如果您有任何问题,请向我们提出问题。