はじめに
『かがみの孤城』円盤発売まであと1️⃣日、こころちゃああああんんんんん!!!
コホン。こころちゃんのパラレルワールドでは、6/27は月曜日。nikkieです。
LangChain、LLMを使ったアプリケーションが僅かなコードで開発できるのが楽しく、キャッチアップのために少しずつ触っています。
今回はvector storeを使った実装例を小さく手元で動かしました。
※新しく登場した概念が多く、消化しきれていない感覚があり、正しく実装できていないかもしれません(「やってみた系」です)。
お気づきの点がありましたら、お気軽にお知らせください
目次
前回のLangChain!
StudyCoさん開催の勉強会「プロンプトエンジニアリングから始めるLangChain入門」のアーカイブを視聴し、
gpt-3.5-turboを使った例へと書き換えを進めています。
CoTからSummarizeのように2つのプロンプトをLangChainで繋げられ、しかもそれが僅かなコードで実現したので、私は感動に打ち震えました。
今回の対象:Indexes
StudyCoさんの勉強会開催時はIndexesというComponentがありましたが、これは現在では「Data connection1」に整理されたようです。
動作環境
これまでの環境にパッケージを追加しています。
LangChainはv0.0.216がリリースされていましたが、v0.0.215でいきます。
- Python 3.10.9
- langchain 0.0.215
- openai 0.27.8
- unstructured 0.7.9
DirectoryLoader
を使うのに必要
- faiss-cpu 1.7.4
- vector storeにFAISSを選択
- tiktoken 0.4.0
OpenAIEmbeddings
を使うのに必要
使うのに必要なパッケージはエラーメッセージで案内されました。
動かしたかった例は動かせたぞ!
StudyCoさんの勉強会で見た例(LangChainとはなにかに答えられる)の再現を目指します。
先日実装したchat modelを使うスクリプトでは
% python 1.models.py LangChainの概要を1文で説明してください LangChainは、ブロックチェーン技術を活用した多言語翻訳プラットフォームです。
へ〜、知らなかった〜。そうなんだ〜(LangとChainで意味の演算をした感じですかね)
こちらに文脈を追加する実装をしたとき
LangChainは、言語モデルを活用したアプリケーションを開発するためのフレームワークであり、データ連携や環境とのやり取りが可能なアプリケーションを実現します。
答えられてる!!🙌
小さくお試ししました
ドキュメントの準備
StudyCoさんの勉強会スライドではビルドしたhtmlを読み込んでいます。
ドキュメントはmdxでホストするように変わったようで、当初mdxを指定しました。
gitのsubmodule、mdxのドキュメントのビルド2など、やりたいことに対してヤクの毛刈り感があり、今回はドキュメントを3つだけ指定しました。
https://github.com/hwchase17/langchain/tree/v0.0.215/docs/docs_skeleton/docs/get_started
- installation.mdx
- introduction.mdx
- quickstart.mdx
拡張子がmdxだとDirectoryLoader
で読み込めなかったので、手元で.md
に変更して動かしています。
vector store作成・保存
FAISSのドキュメント3を参考にしています。
「Saving and loading」を特に参考にしました。
vector storeにindexを作り保存するスクリプト(本項)と、vector storeを読み込み、それを使って質問に回答するスクリプト(次項参照)に分けています。
vector storeを使って質問応答
Retrieval QAのドキュメント4を参考にしています。
qa = RetrievalQA.from_chain_type(
llm=chat, chain_type="stuff", retriever=new_db.as_retriever()
)
このコードでChat model(gpt-3.5-turbo)と、vector storeから変換したretrieverをつなぐんですね!
「LangChainの概要を1文で説明してください」と質問すると、文脈としてドキュメント3つを全部連結し、OpenAIのAPIに送りました。
必要な情報がプロンプトに含まれているので、正確な回答ができるわけですね。
ずっと憧れていた実装でしたが、小さな例でも動いたことに非常に感動します。
終わりに
ずっと気になっていたvector storeを使ったLLMアプリケーション、非常に小さな例ですが、手元で動かすことができました!🙌
勉強会で見たIndexes(現Data connection)を使って、文脈を加えてchat modelsにプロンプトを送れた!
ローダ、FAISS、OpenAIEmbeddings
、RetrievalQA
と新しい概念の洪水でかなり消化不良です(言わば、理解的負債)。
これらの理解を深め、もうちょっとドキュメントを増やして、On Your DataなLLMアプリケーションを作ってみようと思います。
- https://github.com/hwchase17/langchain/blob/v0.0.215/docs/docs_skeleton/docs/modules/data_connection/index.mdx↩
-
https://github.com/hwchase17/langchain/blob/v0.0.215/docs/.local_build.sh を使って、ローカルの
langchain/docs/_dist
以下にビルドしてみました。ipynbがめっちゃ変換されましたね。ただサーバは立ち上げられていません😢↩ - https://github.com/hwchase17/langchain/blob/v0.0.215/docs/extras/modules/data_connection/vectorstores/integrations/faiss.ipynb↩
- https://github.com/hwchase17/langchain/blob/v0.0.215/docs/docs_skeleton/docs/modules/chains/popular/vector_db_qa.mdx↩