Skip to content

Latest commit

 

History

History
222 lines (205 loc) · 6.56 KB

README_ZH.md

File metadata and controls

222 lines (205 loc) · 6.56 KB

🧰 ToolServer

ToolServer为XAgent提供了强大的工具和安全的执行环境,它运行在docker容器中,提供了一个安全隔离的执行环境。

ToolServer由3个部件组成:

  • ToolServerManager 负责管理ToolServerNode,提供了一系列的API供XAgent调用。
  • ToolServerMonitor 负责监控ToolServerNode的运行状态,当ToolServerNode出现异常时,ToolServerMonitor将停止删除ToolServerNode。
  • ToolServerNode 负责提供工具,它运行在docker容器中,提供了一个安全隔离的执行环境。

目前ToolServer支持下列工具:

  • 📝 文档编辑器 提供了一个文档编辑工具,可以用于读写,修改文件。
  • 📘 Python Notebook 提供了一个交互式的python notebook,可以运行python代码,绘制图表。
  • 🌏 网页浏览器 提供了一个网页浏览器用于搜索和访问网页。
  • 🖥️ Shell 提供了一个shell工具用于执行任意shell命令,甚至安装程序和托管服务。
  • 🧩 Rapid API 提供了一个Rapid API工具用于调用Rapid API的API。查看ToolBench以获得更多信息。 你也可以轻松的开发自己的工具并添加到ToolServer中,增强agents的能力。

⚡️ 配置ToolServer

ToolServer的配置文件存放在assets/config/目录下,你可以修改配置文件并重新构建镜像以应用修改。 注意事项:

  • 如果你不允许XAgent在ToolServerNode中使用docker,请将manager.yml中的node.privileged设置为false
  • monitor.yml中的idling_close_minutes设置为ToolServerMonitor在关闭空闲的ToolServerNode实例前等待的时间(默认30分钟)。
  • node.yml中添加你的api key以启用bing搜索(或使用备用搜索duckduckgo)和rapid api。
  • 如果你遇到ToolServer的超时错误,请在docker-compose.yml中修改services.ToolServerManager.command-t后面的值以修改ToolServer的超时时间。

🛠️ 编译和启动ToolServer

所有的docker镜像构建文件都存放在dockerfiles目录下。 你可以使用如下命令手动构建所有镜像:

docker-compose build

这将构建ToolServerManager、ToolServerMonitor和ToolServerNode的docker镜像。请注意,由于稳定性问题,配置文件将在构建过程中被复制到docker镜像中。如果你修改了配置文件,你需要重新构建docker镜像以应用修改。

在构建docker镜象后,你可以使用如下命令启动ToolServer:

cd ToolServer
docker-compose up

请注意,你需要提前安装dockerdocker-compose

🧩 API说明

/get_cookies

该路径将返回一个cookie,其中包含ToolServerNode实例的node_id。 所有后续的请求都需要使用该cookie来识别ToolServerNode实例。

/get_available_tools

该路径无需参数传递,返回值为一个json字典列出:

{
    "available_envs":[
        {
            "name":"env1",
            "description":"description1",
            "tools":["tool1","tool2"] //最多50条,超过50条的部分不返回
        },
    ],
    "available_tools":[
        "tool1",
        "tool2", //部分tool被隐藏,不会返回
    ],
    "tools_json":[
        {
            "name":"tool1",
            "description":"description1",
            "parameters":{
                "type":"object",
                "properties":{
                    "param1":{
                        "type":"string",
                        "description":"description1"
                    },
                    "param2":{
                        "type":"integer",
                        "description":"description2"
                    }
                },
                "required":["param1","param2"]
            }
        },
    ]
}

/retrieving_tools

给定一个问题,通过doc embedings返回相似度最高top_k个工具。

参数格式:

{
    "question":"question1",
    "top_k":10,
}

结果格式:

{
    "retrieved_tools":[
        "tool1",
        "tool2"
    ],
    "tools_json":[
        {
            "name":"tool1",
            "description":"description1",
            "parameters":{
                "type":"object",
                "properties":{
                    "param1":{
                        "type":"string",
                        "description":"description1"
                    },
                    "param2":{
                        "type":"integer",
                        "description":"description2"
                    }
                },
                "required":["param1","param2"]
            }
        },
    ]
}

/get_json_schema_for_tools

返回指定工具们的json schema。 参数格式:

{
    "tool_names":[
        "tool1",
        "tool2"
    ]
}

结果格式:

{
    "tools_json":[
        {
            "name":"tool1",
            "description":"description1",
            "parameters":{
                "type":"object",
                "properties":{
                    "param1":{
                        "type":"string",
                        "description":"description1"
                    },
                    "param2":{
                        "type":"integer",
                        "description":"description2"
                    }
                },
                "required":["param1","param2"]
            }
        },
    ],
    "missing_tools":[
        "tool3",
        "tool4"
    ]
}

/get_json_schema_for_envs

返回指定环境的json schema。 参数格式:

{
    "env_names":[
        "env1",
        "env2"
    ]
}

结果格式:

{
    "envs_json":[
        {
            "name":"env1",
            "description":"description1",
            "tools":["tool1","tool2"] //全部返回
        },
    ],
    "missing_envs":[
        "env3",
        "env4"
    ]
}

/execute_tool

执行指定工具。 参数格式:

{
    "tool_name":"tool1",
    "arguments":{
        "param1":"value1",
        "param2":2
    }
}

结果格式由各个工具自己定义。 有一个特殊http状态码450,代表该工具还需后续调用才能完成工作,当返回450错误码时,返回值格式例如下:

{
    "detail":{
        "type":"retry",
        "next_calling":"ShellEnv_read_stdout",
        "arguments":{}
    }
}

释放ToolServerNode

当使用完成后,访问路径/close_session,ToolServerManager得到该请求后将停止ToolServerNode docker实例。 也可访问路径/release_session,ToolServerManager得到该请求后将删除ToolServerNode docker实例。