从零开始创建基于LLM的Agent——modelscope-agent

Agent模型原理

Agent可以理解为在某种能自主理解、规划决策、执行复杂任务的智能体,可以将其定义为LLM + memory + planning skills + tool use,即大语言模型、记忆、任务规划、工具使用的集合。
具体的来说:大模型首先会对用户输入的文字进行拆解规划,确定自己的行动路径,接下来评估自己所需要的工具,并且使用api调用工具,得到调用的结果后,再最终输出解决方案。

请添加图片描述

比赛介绍

此次比赛是阿里云举办的AI创意挑战赛,主旨是设计能够完成一定任务的AI Agent,创作出受欢迎的Agent产品。本次比赛我们会调用开源的通义千问大模型api作为LLM大脑,通过设计Prompt为LLM设定角色,确定LLM的功能,以及自行的创建或者调用第三方的tool,让Agent实现更多的功能。

环境搭建

使用虚拟环境开发qwen-agent,配置环境详细可以看这篇博客。本篇笔记会探讨更多环境搭建的细节。

总体环境搭建的流程如下:

clone agent项目 -> 安装依赖(pip install -r requirement.txt) -> 移动apps/agentfabric文件夹至根目录 -> 运行app.py

git clone https://github.com/modelscope/modelscope-agent.git
cd modelscope-agent  && pip install -r requirements.txt
 && pip install -r demo/agentfabric/requirements.txt

注意此处要install两个项目的requirement.txt文件。

由于实际生产中,使用到大模型需要api的支持,因此我们需要设置api环境变量

  1. 设置环境变量 :linux环境下,你可以在终端中运行export MODELSCOPE_API_TOKEN=your-api-key的方式来临时添加环境变量。windows环境下,可以通过设置环境变量功能来直接添加环境变量到系统中。

2.移动config文件夹中的配置文件,需要注意apps/agentfaricmodelscope-agent文件夹中都有config文件夹,我们需要把他们合并在一起
3.安装环境依赖,开始开发,使用上述命令完成环境搭建后,运行python app.py即可进入agent创建界面。

Agent构建

prompt简介

Prompt是一段文字或代码片段,用于与语言模型进行交互。它是一种启发式的工具,通过提供明确的指令或问题,引导模型生成相关的文本。在Agent构建中,prompt的设计影响了模型对任务的理解和执行方式。

prompt的结构

Prompt的结构通常包括两个重要部分:上下文任务描述。上下文是指前文或已知信息,而任务描述则包含具体的指令或问题。合理设计这两个部分,可以帮助模型更好地理解任务,并生成符合预期的输出。

python编程专家 prompt示例

下面的prompt会构建一个python编程专家,它可以使用python写出代码实现用户的要求,我们也可以称呼它为code interpreter

Description: 使用python解决任务时,你可以运行代码并得到结果,如果运行结果有错误,你需要尽可能对代码进行改进。你可以处理用户上传到电脑的文件。

Instructions:

1.你会数学解题;
2. 你会数据分析和可视化;
3. 你会转化文件格式,生成视频等;
4.用户上传文件时,你必须先了解文件内容再进行下一步操作;如果没有上传文件但要求画图,则编造示例数据画图;
5.调用工具前你需要说明理由;Think step by step;
6. 代码出错时你需要反思并改进。

agent 介绍

我构建了一个简单的科研论文润色小助手
这是一个专为科研人员设计的论文润色助手,能够以大模型的专业知识来补充用户输入的文字,修正用户语言的语病,逻辑错误,并提供中英双语的论文版本。

agent 设置

我经过反复调整使用了如下指令来构建Agent,为了比赛的保密性考虑,我只会例举它的功能“

  1. 用户指令理解与回应
  2. 科研论文润色优化
  3. 调整语言风格
  4. 修改建议提供
  5. 按建议生成示例
  6. 英文版本修改

agent 使用效果:

作为一个科研论文润色小助手,首先提供的服务应该是文字上的润色服务,以及翻译服务,所以并没有用到第三方的一些工具如同,code interpreter,img_gen

通过与构建Agent的不断对话,确定agent的logo,基本功能。同时根据配置页agent的详细设定对agent进行进一步的微调,通过基本的对话,我们可以得到如下的使用效果:
请添加图片描述
我们可以很明显的发现这个最初完全使用对话创建的小助手,回复内容虽然达到了润色文字的作用,但是没有为用户进行更加详细的内容说明,就像对原始的文字段提出更多的建议,以及并没有提供翻译成英文的选项,内容简单。

agent的继续改进

