<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


免费创建高清无水印Sora视频
Vora是一个免费创建高清无水印Sora视频的AI工具


最适合小白的AI自动化工作流平台
无需编码,轻松生成可复用、可变现的AI自动化工作流

大模型驱动的Excel数据处理工具
基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。


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


AI论文写作指导平台
AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。


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模型免费使用,一键生成无水印视频
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号