タイトルに大きな意味はありませんが、LangChainを勉強している50代のおっさんもいるんだよということを伝えたくなりました。
Langchainの基礎
LangChainが取り組もうとする主なニーズがいくつか存在します:
- 標準化されたコンポーネントインタフェース: AIアプリケーションにおけるモデルと関連コンポーネントの数は増加し続け、結果として、開発者が学び、活用する必要のあるAPIの種類は膨大なものになっています。この多様性は、開発者がアプリケーションを構築する際にプロバイダーを切り替えたり、コンポーネントを組み合わせることを困難にします。LangChainはキーとなるコンポーネントに対する標準インタフェースを公開するので、プロバイダー間での切り替えが容易となります。
- オーケストレーション: アプリケーションは複雑になり、複数のコンポーネントやモデルを組み合わせることになり、多様なタスクを達成できるコントロールフローにこれらの要素を効率的に接続する要件が高まっています。そのようなアプリケーションの構築においてはオーケストレーションが重要となります。
- 観測可能性と評価: アプリケーションはさらに複雑になると、それらの内部で何が起きているのかを理解することが非常に困難になります。さらに、選択のパラドクスによって開発のペースが制限されることもあり得ます。例えば、多くの場合において開発者は、プロンプトをどのようにエンジアリングするのか、どのLLMが最も精度、レイテンシー、コストのバランスを取るのかに迷うことになります。観測可能性と評価は、開発者が自身のアプリケーションをモニタリングし、自信を持ってこのような質問に迅速に回答する助けとなります。
Why LangChain? | 🦜️🔗 LangChain | [翻訳] なぜLangChainなのか? #langchain - Qiita
以降では以下のサンプルをウォークスルーします。
使ったノートブックはこちらで公開しています。
LangChainイントロダクション
LangChainは、大規模言語モデル(LLM)を活用したアプリケーションを開発するためのフレームワークです。
LangChainは、LLMアプリケーションのライフサイクルのあらゆる段階を簡素化します:
- 開発: LangChainのオープンソースコンポーネントとサードパーティ連携を使用してアプリケーションを構築します。LangGraphを使用して、ストリーミングと人間のループサポートを備えたステートフルエージェントを構築します。
- プロダクション化: LangSmithを使用してアプリケーションを検査、監視、評価し、継続的に最適化して自信を持ってデプロイできます。
- デプロイメント: LangGraphプラットフォームを使用して、LangGraphアプリケーションを本番対応のAPIおよびアシスタントに変換します。
LangChainは、大規模言語モデルや埋め込みモデル、ベクトルストアなどの関連技術のための標準インターフェースを実装し、数百のプロバイダーと統合しています。詳細はintegrationsのページをご覧ください。
以降はDatabricksでサンプルを動かしていきます。
%pip install -qU langchain[openai] databricks-langchain
%restart_python
OpenAI
OpenAIのAPIキーはシークレットに格納しているものを使います。
import os
os.environ["OPENAI_API_KEY"] = dbutils.secrets.get("demo-token-takaaki.yayoi", "openai_api_key")
LLMの動作確認をします。
from langchain.chat_models import init_chat_model
model = init_chat_model("gpt-4o-mini", model_provider="openai")
model.invoke("こんにちは、世界!")
AIMessage(content='こんにちは!どんなことについてお話ししましょうか?', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 14, 'prompt_tokens': 11, 'total_tokens': 25, 'completion_tokens_details': {'accepted_prediction_tokens': 0, 'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}, 'prompt_tokens_details': {'audio_tokens': 0, 'cached_tokens': 0}}, 'model_name': 'gpt-4o-mini-2024-07-18', 'system_fingerprint': 'fp_06737a9306', 'finish_reason': 'stop', 'logprobs': None}, id='run-f28b4b9c-269f-40d0-9e4c-8112d93e2df9-0', usage_metadata={'input_tokens': 11, 'output_tokens': 14, 'total_tokens': 25, 'input_token_details': {'audio': 0, 'cache_read': 0}, 'output_token_details': {'audio': 0, 'reasoning': 0}})
Databricksの場合は、MLflow Tracingでトレースを確認できます。
Databricks
Databricksでプログラムを実行する際は、特に設定の必要なしに基盤モデルAPIのモデルを呼び出すことができます。
from databricks_langchain import ChatDatabricks
model = ChatDatabricks(endpoint="databricks-meta-llama-3-3-70b-instruct")
model.invoke("こんにちは、世界!")
AIMessage(content='こんにちは!あなたの日はどうですか?', additional_kwargs={}, response_metadata={'prompt_tokens': 14, 'completion_tokens': 11, 'total_tokens': 25}, id='run-ddf0ca84-b217-42d6-9801-0770ee09ab8c-0')
Databricksの場合は別のモジュールを使っていますが、OpenAIやAnthropic、VertexAIなどであればすべてinit_chat_model
の引数を変えるだけでアクセスすることができます。このようなフレームワークがないと、それぞれのモデルプロバイダーのAPIを理解して使い分けなくてはならない訳ですね。
アーキテクチャ
LangChainフレームワークは複数のオープンソースライブラリで構成されています。詳細はアーキテクチャページをご覧ください。
-
langchain-core
: チャットモデルやその他のコンポーネントの基本的な抽象化。 - 統合パッケージ(例:
langchain-openai
,langchain-anthropic
など): 重要な統合は軽量パッケージに分割され、LangChainチームと統合開発者によって共同で管理されています。 -
langchain
: アプリケーションの認知アーキテクチャを構成するチェーン、エージェント、および検索戦略。 -
langchain-community
: コミュニティによって管理されているサードパーティの統合。 -
langgraph
: 永続性、ストリーミング、その他の重要な機能を備えた本番対応アプリケーションにLangChainコンポーネントを組み合わせるためのオーケストレーションフレームワーク。LangGraphのドキュメントを参照してください。
こちらに続きます。