nikkie-ftnextの日記

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

4月の「プロンプトエンジニアリングから始めるLangChain入門」を後追い視聴。LangChain、大変興味深いです #StudyCo

はじめに

『かがみの孤城』円盤発売まであと3️⃣日、今日はアキちゃん!
アキちゃんのパラレルワールドでは、6/25は火曜日1。nikkieです。

ChatGPTをはじめとするLLMsがトレンドですね2
そんな状況の中で、気になっていたけれどずっと触れていないライブラリLangChainがありました。
最近の休日は「平日にできないことをやる」がテーマになっており3、その一環で今回はLangChainの情報収集をしました。

目次

2023/04/20開催 プロンプトエンジニアリングから始めるLangChain入門

StudyCoさんによる勉強会シリーズの1つ!4
定期的に開催、かつ、毎回トレンドを押さえた題材で、たいへん助かっています。
資料やアーカイブ公開もありがたく、積ん読たくさん🙌

今回は、LLMを使ったアプリケーション開発にとっても役立つLangChainに入門する回でした。

そんな中、LLMを使ったアプリケーションを開発するためのツールとして、「LangChain」が注目を集めています。

LangChainをキャッチアップするには、LLMに狙い通りの動きをさせるために内部で使われている「プロンプトエンジニアリング」から学ぶとスムーズです。

そこでこの勉強会では、プロンプトエンジニアリングから始めてLangChainに入門していきます。

アーカイブ

発表資料

ソースコード

簡単なコード例でのデモを交えながらの発表でした(簡単なコードで済むようにLangChainがめっちゃ頑張ってくれています)。
コードも示していただいたことで、LangChainのイメージは結構つかめました。

感想

これまでOpenAIのAPIを直接叩いて、LLMを使ったアプリケーションを趣味レベルで開発していた身5からすると、LangChainが開発の中でどう使えそうか、どのあたりが楽になりそうかが結構イメージできました
プロンプトエンジニアリングも経験がある6ので、LangChainがどのようにラップしてくれているか(=プロンプトエンジニアリングをサポートしてくれているか)が分かった気がします。

コードは手元で動かせていないので、時間を見つけて試していこうと思います。
説明を分かりやすくするためにモデルはtext-davinci-003指定7だと思うのですが、gpt-3.5-turboに変えると結果がどう変わるのか、そしてコードをどう書き換えるかが気になるところです。

LangChainのバージョンは発表時点ではv0.0.144ですが、リポジトリを覗いたら最新はv0.0.2148
手を動かしたら体感すると思うんですが、どれくらい破壊的変更入ってるんだろう、ワクワク

メモ:LangChain 6つのコンポーネントを押さえる

早速破壊的変更入ってない?👀

  • Modelsに変えてModel I/O👀
  • Data connectionってやつがあるぞ!
  • あとCallbacksもある!

Models

機械学習モデルをLangChainのインターフェースにラップ

https://github.com/os1ma/learning-langchain/blob/051bb1ad461f475840b68a7ab084e9b0be973ab0/learning_langchain/1.models.py
llm("プロンプト")__call__でcompletionをさせています。

Prompts

(紹介いただいたPrompt Templatesの範囲では)文字列操作という理解です。
プロンプトをテンプレート化して、動的に生成できるようにする

https://github.com/os1ma/learning-langchain/blob/051bb1ad461f475840b68a7ab084e9b0be973ab0/learning_langchain/2.prompts.py
prompt.format(command="echo")でテンプレート内のcommandをechoで埋めています。

Chains

モジュールを連結
6つのコンポーネントをChainでつなげる(レゴブロックのイメージ)。
さらにChainどうしも再帰的に)つなげられる!(レゴブロックで複雑な作品が作れるように!)9
これは設計としてもうまいと思います。

紹介いただいた例は2つ

このあたりlangchain.verbose = Trueで何をやっているかが見えるというのはブラックボックスすぎなくていいなと思いました。

Indexes

私がLangChainで唯一知っていたのがこの部分!10
LLMが知識を持たない領域であっても、手元の文書の中から関連するものを取り出し、プロンプトに文脈として加えて送ることで回答できるようにするやつですね。

示されたソースコードは13行!
https://github.com/os1ma/learning-langchain/blob/051bb1ad461f475840b68a7ab084e9b0be973ab0/learning_langchain/4.indexes.py

