Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
勉強会4_アップデートされたAssistantsAPIを試す
Search
milky04
May 19, 2024
Programming
0
1.8k
勉強会4_アップデートされたAssistantsAPIを試す
社内勉強会資料です(2024/5/17)
milky04
May 19, 2024
Tweet
Share
More Decks by milky04
See All by milky04
勉強会2_機械学習のモデル学習と開発について
milky04
0
10
勉強会3_LLMを活用する技術について
milky04
0
16
勉強会1_SlackのAIチャットボットを作ってみた
milky04
0
20
Other Decks in Programming
See All in Programming
GoのWasmでWebRTC P2Pで通信する
ponyo877
0
280
record4s --- Extensible Records for Scala 3, and Domain Modeling with Structural Types
tarao
2
11k
From Spring Boot 2 to Spring Boot 3 with Java 22 and Jakarta EE
ivargrimstad
0
380
チームの成長を促すためのスプリントレトロスペクティブの活用法 / How to use sprint retrospectives to promote team growth
mackey0225
3
430
ABEMA 画像配信基盤における Cloudflare Workers の活用
peaceiris
7
580
Dive into gomock / Go Conference 2024
utgwkk
13
3.3k
Spring Bootと行レベルセキュリティではじめるマルチテナントアーキテクチャ / Multi-tenant architecture using Row-Level Security
jaguar_imo
1
820
短期AHCで勝つためのテクニック
shun_pi
3
1.5k
Streaming I/O
macdice
0
240
Droid Knights 2024 Github Actions 효율적인 배포 환경 만들기
kts6056
0
110
日付と闘う-和暦は難しい / vs Dates - Japanese Chronology is Difficult
wkwkhautbois
0
120
マイクロサービス基盤にフルマネージドサービスではなくKubernetesを選択する理由
bgpat
7
1.8k
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
457
32k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
247
20k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
243
1.2M
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
34
9k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
15
1.6k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
275
13k
The Illustrated Children's Guide to Kubernetes
chrisshort
34
47k
Mobile First: as difficult as doing things right
swwweet
218
8.7k
What the flash - Photography Introduction
edds
64
11k
Building Applications with DynamoDB
mza
89
5.8k
Music & Morning Musume
bryan
42
5.7k
GraphQLとの向き合い方2022年版
quramy
34
13k
Transcript
アップデートされたAssistants APIを試す
はじめに • 2024年4月にOpenAIのAssistants APIがv1→v2へアップデートされた。 →それにより新機能追加や改善され、アプデ前にあった料金がかなりか かってしまう問題も解決されたため試したい。 ※上記問題があったため、アプデ前のは試していない。
Assistants APIとは① • さまざまなタスクを実行できる強力な「AIアシスタント」を作成するためのAPI。 ※現在PythonとNode.jsで使用可能 • アシスタントは、特定の指示を設定することでOpenAIのモデルを呼び出し、その個性や能 力を調整することが可能。 ※OpenAIのAPIのため、使用可能なモデルはOpenAIのものに限られる。 •
現在「file_search(旧Retrieval)」「code_interpreter」「function_calling」の3つのツールをサ ポートしている。アシスタントはこれら複数のツールに同時にアクセスが可能。 ※ツールについては後述
Assistants APIとは② • アシスタントは永続的なスレッドにアクセスすることが可能。スレッドはメッセージの履歴を 保持し、会話がモデルのコンテキスト長を超える場合には切り捨てることで、AIアプリケー ション開発を容易にする。一度スレッドを作成すると、ユーザーが返信する際にはメッセー ジをスレッドに追加するだけ。 ※コンテキスト長:保持可能なトークン数 ※スレッドは会話セッションのことを指す。1つのアシスタントで複数の会話履歴を管理可能。 例えばChatBotで利用ユーザー毎にスレッド作成し、別々に会話履歴を保持することが可能。
• アシスタントは、作成の過程やアシスタントとユーザ間のスレッドの一部として、様々な形 式のファイルにアクセスが可能。ツールを使用する場合、アシスタントはファイル(画像、ス プレッドシート等)を作成し、メッセージ作成時に参照するファイルを引用することも可能。
file_search(旧Retrieval) • 独自の製品情報やユーザーから提供されたドキュメントなど、モデルの外部からの知識で アシスタントを強化する。 • ドキュメントを自動的に解析してチャンク化し、埋め込みを作成して保存し、Vector検索と キーワード検索の両方を使用して関連コンテンツを取得してユーザーからの質問に答える。 ※チャンク化:多くの情報や知識を小さなまとまり(チャンク)に分割して処理する技術のこと。 ※Vector検索(類似性検索):外部情報を事前にVector化したうえでVectorDBに保持してお き、inputと近しいVectorである情報がinputと関連性が高いとして回答に使用する
※サポートされているファイルについては以下(txt、docx、pdf、csv、pyなど) https://platform.openai.com/docs/assistants/tools/file-search/supported-files
file_search(旧Retrieval)の問題点 • AIアシスタントが返答する際に、用意したファイルをうまく参照してくれない 場合があるらしい。 • また、 file_searchする場合、通常の応答よりも返答が遅くなり、費用がか かってしまう。
code_interpreter • サンドボックス化された実行環境でPythonコードを記述し、実行することが可能。 ※サンドボックス:通常利用領域から隔離された仮想環境。 • 様々なデータやフォーマットのファイルを処理し、データやグラフの画像を含むファ イルを生成可能。 • アシスタントは、実行に失敗するコードを生成した場合、コードの実行が成功する まで別のコードの実行を試みるなど、ある程度自律的に動作をすることが可能。
function_calling • アシスタントに関数定義を追加しておくことで、呼び出す必要がある場合に、 関数呼び出しの要求を返すことが可能。 • 例:直近の天気を取得する関数、Web検索により外部情報を取得する関数 など
アップデートによる新機能/改善点① • file_searchの性能向上(旧Retrieval) アプデ前までは1つのアシスタントに20個までしかファイルを指定できなかった。 →アプデにより、10000個まで可能になった。正確性と速度も向上したとのこと。 file_searchと並行して、「vector_store」が追加された。ファイルがvector_storeに追 加されると、自動的に解析や分割、埋め込みが行われ、検索可能な状態となる。 vector_storeはアシスタント間で共有可能。 ※埋め込み:2つのテキスト間の関連性を測定するために使用できるテキストの ベクトル表現。2つのベクトル間の距離によって、それらの関連性が測定される。
アップデートによる新機能/改善点② • スレッドのメッセージ保持上限が指定可能になった アプデ前までは1つのスレッドのメッセージ保持上限が指定できなかった。 そのため、1度作ったスレッドでは過去全てのメッセージが履歴として使用される ため、会話が伸びると費用が膨大になってしまうという問題があった。 →アプデにより、1つのスレッドに何件まで過去のメッセージを含めるかを指定 可能となった。 ※メッセージ保持上限を超えた場合は、最も古いメッセージがスレッドから削除 される。
アップデートによる新機能/改善点③ • 特定の実行で使用するツールの指定が可能になった アプデ前まではアシスタントが持っているツールは、自動的に全ての実行で使 用される可能性があった。 →アプデにより、アシスタントの持っているツールのうち、どれを使用するかを 特定の実行毎に指定することが可能になった。これで思わぬところで不要な ツールを使用してしまう事故が防げる。 その他、特定の実行毎に指定できるパラメータ(tempreture、JSONモードなど)が 増えたので、アプデ前よりも柔軟なタスクに対応可能となった。
その他アップデートによる新機能/改善点 • 使用するトークンの上限が指定可能になった。 • ファインチューニングモデルが利用可能になった。 • ストリーミングが利用可能になった。 • 「Node.js SDK」と「Python
SDK」に、「Streaming Helper」と「Polling Helper」が追加された。 ※Helper:アシスタントと対話する際の応答をサポートするためのもの。Streamingはリ アルタイムで遂次的に応答を出力。Pollingは一定の間隔で定期的にAPIの更新状態を 確認し、終了状態になったら一度に応答を出力。
Assistants APIを使用したChat botを試す • 今回は主にfile_search、code_interpreter、スレッドによる会話履歴保持を試します。 • 今回はWebアプリ起動時に一度だけスレッドを作成しています。この場合、Webア プリ終了時にスレッドは破棄されます。 ※Webアプリ終了してから再起動した際にも、Webアプリ終了前のスレッドが保持 されるようにすることが可能かは未確認。
• Chat botはPythonでStreamlitを使用して作成。 ※Streamlit:Pythonで簡単にWebアプリケーションを作成できるオープンソースのライ ブラリ。
おわりに • Assistants APIは手軽に使用でき、 こちらで機能を用意せずともAPI利用することで様々な機 能が使用出来ました。そのため、Assistants APIを使用することで容易にAIアプリケーション 開発が可能になります。 • 今回紹介しませんでしたが、LangChainというライブラリがあり、LangChainでもAssistants
API で提供されているような機能を実現可能です。 • LangChainとAssistants APIにはそれぞれ違いやメリット/デメリットがあるため、シチュエー ションに応じてどちらが良いかを判断して使用すると良さそうかなと考えています。 • Assistants APIの今後のアップデートにも期待。 ※LangChainについて気になった方は調べてみてください。
参考 • https://platform.openai.com/docs/assistants/overview • https://platform.openai.com/docs/assistants/whats-new • https://note.com/nike_cha_n/n/n21fe47546e8d#23075f74-115c-4292-839b- 90cc0086f8b9 • https://note.com/npaka/n/n4438384c96d0
• https://developer.mamezou-tech.com/blogs/2024/04/21/openai-file-search-intro/ • https://note.com/mahlab/n/nba20ea09648d#1f2aff74-c918-483b-a195- 73658f107252