可执行代码操作引发更优的LLM代理
📃 论文 • 🤗 数据集 (CodeActInstruct) • 🤗 模型 (CodeActAgent-Mistral-7b-v0.1) • 🤖 与CodeActAgent聊天!
我们提出使用可执行的代码来将LLM代理的动作合并到统一的动作空间(CodeAct)中。 结合Python解释器,CodeAct可以执行代码操作,并通过多轮交互动态修改先前的操作或在新观察(例如代码执行结果)的基础上发出新的操作(查看这个例子!)。
新闻
2024年4月10日: CodeActAgent Mistral 在ollama
正式发布!
2024年3月11日: 我们还增加了对llama.cpp的支持,以便在笔记本电脑上进行CodeActAgent推理(已在MacOS上测试),查看此处的说明!
2024年3月11日: 我们现在支持通过Kubernetes ⎈ 部署CodeActAgent的所有组件(LLM服务、代码执行器、MongoDB、Chat-UI),查看此指南!
2024年2月2日: CodeAct发布!
为什么选择CodeAct?
我们对17种LLM在API-Bank和新策划的基准M3ToolEval上的广泛分析表明,CodeAct的成功率比广泛使用的替代方案如Text和JSON高达20%。详情请参阅我们的论文!
CodeAct和Text / JSON作为动作的比较。
在M3ToolEval上对CodeAct和{Text, JSON}的定量结果比较。
📁 CodeActInstruct
我们收集了一个指令调整数据集CodeActInstruct,包括使用CodeAct进行的7K次多轮交互。数据集在huggingface dataset 🤗发布。请参阅论文和此部分了解数据收集的详细信息。
数据集统计。使用Llama-2分词器计算的Token统计。
🪄 CodeActAgent
在CodeActInstruct和常规对话的基础上训练,CodeActAgent在域外代理任务上的表现优于相同规模的开源模型,同时不牺牲通用性能(例如知识、对话)。我们发布了两个版本的CodeActAgent:
- CodeActAgent-Mistral-7b-v0.1(推荐,模型链接):以Mistral-7b-v0.1为基础模型,具有32k上下文窗口。
- CodeActAgent-Llama-7b(模型链接):以Llama-2-7b为基础模型,具有4k上下文窗口。
CodeActAgent的评估结果。ID和OD分别代表域内和域外评估。总体平均性能将MT-Bench得分标准化以与其他任务保持一致,并排除域内任务以进行公平比较。
请查看:page_with_curl:我们的论文以了解更多关于数据收集、模型训练、评估等的详细信息!
🚀 将CodeActAgent用于您的应用!
聊天界面演示。
一个CodeActAgent系统包含以下组件:
- LLM服务:我们以vLLM为例,但任何可以将模型服务到OpenAI兼容API的软件都可以。
- 交互界面:
- 代码执行引擎:该服务将启动一个API以接受来自Chat-UI或Python脚本的代码执行请求,然后为每个聊天会话启动一个单独的docker容器来执行代码。
🌟 如果您有Kubernetes集群的访问权限:可以按照我们的Kubernetes设置指南使用一条命令启动所有这些组件!
请按照以下指南使用Docker进行设置。
将模型服务到OpenAI兼容API
通过Docker使用VLLM(需要nvidia-docker)
# 您应该先下载模型,这是CodeActAgent-Mistral的示例
cd $YOUR_DIR_TO_DOWNLOADED_MISTRAL_MODEL
git lfs install
git clone https://huggingface.co/xingyaoww/CodeActAgent-Mistral-7b-v0.1
./scripts/chat/start_vllm.sh $YOUR_DIR_TO_DOWNLOADED_MISTRAL_MODEL/CodeActAgent-Mistral-7b-v0.1
# 或者
# ./scripts/chat_ui/start_vllm.sh $YOUR_DIR_TO_DOWNLOADED_LLAMA_MODEL/CodeActAgent-Llama-7b
该脚本(需要docker)将基于CUDA_VISIBLE_DEVICES
开始在端口8080
托管模型,并且可以通过默认的OPENAI_API_BASE访问模型http://localhost:8080/v1
。您可以查看OpenAI API的官方文档以获取详细说明。您还可以查看vLLM的官方说明获取更多信息。
使用LLama.cpp(用于笔记本!)
已在MacOS(M2 Max, Ventura 13.6)上测试。 安装 LLama.cpp
git clone https://github.com/ggerganov/llama.cpp.git
# 可选:创建一个用于安装的 conda 环境
conda create -n llamacpp python=3.10
# 安装 llama cpp 的依赖
cd llama.cpp
conda activate llamacpp
pip install -r requirements.txt
# 编译(详情请参考 https://github.com/ggerganov/llama.cpp?tab=readme-ov-file#build)
make
(可选)将模型转换为 gguf 格式
或者你可以跳过以下命令,直接从这里下载预转换的量化版本(q8_0)。
# 如果你还没有下载模型
git lfs install
git clone https://huggingface.co/xingyaoww/CodeActAgent-Mistral-7b-v0.1
# 假设你在 llama.cpp 目录下
python convert.py ./CodeActAgent-Mistral-7b-v0.1 --outtype f16 --outfile CodeActAgent-Mistral-7b-v0.1.f16.gguf
# (可选)量化以加速推理
./quantize CodeActAgent-Mistral-7b-v0.1.f16.gguf CodeActAgent-Mistral-7b-v0.1.q8_0.gguf Q8_0
将其部署为兼容 OpenAI 的 API
参数的详细描述请参见此处。
./server -m CodeActAgent-Mistral-7b-v0.1.q8_0.gguf -c 8192 --port 8080
现在,你可以通过 http://localhost:8080/v1
访问兼容 OpenAI 的服务器,模型名称为 CodeActAgent-Mistral-7b-v0.1.q8_0.gguf
。在以下部分的交互界面中(在 chat-ui 配置文件或 Python 脚本中),你需要将模型名称从 CodeActAgent-Mistral-7b-v0.1
改为 CodeActAgent-Mistral-7b-v0.1.q8_0.gguf
!
(可选)测试 OpenAI 兼容的 API 是否正常工作
curl -X POST 'http://localhost:8080/v1/chat/completions' -d '{
"model": "CodeActAgent-Mistral-7b-v0.1.q8_0.gguf",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "How to build a website?"}
]
}'
启动你的代码执行引擎!
我们实现了一个基于 JupyterKernelGateway 的容器化代码执行引擎。其思想是在每个聊天会话中,在docker 容器内启动一个 Jupyter 服务器,以支持模型的代码执行请求(会话将在固定时间后超时)。这需要本地安装 docker。
# 在端口 8081 启动一个代码执行服务器
./scripts/chat/code_execution/start_jupyter_server.sh 8081
与系统交互!
通过简单的 Python 脚本
如果你不想启动一个复杂的界面,只是想在命令行上玩玩,我们为你提供了保障!
# 确保你在运行此命令之前启动了模型服务器(vLLM 或 llama.cpp)和代码执行引擎!
python3 scripts/chat/demo.py --model_name xingyaoww/CodeActAgent-Mistral-7b-v0.1 --openai_api_base http://$YOUR_API_HOST:$YOUR_API_PORT/v1 --jupyter_kernel_url http://$YOUR_CODE_EXEC_ENGINE_HOST:$YOUR_CODE_EXEC_ENGINE_PORT/execute
通过 Chat-UI
如果你已经部署了模型和代码执行引擎,你可以运行你自己的聊天界面,就像这个一样!
如果你需要用户管理,可能需要启动你自己的 mongoDB 实例:
./scripts/chat/start_mongodb.sh $YOUR_MONGO_DB_PASSWORD
# 数据库将创建在 `pwd`/data/mongodb 并且可以通过 localhost:27017 访问
然后,你可以配置你的 chat-ui
界面。
cp chat-ui/.env.template chat-ui/.env.local
# 确保你根据配置正确填充 .env.local 文件
# 1. JUPYTER_API_URL
# 2. 模型端点(查找 'TODO_OPENAI_BASE_URL');
# 如果你使用 llama.cpp 进行模型推理,还需要将模型名称更改为 CodeActAgent-Mistral-7b-v0.1.q8_0.gguf
# 3. MONGODB_URL - 你可以留空,chat-ui 会自动启动一个数据库(但会在容器停止时删除)
现在你可以构建和启动你自己的 Web 应用程序(需要安装 docker)!
./scripts/chat/run_chat_ui.sh
# 默认为 localhost:5173 启动界面
# 在调试模式下运行此脚本
# ./scripts/chat/run_chat_ui_debug.sh
有关更多信息(例如,如果你不想使用 docker),请查看 chat-ui 的文档!
🎥 复现论文中的实验
git clone https://github.com/xingyaoww/code-act
# 克隆所有子模块
git submodule update --init --recursive
📂 数据生成(可选)
推荐: 你可以从 huggingface 数据集 🤗 下载处理过的 CodeActInstruct。
为了复现: 你可以根据 docs/DATA_GENERATION.md 中的说明生成交互数据。
📘 模型训练
我们使用 Megatron-LLM 的一个分支进行训练。你可以根据 docs/MODEL_TRAINING.md 获取详细说明。
📊 评估
请参考 docs/EVALUATION.md 获取详细说明。
📚 引用
@inproceedings{wang2024executable,
title={Executable Code Actions Elicit Better LLM Agents},
author={Xingyao Wang and Yangyi Chen and Lifan Yuan and Yizhe Zhang and Yunzhu Li and Hao Peng and Heng Ji},
year={2024},
eprint={2402.01030},
booktitle={ICML}
}