これはガッツリ手を動かしたいですね。

  • VectorstoreIndexCreatorはどういう動きをしている?
    • 特に、どうやってEmbeddingsを得ている?
  • スクリプトを動かすたびに、Vector Storeのインデックスも作られそうですが、手元の文書が変わらない限りはVector Storeは毎回更新しなくてもいいという理解で合っているかな

Memory

Chatbotのようなユースケース会話履歴を覚えさせるためのコンポーネント
まさに記憶!

https://github.com/os1ma/learning-langchain/blob/051bb1ad461f475840b68a7ab084e9b0be973ab0/learning_langchain/5.memory.py

  • ConversationChainにModel(LLM)とMemory(ConversationBufferMemory)を渡す実装
  • ConversationChainpredictメソッドなのか11

Agents

プロンプトとして与えた課題をLLMがツールを使って解くという世界観!
LLMが「ツールを使う」というアクションをすることを可能にします。
先日公開された「Function calling12」と同様という印象です。

例は「現在のディレクトリにあるファイルの一覧を教えてください。」にLLMが回答するというもの。
ツールを使うことで実際のファイル一覧をLLMが返している!
https://github.com/os1ma/learning-langchain/blob/051bb1ad461f475840b68a7ab084e9b0be973ab0/learning_langchain/6.agents.py
load_tools(["terminal"], llm=llm)し、ツールも含めてinitialize_agent
agentのrunメソッドを実行しています。

  1. LLMへの最初のプロンプトでは使用できるツールの情報もLLMに伝える
    • terminalはコマンドを実行できるツール
  2. LLMのレスポンス「lsコマンド実行したい」
    • ここFunction callingですよね? ね!
  3. LangChainのAgentsがlsを実行する
  4. ls実行結果をプロンプトに加えてLLMを再度呼び出す
  5. LLMがFinal Answerを埋めたレスポンスを返す
    • LangChain側でFinal Answerだけを抜き出して、ユーザに示すそうです

ツールには人間を使うツールもあるとのことで、私としては「ですよね〜」という感想でした(Function callingのエントリの中で私も言及しています)

終わりに

text-davinci-003(Completions API)をLangChain v0.0.144から利用してアプリケーション開発をするイメージはかなりはっきりと持てました!
v0.0.144時点での6つのコンポーネントの概念も結構つかめ、Indexes=LangChainだと思っていましたが、LLMを使ったアプリ開発をサポートしてくれるライブラリなんだな〜と認識しました。
ソースコードにはプロンプトが含まれるので、プロンプトエンジニアリングを学ぶ上でもLangChainは有用だと思います。

勉強会開催、また、資料公開、ありがとうございました。

余談ですが、この週末「Azure OpenAI Service On Your Data」をまず触ってみようとしたんですよ。

LangChain(のIndexes)を使えば実現できそうですが、コード不要でできるならゲームチェンジャーだなーと思い、興味を持ちました。
ですが、On Your Dataは個人利用は厳しそうと分かり、すごすごと引き下がります(申請フォームを見たところ、Azureのenterpriseアカウントが必須そうでした)。
で、ずっと気になっていたLangChainの情報収集に至ります。
少しは理解できたので、On Your Data相当のアプリケーションを自力で作ってみるということに興味が出てきています。

P.S. StudyCoさんの次回は6/29「LangChainソースコードリーディング」

GPTを使ったアプリケーション開発では、OpenAIの「Chat API」を使うのが定番ですが、実はLangChainでOpenAIのChat APIを「ちゃんと」使うには、LangChainのソースコードを読み解くことが役立ちます。

そこでこの勉強会では、LangChainでOpenAI Chat APIを「ちゃんと」使うことをテーマとして、ソースコードリーディングを実施していきます。

LangChainの基礎知識については、4/20に開催した勉強会「プロンプトエンジニアリングから始めるLangChain入門」の資料/アーカイブ動画を事前にご覧いただくのがおすすめです。

アーカイブを見たのは6/29の準備でもありました〜


  1. Let's pip install kojo-fan-art!
  2. 直近では岡野原本!
  3. 例えばRustを触ったり
  4. 過去回のレポートです
  5. Ngセンセの講義も受講済みです。
  6. セマンティックバージョニングではないですよね...😅 ref:https://semver.org/
  7. ほかでも見かけた構造です
  8. llamaindexもLangChainのIndexes相当とのことでした
  9. runだったりpredictだったりとバラバラしているのがちょっと気になりました