LangChain
- https://www.langchain.com/
- https://qiita.com/search?q=langchain
- https://zenn.dev/search?q=langchain
- https://zenn.dev/topics/langchain
- LangChain を Python で使う
- そろそろ知っておかないとヤバい? 話題の LangChain を 30 分だけ触って理解しよう!
- Amazon Bedrock を LangChain 経由で使って会話履歴も保存してみた
生成 AI アプリ開発フレームワーク LangChain 入門
独自データの活用:
- ファインチューニング (LLM + 独自データ -(再レーニング)-> 独自 LLM)
- プロンプトエンジニアリング(独自データをコンテキストとして与えて LLM から生成)
- ベクトル検索(ベクトル化された独自データから最適解をコンテキストとして与えて LLM から生成)
LangChain とは
- 大規模言語モデル(LLM)を使用したアプリケーション開発のためのオープンソース・オーケストレーション・フレームワーク
- チャットボットや仮想エージェントなどの LLM 駆動型アプリケーションの構築プロセスを簡素化
LangChain の仕組みとは
- 抽象化によって LLM アプリケーションのプログラミングを効率化する開発環境
- 1 つ以上の複雑なプロセスの構成ステップをすべてカプセル化した名前付きコンポーネントとみなすことでコードを簡素化
言語モデルのインポート:
- ほぼすべての LLM を使用できます
プロンプトテンプレート:
- プロンプト: LLM に与えられる指示
- プロンプトエンジニアリング:LLM が入力を解釈し、最も役立つ方法で出力を構成するために必要なコンテキストを効果的に提供するプロンプトを作成する作業
チェーン:
- LLM を他のコンポーネントと組み合わせ、一連の関数を実行することでアプリケーションを作成
- LLMChain: 基本チェーン: 単にモデルを呼び出し、そのモデルのプロンプトテンプレートを呼び出す
インデックス:
トレーニングデータセットに含まれていない特定の外部データソース
ドキュメントローダー :
- データを簡単にインポート
ベクトルデータベース:
- データポイントをベクトル埋め込み(固定数の次元を持つベクトルの形式で数値表現)に変換して表現し、多くの場合、教師なし学習法を使用して関連するデータポイントをクラスタリング
- 大規模なデータセットであっても低遅延のクエリが可能
- 各ベクトルのメタデータも保存されるため、検索の可能性がさらに高まります
Text splitters:
- テキストを意味論的に意味を成し、組み合わせられる小さなチャンクに分割
- 検索速度を上げるため
Retrieval:
- 外部の知識ソースが接続されると、モデルは必要に応じて関連情報を迅速に取得して統合する
メモリー:
- LLM には過去の会話の長期記憶がないので、メモリー機能によりコンテキストを維持する
エージェント:
- 特定の言語モデルを「推論エンジン」として使用し、どのアクションを実行するか決定可能
ツール:
- Wolfram Alpha:強力な計算機能とデータの可視化機能へのアクセスを提供し、高度な数学的機能を可能にします。
- Google 検索:Google 検索へのアクセスを提供し、アプリケーションとエージェントにリアルタイムの情報を提供します。
- OpenWeatherMap:気象情報を取得します。
- Wikipedia:Wikipedia の記事から情報へ効率的にアクセスできます。
LangSmith
LCEL (LangChain Expression Languag)
- コンポーネントを chain(連続呼出)する共通の Interface およびその記法
コンポーネント
| コンポーネント | 入力 | invoke 処理 | 出力 |
|---|---|---|---|
| Retriver | str(検索文字列) | 検索実行 | Document 配列(検索結果 ) |
| Prompt | dict | プロンプト生成 | str (プロンプト内容) |
| LLM | 生成 | ||
| Parser |
Runnable
インターフェース:
| インターフェース | 内容 |
|---|---|
| stream | チェーンを呼び出してストリーミングで返す (同期) |
| invoke | チェーンを呼び出す (同期) |
| batch | リスト入力でチェーンを呼び出す (同期) |
非同期メソッド:
| インターフェース | 内容 |
|---|---|
| astream | チェーンを呼び出してストリーミングで返す (非同期) |
| ainvoke | チェーンを呼び出す (非同期) |
| abatch | リスト入力でチェーンを呼び出す (非同期) |
| astream_log | 最終応答に加えて、中間ステップもストリーミングで返す (非同期) |
入出力スキーマ
| インターフェース | 入力 | 出力 |
|---|---|---|
| LLM | string, [Message], PromptValue | string |
| ChatModel | string, [Message], PromptValue | Message |
| Prompt | dict | PromptValue |
| Retriever | string | [Document] |
| Tool | string, dict | ツールに依存 |
| OutputParser | LLM の出力, ChatModel の出力 | パーサーに依存 |
Primitives:
- Runnable 実行(.pip(), |)
- RunnableParallel
- RunnablePassthrough
- RunnableLambda
- bind()
- assign()
- configurable_fields()