FireAct:面向语言代理微调
这个仓库基于我们的出版物 FireAct:面向语言代理微调 (PDF)。它包含我们生成的提示、示例代码和微调数据,也包括我们微调的模型系列的描述和目录。如果你在工作中使用了这些代码或数据,请引用以下内容:
@misc{chen2023fireact,
title={FireAct: Toward Language Agent Fine-tuning},
author={Baian Chen and Chang Shu and Ehsan Shareghi and Nigel Collier and Karthik Narasimhan and Shunyu Yao},
year={2023},
eprint={2310.05915},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
概述
- 在
tools/
中定义工具 - 在
tasks/
中定义任务 - 通过
generation.py
收集数据并运行实验 - 结果将保存到
trajs/
数据和提示
- 数据生成训练数据并在
data/
目录运行实验。我们还包括了 Alpaca 格式和 GPT 格式的训练数据示例。详情见这里。 - 在
prompts/
中生成训练数据和运行实验的提示
设置
设置 OpenAI API 密钥,并存储在环境变量中(见这里)
export OPENAI_API_KEY=<YOUR_KEY>
设置 SERP API 密钥,并存储在环境变量中(见这里)
export SERPAPI_API_KEY=<YOUR_KEY>
创建虚拟环境,例如使用 conda
conda create -n fireact python=3.9
conda activate fireact
克隆这个仓库并安装依赖
git clone https://github.com/anchen1011/FireAct.git
pip install -r requirements.txt
运行示例
数据生成
示例:
python generation.py \
--task hotpotqa \
--backend gpt-4 \
--promptpath default \
--evaluate \
--random \
--task_split val \
--temperature 0 \
--task_end_index 5
通过 python generation.py -h
命令查看详情
你需要设置一个高数字(数千)的 --task_end_index
来获取足够好的数据样本。[警告] 这在使用 gpt-4 和 serpapi 时花费较大。
你需要将轨迹转换为 alpaca 格式 或 gpt 格式 用于训练。见我们的示例这里。
监督微调
示例:
cd finetune/llama_lora
python finetune.py \
--base_model meta-llama/Llama-2-13b-chat-hf \
--data_path ../../data/finetune/alpaca_format/hotpotqa.json \
--micro_batch_size 8 \
--num_epochs 30 \
--output_dir ../../models/lora/fireact-llama-2-13b \
--val_set_size 0.01 \
--cutoff_len 512 \
详情见这里。
推理
示例(FireAct Llama):
python generation.py \
--task hotpotqa \
--backend llama \
--evaluate \
--random \
--task_split dev \
--task_end_index 5 \
--modelpath meta-llama/Llama-2-7b-chat \
--add_lora \
--alpaca_format \
--peftpath forestai/fireact_llama_2_7b_lora
示例(FireAct GPT):
python generation.py \
--task hotpotqa \
--backend ft:gpt-3.5-turbo-0613:<YOUR_MODEL> \
--evaluate \
--random \
--task_split dev \
--temperature 0 \
--chatgpt_format \
--task_end_index 5
通过 python generation.py -h
命令查看详情
设置 --task_end_index 500
进行定量评估。见我们的示例这里。
模型库
我们发布了一组基于 Llama 系列的多任务模型。详细信息可在其模型卡中找到。
基础模型 | 训练方法 | Hugging Face |
---|---|---|
Llama2-7B | LoRA | forestai/fireact_llama_2_7b_lora |
Llama2-13B | LoRA | forestai/fireact_llama_2_13b_lora |
CodeLlama-7B | LoRA | forestai/fireact_codellama_7b_lora |
CodeLlama-13B | LoRA | forestai/fireact_codellama_13b_lora |
CodeLlama-34B | LoRA | forestai/fireact_codellama_34b_lora |
Llama2-7B | 完整模型 | forestai/fireact_llama_2_7b |
参考文献
- 我们的生成代码基于 ysymyth/ReAct
- 我们的 Llama 完整模型训练代码基于 tatsu-lab/stanford_alpaca
- 我们的 Llama LoRA 训练代码基于 tloen/alpaca-lora
- 我们的 GPT 微调代码基于 anchen1011/chatgpt-finetune-ui