Transformers documentation

Transformers Agents

You are viewing v4.36.1 version. A newer version v4.46.3 is available.
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Transformers Agents

Transformers Agentsは、い぀でも倉曎される可胜性のある実隓的なAPIです。゚ヌゞェントが返す結果は、APIたたは基瀎ずなるモデルが倉曎される可胜性があるため、異なるこずがありたす。

Transformersバヌゞョンv4.29.0は、ツヌルず゚ヌゞェントのコンセプトを基に構築されおいたす。このcolabで詊すこずができたす。

芁するに、これはtransformersの䞊に自然蚀語APIを提䟛するものです私たちは䞀連の厳遞されたツヌルを定矩し、自然蚀語を解釈し、これらのツヌルを䜿甚する゚ヌゞェントを蚭蚈したす。これは蚭蚈䞊拡匵可胜です。私たちはいく぀かの関連するツヌルを厳遞したしたが、コミュニティによっお開発された任意のツヌルを䜿甚するためにシステムを簡単に拡匵できる方法も瀺したす。

この新しいAPIで䜕ができるかのいく぀かの䟋から始めたしょう。特に倚モヌダルなタスクに関しお匷力ですので、画像を生成したりテキストを読み䞊げたりするのに最適です。

䞊蚘のテキストの䞊に、日本語の翻蚳を提䟛したす。

agent.run("Caption the following image", image=image)
Input Output
A beaver is swimming in the water

agent.run("Read the following text out loud", text=text)
Input Output
A beaver is swimming in the water

agent.run(
    "In the following `document`, where will the TRRF Scientific Advisory Council Meeting take place?",
    document=document,
)
Input Output
ballroom foyer

Quickstart

agent.runを䜿甚する前に、゚ヌゞェントをむンスタンス化する必芁がありたす。゚ヌゞェントは、倧芏暡な蚀語モデルLLMです。 OpenAIモデルずBigCode、OpenAssistantからのオヌプン゜ヌスの代替モデルをサポヌトしおいたす。OpenAIモデルはパフォヌマンスが優れおいたすが、OpenAIのAPIキヌが必芁であり、無料で䜿甚するこずはできたせん。䞀方、Hugging FaceはBigCodeずOpenAssistantモデルの゚ンドポむントぞの無料アクセスを提䟛しおいたす。

たず、デフォルトの䟝存関係をすべおむンストヌルするためにagentsの゚クストラをむンストヌルしおください。

pip install transformers[agents]

OpenAIモデルを䜿甚するには、openaiの䟝存関係をむンストヌルした埌、OpenAiAgentをむンスタンス化したす。

pip install openai
from transformers import OpenAiAgent

agent = OpenAiAgent(model="text-davinci-003", api_key="<your_api_key>")

BigCodeたたはOpenAssistantを䜿甚するには、たずログむンしおInference APIにアクセスしおください。

from huggingface_hub import login

login("<YOUR_TOKEN>")

次に、゚ヌゞェントをむンスタンス化しおください。

from transformers import 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")

これは、Hugging Faceが珟圚無料で提䟛しおいる掚論APIを䜿甚しおいたす。このモデルたたは別のモデルの独自の掚論゚ンドポむントをお持ちの堎合は、䞊蚘のURL゚ンドポむントをご自分のURL゚ンドポむントで眮き換えるこずができたす。

StarCoderずOpenAssistantは無料で利甚でき、シンプルなタスクには非垞に優れた性胜を発揮したす。ただし、より耇雑なプロンプトを凊理する際には、チェックポむントが十分でないこずがありたす。そのような堎合には、珟時点ではオヌプン゜ヌスではないものの、パフォヌマンスが向䞊する可胜性のあるOpenAIモデルを詊しおみるこずをお勧めしたす。

これで準備が敎いたしたこれから、あなたが利甚できる2぀のAPIに぀いお詳しく説明したす。

Single execution (run)

単䞀実行メ゜ッドは、゚ヌゞェントの run() メ゜ッドを䜿甚する堎合です。

agent.run("Draw me a picture of rivers and lakes.")

これは、実行したいタスクに適したツヌルたたはツヌルを自動的に遞択し、適切に実行したす。1぀たたは耇数のタスクを同じ呜什で実行するこずができたすただし、呜什が耇雑であるほど、゚ヌゞェントが倱敗する可胜性が高くなりたす。

agent.run("Draw me a picture of the sea then transform the picture to add an island")

run() 操䜜は独立しお実行できたすので、異なるタスクで䜕床も実行するこずができたす。

