魔搭Agent作为开源版GPTs,可以零代码DIY一个具备丰富功能的chat bot,今天上线了一个新版本优化了相关体验,来看!
一、新增固定入口
魔搭平台-创空间-交互式创建:
https://www.modelscope.cn/studios/agent
二、已发布Agent支持编辑后重新发布
方便开发者们不断优化prompt和其他配置,持续打磨Agent
同时,编辑中状态的创空间可存储到草稿箱,并在我创建的—我的创空间查找
https://www.modelscope.cn/my/myspace
三、tool增加相关参数说明
你可以参考tool的参数说明及使用案例来调用它,还会附上贡献者相关信息
四、欢迎贡献tool!
欢迎开发者贡献tool,可提交PR,参考:https://github.com/modelscope/modelscope-agent/pull/283/commits
详细攻略:
1、tool注册
历经多次迭代,用户可以更快速的接入一个新的工具进入主库。
以下为接一个新tool入库的示例:
import os from modelscope_agent.tools.base import BaseTool, register_tool from modelscope_agent.tools.utils.output_wrapper import AudioWrapper from pydantic import ValidationError WORK_DIR = os.getenv('CODE_INTERPRETER_WORK_DIR', '/tmp/ci_workspace') @register_tool('sambert_tts') class SambertTtsTool(BaseTool): description = 'Sambert语音合成服务,将文本转成语音' name = 'sambert_tts' parameters: list = [{ 'name': 'text', 'description': '需要转成语音的文本', 'required': True, 'type': 'string' }] def __init__(self, cfg={}): self.cfg = cfg.get(self.name, {}) self.api_key = self.cfg.get('dashscope_api_key', os.environ.get('DASHSCOPE_API_KEY')) if self.api_key is None: raise ValueError('Please set valid DASHSCOPE_API_KEY!') super().__init__(cfg) def call(self, params: str, **kwargs) -> str: from dashscope.audio.tts import SpeechSynthesizer params = self._verify_args(params) tts_text = params['text'] if tts_text is None or len(tts_text) == 0 or tts_text == '': raise ValueError('tts input text is valid') os.makedirs(WORK_DIR, exist_ok=True) wav_file = WORK_DIR + '/sambert_tts_audio.wav' response = SpeechSynthesizer.call( model='sambert-zhijia-v1', format='wav', text=tts_text) if response.get_audio_data() is not None: with open(wav_file, 'wb') as f: f.write(response.get_audio_data()) else: raise ValueError( f'call sambert tts failed, request id: {response.get_response().request_id}' ) return str(AudioWrapper(wav_file))
解读:
- line10:@register_tool('sambert_tts')用于将该工具类注册到注册中心以便后续调用, 并取名为 sambert_tts。
- line 12-19: 工具在被大模型调用的时候,所有需要的信息都会被定义在这部分,不同的工具对应的name, description必须要描述清晰,以便大模型能够正确的使用该工具。 于此同时, parameters需要严格按照上述格式进行定义,以便模型能够正确生成调用该工具的参数,参数需要包括:name, description, required和type。
- line 21: __init__()方法可以把,一些非运行时相关的配置加在这里。
- line 22: self.cfg = cfg.get(self.name, {})对于一些配置较多,或者需要配置来自于文件的场景,可以使用该方法来初始化一个工具。
- line 31: call()方法定义了该工具使用参数进行任务执行的具体方法,注意入参即为上一步中大模型生成的parameters,并且以string的方式传入。
- line 33: params = self._verify_args(params)该方法用parse,stringify的 parameters成为dict,我们已经有默认方法得以实现。 针对一些模型生成效果不好的场景,或者需要有特殊解析逻辑的场景,用户可以自行实现该类。
- line 34-48: 该地方实现了利用dashscope的tts接口调用的方法,用户可以在这里完成实现各自tool的具体功能,对于调用一些异步的api,需要轮训等任务的,可以参考(https://github.com/modelscope/modelscope-agent/blob/master/modelscope_agent/tools/dashscope_tools/style_repaint.py)。
2、在Agent中使用tool
在上一步中,我们已经定义了一个新的tool类,那么下面会演示如何调用它。
from modelscope_agent.agents import RolePlay role_template = '你扮演一名语音合成大师,可以将文本转化为语音。' llm_config = { 'model': 'qwen-max', 'model_server': 'dashscope', } # 对于需要额外config的情况 function_list = [{ 'sambert_tts':{ 'dashscope_api_key': os.environ.get('DASHSCOPE_API_KEY') } }] # 对于不需要额外config的情况,直接写注册的名称即可 function_list = ['sambert_tts'] bot = RolePlay(function_list=function_list,llm=llm_config, instruction=role_template) response = bot.run("请帮我把,modelscope-agent真棒,用甜美女声念出来。", remote=False, print_info=True) text = '' for chunk in response: text += chunk print(text)
解读:
- line 3:定义了agent的提示词,用于推进任务。
- line 4-7: 定义了agent所需要的模型,目前qwen-max是qwen系列中指令理解,指令生成效果最好的模型
- line 9-17: 在这里我们将刚才注册到工具注册中心的新工具 sambert_tts加到function_list 待agent调用,其中两种形式,带config传入的或者单纯名字的均可。
- line 19: 利用上述几步的信息初始化 agent
- line 21-25: 提交任务给agent,完成相关工具的调用。
另外,还有一个演示demo可以参考:https://github.com/modelscope/modelscope-agent/blob/master/demo/demo_register_new_tool.ipynb
3、文档准备
- 需要添加readme,用于解释该readme中所调用的函数参数意义,或者是否需要额外的配置,以便能够跑通;
- 同时,还需要提交贡献者信息以便,系统能够透出展示贡献者信息;
- 相关readme示例如下:
# 语音合成 API详情地址:[https://help.aliyun.com/zh/dashscope/developer-reference/quick-start-13?spm=a2c4g.11186623.0.i4](https://help.aliyun.com/zh/dashscope/developer-reference/quick-start-13?spm=a2c4g.11186623.0.i4) | 必选参数 | 参数解释 | | --- | --- | | API密钥 | 这里复用DASHSCOPE\_API\_KEY,无需额外添加环境变量。| | 贡献者昵称 | W宜俊 | | --- | --- | | 邮箱 | 220221113@seu.edu.cn | | 魔搭账号 | wyj123456 | | GitHub | [https://github.com/wangyijunlyy](https://github.com/wangyijunlyy) |
或者参考其他tool的介绍文案:
4、添加单元测试
- 除了完成核心模块的开发,还需要添加单元测试用例,以便确保功能完整性,测试用例可以参考:code interpreter unit test
- 跑测试用例,仅需要确保当前测试用例通过即可
- modelscope-agent利用pytest完成测试,因此未安装pytest的话,需要先安装pytest,示例如下:
pytest modelscope-agent/tools/contrib/demo/test_case.py
5、总结:文档结构
综上,
- 提交代码需要三个文件: 执行文件,测试文件和readme
- 需要将上述三个文件放到一个文件夹中,为了让该文件夹被引用还需要一个__init__.py文件
- 最后,需要确保该文件夹位于 modelscope_agent/tools/contrib 下。一个实例如下图所示:
contrib ├── __init__.py └── demo ├── README.md ├── __init__.py ├── renew_aliyun_instance.py └── test_case.py
- 需要将该类加入到 modelscope_agent/tools/contrib/__init__.py, 以便被上一层引用到。
6、代码提交规范:
- 所有新加入的tool类,需要从 modelscope-agent 库中fork出来独立的库,并单独开分支提交, 命名规则为:
git checkout -b tool/{your-new-tool-name}
- 新增完代码以及对应的单测用例以外,需要确保代码格式正确,可以参考如下命令执行,确保安装自动格式检查\更新的工具pre-commit:
# 对于第一次跑的同学,需要安装pre-commit,并在项目中初始化 pip install pre-commit pre-commit install pre-commit run --all-files # 后续在每一次commit的时候会有格式自动检查及修复, 使用如下命令即可 git add . git commit -m "add new tool" # 如果遇到无法进行修复的格式错误,可以尝试手动修改,或者跳过 git commit -m "add new tool" --no-verify
- 最后提交到代码库后,可以在https://github.com/modelscope/modelscope-agent/compare 中通过提交pr的方式合并会主库,modelscope-agent主库维护者会尽快进行校验合并工作。
五、历史功能
魔搭Agent其他功能参考历史文章:
Modelscope Agent实操(一):0代码创建、发布并分享一个专属Agent
Modelscope Agent实操(二):低代码调用API创建更加酷炫的Agent
Modelscope Agent实操(三):将API注册为tool,成为smart API,方便社区开发者调用
Agent实操(四):Code Interpreter,生成二维码、视频、PDF转txt等炸裂功能