ModelScope-Agent: Building Your Customizable Agent System with Open-source Large Language Models
Abstract
大语言模型(LLMs)最近展示出了卓越的能力,能够理解人类意图、进行推理和设计类似规划的行为。为了进一步释放 LLM 在完成复杂任务方面的潜力,越来越多的趋势是构建 agent 框架,使LLM(如ChatGPT)具备使用工具的能力,以连接大量的外部 API。
在这项工作中,作者介绍了 ModelScope-Agent,一个基于开源 LLM 作为控制器,面向实际应用的通用且可定制的 agent 框架。该框架提供了一个用户友好的系统库,具有可定制的引擎设计,支持在多个开源 LLM 上进行模型训练,同时也能实现模型 API 和常用 API 的无缝集成。为了赋予 LLM 工具使用的能力,作者提出了一个综合框架,涵盖了工具使用数据收集、工具检索、工具注册、内存控制、定制模型训练和实际应用的评估。最后,作者展示了 ModelScopeGPT,这是基于 ModelScope-Agent 框架的 ModelScope 社区的一个真实世界智能助手,能够将开源 LLM 与超过 1000 个公共 AI 模型以及 ModelScope 中的本地化社区知识相连接。ModelScope-Agent 库和在线 demo 现已公开提供。
1 Introduction
大语言模型(OpenAI,2022、2023;Touvron et al.,2023;Chowdhery et al.,2022)已逐渐成为常见的 AI 助手,在理解人类意图、执行复杂推理任务和实现内容创作方面表现出巨大潜力。尽管开源 LLM,如 LLaMA(Touvron等,2023)和 ChatGLM(THUDM,2023)取得了迅速进展,但它们在执行复杂任务方面仍然有限,例如按照用户指令使用外部工具和获取最新信息。
为了进一步释放 LLM 在现实世界中的实际应用潜力,当前的研究趋势(Schick et al., 2023; Shen et al., 2023; Yang et al., 2023; Qing et al., 2023; Patil et al. ., 2023)开始赋予LLM工具使用能力,以构建 AI Agent。这些研究包括用于连接 HuggingFace 模型的 HuggingGPT (Shen et al., 2023)、Visual-ChatGPT (Wu et al., 2023) 和 Gorilla (Patil et al., 2023),用于调用如天气预报和搜索引擎大量通用API的 ToolAlpaca (Tang et al., 2023) 和 ToolLLaMA (Qin et al., 2023) 。这些方法要么直接依赖于 ChatGPT 等闭源对应工具,要么专注于某些类型的 API 工具。最近,还发布了公共的 AI agent,例如 Auto-GPT3、LangChain4 和 Transformers Agent (Huggingface, 2023),它们使得 LLM(例如 ChatGPT 或 GPT-4)能够使用工具并解决复杂的 AI 任务。然而,这些agent主要是使用闭源LLM构建的,如何使用开源LLM构建可定制的agent系统仍然很大程度上未被探索。
在这项工作中,作者提出了 ModelScope-Agent,一个基于开源 LLM 作为控制器,面向实际应用的通用且可定制的agent系统。 ModelScope 是一个公共机器学习社区,旨在汇集 AI 社区最先进的机器学习模型,并简化 AI 模型在实际应用中的流程。 ModelScope-Agent提供了灵活且用户友好的系统库,具有可定制的引擎设计,支持在多个开源LLM上进行模型训练,同时还可以实现与模型API和常用API的无缝集成。其特征在于以LLM为中心的系统设计,使用开源LLM作为核心控制器,并进一步与工具使用模块和内存模块交互以完成复杂的任务。ModelScope-Agent 的核心在于该库支持各种开源 LLM 的灵活选择和训练,例如 LLaMA (Touvron et al., 2023)、ChatGLM (THUDM, 2023)、ChatPLUG (Tian et al., 2023)以及 ModelScope 中的其他定制LLM。在工具使用上,ModelScope-Agent提供了默认的工具库,支持跨NLP、CV、Audio和Multi-model领域的多种AI模型API,以及搜索引擎等大量常用API。它还支持注册新的自定义API插件,并从大型工具库中自动检索API。用户可以轻松定制最适合的LLM、本地API工具和功能来开发实际应用程序。此外,还引入了内存模块,以更好地存储和管理系统消息、用户历史记录、上下文示例、工具消息和本地化知识。
为了使开源 LLM 能够更好地控制整个agent系统,作者进一步提出了工具使用数据收集、定制模型训练、评估和部署的综合框架。值得注意的是,作者发布了一个全面的工具增强数据集 MSAgent-Bench,其中包含 598,000 个对话,涵盖各种 API 类别、多轮 API 调用、面向 API 的 QA以及 API 无关的指令,支持英文和中文。作者采用了一种简单的训练策略Weighted LM,增强API名称和参数生成的训练,以更好地确保API调用的正确性。此外,作者的库还支持一个评估框架,用于从不同方面检测训练后的模型的工具使用能力。此外,作者将 ModelScope-Agent 应用于 ModelScope 社区的实际应用中,即 ModelScopeGPT,它能够将开源 LLM 与 1000 多个公共 AI 模型连接起来,并在 ModelScope 中访问本地化的社区知识以进行社区 QA。
总而言之,ModelScope-Agent 是一个为开发者设计的通用且可定制的agent系统,以利用开源 LLM 的强大功能。该库的目标包括:
• 基于开源LLM的agent:ModelScope-Agent的控制器可以灵活选择经过agent训练框架优化的开源LLM。
• 多样化工具的支持和定制:默认提供几十种不同的模型API和常用API。该库支持注册新的自定义 API 以及从工具集中自动检索 API。
• 应用的可定制性:ModelScope-Agent可以灵活应用于各种行业应用。agent和训练框架的使用、构建和优化都有详细文档。
ModelScope-Agent 由 ModelScope 的工程师持续开发,并根据 Apache 2.0 许可证发布。完整的文档可通过项目网站获取。
2 The ModelScope Agent
ModelScope-Agent 旨在帮助开发者构建基于开源 LLM 的可定制agent系统。整体系统架构如图1所示。该系统包括作为控制器的开源LLM、工具使用模块和用于交互的内存模块。根据人类指令,采用选定的LLM作为控制器的Agent将自动规划任务,选择性地使用工具,利用内存中的知识,最终为用户提供有用的响应。
2.1 LLMs as Brain
LLM 充当agent的大脑,负责规划和分解用户请求、选择性调用工具、执行检索并整合前面步骤中的所有信息以生成最终响应。为了让用户更容易使用自己的LLM定制agent,作者默认添加了对各种开源LLM的支持,例如LLaMA、ChatGLM和ChatPLUG,这些模型已经通过作者的工具学习管道进行了优化。训练策略和工具使用数据集的详细信息可以参考第3节。ModelScope-Agent已集成了ModelScope社区的LLM推理管道,只需简单地设置model_name
和 model_config
即可完成LLM的替换。在model_config
中,需要配置 model_id
、model_revision
以及模型参数设置,例如最大序列长度。
# LLM config "cfg_file"
from modelscope.utils.config
import Config
model_cfg = Config.from_file(cfg_file)
llm = LocalLLM(model_name, model_cfg)
此外,ModelScope-Agent 还提供了标准化的方式来集成新的LLM。用户可以通过将LLM推理管道集成到ModelScope中来添加自己的LLM。完成集成后,agent就可以选择这些新模型进行训练和推理。
2.2 Tool Use
Tool Library 工具库用于配置和管理agent中使用的各种 API 集合。 ModelScope-Agent 可以支持广泛的常见 API(例如搜索 API),ModelScope 和 HuggingFace 中覆盖 NLP、CV、Audio以及Multi-model模型的 AI 模型 API。每个工具API由API名称、描述、参数和请求函数组成。用户可以轻松选择并配置库中的合适 API 来构建自己的agent。默认支持的API详见附录A.1。
# tool default config file "default_file"
tool_cfg = Config.from_file(default_file)
Register and Customize New Tool agent允许用户注册和自定义新工具,同时还支持将新注册的工具快速集成到agent中,使LLM能够针对特定应用选择性地使用额外的自定义工具。这可以简单地通过继承基类Tool
并定义一个包含API名称、描述、参数和请求函数的CustomTool
来实现。更多关于CustomTool
的细节见附录A.2。
from modelscope_agent.tools import Tool
class CustomTool(Tool):
# logic added here
# refer example in Appendix A.2
tool_list = {'customo-tool': CustomTool()}
Tool Retrieval and Execution 由于工具库中的API数量较多,引入了工具检索模块,为每个指令提示推荐合适的API。具体来说,作者使用基于统一多语言文本嵌入API 的密集向量检索方法,对API的文本描述和指令提示进行向量化,并选择向量乘积分数最高的前 3 个最相关API用于工具调用。然后,检索到的 API 的架构信息将与后续内存模块中的其他系统提示组合,并作为输入发送给 LLM。LLM将基于组合后的指令提示进行规划并生成API请求,agent执行该请求,并将结果返回给LLM以进行连续生成。
2.3 Memory Control
内存模块用于检索和组装一系列上下文信息,作为输入提供给LLM。它包括知识检索子模块和提示生成子模块,分别负责外部知识检索和指令提示生成。
Knowledge Retrieval 它使agent能够访问与查询提示相关的最新和本地化信息,从而为LLM提供动态的、特定领域的知识增强。作者采用与之前的工具检索模块相同的密集向量检索方法,支持从本地化文档语料库进行大规模知识检索。同样,用户也可以通过更换其他开源检索框架进行自定义。
Prompt Generator 提示生成器用于组装所有可用的上下文信息,例如系统提示、API 架构、检索到的知识、对话历史记录和少量示例。根据用户查询的类型和LLM的最大长度,用户可以选择合适的上下文信息并将所需的输入组装到LLM中。在作者的agent中,提示生成器需要在构建agent之前定义。
2.4 Agent Pipeline
总之,作者通过组合LLM 控制器、工具使用模块和内存模块来构建agent。通过agent.run
,agent可以高效执行并完成指令的单步生成。首先,agent通过工具检索模块来检索与查询相关的工具,并将检索到的API架构与内存模块中的其他上下文提示相结合,以构造新的指令提示。然后,agent将这个新提示发送给LLM,LLM决定是否调用 API 以及调用哪个 API 并生成 API 请求。接下来,agent将根据提取的API参数执行选定的API,并将API结果返回给LLM,LLM将继续规划是否调用其他API。如果需要再次调用API,流程将重复进行,否则,LLM 生成最终响应,agent将最终结果返回给用户。
agent = AgentExecutor(llm, tool_cfg, additional_tool_list=tool_list)
agent.run("Draw a logo image of agent")
3 Training
3.1 Dataset
为了构建一个能够使用工具且保持高用户参与度的的agent系统,作者发布了一个全面的工具数据集 MSAgent-Bench,该数据集结合了ChatGPT生成的合成数据和现有的指令跟随数据集。作者发布的数据集包含 598, 000 个对话。表1概述了已发布的该数据集与其他公开可用的工具学习数据集之间的主要区别,同时该数据集的数据分布如图2所示。如表和图所示,作者已经做出了一定的努力来构建一个全面的数据集,以便能够有效地训练agent:
Multilingual: 数据集包括中文和英文实例,确保训练后的agent能够在两种语言中运行。
Various API Categories: 数据集支持由用户注册或通过在线API平台应用的常见API,以及能够调用神经模型的模型API。
Multi Turn Dialog: 在实际应用场景中,agent可能需要请求用户提供更具体的说明才能完成任务,或者在完成上一个任务后接收其他指令。作者的数据集考虑了这些场景,支持agent在使用工具时与用户进行多轮交互。
API-Oriented QA: 有效的agent应该具备 API 知识。作者的数据集包含 API 文档 QA 任务和任务规划任务,要求agent向用户提供有关如何使用各种 API 来解决复杂任务的适当建议。
API-Agnostic Instructions: 为了增强agent遵循常见指令的能力并提高用户参与度,作者在数据集中纳入了与 API 无关的中英文指令。这些指令更加强调agent的固有功能,而不是对 API 调用的依赖。
这些数据是通过提示ChatGPT (gpt-3.5-turbo) 生成指令、API请求以及基于API调用结果的答案来收集的,更多详细信息请参见附录D。
Dataset | Language | Instance Type | #Instances | API type | Avg.Turn | Avg.Step |
---|---|---|---|---|---|---|
API-Bank (Li et al., 2023) | English | Tool Use | 264 | Common API | 3.27 | 1.92 |
ToolAlpaca (Tang et al., 2023) | English | Tool Use | 3.9 K | Common API | 1 | 1.66 |
Gorilla (Patil et al., 2023) | English | Tool Use | 16.4 k | Model API | 1 | 1 |
GPT4Tools (Yang et al., 2023) | English | Tool Use | 71.4 K | Model API | 1 | 1 |
ToolBench (Qin et al., 2023) | English | Tool Use | 26.9 K | Common API | 1 | 4.1 |
MSAgent-Bench (ours) | English + Chinese | Tool Use + Common Chat | 598 K | Common API + Model API | 1.52 | 1.31 |
3.2 Model Training
作者使用 MSAgent-Bench 对多个开源 LLM 进行微调,包括 LLaMA (Touvron et al., 2023)、Qwen (QwenLM, 2023)、ChatPLUG (Tian et al., 2023) 等。作者在多轮对话模式下训练所有开源LLM,并将所有提示和答案连接起来。与常见的指令微调数据相比,工具学习样本更注重工具选择和API参数预测的准确性。因此,作者提出了一种简单的训练策略,称为Weighted LM,该策略增强了API名称和参数生成的训练,同时将用户提示和工具执行中的无关token的损失清零。更多细节可参考附录B.3。
kwargs = dict(model=model, ...)
trainer: EpochBasedTrainer = build_trainer(name=args.trainer, default_args=kwargs)
trainer.train()
4 Evaluation
作者的评估系统 MSAgent-Eval 包含两个模块:自动评估框架,全面评估agent的 API 可用性;以及由Agent Arena实现的人工评估框架,反映人类用户的偏好。
4.1 Automatic Evaluation Framework
在自动评估中,作者主要关注评估 Agent 生成准确 API 请求及其根据 API 调用结果提供正确答案的能力。具体来说,作者使用以下指标:
Action Exactly Match Score (ActionEM):该指标衡量agent是否使用了正确的API作为参考标准API。
ROUGE-L Score:该指标衡量生成的响应与标准答案之间的相似度。
此外,作者引入了一种名为 Argument F1 的新指标,用于全面评估 API 请求的质量。为了计算Argument F1,作者将agent API 请求中的参数分为两种情况,即:
Half-match (HM):表示参数正确但值错误。
Full-match (FM):表示参数和参数值都正确。
假设标准 API 中的参数数量为 |A|,agent API 请求中的参数数量为 |A*|,作者计算新的(Recall)和精确率(Precision)如下:
R = ( 0.5 × # H M + # F M ) / ∣ A ∣ R = (0.5 × \#HM + \#FM)/|A| R=(0.5×#HM+#FM)/∣A∣
P = ( 0.5 × # H M + # F M ) / ∣ A ∗ ∣ P = (0.5 × \#HM + \#FM)/|A^*| P=(0.5×#HM+#FM)/∣A∗∣
最终Argument F1 计算如下:
F 1 = 2 ( R ∗ P ) / ( R + P ) F1 = 2(R * P)/(R + P) F1=2(R∗P)/(R+P)
下面提供了自动评估agent的示例代码:
from tool_agent_finetune import evaluation
EM, F1, ROUGE = evaluation(refs, preds)
作者聘请了专家注释员来标注评估实例,任务包括提供多样的指令、手动记录正确的API调用请求以及撰写适当的响应。作者目前收集的测试数据统计信息见附录 B.1,作者训练agent的自动评估分数可在附录 B.2 中找到。作者还保证用户可以上传自己标注的测试示例,以准确评估agent在定制场景中的性能。
4.2 Human Evaluation with Agent Arena
受到ChatBots Arena(Zheng et al., 2023)的启发,作者构建了一个可访问的 Agent Arena,允许用户根据提供的 API 向两个匿名agent提供指令。随后,用户有机会投票选出哪个agent在使用给定 API 处理指令方面表现更好。根据Zheng et al.(2023)提出的框架,作者对参与的agent采用 ELO 评级和排行榜维护系统。
5 Usage Example of ModelScopeGPT
在本节中,作者将展示 ModelScope 社区的一个成功应用,基于 ModelScope-Agent 的ModelScopeGPT。
ModelScope Intelligent Assistant 基于ModelScope-Agent,作者为ModelScope社区开发了一款智能助手,即ModelScopeGPT。该助手以LLM作为控制器,连接ModelScope开源社区中多个特定领域的AI模型,涵盖NLP、CV、Audio和Multi-Modal领域。为了使管道更加实用,作者提供了 API 检索和知识检索工具,以自动选择合适的 API 并访问本地 ModelScope 知识。如图 3a 所示,ModelScopeGPT 可以在多轮对话中支持API调用,并使用先前对话中的信息生成正确的 API 调用参数。更多案例可参考附录C。由此可见,ModelScopeGPT在发布后的一个月内,已经实现了4万次用户访问,总请求量超过17万次。
Register and Use New Tools agent的另一个关键特性是它对未见过的 API 具有泛化能力。它允许用户可以快速注册自己的 API 并定制特定应用程序。因此,作者通过将ModelScopeGPT应用到阿里云的一个应用场景来测试其泛化能力。如图3b所示,作者首先在阿里云找到一个用于续费ECS实例的API。然后,作者将工具库中定义的 API 模式注册到agent。最后,作者在 demo 中输入“请帮我续订ECS…”的提示。agent通过规划生成请求,选择合适的API,成功调用该API续费实例,并提供回复通知用户续费完成。这一测试表明,基于已发布的API数据集优化的开源LLM在面对未见过的API时具有强大的泛化能力。
6 Conclusion
ModelScope-Agent 通过提供一个通用且可定制的agent框架,来促进基于开源LLM的AI agent应用程序构建和研究,这个框架涵盖了灵活的系统设计、数据收集、模型训练、评估以及在实际应用中的使用示例。它提供了一个开源的、由社区驱动的库,用于 AI agent学习以及使用开源LLM构建agent系统的最佳实践。作者希望 ModelScope-Agent 能够为AI agent的新时代铺平道路。
论文链接:https://arxiv.org/abs/2309.00986
参考资料:
- https://github.com/modelscope/modelscope-agent
- https://modelscope.cn/studios/damo/ModelScopeGPT/summary
- https://github.com/Significant-Gravitas/Auto-GPT
- https://github.com/langchain-ai/langchain
- https://modelscope.cn/models
- https://help.aliyun.com/zh/dashscope/getting-started-1
- https://modelscope.cn/datasets/damo/MSAgent-Bench/summary
- https://modelscope.cn/studios/LLMZOO/Chinese-Arena/summary
- https://modelscope.cn/studios/damo/ModelScopeGPT
拓展资料:
- Transformers agent: https://huggingface.co/docs/transformers/transformers_agents
- Chatgpt: Optimizing language models for dialogue. https://openai.com/blog/chatgpt/
- Chatglm: https://github.com/THUDM/ChatGLM-6B
- Llama: Open and efficient foundation language models. https://arxiv.org/abs/2302.13971
- Chatplug: Open-domain generative dialogue system with internet-augmented instruction tuning for digital human. https://arxiv.org/abs/2304.07849