简介:
最近,一个被称为「 国产替代系统」的开源项目在上星标猛增。这个项目就是,面壁智能自研的大模型工具学习引擎。
项目地址:
是一能让语言模型使用扩展工具的开源仓库,其也是开源社区构建和共享工具的一个平台。在这个仓库中,您可以(1)通过编写 函数轻松构建插件,(2)使用外部的 -。
本项目受到开源项目的启发,针对开源工具的使用(例如-)进行了优化,力图实现 – 的开源学术版本。
拟解决痛点问题:
尽管大模型在很多方面取得了显著的成果,但在特定领域的任务上仍然存在一定的局限性。这些任务往往需要专业化的工具或领域知识才能有效解决。大模型需要具备调用各种专业化工具的能力,这样才能为现实世界任务提供更为全面的支持。
,将工具学习嵌入面壁智能大模型能力体系,正式加入大模型工具体系「全家桶」。
工具学习也是面壁智能继高效训练、微调、推理、压缩套件后推出的又一大力作。
产品优势:
使用指南:
1.安装
git clone git@github.com:OpenBMB/BMTools.git
python setup.py develop
2.使用现有工具2.1配置工具2.1.1本地工具
在 .sh 中添加 API 密钥,然后启动本地工具:
source secret_keys.sh
python host_local_tools.py
然后将插件的URL设置为:8079/tools/{}/(记得加上/)。
2.1.2使用在线的-
只需将其加载到指向.well-known/ai-.json的 URL 中即可。例如,如果 URL 设置为,那么是一个有效的配置。
2.2使用单个工具
from bmtools.agent.singletool import load_single_tools, STQuestionAnswerer
tool_name, tool_url = 'klarna', 'https://www.klarna.com/'
tool_name, tool_config = load_single_tools(tool_name, tool_url)
print(tool_name, tool_config)
stqa = STQuestionAnswerer()
agent = stqa.load_tools(tool_name, tool_config)
agent("{Your Question}")
2.3使用多个工具
我们可以同时使用多个工具。基本上,语言模型会递归地处理它。它会将整个工具视为一个 API,向其发送问题,工具调用其子 API 来解决问题并将其发送回父工具。此功能在即将推出的 Chat 模式中将非常有用。
可以使用以下脚本尝试此功能:
from bmtools.agent.tools_controller import load_valid_tools, MTQuestionAnswerer
tools_mappings = {
"klarna": "https://www.klarna.com/",
"chemical-prop": "http://127.0.0.1:8079/tools/chemical-prop/",
"wolframalpha": "http://127.0.0.1:8079/tools/wolframalpha/",
}
tools = load_valid_tools(tools_mappings)
qa = MTQuestionAnswerer(openai_api_key='', all_tools=tools)
agent = qa.build_runner()
agent("How many benzene rings are there in 9H-Carbazole-3-carboxaldehyde? and what is sin(x)*exp(x)'s plot, what is it integrated from 0 to 1? ")
2.4使用
将您的插件添加到.py文件开头的映射中
启动
python web_demo.py
3.使用定制工具3.1本地开发工具
如果要在本地开发工具,您需要编写一个 函数来构建该工具并将其在注册表中进行注册。
例如,您可以编写一个工具来执行 代码并返回结果。以下为示例代码:
from bmtools.tools import Tool
from pydantic import BaseModel
class ExecutionQuery(BaseModel):
code: str
class ExecutionResult(BaseModel):
result: str
def build_python_tool(config) -> Tool:
tool = Tool(
"PythonTool",
"A plugin that can execute python code",
name_for_model="python",
description_for_model="A plugin that can execute python code",
contact_email="your@email",
)
@tool.post("/execute")
def execute_python_code(query : ExecutionQuery) -> ExecutionResult:
return ExecutionResult(
result=eval(query.code)
)
return tool
然后,您需要使用以下代码将工具注册到注册表中:
from bmtools.tools import register
@register("python")
def register_python_tool():
return build_python_tool
在这里,我们将工具注册名称定为“”。
3.2贡献到
当您开发完一个工具后,您可以按照以下步骤将其贡献给 仓库:
Fork此存储库
在/tools/{}中创建一个文件夹
在该文件夹下添加api.py文件:/tools/{}/api.py和一个.py文件:/tools/{}/.py
使用3.1节中的代码在第3步创建的.py文件中注册该工具
在/tools的.py文件中导入您的工具
添加一个test.py文件以自动测试您的工具
在您的文件夹中添加一个.md,包含一个简短的工具介绍、贡献者信息或您想让其他人知道的任何信息。
4.优化工具的提示信息
您编写的函数将被转换为与 插件兼容的接口。AI 模型将读取工具的名称、描述以及该工具所有的 API 的名称和描述。您可以在以下方面进行调整,以使您的 API 能够被 AI 模型更好地理解。
(告诉模型这个工具是什么)
l(在调用工具之前将输入给模型,您可以在其中包含有关如何使用API的信息)
每个API函数的函数名,以及@tool.get()中的名称。这两个名称最好能够匹配,因为工具名称在模型 API 选择中起着重要作用。
函数的文档字符串(可以向模型建议是否使用此API)
函数的返回值,可在模型调用出错时为其提供报错信息,以指导其下一步操作,例如重试或指示应首选的下一步操作。
减少 API 函数中的错误。
一个简单的例子是,其可作为工具提示优化的参考。
引用
如果您在您的工作中使用了,请参考下面引用:
@misc{qin2023tool,
title={Tool Learning with Foundation Models},
author={Yujia Qin and Shengding Hu and Yankai Lin and Weize Chen and Ning Ding and Ganqu Cui and Zheni Zeng and Yufei Huang and Chaojun Xiao and Chi Han and Yi Ren Fung and Yusheng Su and Huadong Wang and Cheng Qian and Runchu Tian and Kunlun Zhu and Shihao Liang and Xingyu Shen and Bokai Xu and Zhen Zhang and Yining Ye and Bowen Li and Ziwei Tang and Jing Yi and Yuzhang Zhu and Zhenning Dai and Lan Yan and Xin Cong and Yaxi Lu and Weilin Zhao and Yuxiang Huang and Junxi Yan and Xu Han and Xian Sun and Dahai Li and Jason Phang and Cheng Yang and Tongshuang Wu and Heng Ji and Zhiyuan Liu and Maosong Sun},
year={2023},
eprint={2304.08354},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
插件系统可以替代部分用户对国外tgpt 插件系统的依赖,后续会基于此系统开发一些有趣的插件,欢迎大家一起来参与插件开发,后续交流,
对插件使用和开发感兴趣的小伙伴,欢迎加入“插件技术交流(玩转 )”,联系版主()备注:插件开发,一起探索插件使用,新插件的开发。