天の月

ソフトウェア開発をしていく上での悩み, 考えたこと, 学びを書いてきます(たまに関係ない雑記も)

ChatGPT/LangChainによるチャットシステム構築[実践]入門に参加してきた

forkwell.connpass.com

こちらのイベントに参加してきたので、会の様子と感想を書いていこうと思います。

会の概要

以下、イベントページから引用です。

今回の第36回目では、2023年10月18日(水)発売の『ChatGPT/LangChainによるチャットシステム構築[実践]入門』を取り上げます。
本書は、ChatGPTのAPIとLangChainを使って、大規模言語モデル(LLM)を本番レベルのシステムに組み込むための知識をステップバイステップで学習し、手を動かしながら実践できる書籍です。今回は著者の吉田真吾氏、大嶋勇樹氏をお招きし、LangChainの基礎知識から実践までの話を本書の内容に沿ってお二方にご発表いただきます。

会の様子

講演1〜LLMを使ったアプリケーション開発の基本とLangChain超入門〜

LLMを使ったアプリケーション開発の基本

ChatGPTのAPI公開を契機に、AIをアプリケーションに組み込むハードルが低くなり、LLMを用いたアプリケーション開発が盛んになっているという背景から話が始まりました。

LLMを用いたアプリケーション開発を行うにはプロンプトエンジニアリングの考え方が必要不可欠であり、Prompt Engineering Guideの読み込みやプロンプトのテンプレート化(アプリケーションに一部だけ入力してもらい、テンプレートに入力を突っ込む)をしていくことが重要だということでした。

LangChain

LangChainにはLanguage models/Prompt templates/Chains/Memory/Retrieval/Agentsのモジュールに関して簡単な紹介がありました。

Language models

LangChainでLLMを使用するためのモジュール。様々なLLMをLangChainが定義する同じインターフェースで使用可能。

Prompt templates

名前の通り、LLMへの入力のプロンプトをテンプレートとして扱うためのモジュール。

Chains

様々な処理を連携(連鎖)させるためのモジュール。LLMに回答をステップバイステップで考えさせるときやチャットボットとして応答を生成させる場合などに用いることができる。

Memory

チャットボットを実装する際などに必要不可欠な会話履歴管理に役立つ。

Retrieval

回答に使用する情報にプライベートな情報や最新情報を使わせるためにコンテキスト定義する際に使用するモジュール。
文書をベクトル化して保存しておくことで、入力に関係性しそうな文書を検索してプロンプトに含め、その内容を踏まえてLLMに回答させることができる。

Agents

与えられた目的に対して何をすべきかを自律的に判断して動作させることができる。(回答を考える際にWebを検索したり自力で実装をしたりする)

講演2〜LangChainとフルサーバーレスですばやくセキュアなRAGアプリをつくるための実践解説〜

なぜ"まず"LangChainでRAGを学ぶべきか?

本書では、RAGを実際に作ってみることを一つの目標としていますが、これがなんでなのか?という話をしてくれました。

RAGはLLM関連の技術要素のキャッチアップを必要最低限に済ませることができる(実装難度がそこまで高くない)上にLLMに対しての期待値を調整できることが大きいということでした。

ServerlessでLLMを実装する

本書では、ServerlessでLLMを実装する*1ことで、

  • マイクロサービス指向なシステム構築
  • リアクティブなアーキテクチャ
  • 認証・認可にもとづくリソースアクセス
  • DRY

といったSoftware Excellenceを実現することを目指しているということでした。

書籍の具体的な範囲で言うと、以下が該当するということでした。

共通→Google Colab, AWS Cloud9

第6章→外部検索、履歴を踏まえた応答をするWebアプリの実装

第7章→ストリーム形式で履歴を踏まえた応答をするSlackアプリの実装

第8章→社内文書に答えるSlackアプリの実装

パネルディスカッション

講演の後はパネルディスカッション(質疑応答)がありました。以下、質問と回答を一問一答形式かつ常体で記載していきます。

