2024.12.10
“放置系”なのにサイバー攻撃を監視・検知、「統合ログ管理ツール」とは 最先端のログ管理体制を実現する方法
リンクをコピー
記事をブックマーク
大嶋勇樹氏:次は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」の使い方
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
2024.12.09
10点満点中7点の部下に言うべきこと 部下を育成できない上司の特徴トップ5
2024.12.09
国内の有名ホテルでは、マグロ丼がなんと1杯「24,000円」 「良いものをより安く」を追いすぎた日本にとって値上げが重要な理由
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.12.10
職場であえて「不機嫌」を出したほうがいいタイプ NOと言えない人のための人間関係をラクにするヒント
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.06
嫌いな相手の行動が気になって仕方ない… 臨床心理士が教える、人間関係のストレスを軽くする知恵
PR | 2024.11.26
なぜ電話営業はなくならない?その要因は「属人化」 通話内容をデータ化するZoomのクラウドサービス活用術
2024.12.11
大企業への転職前に感じた、「なんか違うかも」の違和感の正体 「親が喜ぶ」「モテそう」ではない、自分の判断基準を持つカギ
PR | 2024.11.22
「闇雲なAI導入」から脱却せよ Zoom・パーソル・THE GUILD幹部が語る、従業員と顧客体験を高めるAI戦略の要諦