trainable-agents 项目介绍
项目背景
trainable-agents 项目中的 Character-LLM 提出了可以角色扮演的可训练智能体,其特别之处在于能够从实际经验、特征和情感中学习。这种智能体不同于需要额外提示的传统智能体模型,Character-LLM 专门针对角色扮演进行了训练,无需任何额外的提示或参考文档就能够以详细的角色知识和代表性性格特征模拟特定人物。Character-LLM 可以扮演像贝多芬、克娄巴特拉女王、尤利乌斯·凯撒等历史或虚构人物。
核心概念
Character-LLM 的关键在于经验重建,这个数据生成过程用于产生特定角色的详细和多样化的经验数据,从而进行模型的训练。此技术能帮助智能体在不同场景中生动模拟特定人物角色,呈现出类似真实人物的表现。
数据集与模型
-
模型权重:项目发布了九个角色的模型权重,包括克娄巴特拉女王、伏地魔、斯巴达克斯、赫敏·格兰杰、艾萨克·牛顿、尤利乌斯·凯撒、路德维希·范·贝多芬、苏格拉底和马丁·路德·金。这些模型均基于 Llama 1,通过运行命令恢复权重,可使用模型作为聊天机器人:
cd FastChat python3 -m fastchat.model.apply_delta \ --base-model-path /path/to/hf-model/llama-7b \ --target-model-path /path/to/hf-model/character-llm-beethoven-7b \ --delta-path fnlp/character-llm-beethoven-7b-wdiff
-
训练数据集:训练所需的数据集可以通过链接下载,包含九个角色的经验数据。
角色创建流程
- 角色资料建设:选择需要扮演的角色(如贝多芬),搜集角色的相关资料。
- 场景提取:使用 gpt-3.5-turbo 生成基于资料的场景。
- 经验完成:生成角色之间的互动。
- 保护场景:生成保护场景,降低角色幻觉的产生。
- 转换为训练格式:将数据转化为模型可训练格式。
模型训练与推理
训练基于 FastChat,需要准备基础模型和训练数据。使用适当的超参数进行模型训练,需要大约 30-45 分钟的时间。完成后即可加载模型进行推理。
cd FastChat
export CHARACTER=Beethoven
torchrun --nproc_per_node=8 --master_port=20031 fastchat/train/train_mem.py \
--model_name_or_path /path/hf_model/llama-7b \
--data_path /path/to/prompted_agent_dialogue_$CHARACTER.json \
--already_preprocess True \
--bf16 True \
--output_dir /path/to/ckpt/${CHARACTER}_7b \
--num_train_epochs 10 \
--per_device_train_batch_size 2 \
--per_device_eval_batch_size 16 \
--gradient_accumulation_steps 4 \
--evaluation_strategy epoch \
--save_strategy epoch \
--save_total_limit 10 \
--learning_rate 2e-5 \
--weight_decay 0.1 \
--warmup_ratio 0.04 \
--lr_scheduler_type cosine \
--logging_steps 1 \
--fsdp 'full_shard auto_wrap' \
--fsdp_transformer_layer_cls_to_wrap LlamaDecoderLayer \
--tf32 True \
--model_max_length 2048 \
--gradient_checkpointing True
示例生成
项目展示了基于 Character-LLM 的生成样例,单轮对话和多轮对话模拟了不同时期、不同背景的角色对话,充分表现了模型的角色扮演能力。
引用与感谢
如果你在学术研究中使用了此项目的资源,请遵循引用规范。此外,项目团队特别感谢对论文校对及建议做出贡献人员的支持以及相关的科研资助项目。
注意事项
所生成的数据、代码和模型仅限学术研究用途,禁止用于商业用途。此外,由于不可控因素影响,Character-LLM 生成的内容无法完全保证其准确性和质量,项目作者不对使用该项目资源可能产生的任何后果负责。