从零开始创建基于LLM的Agent——modelscope-agent
这是一个专为科研人员设计的论文润色助手,能够以大模型的专业知识来补充用户输入的文字,修正用户语言的语病,逻辑错误,并提供中英双语的论文版本。qwen agent的官方demo由gradio实现,因此我们在本地或者云端部署agent时,也应该了解一些gradio的简单知识:radio是一个用于简化机器学习模型部署的Python库。它的目标是让用户可以轻松地构建交互性的界面,用于与机器学习模型进行交互
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环境变量
-
设置环境变量 :linux环境下,你可以在终端中运行
export MODELSCOPE_API_TOKEN=your-api-key
的方式来临时添加环境变量。windows环境下,可以通过设置环境变量
功能来直接添加环境变量到系统中。-
MODELSCOPE_API_TOKEN
中填上你的ModelScore SDK令牌,快速获取地址 -
在
DASHSCOPE_API_KEY
中填上你的灵积api,[阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台]
-
2.移动config文件夹中的配置文件,需要注意apps/agentfaric
与modelscope-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,为了比赛的保密性考虑,我只会例举它的功能“
- 用户指令理解与回应
- 科研论文润色优化
- 调整语言风格
- 修改建议提供
- 按建议生成示例
- 英文版本修改
agent 使用效果:
作为一个科研论文润色小助手,首先提供的服务应该是文字上的润色服务,以及翻译服务,所以并没有用到第三方的一些工具如同,code interpreter
,img_gen
。
通过与构建Agent的不断对话,确定agent的logo,基本功能。同时根据配置页agent的详细设定对agent进行进一步的微调,通过基本的对话,我们可以得到如下的使用效果:
我们可以很明显的发现这个最初完全使用对话创建的小助手,回复内容虽然达到了润色文字的作用,但是没有为用户进行更加详细的内容说明,就像对原始的文字段提出更多的建议,以及并没有提供翻译成英文的选项,内容简单。
agent的继续改进
继续通过不断的对话,修正Agent的输出,对Agent提出更加精细,具体,个性化的要求,例如详细的规定agent输出的内容,以及输出的格式,我们可以让其达到想要的效果,最终的效果如下:
可以看到经过我们的改进后,对待一个用户提出的prompt
,Agent已经能够提出很好的建议,以及根据建议进一步生成更好的示例,满足了我们的要求。
未来的继续改进
未来的开发中,我们可以尝试联网功能,让小助手能够获得更多参考的资料,给出更加可靠的答复,我想到的联网的用途如下所示,这些用途可以转化成具体对小助手的prompt,对其行为进行更精准的操纵。
-
相关论文和研究: 利用搜索引擎API来检索与用户提供的论文主题相关的最新研究和论文。这可以为小助手提供更多的参考文献和相关信息,以支持其润色建议。
-
专业术语和定义: 使用API检索与文本中出现的专业术语相关的定义和解释。这有助于小助手更好地理解并正确使用特定领域的术语,提高回复的专业性。
-
行业新闻和趋势: 利用API搜索行业新闻、趋势和最新发展,以确保小助手能够提供关于特定主题的最新信息,用于完善回复的更多内容。
-
拓展背景知识: 利用搜索引擎API检索与文本主题相关的基础知识和背景信息。这有助于小助手更全面地了解用户提供的内容,并提供更有深度的回复。
-
学术论坛和社区: 利用搜索引擎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
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)