ソニックの部屋

主にプログラミングに関する記事を投稿します

「LangChain完全入門 生成AIアプリケーション開発がはかどる大規模言語モデルの操り方」を読む

気になった用語等をまとめる

第1章_ChatGPTとLangChain

学んだこと

  • Chat(対話形式の生成)とComplete(テキストの続きを生成)2つのモデルがある
  • よってプロンプトでChatは対話形式で指示、Completeは文章の途中まで設定することが一般的
  • マルチモーダルとは異なる種類のデータを扱うこと
  • OpenAIのモデルはカスタマイズ不可、Meta等のモデルはカスタマイズ可
  • LangChainは言語モデルを使ったアプリ開発をする際のライブラリ
  • LangChainとChatGPTを組み合わせることで単純なAPIによるアプリ開発よりもより複雑なアプリ開発が可能

第2章_Modle I/O-言語モデルを扱いやすくする

学んだこと

  • 言語モデルを呼び出すプロンプトの書き換えやモデルの差し替えを容易にするためにModle I/Oを使う
  • Modle I/Oは3つのサブモジュールから構成される
    • Language models:モデルの差し替えを容易にしキャッシュや逐次出力ができる
    • Prompts:テンプレートで例えを示し出力を最適化できる
    • Output parsers:出力をカスタマイズしたり、修正したりできる

第3章_Retrieval-未知のデータを扱えるようにする

学んだこと

  • 回答に必要な文章を探す方法が重要
  • テキストのベクトル化により数値で表現し類似度を計算する
  • 類似度の高いものを回答とする
  • RAGによるアプリの作り方
    • 事前準備:DBの作成(テキストのベクトルと文章のペアを保存)
    • 検索とプロンプト構築:「DBの検索」と「取得した文章と質問を組み合わせてプロンプト構築」
  • 以下ライブラリ間でバージョン指定が必要
pip install auth0-python urllib3 kubernetes==28.1.0
  • RAGとはDBから関連する情報を取得し回答を生成する手法
  • ファインチューニングは既存モデルを再学習により専門的なモデルにすることができる
  • RetrievalQAモジュールによりRAGによるQAシステムの開発を簡単かつ多機能にする
    • QAシステムで同じ実装になる処理を省略できる
    • Retrieversを使うことで実装を楽にする
    • 情報源となる文章の組み合わせ方法の選択が可能

第4章_Memory-過去の対話を記憶する

学んだこと

  • 過去の対話はMemoryモジュールに保存する
  • ConversationChainを使ってコードをシンプルにする
  • ※chainlitから回答が返ってこない
  • (参考)同期処理はコードを上から下まで順番に処理すること。非同期処理はある処理が終わるのを待たずに別の処理を実行すること
  • DB(Redis等)に会話履歴を保存し永続化
  • 過去の会話を消去又は要約することでモデル呼び出しの制限に対応する

第5章_Chains-複数の処理をまとめる

学んだこと

  • Chainsモジュールを使うことで複数の処理を簡単にまとめられる(Chains自体もまとめられる)
  • 特定の用途に特化できる(例えば特定のサイトの情報を元に回答を生成する)

第6章_Agents-自律的に外部と干渉する

学んだこと

  • AgentがToolを選択して回答を得る。Agentが回答が適切かチェックをする。
  • Toolを追加してAgentができることを増やす
  • Agentで特定のURLから情報を取得すると文字数制限でエラーとなった →文字数制限の対応が必要
    • 「指示文の文字列」が長文の時→LangChain Chainsにより指示を分割する
    • 「使用データの文字列」が長文の時→4種類の方法あり
名称 使い分け モジュール
RAG コストを抑えたい LangChain Retrieval
Map Reduce 精度を追求したいが、処理速度も優先したい、欲しい情報が使用データの中で散らばっている LangChain Chains
Map Rerank 精度を追求したいが、処理速度も優先したい、欲しい情報が使用データの中で一箇所にある LangChain Chains
Refine 精度を最優先したい LangChain Chains

第7章_Callbacks-様々なイベント発生時に処理をする

学んだこと

  • Callbacksはイベント発生時に特定の処理(ログの出力等)を実行する

参考文献
田村悠 (著)/インプレス/2023/LangChain完全入門 生成AIアプリケーション開発がはかどる大規模言語モデルの操り方
ますみ/2023年11月21日取得/【完全版】文字数制限のないChatGPTを実装するためのアルゴリズムまとめ【Python / LangChain / RAG】