効果的なプロンプトを作成すること自体が芸術形式ですが、 大規模言語モデル(LLM) は一般に使いやすいです。一方、LLM を使用したプログラミングは非常に困難な場合があります。ここで、LLM ベースのアプリケーションを開発するためのオープンソース フレームワークであるLangChain が登場します。
たとえば、このフレームワークを使用すると、開発者は次のことが可能になります。
現在、LangChain には 2 つのバージョンがあります。1 つは Python 用、もう 1 つは TypeScript/JavaScript 用です。この記事では、LangChain の仕組みと統合、フレームワークのインストール方法、このトピックについて知っておくべきことについて説明します。
LangChain の仕組み
LangChain を使用すると、言語モデルがデータ ソースに接続し、その環境と対話できるようになります。
-
LangChain コンポーネントは、モジュール式の抽象化と、それらの抽象化の実装のコレクションです。
-
既製のチェーンは、特定の高レベルのタスクを実行するためのコンポーネントの構造化されたコレクションです。
-
コンポーネントを使用して、既存のチェーンをカスタマイズしたり、新しいチェーンを作成したりできます。
これに関連して、次の 2 種類の言語モデルもあります。
-
大規模言語モデルでは、入力と出力はそれぞれ文字列で構成されます。
-
チャット モデルでは、メッセージのリストが入力として機能し、チャット メッセージが出力として機能します。後者には、コンテンツとロール (コンテンツのソースに関する情報を提供する) という 2 つのコンポーネントが含まれています。
一般に、言語モデルは入力にプロンプト テンプレートを使用します。これにより、言語またはチャット モデルがどのタスクを引き受けるべきかを定義することができます。たとえば、英語をフランス語に翻訳するアシスタントのタスクなどです。テンプレートは、翻訳が必要な文のリストなど、さまざまなコンテンツ インスタンスに適用することもできます。
LangChain は 6 つのモジュールで構成されています。
-
モデル I/O (言語モデルへのインターフェース)、
-
データ接続(アプリケーション固有のデータへのインターフェイス)、
-
チェーン(呼び出しシーケンスの構築)、
-
エージェント(チェーンが高レベルのディレクティブに基づいて使用するツールを選択できるようにします)、
-
メモリ(チェーン実行間でアプリケーションの状態を保持) と
-
コールバック(各チェーンの中間ステップのログとストリーミング)。
LangSmith を使用したデバッグ
LangChain で生成されたアプリケーションをプロトタイプ状態から本番環境に移行する場合、 LangSmith はサポートを提供します。
LangChain の使用例
LangChain の使用例は次のとおりです。
-
ドキュメントから Q&A を生成する
-
構造化データを分析し、
-
APIと対話し、
-
コードを理解するために
-
エージェントをシミュレートするには、
-
自律エージェントを実現するには、
-
チャットボットを導入し、
-
コードを生成するには、
-
データを抽出するには、
-
グラフデータを分析する
-
マルチモーダルな出力を提供するため、
-
自己チェック、
-
概要も
-
タグ付け。
ラングチェーンの統合
統合に関して言えば、LangChain は多様であり、数多くの機能をサポートしています。
LangChain は基本的に、これらすべての機能の中立的なハブとして機能します。
ラングチェーンをインストールする
Python 用のLangChain をインストールするには、pip または conda を使用します。バージョンの競合を避けるために、 Python パッケージを仮想環境にインストールすることをお勧めします。
次のコマンドを使用して、基本的な最小限のインストールを開始します。
pip install langchain
モデルプロバイダー、データストア、その他の統合のためのモジュールは含まれていません。 LangChain を一般的な言語モデルとともにインストールするには、以下を使用します。
pip install langchain[llms]
すべての統合を含めて LangChain をインストールするには、コマンドは次のとおりです。
pip install langchain[all]
zsh
(macOS の新しいバージョンのデフォルトのシェル) を使用する場合は、句を引用符内の角括弧で囲む必要があります。それ以外の場合、シェルは角括弧を配列として解釈します。先ほどの例に基づくと、正しいコマンドは次のようになります。
pip install 'langchain[all]'
LangChain for JavaScript をインストールするには、次を使用します。
-
npm (
npm install -S langchain
)、 -
Yarn (
yarn add langchain
) または -
pnpm (
pnpm add langchain
)。
LangChain for JavaScript は次のように使用できます。
-
Node.js、
-
Cloudflare ワーカー、
-
Vercel / Next.js (ブラウザ、サーバーレス、エッジ機能)、
-
スーパーベースエッジ機能、
-
ウェブブラウザと
-
デノ。
LangChain for JavaScript の詳細については、 ここを参照してください。
ラングチェーンの例
スペースの制限のため、この記事はLangChain ドキュメントの例に限定します。次の Python コードは、LLMChain を示しています。このチェーンは入力変数を受け取り、それをプロンプト テンプレートに渡してプロンプトを作成します。プロンプトは大規模言語モデル (ChatOpenAI) に渡され、CSV 出力は (オプションの) 出力パーサーに供給されて、文字列の Python 配列が作成されます。
from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (
ChatPromptTemplate,
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
)
from langchain.chains import LLMChain
from langchain.schema import BaseOutputParser
class CommaSeparatedListOutputParser(BaseOutputParser):
"""Parse the output of an LLM call to a comma-separated list."""
def parse(self, text: str):
"""Parse the output of an LLM call."""
return text.strip().split(", ")
template = """You are a helpful assistant who generates comma separated lists.
A user will pass in a category, and you should generate 5 objects in that category in a comma separated list.
ONLY return a comma separated list, and nothing more."""
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
human_template = "{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
chain = LLMChain(
llm=ChatOpenAI(),
prompt=chat_prompt,
output_parser=CommaSeparatedListOutputParser()
)
chain.run("colors")
# >> ['red', 'blue', 'green', 'yellow', 'orange']
LangChain 式言語 (LCEL)
LangChain Expression Language (LCEL) はチェーンを構成するための宣言型メソッドであり、デフォルトでストリーミング、バッチ、および非同期のサポートを提供します。 LCEL を使用すると、LangChain を簡単に使用できるようになり、基本的に Python または TypeScript/JavaScript でチェーンを作成するための高レベルの代替手段となります。 LCEL を学習するには、たとえば対話型のLangChain Teacher を使用できますが、最初に Python 用の LangChain をインストールする必要があります。
LCEL 式では、パイプ文字 ( |
) を使用して変数をチェーンで接続します。たとえば、単純な一般的なチェーンではモデルとプロンプトを使用します。
chain = prompt | model
コンテキストでは、次の Python プログラムを作成できます。
from langchain.prompts import ChatPromptTemplate
from langchain.chat_models import ChatOpenAI
model = ChatOpenAI()
prompt = ChatPromptTemplate.from_template("tell me a joke about {foo}")
chain = prompt | model
chain.invoke({"foo": "bears"})
出力 (Web サイトに記載されているとおり) は次のようになります。
AIMessage(content='Why don't bears use cell phones? nnBecause they always get terrible "grizzly" reception!', additional_kwargs={}, example=False)