赞
踩
变形金刚代理是一个实验性的 API,随时可能发生变化。代理返回的结果可能会随着 API 或底层模型的变化而变化。
变形金刚版本 v4.29.0,建立在和探员的工具概念上。你可以在里面this colab玩。
简而言之,它在 Transformers 之上提供了一个自然语言 API:我们定义了一组精选工具,并设计了一个代理来解释自然语言并使用这些工具。它在设计上是可扩展的;我们策划了一些相关工具,但我们将向你展示如何轻松扩展该系统以使用社区开发的任何工具。
让我们从几个例子开始,看看这个新的 API 可以实现什么。当涉及到多模式任务时,它的功能特别强大,所以让我们用它来生成图像并大声朗读文本。
agent.run(“为下面的图像添加标题”,image=image)
Input | 输出 |
---|---|
A beaver is swimming in the water |
agent.run(“大声朗读以下文本”,text=text)
Input | 输出 |
---|---|
一只海狸在水里游泳 | |
你的浏览器不支持音频元素。 |
|
代理.运行(
“In the following `document`, where will the TRRF Scientific Advisory Council Meeting take place?”, document=document,
)
Input | 输出 |
---|---|
ballroom foyer |
在能够使用 agent.run
之前,你需要实例化一个代理,它是一个大型语言模型(LLM)。我们为 OpenAI 模型以及 BigCode 和 OpenAssistant 的开源替代方案提供支持。OpenAI 模型性能更好(但需要你拥有 OpenAI API 密钥,因此不能免费使用);Hugging Face 为 BigCode 和 OpenAssistant 模型提供对端点的免费访问。
首先,请安装 agents
Extras 以安装所有默认依赖项。
PIP 安装转换器 [代理 ]
要使用 OpenAI 模型,请在安装 openai
依赖项OpenaiAgent后实例化:
从 Transformers 导入 OpenAIagent
代理 =OpenAIAgent(模型 =“Text-Davinci-003 ”,API_ 关键字 =“<your_api_key>”)
要使用 BigCode 或 OpenAssistant,首先登录以访问推理 API:
从 HuggingFace_ 中心导入登录
登录(“<YOUR_TOKEN>”)
然后,实例化代理
从变压器导入 HFAgent
#StarCoder agent=hfagent(“https://api-inference.huggingface.co/models/bigcode/starcoder ”)#StarCoderBase#agent=hfagent(“https://api-inference.huggingface.co/models/bigcode/starcoderbase ”)#OpenAssistant#agent=HFagent(URL_endpoint=“https://api-inference.huggingface.co/models/openassistant/oasst-sft-4-pythia-12b-epoch-3.5 ”)
这使用的是拥抱脸目前免费提供的推理 API.如果你对此模型(或另一个模型)有自己的推理端点,则可以将上面的 URL 替换为你的 URL 端点。
StarCoder 和 OpenAssistant 可以免费使用,并且在简单的任务上表现得非常出色。但是,在处理更复杂的提示时,检查点不起作用。如果你正面临这样的问题,我们建议你尝试 OpenAI 模型,虽然它不是开源的,但在这个特定的时间表现更好。
你现在可以走了!让我们深入了解一下你现在可以使用的两个 API.
单一执行方法是在使用run()代理的方法时:
agent.run(“给我画一幅河流和湖泊的图画。”)
它会自动选择适合你要执行的任务的工具(或多个工具),并适当地运行它们。它可以在同一指令中执行一个或多个任务(尽管指令越复杂,代理失败的可能性就越大)。
agent.run(“给我画一张海的图片,然后转换图片以添加一个岛屿”)
每个run()操作都是独立的,因此你可以使用不同的任务连续运行几次。
请注意,你的 agent
只是一个大型语言模型,因此提示符中的微小变化可能会产生完全不同的结果。尽可能清楚地解释你要执行的任务是很重要的。我们更深入地研究如何写出好的提示语here。
如果你希望在执行过程中保持状态或将非文本对象传递给代理,则可以通过指定希望代理使用的变量来实现。例如,你可以生成河流与湖泊的第一个图像,并要求模型通过执行以下操作来更新该图片以添加岛屿:
Picture=agent.run(“生成河流和湖泊的图片。”)已更新 _Picture=agent.run(“转换中 picture\
的图像,以向其中添加岛屿。”,PICTURE=picture)
当模型无法理解你的请求并混合工具时,这会很有帮助。一个例子是:
agent.run(“给我画一只在海里游泳的水豚”)
在这里,模型可以用两种方式解释:
text-to-image
生成一只在海里游泳的水豚。text-to-image
生成水豚,然后使用 image-transformation
工具让它在海里游泳如果你想强制执行第一个场景,可以将提示符作为参数传递给它:
agent.run(“给我画一幅画 prompt\
”,prompt=“一只在海里游泳的水豚”)
代理还具有基于聊天的方法,使用以下chat()方法:
agent.chat(“生成江湖图”)
agent.chat(“转换图片,使其中有一块石头”)
当你想要跨指令保持状态时,这是一种有趣的方法。它更适合实验,但往往更适合单个指令,而不是复杂指令(该run()方法更适合处理复杂指令)。
如果你希望传递非文本类型或特定提示,此方法还可以接受参数。
出于演示目的,并且为了使它可以用于所有设置,我们为代理可以访问的几个默认工具创建了远程执行器。这些是使用推理端点创建的。要了解如何自己设置远程执行器工具,我们建议你阅读自定义工具指南。
要使用远程工具运行,只需将指定 remote=True
为run()或chat()即可。
例如,以下命令可以在任何设备上高效运行,而不需要大量的 RAM 或 GPU:
agent.run(“给我画一幅江湖图”,remote=true)
这同样适用于chat():
agent.chat(“给我画一幅江湖图”,remote=true)
这里的“代理”是一个大型语言模型,我们正在提示它,以便它可以访问一组特定的工具。
LLM 非常擅长生成小的代码样本,因此该 API 通过提示 LLM 给出使用一组工具执行任务的小代码样本来利用这一点。然后,此提示将由你为代理提供的任务和你为其提供的工具的描述来完成。通过这种方式,它可以访问你正在使用的工具的文档,特别是它们的预期输入和输出,并可以生成相关代码。
工具非常简单:它们只是一个函数,只有一个名称和一个描述。然后,我们使用这些工具的描述来提示代理。通过提示,我们向代理展示了它如何利用工具来执行查询中所请求的内容。
这是使用全新的工具,而不是管道,因为代理使用非常原子化的工具编写更好的代码。管道的重构程度更高,通常将多个任务组合在一起。工具应该只专注于一个非常简单的任务。
然后,使用我们的小型 Python 解释器对与你的工具一起传递的输入集执行此代码。我们听到你在后面大喊“任意代码执行!”,但让我们解释一下为什么不是这样。
唯一可以调用的函数是你提供的工具和打印函数,因此你可以执行的内容已经受到限制。如果仅限于抱脸工具,你应该是安全的。
然后,我们不允许任何属性查找或导入(无论如何都不需要将输入/输出传递给一小组函数),因此所有最明显的攻击(并且你无论如何都需要提示 LLM 输出它们)都不应该成为问题。如果你希望非常安全,可以使用附加参数 return_code=true 来执行 run()方法,在这种情况下,代理将只返回要执行的代码,你可以决定是否这样做。
执行将在尝试执行非法操作的任何行停止,或者如果代理生成的代码存在常规 Python 错误,则执行将停止。
我们确定了一套工具,可以增强这些代理的能力。以下是我们已集成 transformers
的工具的更新列表:
这些工具集成在变压器中,也可以手动使用,例如:
从变压器导入加载 _ 工具
工具 = 加载 _ 工具(“文本到语音转换”)音频 = 工具(“这是一个文本到语音转换工具”)
虽然我们确定了一套精选的工具,但我们坚信该实现提供的主要价值是快速创建和共享自定义工具的能力。
通过将工具的代码推送到拥挤面空间或模型库,你可以直接使用代理来利用该工具。我们已将一些变压器-不可知论者工具添加到 [ huggingface-tools
组织](https://huggingface.co/huggingface-tools)中:
我们从一开始就使用的文本到图像转换工具是一个远程工具*HuggingFace 工具/文本到图像 *。我们将继续在这个组织和其他组织上发布这样的工具,以进一步增强这种实现。
默认情况下,代理可以访问 [ huggingface-tools
](https://huggingface.co/huggingface-tools)上的工具。我们将向你介绍如何编写和共享你的工具,以及如何利用中遵循指南的 Hub 上驻留的任何自定义工具。
到目前为止,我们已经展示了如何使用代理为你执行操作。但是,代理只生成代码,然后我们使用非常受限制的 Python 解释器执行这些代码。如果你希望使用在不同设置中生成的代码,可以提示代理返回代码,以及工具定义和准确的导入。
例如,以下指令
agent.run(“给我画一幅河湖图”,return_code=true)
返回以下代码
从变压器导入加载 _ 工具
图像 _ 生成器 = 加载 _ 工具(“Huggingface-tools/text-to-image ”)
Image= 图像 _ 生成器(Prompt=“Rivers and Lakes ”)
理返回代码,以及工具定义和准确的导入。
例如,以下指令
agent.run(“给我画一幅河湖图”,return_code=true)
返回以下代码
从变压器导入加载 _ 工具
图像 _ 生成器 = 加载 _ 工具(“Huggingface-tools/text-to-image ”)
Image= 图像 _ 生成器(Prompt=“Rivers and Lakes ”)
然后你可以自己修改和执行。
“”"变形金刚无所不能。
由实验室自动生成。
原始文件位于
https://colab.research.google.com/drive/1c7MHD-T1forUPGcC_jlwsIptOzpG3hSj
Transformers 版本 V4.29 引入了一个新的 API:和探员的 API工具
它在 Transformers 上提供了一个自然语言 API:我们定义了一套精选工具,并设计了一个代理来解释自然语言并使用这些工具。它在设计上是可扩展的;我们策划了一些相关工具,但我们将向你展示如何轻松扩展该系统以使用任何工具。
让我们从几个例子开始,看看这个新的 API 可以实现什么。当涉及到多模式任务时,它的功能特别强大,所以让我们用它来生成图像并大声朗读文本。
#@title 设置转换器 _version=“v4.29.0 ”#@param[“main ”,“v4.29.0 ”]{allow-input:true}
打印(f “使用变形金刚版本设置所有内容 {变形金刚 _ 版本}”)
!pip 安装 HuggingFace_Hub>=0.14.1 Git+https://github.com/huggingface/transformers@$Transformers_ 版本-Q 扩散器加速数据集 Torch SoundFile SentencePiece OpenCV-Python OpenAI
导入 IPython 将声音文件导入为 SF
def 播放 _ 音频(音频):
sf.write(“speech_converted.wav”, audio.numpy(), samplerate=16000) return IPython.display.Audio(“speech_converted.wav”)
从 HuggingFace_HUB 导入笔记本 _ 登录笔记本 _ 登录()
“”"# 用变形金刚做任何事
我们将从实例化开始代理人,这是一个大型语言模型(LLM)。
我们建议使用 OpenAI 以获得最佳效果,但也可以使用完全开源的模型,如 StarCoder 或 OpenAssistant.
“”"
#@title 代理初始化代理 _ 名称 =“OpenAI(API 密钥)”#@param[“StarCoder(HF 令牌)”,“OpenAssistant(HF 令牌)”,“OpenAI(API 密钥)”]
导入 GetPass
如果代理 _ 名称 ==“StarCoder(HF 令牌)”:
from transformers.tools import HfAgent agent = HfAgent(“https://api-inference.huggingface.co/models/bigcode/starcoder”) print(“StarCoder is initialized
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。