logo 🤗

技术视野

聚焦科技前沿,分享技术解析,洞见未来趋势。在这里,与您一起探索人工智能的无限可能,共赴技术盛宴。

代码分析

  1. 上节我们已经成功启动了app.py,并上线到创空间,但是体验下来并不够好,没有达到我们想要的效果,这节我们主要讲一下如何对整个项目如何进行优化。
  2. 分析一下app.py(原身是appBot.py)的代码,可以看到这里有一个uuid_str,应该是默认用户的标识符,这里设定是是local_user,我们找到了一个读取配置以及头像相关的代码,这里我们详细看看上面的parse_configuration是干啥用的。
    image.png
  3. parse_configuration函数定义在config_utils.py中,代码对应的意思来看,里面有读取模型配置,如果用户没有设置,则读取默认模型配置文件,下面有一个读取用户专属配置的一个函数。
    image.png
  4. 一般来说,我们并不会专门去定义这些环境变量,所以我们正常会走的默认配置,所以这里看看DEFAULT_MODEL_CONFIG_FILE是从哪里来的,它代表了什么数值。
  5. 这里可以看到一些默认配置了,里面有模型发布时的build配置,以及对应的模型调用,tool工具链(比如天气,文生图啥的),最下面是code解释器那块,暂时可以不管,下面我们去看看具体路径对应的文件,看看里面长啥样,从路径来看,model和tool的配置是在和config_utils.py同级的config文件夹下,而build的相关的配置在/tmp/agentfabric/config路径,这个待会再说。
    image.png
  6. 找到根目录的config文件夹,我们正好可以看到上面需要的三个文件,大家可以详细看看里面的内容。
    image.png
  7. 这里补充一下builder_config.json,项目正式运行时,会判断/tmp/agentfabric/config/builder_config.json是否存在,如果不存在,就会拷贝项目里面的config/builder_config.json过去,所以理论上我们可以直接修改config/builder_config.json文件,不过修改后,需要删除/tmp/agentfabric/文件才行,否则他会读取旧的文件,对于Windows用户,这个路径在c:\tmp\agentfabric
  8. 下面我们详细看看config/builder_config.json文件。,可以看到里面有Agent的身份定义,默认prompt配置,知识库,工具链相关内容,以及默认启动的模型。
    image.pngimage.png
  9. 这里假设我们想做一个简单的xxx游戏,我们可以给name填上他的身份为xxx游戏,然后加上一些示例。
  10. 继续回到app.py(原身是appBot.py),我们在结尾处看到其运行时默认启用了init_user函数。
    image.png
  11. 这里有一个init_user_chatbot_agent函数,看含义应该是初始化agent,我们再次点进去瞅瞅。
    image.png
  12. 这次跳转到了user_core.py,上面貌似还是和之前一样加载配置,基本可以忽略,不过里面有一个设置top=0.5的,后续要修改可以改这里。
    image.png
  13. 再往下看看,可以看到默认的prompt配置了,我们可以点一下DEFAULT_SYSTEM_TEMPLAT,看看它在哪里。
    image.png
  14. 此时可以看到默认系统prompt是定义在custom_prompt.py的,中间的<xxx>是后面从配置文件读过来,会进行对应替换的,所以不要动这些特殊内容,不过我们可以在里面增加一些内容。
    image.png
  15. 从最底下来看,这里的扮演,确实是用了name作为角色定义的,如果你仔细debug,你就能知道这里的name就是config/builder_config.json里面的name
    image.png
  16. 回到user_core.py,我们在往下看,可以看到他用faiss来读取build_config.json里面的向量库路径列表,最后把他变成矩阵存储起来。
    image.png
  17. 总的来看

    config/  # 里面有很多配置文件,默认启用的是model_config.json和tool_config.json,以及将被复制到/tmp/agentfabric/的builder_config.json
    modelscope_agent/tools/ # 注册工具链的位置
    app.py # 启动入口,也是上线后的默认文件,大部分是修改这个地方
    appBot.py # 一个智能的,通过对话创建Agent的项目,其实也是这个项目的原始(app.py)启动文件,仅作参考。
    config_utils.py # 读取默认配置的代码,不建议修改
    custom_prompt.py # prompt默认定义,可以加,但是不建议删减<xxx>变量
    user_core.py # 里面有构建Agent的具体代码,包括prompt输入和知识库构建过程。

