<img src="https://yellow-cdn.veclightyear.com/35dd4d3f/a3c6c19e-834f-447a-8e0e-08198595e427.png" width="500px"></img>
实现 <a href="https://arxiv.org/abs/2302.04761">Toolformer</a>,即MetaAI提出的能使用工具的语言模型。
感谢 <a href="https://stability.ai/">Stability.ai</a> 的慷慨赞助,使我们得以从事和开源尖端的人工智能研究。
感谢 <a href="https://github.com/conceptofmind">Enrico</a> 的初始代码提交,促成了不同工具的启动!
感谢ChatGPT为这个仓库中的正则表达式解析函数和API调用参数做出的贡献。我对正则表达式一窍不通,AI的帮助实在是太大了(没有任何问题,表现完美)。
$ pip install toolformer-pytorch
下面是一个让语言模型具备当前日期和时间意识的示例用法。
import torch from toolformer_pytorch import Toolformer, PaLM # 简单的日历API调用 - 返回字符串的函数 def Calendar(): import datetime from calendar import day_name, month_name now = datetime.datetime.now() return f'今天是{day_name[now.weekday()]},{month_name[now.month]}{now.day}日,{now.year}年。' # 提示如何使用上述的Calendar函数 prompt = f""" 你的任务是向文本中添加对Calendar API的调 用。 API调用应帮助你获取完成文本所需的信息。 你可以通过书写 “[Calendar()]” 来调用API。 以下是一些API调用示例: 输入: 今天是一年中的第一个星期五。 输出: 今天是一年中的第一个[Calendar()]星期五。 输入: 美国总统是乔·拜登。 输出: 美国总统是[Calendar()]乔·拜登。 输入: [输入] 输出: """ data = [ "商店在周末从不营业,所以今天关门。", "距离圣诞节还有30天", "今天是星期三。" ] # 模型 - 这里使用PaLM,但任何返回形状为 (batch, seq, num_tokens) 的 logits 的nn.Module都可以 model = PaLM( dim = 512, depth = 2, heads = 8, dim_head = 64 ).cuda() # toolformer toolformer = Toolformer( model = model, model_seq_len = 256, teach_tool_prompt = prompt, tool_id = 'Calendar', tool = Calendar, finetune = True ) # 调用这个函数会 # (1) 使用你的输入(数据)提示模型,并插入到 [输入] 标记中 # (2) 从采样的输出中筛选出正确调用API的 # (3) 使用提供的 `tool` 执行API调用 # (4) 使用专业化的过滤函数过滤掉结果(可以独立使用如下一节所示) # (5) 在过滤结果上进行微调 filtered_stats = toolformer(data) # 然后,一旦你看到“微调完成”消息 response = toolformer.sample_model_with_api_calls("距离下一次新年还有多少天?") # 希望你能看到它调用日历并利用API调用的响应结果……
这篇文章的主要创新点是在定义出适合用于插入API调用的输出的适配评分。这个评分被用来过滤采样的输出,以便微调变压器模型,使其进行减少随后文本困惑度的API调用。
import torch from toolformer_pytorch import ( Toolformer, PaLM, filter_tokens_with_api_response ) # 模型 palm = PaLM( dim = 512, num_tokens = 20000, depth = 2, heads = 8, dim_head = 64 ).cuda() # 模拟一些tokens mock_start_pos = 512 mock_api_call_length = 10 mock_api_start_id = 19998 mock_api_stop_id = 19999 tokens = torch.randint(0, 20000, (10, 1024)).cuda() tokens_with_api_response = torch.randint(0, 20000, (10, 1024)).cuda() tokens_without_api_response = torch.randint(0, 20000, (10, 1024)).cuda() tokens_with_api_response[:, mock_start_pos] = mock_api_start_id tokens_with_api_response[:, mock_start_pos + mock_api_call_length] = mock_api_stop_id tokens_without_api_response[:, mock_start_pos] = mock_api_start_id tokens_without_api_response[:, mock_start_pos + mock_api_call_length] = mock_api_stop_id # 过滤 filtered_results = filter_tokens_with_api_response( model = palm, tokens = tokens, tokens_with_api_response = tokens_with_api_response, tokens_without_api_response = tokens_without_api_response, filter_threshold = 1., api_start_token_id = mock_api_start_id, api_end_token_id = mock_api_stop_id )
要在语言模型生成的字符串上调用工具,请使用 invoke_tools 方法
from toolformer_pytorch import invoke_tools def inc(i): return i + 1 def dec(i): return i - 1 function_registry = dict( inc = inc, dec = dec ) text = '进行以下API调用:[inc(1)] 和 [dec(2)] 和 [ignored(3)]' invoke_tools(function_registry, text) # 进行以下API调用:[inc(1) → 2] 和 [dec(2) → 1] 和 [ignored(3)]
Toolformer 中进行端到端训练
Toolformer 实例的最终模型能够使用多种工具 - 从批量大小1开始逐步增加@inproceedings{Schick2023ToolformerLM, title = {Toolformer: Language Models Can Teach Themselves to Use Tools}, author = {Timo Schick and Jane Dwivedi-Yu and Roberto Dessi and Roberta Raileanu and Maria Lomeli and Luke Zettlemoyer and Nicola Cancedda and Thomas Scialom}, year = {2023} }
@article{Gao2022PALPL, title = {PAL: Program-aided Language Models}, author = {Luyu Gao and Aman Madaan and Shuyan Zhou and Uri Alon and Pengfei Liu and Yiming Yang and Jamie Callan and Graham Neubig}, journal = {ArXiv}, year = {2022}, volume = {abs/2211.10435} }
现实是这样一种东西,即使你停止相信它,它也不会消失。 – Philip K. Dick


AI一键生成PPT,就用博思AIPPT!
博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。


AI赋能电商视觉革命,一站式智能商拍平台
潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。


企业专属的AI法律顾问
iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。


稳定高效的流量提升解决方案,助力品牌曝光
稳定高效的流量提升解决方案,助力品牌曝光


最新版Sora2模型免费使用,一键生成无水印视频
最新版Sora2模型免费使用,一键生成无水印视频


实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。


选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。


AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。


最强AI数据分析助手
小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。


像人一样思考的AI智能体
imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号