LangChainはLLMアプリケーションの作成を加速するためのフレームワークです。現在、OpenAIをはじめ多くの企業がLLM利用のためのAPIを公開していますが、各APIの入出力のフォーマットはバラバラであるためPoC時にLLM同士を比較したり、LLM変更の際のコストが大きくなってしまいます。LangChainでは各LLM APIのフォーマットを統一してくれており、モデルの変更や比較が非常に高速にできます。また、LLMアプリケーションを実装する上で有用なRAGやプロンプト管理、agentなどの機能が豊富に揃っており、即座にLLMアプリケーションを作成することができます。LangChainの主な機能としては次のようなものが挙げられます。
- Model I/O
- Retrieval
- Chains
- Agent Tooling
これら機能について簡単に解説していきます。
Model I/O
OpenAI以外にもmicrosoft Azure, AWS, Google, Anthropicなどさまざまな企業がLLM APIを提供しています。先に述べたようにLangChainではこれらAPIの差異を吸収し、統一したインターフェースで各LLMを利用することができます。
ビジネスシーンで精度を求めるのであれば、Azureが提供しているOpenAIのGpt-4o, Googleが提供しているGemini 1.5 pro, AWSが提供しているAnthropicのClaude 3.5 Sonnetの3つを比較することが多いと思いますが、これらを比較しようと思ったら各サービスのAPIの把握、プロンプト入力形式変換のフォーマッター、出力形式変換のフォーマッターが必要になり、面倒です。しかし、LangChainであれば各APIのwrapperがすでに提供されているため、アプリケーションに渡すLLMオブジェクトを取り替えるだけでLLMモデルを変更することができます。
Retrieval
LLMは多くのことを答えることができますが、学習に利用されていない最新情報や社内文書について答えられなかったり、嘘をついたり(ハルシネーション)します。これを防ぐための手段として、RAG(Retrieval-Augumented Generation)があります。RAGは参照したい文書をあらかじめベクトル化し保存したベクトルDBから入力プロンプトに近い意味持った文書を引っ張り出し、LLMに入力することで外部データを参照しつつ質問に答えることができます。
LangChainではさまざまな形式の文書を読み込み、文書データの分割、エンベディング(ベクトル化)indexingのための機能が提供されており、RAGシステムを非常に簡単に組むことができます。
Chains
LLMは単一のプロンプトのみでは複雑な問題を解くことができないことが多い。これを解決したプロンプトエンジニアリングとして、CoT(Chain of Thought)プロンプティングがある。これは複雑な問題を解く前に問題の解決手順を推論させ、それを元に問題を解決するというプロンプトである。従来のChatGPTでは人間→AI→人間→AIという2段階の手順を踏まないければCoTはできないが、LangChainではChainsという機能を利用することで人間→AI→AIと人間が絡む工程を最初の一つにすることができる。ChainsはLangChainのコア機能であるLCELを利用して簡潔に記述することができる。
Agent Tooling
AgentとはLLMに利用可能なtoolを持たせ、LLM自身が問題解決のために利用するtoolを決定し実行することを繰り返すことで、LLMが複雑な問題を自律的に解決できるようにするアーキテクチャである。代表的なAgentとしてReAct(Reasoning and Action)がある。Agentはtoolとしてさまざまな関数やAPIを持つことができ、LLMが苦手な計算などを完璧に行うことができる。LangChainではAgentの作成や実行を簡単にできる機能や、自作のpython関数をtoolとしてagentに持たせることができる。
LangChainを用いたAzure API実行例
最も簡単なLangChainの例として、AzureのGPT-4oのAPIを叩いてみる。(APIの設定は各自行ってください)
import os
from langchain_openai import AzureChatOpenAI
llm = AzureChatOpenAI(
deployment_name='gpt-4o',
azure_endpoint=os.environ['AZURE_OPENAI_ENDPOINT'],
openai_api_key=os.environ['AZURE_OPENAI_API_KEY'],
openai_api_type='azure',
openai_api_version='2023-05-15',
temperature=0
)
result = llm.invoke('pythonでできることを5個教えてください。')
print(result.content)
もちろんです!Pythonは非常に多用途なプログラミング言語で、以下のようなさまざまなことができます。
1. **ウェブ開発**:
- フレームワーク(例: Django, Flask)を使用して、動的なウェブサイトやウェブアプリケーションを構築できます。
2. **データ解析と科学計算**:
- ライブラリ(例: Pandas, NumPy, SciPy)を使用して、大量のデータを解析し、統計的な計算を行うことができます。
3. **機械学習と人工知能**:
- ライブラリ(例: TensorFlow, Keras, Scikit-learn)を使用して、機械学習モデルやディープラーニングモデルを構築し、トレーニングすることができます。
4. **自動化とスクリプト作成**:
- 日常的なタスク(例: ファイル操作、ウェブスクレイピング、データの変換)を自動化するためのスクリプトを簡単に作成できます。
5. **ゲーム開発**:
- ライブラリ(例: Pygame)を使用して、2Dゲームやシンプルなゲームを開発することができます。
これらはPythonの多くの用途の一部に過ぎません。Pythonはそのシンプルさと強力なライブラリのエコシステムにより、さまざまな分野で広く利用されています。