
2025.02.12
職員一人あたり52時間の残業削減に成功 kintone導入がもたらした富士吉田市の自治体DX“変革”ハウツー
リンクをコピー
記事をブックマーク
大嶋勇樹氏:次はIndexesとMemoryを見ていきます。質問をもらっていますが、続きを見てから回答できればと思います。
Indexesですが、まずモチベーションとして、GPT-4やGPT-3.5は、2021年9月までの公になっているパブリックな情報しか持っていません。
よくある例として、もっと新しい情報を知りたい。例えばLangChainの情報もそうだし、プライベートな情報を使わせたいということは多いと思います。
そのために、プロンプトに文脈、contextを入れる方法が考えられます。最初のほうにプロンプトエンジニアリングの例でも出しましたが、「文脈を踏まえて回答してください。文脈はこれです」と言ってLangChainのドキュメントのページの内容を入れて、質問は「LangChainとは?」みたいなことをするという手が考えられます。
ただ、GPTのAPIはトークン数の最大値という制限があったり、トークン数が多いほど料金が高くなる性質があるので、なんでもかんでも文脈に入れることはできません。
そこで、Vector Storeを活用する手法があります。文書をあらかじめベクトル化してVector Storeに保存しておきます。その上で入力に関係しそうな文章をVector Storeから検索して、contextに含めて質問します。このプロンプトのテンプレートは、LangChainのソースコードにもあるようなものです。
「Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer」、「続きの内容を踏まえて最後にある質問に回答にしてください、わからない時はちゃんとわからないと言ってね」という意味ですね。
そしてcontextと質問を埋め込んで、「Helpful Answer:」、アンサーを出してもらいます。「Answer:」、「続きを出してね」という意味のプロンプトですね。こういうことをします。
このベクトル化にOpenAIのEmbeddingsというAPIが使われる感じです。ベクトル化するほうは、別になんでもいいと言えばなんでもいいんですが、例えばOpenAIのAPIのEmbeddingsがあって、それで文章をベクトル化して使えます。
ベクトル化したりするので実行時間がかかったりするので、実際の実行はしないでおきます。ソースコードを見たほうが色もついていて見やすいかもしれないので、ソースコードを出します。
(画面を示して)LangChainのドキュメントを最低限読んで、「LangChainの概要を1文で説明してください」と言うぐらいであれば、このぐらいのコード量になります。
DirectoryLoaderというディレクトリ以下のドキュメントを読むLangChainの機能を使って、「ディレクトリにあるものを読んでください」と(指示します)。それをインデックスします。Vector Storeに入れて検索できるようにします。
そして「LangChainの概要を1文で説明してください」と言うと、内部ではプロンプトが使われて、{context}の箇所にVector Storeから検索した、今回の質問の内容に関係しそうな文章が入ってきて、{question}の箇所に質問が入って、プロンプトが投げられて応答が返ってきます。
毎回同じ(回答)じゃないかもしれませんが、実際にこれをやると、「LangChainは、言語モデルを利用したアプリケーション開発のためのフレームワークです」と返ってきたりします。
これと同じようなこと、似たことができるライブラリとして、LlamaIndex、旧GPT Indexがすごく有名かなと思います。
検索したい需要はいろいろあると思います。例えばここ(の例)ではDirectoryLoaderといって、ローカルにあるディレクトリから読み込んでインデックスするものを使いました。
ほかにも、サイトマップに従ってあるサイトのデータを読み込むようなこともできれば、いろいろなやり方でVector Storeにデータを入れること自体はできるようになっています。
そして次のモジュールはMemoryです。まず前提として、OpenAIのAPIは前回のやり取りを覚えておいたりはしてくれません。
例えば、「こんにちは。私は大嶋といいます」と言うと、「こんにちは、大嶋さん。私は田中です。どうぞよろしくお願いします」と返ってきます。実際にこう返ってきたんですが、「あなたは田中じゃないですよね」と思いますが、「私の名前がわかりますか?」と聞くと「いいえ、わかりません」と言ってくるんですね。
ただチャットボットを実装したい時は、過去の会話を踏まえて応答してほしい。つまり、記憶を持たせたいということがきっとあると思います。
そこでMemoryという機能が使えるんですが、文脈、contextを持たせたようにプロンプトに履歴を入れる、historyを入れることによって、過去の会話を踏まえた応答ができるよ。そんなプロンプトの手法があります。
例えば「Human:こんにちは。私は大嶋といいます。 AI:」、こんなようにするとAI側の回答を埋めてくれるんですが、「こんにちは、大嶋さん。私はAIです。私の名前はジェイソンです。どうぞよろしくお願いします」と(回答が返ってきます)。「ジェイソンです」とまた嘘をついていますが。
それに対して次にプロンプトを投げる時に、過去のやり取りをプロンプトに含めて、続きに「Human:私の名前がわかりますか?」と投げます。すると、「はい、大嶋さんという名前を知っています。あなたのお話を聞かせてください」と回答してくれたりするんですね。
これをLangChainのMemory機能を使って簡単にできるようになっています。
ちょっとやってみようと思います。(画面を示して)実装はこんな感じですね。poetry run python...、memoryのサンプルコードを実行してみます。
内容は、モデルを用意して、Conversation、会話のConversationChainみたいなものを用意します。LLMとメモリの仕方、これはLangChainが用意しているConversationBufferMemoryというやつですね。そして、その後ループで標準入力の入力を読み取っては実行して、AIの内容を出力するだけです。
実際に内容を入力してみようと思います。「こんにちは、私は大嶋といいます」と言うと、APIを投げるわけですね。ここでLangChainが内部で用意しているテンプレートに穴埋めして、「Human:」「AI:」と来ます。
(画面を示して)この緑の部分が実際にテンプレートを穴埋めした後のものですね。LangChainが内部で用意しているPrompt Templatesに対して私が今入力した内容が、「こんにちは、私は大嶋といいます。 AI:」こんなふうに穴埋めされて投げられました。
それに対してGPTのAPIは、「こんにちは、大嶋さん。私はAIです。私の名前はジェイソンです。よろしくお願いします」と。たぶん英語だからジェイソンという名前を使ってくるんだと思うんですが、こんなふうに返してきました。
続いて「私の名前はわかりますか?」と聞くと、今度は前回の会話の内容も含めたプロンプトを作っています。
これはConversationBufferMemoryとかがやってくれていることなんですが、それを含めてAPIに投げることによって、「はい、大嶋さんという名前を知っています。あなたはどこから来ましたか?」みたいに名前を答えたり、記憶を持って回答してもらうことができるようになっています。これがMemoryという機能ですね。
Memoryという機能はこれだけだと単純ですが、例えば記憶をずっと持っているとトークン数がとんでもないことになるので、トークン数を削減するために古い会話を要約するような高度な機能もあります。
ということで、ここでもう1回整理しておこうと思います。ここまででLangChainのModels、Prompts、Chains、Indexes、Memoryを見てきました。IndexesはVector Storeとかに保存した文章を利用するもので、Memoryは過去の対話を保持するものですね。LangChainを理解するにはプロンプトエンジニアリングから(理解する)というのが、伝わってきたんじゃないかと思います。
(次回につづく)
関連タグ:
プロンプトエンジニアリングから始めるLangChain入門講座 大嶋勇樹氏が教える、OpenAIのモデルとAPIの使い方
AIモデルへの入力を最適化し、意図した出力を得るために 例から学ぶ、プロンプトエンジニアリングの概要
そもそもLangChainは何に使えるのか 3つの基礎的なモジュール「Models」「Prompts」「Chains」から考える活用事例
保存した文章を利用する「Indexes」、過去のやりとりを記憶する「Memory」 LLMにできることを拡張する2つのLangChainモジュール
まるで“LLMがツールを使う”かのように動作する デモから見るLangChainのモジュール「Agents」の使い方
2025.02.06
すかいらーく創業者が、社長を辞めて75歳で再起業したわけ “あえて長居させるコーヒー店”の経営に込めるこだわり
2025.02.13
“最近の新人は報連相をしない”という、管理職の他責思考 部下に対する「NG指示」から見る、認識のズレを防ぐコツ
2025.02.13
AIを使いこなせない人が直面する本当の課題 元マッキンゼー・赤羽雄二氏が“英語の情報”を追い続ける理由
2025.02.12
マネージャーは「プレイング3割」が適切 チームの業績を上げるためのマネジメントと業務の比率
PR | 2025.02.07
プロジェクトマネージャーは「無理ゲーを攻略するプレイヤー」 仕事を任せられない管理職のためのマネジメントの秘訣
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由
2025.02.06
落合陽一氏や松尾豊氏の研究は社会に届いているか? ひろゆき氏が語るアカデミアの課題と展望
2025.02.10
32歳で「すかいらーく」を創業、75歳で「高倉町珈琲」で再起業 「失敗したからすかいらーくができた」横川竟氏流の経営哲学
2025.02.12
何度言っても変わらない人への指示のポイント 相手が主体的に動き出す“お願い”の仕方
2025.02.13
「みんなで決めたから」を言い訳にして仲良しクラブで終わる組織 インパクトも多様性も両立させるソース原理
着想から2か月でローンチ!爆速で新規事業を立ち上げる方法
2025.01.21 - 2025.01.21
新人の報連相スキルはマネージメントで引きあげろ!~管理職の「他責思考」を排除~
2025.01.29 - 2025.01.29
【手放すTALK LIVE#45】人と組織のポテンシャルが継承されるソース原理 ~人と組織のポテンシャルが花開く「ソース原理」とは~
2024.12.09 - 2024.12.09
『これで採用はうまくいく』著者が語る、今こそ採用担当に届けたい「口説く」力のすべて
2024.11.29 - 2024.11.29
【著者来館】『成果を上げるプレイングマネジャーは「これ」をやらない』出版記念イベント!
2025.01.10 - 2025.01.10