LangChainはバージョンアップが激しく破壊的変更が起きやすいと思うのだが、キャッチアップの賞味期限を聞きたい
  • LangChainを学ばなくてもLLMの知識はどんどんupdateされていくのが間違いない。そのため、LangChainを中心に学ぶことでコアな部分のキャッチアップが効率よくできると思っている
  • 書籍の賞味期限はないと思う(基礎的部分にフォーカスしているため)
  • 半年前の資料は今も普通に使えている
Document transformerでドキュメントをチャンクに分割する際にどれくらいの単位で分割するとよいか?
  • 試行錯誤段階だと思うが、細かく言うなら一段落
  • Microsoftの研究なども参考にすると良いと思う
  • 経験則的に言うなら、チャンクサイズ300&オーバーラップ30文字&アプリの中で類似検索したトップ2つを取り出す、というのが一番精度良かったが、取り扱う文章によって全然変わってくるとは思う
AssistantAPIでRAGのアプリは簡単に作れるようになったと思うが、LangChainにはどのような利点があるのか?
  • エージェント的に動いてくれるAssistantAPIは、レイテンシーが大きすぎるような感覚はある
  • AssistantAPIはLangChainなしでも一部機能はそこそこできるようになったが、あくまでも一部であるうえに、弱点もあるしOpenAIへのロックインリスクもあると思っている
LlamaIndexとの使い分けは?
  • LlamaIndexで完結するならそちらのほうがいいと思うが、LangChainのほうがカバレッジが全然広い
  • RAGとかに特化するならLlamaIndexのほうがいいとは思うが、LangChainのほうが広い範囲をカバーしているのでそちらの方を抑えておきたい気持ちはがある
実サービスでGPTを使用しているが、モデルのアップデートに伴いプロンプトをチューニングするのを人力で頑張るのは非現実的に感じている。何か対処法はあるか?
  • そもそもモデルのアップデートにそこまで速く追従しないといけないのか?というのはある
  • 前の環境より精度が高いことがわかってからバージョンアップするなど
RAGを実装するうえで、ベクトルDBに何を採用するか?
  • ベクターデータになっていない元データがどこにあるのか次第だと思う。S3にあるというならKendraは優秀だと思う。処理のロバスト性などを考えながら元データに近い場所で処理する方がDBをどうするかよりも大切
  • 検索精度が重要だと思うので、エンタープライズ系のほうがうまくいくという話はよく聞く
LLMアプリの性能評価/性能向上はどうするのか?
  • LangChainのエバリュエーションなどを読んでおけるとよいのではないか?
  • まだ人力でやっている。今は自分の不安解消のために目検でやっている
GPTsを使えばLangChainを使わなくても同じことができるのか?
  • ユースケース的にGPTsは強力なものは作れないと思う。他の人のAPI叩いたりとかもできないし、あくまでもごく一部のケースでしか使えないのではないかと思っている
LangChainを使う場合の言語はPythonがよいか?
  • Pythonばかり使っているのでフェアな評価はできないが、機械学習系のライブラリは基本Pythonのほうが充実しているのでそちらのほうが良いと思う
  • 基本的なものなら他言語も使えるとは思う
LangChainを使ったWebアプリを作る場合どんな技術構成が望ましいのか?
  • そんなに変わったことはない。LangChainに絡むところだけPythonを使うとかでもいいと思う
LLMと向き合った場合、実ビジネスで有望性あるサービスとしてはどのようなものがあるのか?
  • RAGでお金はとれない
  • エージェントの先だと思う
  • AIど真ん中を行くと他の大企業が本気で来たときに負けるので、自社サービスベースで考えるほうが筋がよいのかな?とは思う

会全体を通した感想

ビジネス観点やキャッチアップの効率性などの観点も交えながら、本の紹介にとどまらず色々な話が聞けたので満足できました。

実際にLangChainを触っているであろう方からの質問も多かったので、パネルディスカッションがいつも以上に面白かったです。

*1:AWS Cloud9