ユーザーエクスペリエンスの向上:インタラクティブなチャットボットにOpenAIアシスタントAPIを実装する

美容とファッション業界の向上:OpenAIアシスタントAPIを活用したインタラクティブなチャットボットの導入

イントロダクション

OpenAIによるChatGPTとGPT 3モデルの導入により、世界はAIを統合したアプリケーションの使用にシフトしました。私たちが日常的に使用しているすべてのアプリケーション、電子商取引から銀行のアプリケーションまで、AIはアプリケーションのいくつかの部分、特に大規模な言語モデルを組み込んでいます。その中の1つがOpenAIアシスタントAPIであり、チャットボットと呼ばれます。OpenAIは最近、ユーザーエクスペリエンスを向上させるために設計されたベータ版のアシスタントAPIをリリースしました。

学習目標

  • 特定の指示を持つ目的に特化したAIアシスタントの作成プロセスを学ぶ。
  • アシスタントAPIにおける永続性と無限に長いスレッドの概念を探求する。
  • OpenAIライブラリを使用してAIアシスタントを作成し、名前、指示、モデル、ツールなどのパラメータを指定する方法を実演する。
  • 特定のスレッドでAIアシスタントを実行するためのランの作成プロセスを学ぶ。
  • 言語モデルトークン、コードインタプリタセッション、およびリトリーバルツールの使用などの要素を考慮したアシスタントAPIの価格体系を理解する。

この記事はデータサイエンスブログアソンの一環として公開されました。

アシスタントAPIとは何か?何ができるのか?

OpenAIは最近、ベータ版のアシスタントAPIを発表しました。このAPIを使用すると、OpenAIの大規模な言語モデルとツールを使用してAIアシスタントを構築および統合することができます。企業はこれらのアシスタントを特定の目的に合わせてカスタマイズし、その特定の用途のための関連データを提供します。このアシスタントの例としては、天気情報を提供するAI天気アシスタントや、旅行に関するクエリに答えるAIトラベルアシスタントなどがあります。

これらのアシスタントは状態を保持するように設計されています。つまり、以前の会話を大部分で保持し、開発者が状態管理を心配する必要がなくなります(それをOpenAIに任せます)。典型的な流れは以下の通りです:

  • アシスタントの作成:データの選択、使用するモデル、アシスタントへの指示、使用するツールを選択します。
  • 次に、スレッドを作成します。スレッドはユーザーのメッセージとLLM(Large Language Models)の返信を保存します。このスレッドはアシスタントの状態を管理し、OpenAIがそれに対応します。
  • スレッドにメッセージを追加します。これはユーザーがAIアシスタントに入力するメッセージやアシスタントの応答です。
  • 最後に、そのスレッド上でアシスタントを実行します。スレッド上のメッセージに基づいて、AIアシスタントは適切な応答を提供するためにOpenAI LLMを呼び出し、次のセクションで説明する一部のツールにも連絡する場合があります。

これらのアシスタント、スレッド、メッセージ、およびランはアシスタントAPIにおけるオブジェクトと呼ばれます。これらのオブジェクトに加えて、アシスタントが実行中に実行された詳細なステップを提供するRun Stepという別のオブジェクトもあります。これにより、内部の機能に関する洞察が提供されます。

ツール – アシスタントAPIのアーセナル

私たちは常にツールという言葉を使っていますが、OpenAIアシスタントAPIとは何の関係があるのでしょうか?ツールは、アシスタントAPIが追加のタスクを実行するための武器のようなものです。これにはKnowledge RetrievalやCode InterpreterなどのOpenAIホストされたツールが含まれます。また、この記事ではカスタムツールの定義については説明しませんが、Function Callingを使用して独自のツールを定義することもできます。

では、残りのツールについて詳しく見ていきましょう。

  • コードインタプリタ: これは、独自のPythonスクリプトを実行するための環境を提供する、サンドボックス化されたPythonコードの解釈機能です。データ分析などのシナリオで役立ち、アシスタントがCSVデータを分析するためのコードを生成し、実行してユーザーに応答することができます。
  • Function Calling: 開発者はカスタムツールを定義することができ、これらのツールとその出力を利用してアシスタントが反復的に応答を構築することができます。
  • Retrieval: AIアシスタントにとって必要不可欠で、データの解析を行います。たとえば、製品のためのアシスタントを作成する際には、関連する情報をチャンクに分割し、埋め込み、ベクトルストアに格納します。ユーザーのクエリに応答する際に、アシスタントはこのデータを知識ベースから取得します。

アシスタントの構築

このセクションでは、アシスタントの作成、スレッドへのメッセージの追加、およびそのスレッド上でのアシスタントの実行について説明します。まず、OpenAIライブラリをダウンロードします。

