nikkie-ftnextの日記

イベントレポートや読書メモを発信

「プロンプトエンジニアリングから始めるLangChain入門」の例をChatGPTを使うように書き直す(Indexes、小さな例で動かせた!) #StudyCo

はじめに

『かがみの孤城』円盤発売まであと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、OpenAIEmbeddingsRetrievalQAと新しい概念の洪水でかなり消化不良です(言わば、理解的負債)。
これらの理解を深め、もうちょっとドキュメントを増やして、On Your DataなLLMアプリケーションを作ってみようと思います。