泚意点ずしお、あなたの agent は単なる倧芏暡な蚀語モデルであるため、プロンプトのわずかな倉曎でも完党に異なる結果が埗られる可胜性がありたす。したがっお、実行したいタスクをできるだけ明確に説明するこずが重芁です。良いプロンプトの曞き方に぀いおは、こちら で詳しく説明しおいたす。

実行ごずに状態を保持したり、テキスト以倖のオブゞェクトを゚ヌゞェントに枡したりする堎合は、゚ヌゞェントが䜿甚する倉数を指定するこずができたす。䟋えば、最初の川や湖の画像を生成し、その画像に島を远加するようにモデルに指瀺するには、次のように行うこずができたす

picture = agent.run("Generate a picture of rivers and lakes.")
updated_picture = agent.run("Transform the image in `picture` to add an island to it.", picture=picture)

これは、モデルがあなたのリク゚ストを理解できない堎合や、ツヌルを混同する堎合に圹立぀こずがありたす。䟋えば

agent.run("Draw me the picture of a capybara swimming in the sea")

ここでは、モデルは2぀の方法で解釈できたす

  • text-to-imageに海で泳ぐカピバラを生成させる
  • たたは、text-to-imageでカピバラを生成し、それを海で泳がせるためにimage-transformationツヌルを䜿甚する

最初のシナリオを匷制したい堎合は、プロンプトを匕数ずしお枡すこずができたす

agent.run("Draw me a picture of the `prompt`", prompt="a capybara swimming in the sea")

Chat-based execution (チャット)

゚ヌゞェントは、chat() メ゜ッドを䜿甚するこずで、チャットベヌスのアプロヌチも可胜です。

agent.chat("Transform the picture so that there is a rock in there")

これは、指瀺をたたいで状態を保持したい堎合に䟿利なアプロヌチで、単䞀の指瀺に比べお耇雑な指瀺を凊理するのは難しいかもしれたせんその堎合は run() メ゜ッドの方が適しおいたす。

このメ゜ッドは、非テキスト型の匕数や特定のプロンプトを枡したい堎合にも䜿甚できたす。

⚠ Remote execution

デモンストレヌションの目的やすべおのセットアップで䜿甚できるように、リリヌスのためにいく぀かのデフォルトツヌル甚のリモヌト実行ツヌルも䜜成したした。これらは 掚論゚ンドポむント を䜿甚しお䜜成されたす。

これらは珟圚オフになっおいたすが、リモヌト実行ツヌルを自分で蚭定する方法に぀いおは、カスタムツヌルガむド を読むこずをお勧めしたす。

What’s happening here? What are tools, and what are agents?

゚ヌゞェントずツヌルのダむアグラム

Agents

ここでの「゚ヌゞェント」ずは、倧芏暡な蚀語モデルのこずであり、特定の䞀連のツヌルにアクセスできるようにプロンプトを蚭定しおいたす。

LLM倧芏暡蚀語モデルは、コヌドの小さなサンプルを生成するのにかなり優れおおり、このAPIは、゚ヌゞェントに特定のツヌルセットを䜿甚しおタスクを実行するコヌドの小さなサンプルを生成させるこずに利甚しおいたす。このプロンプトは、゚ヌゞェントにタスクずツヌルの説明を提䟛するこずで、゚ヌゞェントが䜿甚しおいるツヌルのドキュメントにアクセスし、関連するコヌドを生成できるようになりたす。

Tools

ツヌルは非垞に単玔で、名前ず説明からなる単䞀の関数です。それから、これらのツヌルの説明を䜿甚しお゚ヌゞェントをプロンプトしたす。プロンプトを通じお、゚ヌゞェントに、ツヌルを䜿甚しおク゚リで芁求されたタスクをどのように実行するかを瀺したす。特に、ツヌルの期埅される入力ず出力を瀺したす。

これは新しいツヌルを䜿甚しおおり、パむプラむンではなくツヌルを䜿甚しおいたす。なぜなら、゚ヌゞェントは非垞に原子的なツヌルでより良いコヌドを生成するからです。パむプラむンはよりリファクタリングされ、しばしば耇数のタスクを組み合わせおいたす。ツヌルは非垞に単玔なタスクに焊点を圓おるこずを意図しおいたす。

Code-execution?!

このコヌドは、ツヌルずツヌルず䞀緒に枡される入力のセットで、圓瀟の小芏暡なPythonむンタヌプリタで実行されたす。すでに提䟛されたツヌルずprint関数しか呌び出すこずができないため、実行できるこずはすでに制限されおいたす。Hugging Faceのツヌルに制限されおいるため、安党だず考えおも問題ありたせん。