# Assistants APIを含むopenaiライブラリをインストールします!pip install openai

最新バージョン(この記事作成時の最新バージョンはv.1.2.3です)を使用していることを確認してください。まず、クライアントを作成します。

< pre># 環境変数を読み込むためのosライブラリのインポートimport os# Assistants APIと対話するためのopenaiライブラリのインポートfrom openai import OpenAI# OPENAI APIキーを環境変数に格納os.environ["OPENAI_API_KEY"] = "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"# APIキーを指定してOpenAIクライアントを作成client = OpenAI(api_key = os.environ['OPENAI_API_KEY'])

アシスタントの作成

openaiライブラリからOpenAIクラスをインポートします。そして、OpenAI APIトークンを環境変数に格納します。そして、変数api_keyを使用してOpenAIクラスのインスタンスを作成します。client変数はOpenAIクラスのインスタンスです。今度はアシスタントを作成する時です。

< pre># アシスタントを作成しますassistant = client.beta.assistants.create( name="PostgreSQL Expret", instructions="あなたはPostgreSQLの専門家であり、例を使って簡単な方法で任意の質問に答えることができます", model="gpt-4-1106-preview", tools=[{"type":"retrieval"}])< ul>

  • アシスタントを作成するために、assistantsクラスのcreate()メソッドを呼び出し、以下のパラメータを渡します
  • name: アシスタントの名前です。この例ではPostgresSQL Expertと呼んでいます
  • instructions: アシスタントに与えられるコンテキスト/追加情報です。
  • model: アシスタントが応答を生成するために使用するモデルです。この場合、新しく発売されたGPT-4プレビューモデルを使用しています。
  • tools: アシスタントが応答を生成するために使用する前述のツールです。ツールを辞書のリストとして渡します。ここでは、データを取り込むためのリトリーバルツールを使用しています。
  • ドキュメントをロードする

    したがって、アシスタントを作成し、assistant変数に割り当てました。次のステップはドキュメントを読み込むことです。

    < pre># ファイルをアップロードしますfile = client.files.create( file=open( "/content/LearnPostgres.pdf", "rb", ), purpose="assistants",)# アシスタントを更新しますassistant = client.beta.assistants.update( assistant.id, file_ids=[file.id],)< ul>

  • 上記のコードは、ドキュメントを作成してアシスタントに取り込むためのものです。ここでは、PostgreSQLに関する学習情報を含むPDF(PDFをダウンロードするにはここをクリック)を持っています。
  • OpenAIのfilesクラスを使用して、create()メソッドを使用してファイルを作成し、purpose変数に値として「assistants」を渡します。これはアシスタントに追加する必要があります。
  • 2番目のステップでは、作成したファイルでアシスタントを更新します。これにはupdate()メソッドを呼び出し、アシスタントID(すでにアシスタントオブジェクトを作成し、このオブジェクトには固有のIDが含まれています)とファイルID(各作成されたファイルには固有のIDがあります)を渡します。
  • アシスタントの構成にリトリーバルツールを含めたため、LearnPostres.pdfをチャンキングし、埋め込みに変換し、関連する情報を取得する処理が行われます。

    スレッドの作成とメッセージの保存

    このセクションでは、スレッドを作成し、メッセージを追加します。まず、新しいスレッドを作成します。

    # スレッドを作成するthread = client.beta.threads.create()

    threads クラスの create() メソッドは、スレッドを作成するために使用されます。スレッドは会話のセッションを表します。 assistants と同様に、スレッドオブジェクトにも固有のIDが関連付けられます。また、スレッドにはアシスタントIDを渡していないことに注意してください。これは、スレッドが分離されてアシスタントとは関連付けられていないことを意味しています。さて、新しく作成したスレッドにメッセージを追加しましょう。

    # スレッドに最初のメッセージを追加するmessage = client.beta.threads.messages.create(    thread_id=thread.id,    role="user",    content="PostgreSQLでテーブルを作成する方法")
    • メッセージはユーザーのクエリとレスポンスを含む会話のブロックです。スレッドにメッセージを追加するには、 messages クラスの create() メソッドを使用し、次のパラメータを指定します。
    • thread_id: 作成した各スレッドに関連付けられた固有のIDです。ここでは、以前に開始したスレッドのIDを渡します。
    • role: このメッセージの送信者は誰ですか?この例では、ユーザーです。
    • content: ユーザーのクエリです。この例では、“PostgreSQLでテーブルを作成する方法” を指定します。

    アシスタントの実行

    さて、アシスタントを実行するために、アシスタントが実行されるスレッドを指定して Run を作成します。

    # Runを作成するrun = client.beta.threads.runs.create(    thread_id=thread.id,    assistant_id=assistant.id)
    • Runを作成するには、runs クラスの create() メソッドを使用します。スレッドID(つまり、アシスタントを実行するスレッド)とアシスタントID(つまり、実行するアシスタント)を run 変数に渡します。
    • Runの作成はレスポンスを生成しません。代わりに、Runが完了するまで待機する必要があります。Runは非同期タスクとして考えることができ、Runが実行を終了したかどうかをポーリングする必要があります。

    関数の作成

    オブジェクトには、特定の Run が 待機中 / 進行中 / 完了しているかどうかを示す status という変数があります。そのため、以下の関数を作成します。

    import time# Runが完了したかどうかをチェックするための関数を作成するdef poll_run(run, thread):    while run.status != "completed":        run = client.beta.threads.runs.retrieve(            thread_id=thread.id,            run_id=run.id,        )        time.sleep(0.5)    return run    # 完了するまで待機するrun = poll_run(run, thread)
    • ここでは、poll_run() という関数を作成します。この関数は以前に作成した Run と Thread オブジェクトを受け取ります。
    • Runの status“completed” になると、Runが処理されたと言われます。そのため、Runが完了したかどうかをループでチェックするために run をポーリングします。
    • このループでは、 runs クラスの retrieve() メソッドを呼び出し、RunのIDとThreadのIDを渡します。retrieveメソッドは、更新された status を持つ同じRunオブジェクトを返します。
    • 完了状態が更新されているかどうかを確認し、Runオブジェクトを0.5秒ごとに取得して完了をポーリングします。
    • Runの status が完了になった場合、Runを返します。

    この Run ステップでは、作成したアシスタントは、指定したモデルの利用可能なデータコールからユーザーのクエリに関連する関連情報を取得するためにリトリーバルツールを利用し、応答を生成します。この生成された応答はスレッドに保存されます。さて、スレッドには2つのメッセージがあります。1つはユーザーのクエリで、もう1つはアシスタントの応答です。

    スレッド内にメッセージを保存する方法

    まず、スレッドに保存されたメッセージを取得しましょう。

    # メッセージを抽出するmessages = client.beta.threads.messages.list(thread_id=thread.id)for m in messages:    print(f"{m.role}: {m.content[0].text.value}")
    • 最初のステップでは、messagesクラスのlist()メソッドを呼び出してスレッド内のすべてのメッセージを抽出します。抽出するために、スレッドのIDを渡します
    • 次に、リスト内のすべてのメッセージをループで処理し、出力します。スレッドにアップロードしたメッセージやアシスタントが生成したメッセージは、メッセージオブジェクトのmessage.content[0].text.valueに保存されます

    上記のイメージでは、トップにはアシスタントの応答、ボトムにはユーザーのクエリが表示されています。さて、2番目のメッセージを入力して、アシスタントが前回の会話にアクセスできるかテストしましょう。

    # 2番目のメッセージを作成するmessage2 = client.beta.threads.messages.create(    thread_id=thread.id,    role="user",    content="作成したテーブルに値を追加してください")# ルンオブジェクトを作成するrun = client.beta.threads.runs.create(    thread_id=thread.id,    assistant_id=assistant.id)# Runメソッドの完了を待つrun = poll_run(run, thread)# メッセージを抽出するmessages = client.beta.threads.messages.list(thread_id=thread.id)for m in messages:    print(f"{m.role}: {m.content[0].text.value}")
    • ここでは、message2という別のメッセージを作成し、今回はクエリ「作成したテーブルに値を追加してください」を渡しています。このクエリは前回の会話を参照しており、そのためにスレッドに渡されます。
    • その後、Runを作成し、アシスタントと共に実行し、ポーリングします。

    最後に、スレッドからすべてのメッセージを取得し、出力します。

    アシスタントは確かに前回の会話から情報にアクセスし、検索ツールを使用して提供されたクエリに対する応答を生成することができました。したがって、OpenAIアシスタントAPIを使用することで、カスタムアシスタントを作成し、それをアプリケーション内の任意の形式に統合することができます。OpenAIでは、アシスタントAPIが使用できる多くのツールをリリースする予定もあります。

    アシスタントAPIの料金設定

    アシスタントAPIの料金は、選択したモデルと使用するツールに基づいて請求されます。検索やコード解釈などのツールにはそれぞれ独自のコストがあります。モデルについては、OpenAIの各モデルには、入力に使用するトークンの数と生成される出力トークンの数に基づいて独自のコストがあります。モデルの価格については、こちらでOpenAIのLarge Language Modelの価格をチェックしてください。

    コード解釈に関しては、セッションごとに$0.03の料金がかかり、デフォルトでは1時間の有効なセッションです。セッションはスレッドに関連付けられるため、実行中のスレッドがN個ある場合、料金はN * $0.03になります。

    一方、検索はアシスタントごとにGBあたり$0.20の価格で提供されます。N個のアシスタントがこのツールにアクセスする場合、価格はN * $0.2 / Dayとなります。スレッドの数は検索の価格には影響しません。

    データプライバシーと倫理的な懸念事項

    倫理的な懸念事項とユーザーデータの使用に関して、OpenAIはデータプライバシーを最優先に考えています。ユーザーはOpenAI APIに送信されたデータとそれから受け取ったデータの唯一の所有者です。また、OpenAIはユーザーデータでトレーニングを行わず、データの保存期間はユーザーの制御下にあります。また、OpenAIでトレーニングされたカスタムモデルもそれを作成したユーザーにのみ属しています。

    OpenAIは厳格なコンプライアンスを遵守しています。データの暗号化はリスト(AES-256)および転送(TLS 1.2+)中に有効にしています。OpenAIはSOC 2コンプライアンスに対して監査されています。これは、OpenAIがデータのプライバシーとセキュリティに厳格な取り組みを行っていることを意味します。OpenAIは組織内でデータにアクセスできる人を厳密に管理します。

    結論

    OpenAI Assistants APIは、AIアシスタントをアプリケーションに作成および統合するための新しいアプローチを提供しています。これらは、特定の目的/タスクに対処するために開発されたアシスタントです。このAPIの機能とツール、コードインタプリタ、リトリーバル、カスタムツールの作成などを探求すると、開発者が強力なアーセナルを手に入れたことが明らかになります。アシスタントの持続的な性質は、スレッドを介してシームレスに管理され、開発者に負担を軽減し、個別のAI体験の作成に集中することを可能にします。

    キーポイント

    • Assistants APIを使用すると、特定のタスクに合わせた目的のために作られたAIアシスタントの開発が可能です。
    • Code InterpreterやRetrievalなどのツールを含めることで、AIアシスタントが実現できる範囲が広がります。カスタムPythonコードの実行から外部知識へのアクセスまで。
    • APIは持続的かつ無限長のスレッドを導入し、状態管理を簡素化し、開発者に柔軟性を提供します。
    • スレッドとアシスタントは分離されており、開発者は複製されたスレッドを利用したり、他のアシスタントを実行したりすることができます。
    • 関数呼び出しツールを使用することで、アシスタントが応答生成プロセスで使用できるカスタムツールを開発者が利用できます。

    よくある質問

    参考文献

    OpenAI Assistants APIの公式ドキュメンテーションは以下の通りです

    • https://platform.openai.com/docs/assistants/overview
    • https://platform.openai.com/docs/api-reference/assistants

    この記事に表示されるメディアはAnalytics Vidhyaの所有ではなく、著者の裁量によって使用されています。

    We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

    Share:

    Was this article helpful?

    93 out of 132 found this helpful

    Discover more

    データサイエンス

    超幾何分布の理解

    二項分布は、データサイエンスの内外でよく知られた分布ですしかし、あなたはその人気のないいところのいとこである超幾何分...

    AI研究

    グーグルの研究者たちは、差分プライバシーを持つ機械学習システムの監査において、新たなシングルランアプローチを発表しました

    差分プライバシー(DP)は、モデルの訓練に使用される個人データのプライバシーを保護するための機械学習のよく知られた技術...

    機械学習

    Google AIが簡単なエンドツーエンドの拡散ベースのテキスト読み上げE3-TTSを提案します:拡散に基づくシンプルで効率的なエンドツーエンドのテキスト読み上げモデルに基づくものです

    機械学習において、拡散モデルは画像や音声生成のタスクによく使われる生成モデルです。拡散モデルは、複雑なデータ分布をよ...

    AIニュース

    「科学者たちが歴史的なコードを解読し、失われた秘密を明らかにする方法」

    「DECRYPTプロジェクトは、言語学者とコンピュータ科学者の共同作業で、歴史的な暗号を解読するプロセスを自動化することを目...

    AI研究

    このAI研究論文は、視覚の位置推定とマッピングのための深層学習に関する包括的な調査を提供しています

    もし私があなたに「今どこにいるの?」または「周りの様子はどうですか?」と尋ねたら、人間の多感覚知覚という独特な能力の...

    コンピュータサイエンス

    「FTC、ChatGPTが消費者に悪影響を与えるか調査中」

    「エージェンシーがOpenAIのAIリスクに関する文書を要求したことは、同社にとって最大の米国の規制上の脅威です」