非エンジニアがChatGPTに聞きながらRAG・AIエージェント実践入門をやりきる方法
前提
- IT業界で起業家14年目
- PM・Webディレクターが本職
- 9年前にSwiftでiOSアプリのプロトタイプを作った経験はあり
RAG・AIエージェント[実践]入門本をなぜ学びたいと思ったか
- 今の自分の会社では個人向けのAI講座と法人向けAI研修を提供している
- 生成AIを活用した開発もやりたい
- まずは自分が手を動かしてLLMアプリ・AIエージェント開発を理解したい
- RAG・AIエージェント[実践]入門の評価が高かったのでやりきることにした
ChatGPTなどの対話AIが出てくる前
- 技術書を買っても理解できないところがある
- 調べてもさらに理解できないことが書いてあり力尽きていた
- サンプルコードを手元で動かしてもエラーが出る
- エラーを検索しても解決できない
- なぜこのコードの書き方なのか分からない時がある
- これはこの前提が分かってないと理解できないみたいな全体像が入り組んでいて分からない
ChatGPTに聞きながら今回学習したところ
- 理解できないことがあってもChatGPTにいつでも何度でも聞ける
- いろんな角度から説明してくれるので理解ができる
- エラーが出てもその理由を教えてくれた上で、改善後のコードも出てくる
- ちょっとトリッキーな質問をしても納得のいく回答が返ってくる
具体的なChatGPTの使い方
ここまで抽象的すぎて何が嬉しかったのか伝わってないと思うので、どんな感じでChatGPTを技術書の勉強に使ったかパターン分けして、整理しました。
ChatGPTに「LangChainとLangGraphによるRAG・AIエージェント[実践]入門という本を学習していて、それについて質問します」という前提は伝達済みです
用語の理解
completionとはどういう意味?
Completion とは、OpenAIのAPIにおいて、指定された入力に基づいて生成されたテキストのことを指します。
この概念は特に Chat Completions API に関連し、ユーザーが提供する「プロンプト」(入力テキストやメッセージ)に応じて、AIが応答を生成するプロセスを指します。
完了(Completion)は、AIが生成するテキストの部分を指し、通常はリクエストで指定された model と messages に基づいて応答が生成されます。
完了と言い方をしているのはなぜだろう?
プロンプトに対して返信して応答が1つ完了すると言う意味かな
その通りです。
「完了(Completion)」という表現は、プロンプトに対してAIが応答を生成し、その処理がひとまとまりのタスクとして 完了 するという意味を指しています。
こんな感じで深掘りすることで、しっくりきました。
サンプルコードの理解
from openai import OpenAI
だけど 1つ目と2つ目のOpenAIの違いは?
1つ目の openai
・openai は、OpenAIの公式ライブラリのモジュール名です。
2つ目の OpenAI
・OpenAI は、openai モジュール内に定義されたクラス名です。
文法知ってたら、見たら分かるやん、と言われてしまいそうですが、率直な疑問も即解決。
構文の理解
messageのリストで、最後以外はコンマを入れるのがpythonなの?
いいえ、Pythonのリスト(配列)では最後の要素にもコンマを付けることが可能ですし、それが一般的に推奨されるスタイルでもあります。
これは、コードの保守性や可読性を向上させるためのスタイルガイドに沿った書き方です。
最後に入れなくてもエラーはでない?
Pythonでは、リストや辞書、タプルの最後の要素にコンマを入れなくてもエラーは出ません。
最後にコンマを付けるかどうかはスタイルの問題であり、構文的にはどちらも正しいです。
途中で入れ忘れたらエラーはでる?
はい、Pythonではリストや辞書の要素間に必要なコンマを入れ忘れるとエラーが発生します。
具体的には、構文エラー(SyntaxError)が出ます。
Cursorでコードを書いていれば、自動で修正されるので気にしなくても良いかもしれませんが、細かいところが気になった時に、誰かに聞くのは申し訳ないがChatGPTなら聞ける。
LLMの挙動理解
履歴を全部持たせるにはassistantとuserで全履歴を配列に入れないといけないの?
はい、Chat Completions API はステートレスで動作するため、会話の文脈を維持するには、過去の全履歴(assistant と user)を messages 配列に含める必要があります。
じゃあassistantとuserがめちゃ長くなるの?
はい、assistant と user の会話履歴が長くなると、messages 配列に含める内容も増えるため、リクエストのデータサイズが大きくなる可能性があります。ただし、この問題を軽減するためにいくつかの工夫が可能です。
1.会話履歴の要約
長い履歴をそのまま保持する代わりに、assistant が過去の会話内容を簡潔に要約するメッセージを追加します。
2. 履歴のトリム(古い履歴を削除)
messages 配列の最初の部分(古い会話)を削除し、最新の会話だけを残す。
3. トークンの制限
・OpenAI APIには「最大トークン数」という制限があります(GPT-4: 最大約8,000~32,000トークン)。
・長すぎる場合はエラーとなるため、以下のようなチェックを導入します:
4. 外部ストレージを利用
・長期の会話履歴は外部データベースやファイルに保存し、必要に応じて重要な履歴だけを messages に追加します。
私がGUIのChatGPTの使い方を研修で教える時は、スレッドを変えたらやり取りの履歴はリセットされますとか、メモリ機能をオンにしたら引き継げることもあります、みたいな事象だけを説明してきたのですが、
LLMがステートレスな性質を持っているからという裏側を知ることで、より深みのある伝え方ができるようになった気がします。
GUIだけではなくAPIも触って開発の全体像をつかんだ方が、IT業界以外の方を対象にChatGPT研修するとしても、より深みのある教え方ができそうだなと思ったのは大きなポイントです。
他の書き方を探る
"image_url": image_url ではだめなの?
"image_url": image_url という形式でも使えそうに見えますが、OpenAI APIの仕様では "image_url" の値として、さらに入れ子になった形式(つまり {"url": image_url})が必要です。以下にその理由と詳細を説明します。
1. なぜ {"url": image_url} の形式が必要なのか?
1. APIの仕様に基づいている
2. 将来的な拡張性
3. 一貫したデータ形式
こういう書き方はダメなのかな?と思った時に、プログラミングスクールだとまずは正しいことを学ぶとか、動けばいいみたいな感じになるので、蛇足かなと思って聞きづらいです。
今回で言うと、Pythonの文法なのか、APIの仕様なのかの区分もつくようになりました。
難解な概念の理解
FUnction callingは色々な記事を漁ってもいまいち掴めなかったのですが、サンプルコードを元に深掘りしたら理解できました。
tools=tools
Responseの中にtoolsを含めて欲しいという意味?
tools=tools の意味は、プログラム側で定義した関数のリスト(tools)をAIモデルに渡し、AIがそれを使用できるようにする ということを表しています。
Messagesに対する応答をcreateさせる感覚はわかるんだけど
Toolsをcreateの引数としては渡すと言うのがちょっとわからん
createするときに、このツールを使って欲しいと意味かな
はい、その通りです!tools を create の引数として渡すというのは、「このリクエスト(create 呼び出し)を処理する際に、このツール(関数リスト)を使って欲しい」という指示をAIモデルに与えるという意味です。
コンテンツを返信できないからこそ
Toolの中にある関数を返して、その情報与えてくれれば、またコンテンツを返信するよという意味かな
その理解は非常に的確です!Function Calling を使う目的は、モデルが 「直接答えを生成する代わりに、プログラム側で実行可能な関数とその引数を提案する」 という点にあります。
ちょっと近いと、元気に褒めてくれるのも嬉しい。
そもそもの疑問
Function CallingをAIエージェントの実装でよく使うのはなぜ?
Function Calling をAIエージェントの実装でよく使う理由は、以下の特徴がAIエージェントの構築に非常に適しているためです。
AIエージェントは、ユーザーの入力に基づいて適切なタスクを自律的に遂行することを目的とします。このとき、AIエージェントには次の能力が求められます:
1. 外部ツールや機能との連携:
ユーザーのリクエストに応じて、外部API、データベース、ツールなどを動的に利用する必要があります。
2. ユーザーの入力を解釈して正しい処理を選択:
リクエスト内容に基づいて適切なツールや関数を呼び出し、その結果をユーザーに返すことが重要です。
3. 処理の構造化と安全性:
呼び出しのパラメータが正しいかを検証し、確実に期待される処理を実行する必要があります。
Function Callingは、これらの要件を満たすための仕組みを提供します。
いろんな"なぜ"に立ち返って疑問が解消できるのは、自分が賢くなった気になれます。
まとめ
ChatGPTの履歴を見ながら使い方のパターン分けをしてみたのですがいかがでしたでしょうか。
正直、自分の学生時代から、ChatGPT欲しかったですね。。
何か学習する時に、そもそも理解ができなくて、いいやいいやになっていたことが多いので、それを24時間365日、月20〜200ドルで質問し放題で、いろんな角度から探索できるのはありがたすぎです。
とはいえ、そんなことを言っても始まらないので、引き続きAI開発の学習をがんばります。
Xも思い切ってAI開発の話だけを投稿するアカウントにした方がいいんだろうなと思いつつ、できてなかったので、今後はそうしようかなと。Zennも都度投稿したい。
Discussion