さらに、属性の怜玢やむンポヌトは蚱可しおおらずそれらは枡された入力/出力を凊理するためには必芁ないはずです、最も明らかな攻撃は問題ありたせん゚ヌゞェントにそれらを出力するようにプロンプトする必芁がありたす。超安党な偎に立ちたい堎合は、远加の匕数 return_code=True を指定しお run() メ゜ッドを実行できたす。その堎合、゚ヌゞェントは実行するコヌドを返すだけで、実行するかどうかはあなた次第です。

実行は、違法な操䜜を詊みる行たたぱヌゞェントが生成したコヌドに通垞のPython゚ラヌがある堎合に停止したす。

A curated set of tools

私たちは、このような゚ヌゞェントを匷化できるツヌルのセットを特定したす。以䞋は、transformersに統合されたツヌルの曎新されたリストです

  • ドキュメント質問応答: 画像圢匏のドキュメントPDFなどが䞎えられた堎合、このドキュメントに関する質問に回答したすDonut
  • テキスト質問応答: 長いテキストず質問が䞎えられた堎合、テキスト内の質問に回答したすFlan-T5
  • 無条件の画像キャプション: 画像にキャプションを付けたすBLIP
  • 画像質問応答: 画像が䞎えられた堎合、その画像に関する質問に回答したすVILT
  • 画像セグメンテヌション: 画像ずプロンプトが䞎えられた堎合、そのプロンプトのセグメンテヌションマスクを出力したすCLIPSeg
  • 音声からテキストぞの倉換: 人の話し声のオヌディオ録音が䞎えられた堎合、その音声をテキストに転蚘したすWhisper
  • テキストから音声ぞの倉換: テキストを音声に倉換したすSpeechT5
  • れロショットテキスト分類: テキストずラベルのリストが䞎えられた堎合、テキストが最も察応するラベルを識別したすBART
  • テキスト芁玄: 長いテキストを1぀たたは数文に芁玄したすBART
  • 翻蚳: テキストを指定された蚀語に翻蚳したすNLLB

これらのツヌルはtransformersに統合されおおり、手動でも䜿甚できたす。たずえば、次のように䜿甚できたす

from transformers import load_tool

tool = load_tool("text-to-speech")
audio = tool("This is a text to speech tool")

Custom tools

私たちは、厳遞されたツヌルのセットを特定する䞀方、この実装が提䟛する䞻芁な䟡倀は、カスタムツヌルを迅速に䜜成しお共有できる胜力だず匷く信じおいたす。

ツヌルのコヌドをHugging Face Spaceたたはモデルリポゞトリにプッシュするこずで、゚ヌゞェントず盎接連携しおツヌルを掻甚できたす。huggingface-tools organizationには、transformers非䟝存のいく぀かのツヌルが远加されたした

  • テキストダりンロヌダヌ: りェブURLからテキストをダりンロヌドするためのツヌル
  • テキストから画像ぞ: プロンプトに埓っお画像を生成するためのツヌル。安定した拡散を掻甚したす
  • 画像倉換: 初期画像ずプロンプトを指定しお画像を倉曎するためのツヌル。instruct pix2pixの安定した拡散を掻甚したす
  • テキストからビデオぞ: プロンプトに埓っお小さなビデオを生成するためのツヌル。damo-vilabを掻甚したす

最初から䜿甚しおいるテキストから画像ぞのツヌルは、huggingface-tools/text-to-imageにあるリモヌトツヌルです今埌も、この組織および他の組織にさらにこのようなツヌルをリリヌスし、この実装をさらに匷化しおいきたす。

゚ヌゞェントはデフォルトでhuggingface-toolsにあるツヌルにアクセスできたす。 ツヌルの䜜成ず共有方法、たたHubに存圚するカスタムツヌルを掻甚する方法に぀いおの詳现は、次のガむドで説明しおいたす。

Code generation

これたで、゚ヌゞェントを䜿甚しおあなたのためにアクションを実行する方法を瀺したした。ただし、゚ヌゞェントはコヌドを生成するだけで、非垞に制限されたPythonむンタヌプリタを䜿甚しお実行したす。生成されたコヌドを異なる環境で䜿甚したい堎合、゚ヌゞェントにコヌドを返すように指瀺できたす。ツヌルの定矩ず正確なむンポヌトも含めお。

䟋えば、以䞋の呜什

agent.run("Draw me a picture of rivers and lakes", return_code=True)

次のコヌドを返したす

from transformers import load_tool

image_generator = load_tool("huggingface-tools/text-to-image")

image = image_generator(prompt="rivers and lakes")

その埌、自分で倉曎しお実行できたす。