<p align="left"> <a href="README.md">English</a> | 中文 | <a href="README_JA.md">日本語</a> </p> <br><br> <p align="center"> <img src="blob/logo.png" width="400"/> <p> <br> <p align="center"> 📚 <a href="https://huggingface.co/datasets/kwaikeg/KAgentInstruct">Dataset</a> | 📚 <a href="https://huggingface.co/datasets/kwaikeg/KAgentBench">Benchmark</a> | 🤗 <a href="https://huggingface.co/collections/kwaikeg/kagentlms-6551e685b5ec9f9a077d42ef">Models</a> | 📑 <a href="http://arxiv.org/abs/2312.04889">Paper</a> <br> KwaiAgents 是[快手快知团队](https://github.com/KwaiKEG)开源的一整套Agent系列工作。开源的内容包括: 1. **KAgentSys-Lite**:论文中KAgentSys的轻量版系统,其保留了部分原系统的功能。与功能齐全的系统相比,KAgentSys-Lite(1)缺少部分工具;(2)缺乏记忆机制;(3)性能稍有降低;(4)不同的代码库,Lite版本基于开源项目如<a href='https://github.com/yoheinakajima/babyagi'>BabyAGI</a>和<a href='https://github.com/Significant-Gravitas/AutoGPT'>Auto-GPT</a>。尽管有这些变更,KAgentSys-Lite在众多开源Agent系统中仍具有较好的性能。 2. **KAgentLMs**:经过论文中提出的Meta-agent tuning过后,具有Agents的规划、反思、工具使用等能力的系列大模型。 3. **KAgentInstruct**:超过20w(部分人工编辑)的Agent相关的指令微调数据。 4. **KAgentBench**:超过3k条经人工编辑的自动化评测Agent能力数据,能力评测维度包含规划、工具使用、反思、总结、人设指令等。 <br> <table align='center'> <tr> <td align='center'><b>类别</b></td> <td align='center'><b>模型</b></td> <td align='center'><b>训练数据</b></td> <td align='center'><b>评测数据</b></td> </tr> <tr> <td>Qwen</td> <td> <a href="https://huggingface.co/kwaikeg/kagentlms_qwen_7b_mat">Qwen-7B-MAT</a> <br> <a href="https://huggingface.co/kwaikeg/kagentlms_qwen_14b_mat">Qwen-14B-MAT</a> <br> <a href="https://huggingface.co/kwaikeg/kagentlms_qwen_7b_mat_gguf">Qwen-7B-MAT-cpp</a> <br> <a href="https://huggingface.co/kwaikeg/kagentlms_qwen1.5_14b_mat">Qwen1.5-14B-MAT</a> </td> <td align="center" rowspan="2"><a href="https://huggingface.co/datasets/kwaikeg/KAgentInstruct">KAgentInstruct</a></td> <td align="center" rowspan="2"><a href="https://huggingface.co/datasets/kwaikeg/KAgentBench">KAgentBench</a></td> </tr> <tr> <td>Baichuan</td> <td><a href="https://huggingface.co/kwaikeg/kagentlms_baichuan2_13b_mat">Baichuan2-13B-MAT</a></td> </tr> </table> <br> <br> <p align="center"> <img src="blob/example-zh.gif"> </p> <br> <p align="center"> <img src="blob/overview.png"/> <p> ## 动态 * 2024.4.19 - Qwen1.5-14B-MAT模型[[link]](https://huggingface.co/kwaikeg/kagentlms_qwen1.5_14b_mat) 公开. * 2024.4.9 - Benchmark结果更新. * 2024.1.29 - Qwen-14B-MAT模型 [[link]](https://huggingface.co/kwaikeg/kagentlms_qwen_14b_mat) 公开. * 2023.1.5 - 训练数据 [[link]](https://huggingface.co/datasets/kwaikeg/KAgentInstruct) 公开. * 2023.12.27 - 🔥🔥🔥 KwaiAgents 被国内外多个媒体报道[[机器之心]](https://mp.weixin.qq.com/s/QhZIFL1GHH90z98gnk194g) [[Medium]](https://medium.com/@myscarletpan/can-7b-models-now-master-ai-agents-a-look-at-kwais-recent-llm-open-source-release-8b9e84647412) [[InfoQ]](https://www.infoq.cn/article/xHGJwG3b8hXSdaP4m6r0)等. * 2023.12.13 - Benchmark和评测脚本 [[link]](https://huggingface.co/datasets/kwaikeg/KAgentBench) 公开. * 2023.12.08 - 技术报告 [[link]](https://arxiv.org/abs/2312.04889) 公开. * 2023.11.17 - 项目公开. ## 评测表现 1. KAgentLMs在Benchmark上的表现 | | Scale | Planning | Tool-use | Reflection | Concluding | Profile | Overall Score | |----------------|-------|----------|----------|------------|------------|---------|---------------| | GPT-3.5-turbo | - | 18.55 | 26.26 | 8.06 | 37.26 | 35.42 | 25.63 | | Llama2 | 13B | 0.15 | 0.44 | 0.14 | 16.60 | 17.73 | 5.30 | | ChatGLM3 | 6B | 7.87 | 11.84 | 7.52 | 30.01 | 30.14 | 15.88 | | Qwen | 7B | 13.34 | 18.00 | 7.91 | 36.24 | 34.99 | 21.17 | | Baichuan2 | 13B | 6.70 | 16.10 | 6.76 | 24.97 | 19.08 | 14.89 | | ToolLlama | 7B | 0.20 | 4.83 | 1.06 | 15.62 | 10.66 | 6.04 | | AgentLM | 13B | 0.17 | 0.15 | 0.05 | 16.30 | 15.22 | 4.88 | | Qwen-MAT | 7B | 31.64 | 43.30 | 33.34 | 44.85 | 44.78 | 39.85 | | Baichuan2-MAT | 13B | 37.27 | 52.97 | 37.00 | 48.01 | 41.83 | 45.34 | | Qwen-MAT | 14B | 43.17 | 63.78 | 32.14 | 45.47 | 45.22 | 49.94 | | Qwen1.5-MAT | 14B | 42.42 | 64.62 | 30.58 | 46.51 | 45.95 | 50.18 | 2. KAgentSys在人工评测上的表现 (百分号前的表示通过率,括号后表示平均分) | | Scale | NoAgent | ReACT | Auto-GPT | KAgentSys | |-----------------|---------|-----------------|----------------|-----------------|-----------------| | GPT-4 | - | 57.21% (3.42) | 68.66% (3.88) | 79.60% (4.27) | 83.58% (4.47) | | GPT-3.5-turbo | - | 47.26% (3.08) | 54.23% (3.33) | 61.74% (3.53) | 64.18% (3.69) | | Qwen | 7B | 52.74% (3.23) | 51.74% (3.20) | 50.25% (3.11) | 54.23% (3.27) | | Baichuan2 | 13B | 54.23% (3.31) | 55.72% (3.36) | 57.21% (3.37) | 58.71% (3.54) | | Qwen-MAT | 7B | - | 58.71% (3.53) | 65.67% (3.77) | 67.66% (3.87) | | Baichuan2-MAT | 13B | - | 61.19% (3.60) | 66.67% (3.86) | 74.13% (4.11) | ## 使用指南 ### AgentLMs 系列模型使用 #### 在GPU上用vLLM部署 我们建议用[vLLM](https://github.com/vllm-project/vllm)和[FastChat](https://github.com/lm-sys/FastChat)来部署模型推理服务,首先需要安装对应的包(详细使用请参考两个项目对应文档): 1. 对于 Qwen-7B-MAT,按如下方法安装 ```bash pip install vllm pip install "fschat[model_worker,webui]" ``` 1. 对于 Baichuan-13B-MAT,按如下方法安装 ```bash pip install "fschat[model_worker,webui]" pip install vllm==0.2.0 pip install transformers==4.33.2 ``` 为了能够部署KAgentLMs系列模型,首先需要在一个终端开启controler ```bash python -m fastchat.serve.controller ``` 然后,再在另一个终端开启单卡模型推理服务部署 ```bash python -m fastchat.serve.vllm_worker --model-path $model_path --trust-remote-code ``` 其中`$model_path`为从huggingface中下载的模型本地路径,如果显示GPU不支持Bfloat16,可以再命令行后再加个`--dtype half`。 然后,在第三个终端上开启REST API服务器 ```bash python -m fastchat.serve.openai_api_server --host localhost --port 8888 ``` 最后你就可以用curl命令对应OpenAI调用格式进行模型调用啦,参考示例: ```bash curl http://localhost:8888/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{"model": "kagentlms_qwen_7b_mat", "messages": [{"role": "user", "content": "刘德华是谁"}]}' ``` 这里 `kagentlms_qwen_7b_mat` 要改成你部署的模型。 #### 在CPU上用[Lamma.cpp](https://github.com/ggerganov/llama.cpp)部署 llama-cpp-python 提供了类似OpenAI的API Web接口,我们可以按如下方法安装和部署。转换后的模型可以在[kwaikeg/kagentlms_qwen_7b_mat_gguf](https://huggingface.co/kwaikeg/kagentlms_qwen_7b_mat_gguf)上找到。 ```bash pip install "llama-cpp-python[server]" python3 -m llama_cpp.server --model kagentlms_qwen_7b_mat_gguf/ggml-model-q4_0.gguf --chat_format chatml --port 8888 ``` 最后你就可以用curl命令对应OpenAI调用格式进行模型调用啦,参考示例: ```bash curl http://localhost:8888/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{"messages": [{"role": "user", "content": "刘德华是谁"}]}' ``` ### KAgentSys-Lite 快速使用 下载并安装环境包,建议Python>=3.10 ```bash git clone git@github.com:KwaiKEG/KwaiAgents.git cd KwaiAgents python setup.py develop ``` 1. **ChatGPT调用** 声明一些环境变量 ``` export OPENAI_API_KEY=sk-xxxxx export WEATHER_API_KEY=xxxxxx ``` 其中WEATHER_API_KEY不是必须,但问到天气相关的问题时需要进行配置,APIKEY可以从[这个网站](https://www.weatherapi.com/)中获取(本地模型调用同)。 ```bash kagentsys --query="刘德华老婆是谁?" --llm_name="gpt-3.5-turbo" --lang="zh" ``` 1. **本地模型调用** > 调用本地模型需要参考上一章部署对应模型服务 ```bash kagentsys --query="刘德华老婆是谁?" --llm_name="kagentlms_qwen_7b_mat" \ --use_local_llm --local_llm_host="localhost" --local_llm_port=8888 --lang="zh" ``` 下面是完整的命令行参数 | 参数名 | 类型 | 默认值 | 描述 | | ----- | ---- | ------ | --- | | --id | str | test | 对话的ID | | --query | str | | 用户查询问题 | | --history | str | [] | 对话历史 | | --llm_name | str | gpt-3.5-turbo | LLM的名称 | | --use_local_llm | str | False | 是否使用本地LLM | | --local_llm_host | str | localhost | 本地LLM部署的IP | | --local_llm_port | int | 8888 | 本地LLM部署的端口 | | --tool_names | str | ["auto"] | 使用工具的列表,可选有 web_search,browse_website,get_weather_info,get_calendar_info,time_delta,get_solar_terms_info | | --max_iter_num | int | 1 | agent迭代次数 | | --agent_name | str | | agent名称 | | --agent_bio | str | | agent简介,简短的描述 | | --agent_instructions | str | | agent的指导原则,描述agent如何思考、行动、或交流 | | --external_knowledge | str | | 外部知识链接 | | --lang | str | en | 系统的语言,可选(英语/中文) | | --max_tokens_num | int | 4096 | Prompt截断最大长度 | **提示**: 1. 如果需要用到 browse_website 工具,需要在服务器上配置[chromedriver](https://chromedriver.chromium.org/getting-started) 2. 如果多次显示搜索失败,可能是网络无法访问duckduckgo_search,可以通过设置`http_proxy`解决 #### 使用自定义工具 自定义工具使用可参考这个例子 <a href="examples/custom_tool_example.py">examples/custom_tool_example.py</a> ### KAgentBench效果评估 仅需两行代码就可以: ```bash cd benchmark python infer_qwen.py qwen_benchmark_res.jsonl python benchmark_eval.py ./benchmark_eval.jsonl ./qwen_benchmark_res.jsonl ``` 上面的命令会输出以下结果 ``` plan : 31.64, tooluse : 43.30, reflextion : 33.34, conclusion : 44.85, profile : 44.78, overall : 39.85 ``` 更多细节请参考 <a href="benchmark/">benchmark/</a> ## Citation ``` @article{pan2023kwaiagents, author = {Haojie Pan and Zepeng Zhai and Hao Yuan and Yaojia Lv and Ruiji Fu and Ming Liu and Zhongyuan Wang and Bing Qin }, title = {KwaiAgents: Generalized Information-seeking Agent System with Large Language Models}, journal = {CoRR}, volume = {abs/2312.04889}, year = {2023} } ```