继续通过不断的对话,修正Agent的输出,对Agent提出更加精细,具体,个性化的要求,例如详细的规定agent输出的内容,以及输出的格式,我们可以让其达到想要的效果,最终的效果如下:
请添加图片描述
请添加图片描述

可以看到经过我们的改进后,对待一个用户提出的prompt,Agent已经能够提出很好的建议,以及根据建议进一步生成更好的示例,满足了我们的要求。

未来的继续改进

未来的开发中,我们可以尝试联网功能,让小助手能够获得更多参考的资料,给出更加可靠的答复,我想到的联网的用途如下所示,这些用途可以转化成具体对小助手的prompt,对其行为进行更精准的操纵。

  1. 相关论文和研究: 利用搜索引擎API来检索与用户提供的论文主题相关的最新研究和论文。这可以为小助手提供更多的参考文献和相关信息,以支持其润色建议。

  2. 专业术语和定义: 使用API检索与文本中出现的专业术语相关的定义和解释。这有助于小助手更好地理解并正确使用特定领域的术语,提高回复的专业性。

  3. 行业新闻和趋势: 利用API搜索行业新闻、趋势和最新发展,以确保小助手能够提供关于特定主题的最新信息,用于完善回复的更多内容。

  4. 拓展背景知识: 利用搜索引擎API检索与文本主题相关的基础知识和背景信息。这有助于小助手更全面地了解用户提供的内容,并提供更有深度的回复。

  5. 学术论坛和社区: 利用搜索引擎API搜索学术论坛和专业社区,查找有关特定领域问题的讨论和解决方案。这有助于小助手更好地理解实际问题和学科内的共识。

agent tools介绍

agent的tool是agent的灵魂,大语言模型能够调用tools来获取外部信息,或者是完成特定的功能如同翻译,执行代码,语音生成等。它能够极大程度上丰富LLM的能力。
在魔搭提供的Agentfabric框架中,为Agent增加一个新的tool可以分为以下的步骤:
1.在init文件中注册tool
2.在tool_config文件中添加tool详细信息
3.在代码中实现tool的具体调用逻辑。
详细的魔搭tool创建可以参考官方教程,本篇不再赘述:教程地址

agent 简易tools实现

class AliyunRenewInstanceTool(Tool):

    description = '续费一台包年包月ECS实例'
    name = 'RenewInstance'
    parameters: list = [{
        'name': 'instance_id',
        'description': 'ECS实例ID',
        'required': True
    },
    {
        'name': 'period',
        'description': '续费时长以月为单位',
        'required': True
    }
    ]

    def __call__(self, remote=False, *args, **kwargs):
        if self.is_remote_tool or remote:
            return self._remote_call(*args, **kwargs)
        else:
            return self._local_call(*args, **kwargs)

    def _remote_call(self, *args, **kwargs):
        pass

    def _local_call(self, *args, **kwargs):
        instance_id = kwargs['instance_id']
        period = kwargs['period']
        return {'result': f'已完成ECS实例ID为{instance_id}的续费,续费时长{period}月'}

参考资料:

GitHub - datawhalechina/agent-tutorialGitHub - datawhalechina/agent-tutorial

  • 55
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于LLM(Language Model)的测试效率提升主要体现在以下几个方面: 1. 自动化测试:LLM的出现使得测试工程师能够利用自然语言的特点,快速生成测试用例和测试脚本。相比传统的手动编写测试用例,LLM能够极大地减少测试人员的工作量和时间成本,提高了测试效率。 2. 敏捷开发:LLM能够快速学习和适应不同的测试场景和需求,根据不同的自然语言输入生成相应的测试用例和脚本。这种灵活性使得测试人员能够更加快速地响应项目变更,及时执行测试,提高了敏捷开发的效率。 3. 覆盖率提升:LLM可以根据自然语言输入,自动生成全面且具有一定逻辑性的测试用例。相比人工编写测试用例,LLM能够更好地覆盖不同功能模块的边界条件和异常情况,从而提高测试的覆盖率。 4. 功能验证加速:LLM通过自动生成测试用例和脚本,可以快速验证新功能的正确性和稳定性。测试人员只需输入相应的功能描述,LLM会自动生成相应的测试用例,从而加快了功能验证的速度。 5. 测试回归:LLM可以根据自然语言输入,快速生成全面的测试脚本,以及对应的测试数据和预期结果。这种自动化回归测试能够提高测试的复用性和可维护性,降低了回归测试的工作量,提高了回归测试的效率。 综上所述,基于LLM的测试效率提升主要体现在自动化测试、敏捷开发、覆盖率提升、功能验证加速和测试回归等方面。LLM的应用能够帮助测试人员更快速、全面地进行测试工作,提高测试效率,降低测试成本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值