Tool实战

  1. 假设我们需要做一个tool,本地调用,然后返回json。这里教程参考了官方教程:Agent实操(三):将API注册为tool,成为smart API,方便社区开发者调用
  2. 这个tool将返回一个论坛用户信息,并且只能查看自己,所以这个入参查询用户名是可选的,当然也可以不要查询参数。
  3. 我们在modelscope_agent/tools下面新建一个get_user.py的文件,然后按照官方示例,完成代码编写,这里返回一个固定的json就行了,key必须是result
from .tool import Tool


class GetUser(Tool):
    name = "get_user"
    description = "该工具用户返回论坛用户信息。"
    description += "当用户询问其信息时,立刻返回其用户信息"
    description += """
    下面是一些对话场景:
    场景1:
    <用户>: 返回我的信息
    <助手>: 好的,正在查询中
    
    场景2:
    <用户>:查看我的用户等级
    <助手>: 好的,正在查询中
    """

    parameters = [
        {
            'name': 'user_name',
            'description': '要查询的用户名',
            'required': False
        }
    ]

    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):
        user_name = kwargs.get("user_name", "")
        # todo filter user name
        # return information
        result = {
            "uuid": "0123456",
            "name": "张三",
            "level": 2,
        }
        # return mast has key result
        return {"result": result}
  1. modelscope_agent/tools/__init__.py中注册。
    image.png
    image.png
  2. 然后在config文件夹的tool_config.json,和buidler_config.json(这个是放在tools下)中分别定义。

    "get_user":{
     "name": "获取用户信息",
     "is_active": true,
     "use": true 
    }
  3. buidler_config.json的name定义为论坛小助手,并且加上一些默认示例。
    image.png
  4. 保险起见,如果是Windows用户看看你的本机有么有c:\tmp\agentfabric,或者Linux/Mac用户看看/tmp/agentfabric/,将这个目录删除,他是缓存,不删除,项目的builder_config.json无法生效。
  5. 本机运行项目做一下测试。
  6. 测试成功,get_user这个tool确实被调用成功了,不过确实可以看出来里面的user_name参数是多余的,会让模型多输出一句废话。
    image.png

    知识库实战

  • 为了让这个论坛更加有秩序,我们需要给他加一些规则。
  • 这个规则就是知识库,我们需要询问助手,一些等级上面的规则。
  • 这里我们采用CSDN的的等级规则来做知识库,原帖链接
  • 将其复制粘贴,存放在text/001.txt目录。
  1. config/buidler_config.json中加入知识库路径。

    "knowledge": ["text/001.txt"],
  2. 如果是Windows用户看看你的本机有么有c:\tmp\agentfabric,或者Linux/Mac用户看看/tmp/agentfabric/,将这个目录删除,他是缓存,
  3. 启动项目做一下测试。
  4. 第一次启动失败,提示缺一个chardet库,给它装一下。

    pip install chardet
  5. 再次启动测试。
    image.pngimage.png
  6. 上面的2级发200贴错了,应该说100贴,可能是两边等级一个是数字,一个是T+数字,所以这里改一下tool的返回,让他返回T2再测试一下。

    result = {
         "uuid": "0123456",
         "name": "张三",
         "level": "T2",
     }
  7. 再次测试结果,这次没毛病了。
    image.png

    体验地址

版权属于:tlntin
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
更新于: 2024年01月05日 09:33


39 文章数
5 分类数
40 页面数
已在风雨中度过 1年190天17小时10分
目录
来自 《modelscope Agent (第二节)开发与优化》
暗黑模式
暗黑模式
返回顶部
暗黑模式
暗黑模式
返回顶部