Published on
大規模言語モデルのためのLangChain入門
大規模言語モデル(LLM)は、チャットボット、質問応答システム、テキスト生成ツールなどのパワフルなアプリケーションの作成を可能にすることで、自然言語処理の分野を革新しました。しかし、これらのアプリケーションをゼロから構築することは困難で時間がかかる場合があります。そこでLangChainが活躍します - LLMによって動作するアプリケーションの開発を容易にするためのPythonライブラリです。
この記事では、LangChainについて詳しく説明し、LLMによるアプリケーションの構築方法を探究します。インストール方法、主要な概念、および始めるのを助けるコード例について説明します。
LangChainとは?
LangChainは、LLMとの相互作用の多くの複雑さを抽象化し、開発者がアプリケーションの構築に集中できるようにするオープンソースのライブラリです。
LangChainの主な機能には、次のものがあります:
- OpenAI、Cohere、Hugging Faceなどの複数のLLMプロバイダのサポート
- プロンプト、チェーン、エージェント、メモリなどのモジュラーコンポーネント
- ドキュメント、埋め込み、ベクトルストアの操作用のユーティリティ
- 他のツールやフレームワークとの統合
LangChainを利用することで、開発者はLLMの低レベルな詳細に気を使うことなく、素早くLLMを利用したアプリケーションのプロトタイプを作成し、展開することができます。
インストール方法
LangChainを使用するためには、pipを使用してインストールする必要があります。まず、仮想環境を作成することをおすすめします:
python -m venv langchain-env
source langchain-env/bin/activate
pip install langchain
また、使用するLLMプロバイダのパッケージもインストールする必要があります。たとえば、OpenAIのモデルを使用する場合は以下のようにします:
pip install openai
使用するプロバイダに対するAPIキーを用意してください。環境変数として設定することができます:
export OPENAI_API_KEY=your_api_key_here
主要な概念
プロンプト
プロンプトは、LLMへ出力をガイドするために提供する指示やコンテキストです。LangChainでは、プロンプトを簡単に作成して使用するためのPromptTemplate
クラスが提供されています。
次の例は、プロンプトテンプレートの作成方法です:
from langchain import PromptTemplate
template = """
You are an assistant that helps users write professional emails.
Given the following context:
{context}
Write a professional email response. Sign the email as "John".
"""
prompt = PromptTemplate(
input_variables=["context"],
template=template,
)
次に、入力変数を指定してプロンプトを使用できます:
context = "I need to inform my boss that I'll be taking a vacation next week."
print(prompt.format(context=context))
これにより、指定したコンテキストを使用して完成したプロンプトが表示されます。
LLM
LangChainでは、さまざまなLLMプロバイダとの相互作用のための標準的なインターフェースを提供するLLM
クラスが用意されています。
以下は、OpenAIのtext-davinci-003
モデルを使用する例です:
from langchain.llms import OpenAI
llm = OpenAI(model_name="text-davinci-003")
result = llm("What is the capital of France?")
print(result)
これにより、モデルが質問に対する応答を出力します。
チェーン
チェーンを使用することで、プロンプトやLLMなどの複数のコンポーネントを組み合わせて、より複雑なアプリケーションを作成することができます。LangChainではいくつかの組み込みのチェーンだけでなく、カスタムチェーンを作成することも可能です。
以下は、シンプルな連続チェーンの例です。プロンプトを受け取り、LLMに渡し、そのLLMの出力を2番目のプロンプトに渡します。
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
first_prompt = PromptTemplate(
input_variables=["product"],
template="What is a good name for a company that makes {product}?",
)
second_prompt = PromptTemplate(
input_variables=["company_name"],
template="Write a catchphrase for the following company: {company_name}",
)
chain = LLMChain(llm=llm, prompt=first_prompt)
second_chain = LLMChain(llm=llm, prompt=second_prompt)
result = chain.run("colorful socks")
print(f"Company name: {result}")
result = second_chain.run(result)
print(f"Catchphrase: {result}")
これにより、「colorful socks」という商品に基づいた会社名を生成し、その会社名に対するキャッチフレーズを生成します。
エージェント
エージェントは、ユーザーの入力に基づいてどのアクションを実行するかを動的に決定するためにLLMを使用するシステムです。外部世界とやり取りし、次に何をすべきかを決定するためのツールを使用することができます。
以下は、検索ツールと計算ツールを使用するシンプルなエージェントの例です:
from langchain.agents import initialize_agent, Tool
from langchain.tools import BaseTool
from langchain.llms import OpenAI
def search_api(query):
return "Search results for {query} would be returned here"
def calculator(expression):
return eval(expression)
search_tool = Tool(
name="Search",
func=search_api,
description="Useful for searching the internet for information."
)
calculator_tool = Tool(
name="Calculator",
func=calculator,
description="Useful for doing math calculations."
)
tools = [search_tool, calculator_tool]
llm = OpenAI(temperature=0)
agent = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True)
result = agent.run("What is the population of Canada divided by the population of the United States?")
print(result)
このエージェントは、まずカナダとアメリカの人口を検索し、検索結果から数値を抽出し、それを計算機を使用して分割します。
結論
LangChainは、LLMによって動力づけられたアプリケーションを開発するのをより簡単にする強力なライブラリです。標準的なインタフェースとモジュラーコンポーネントを提供することにより、開発者はLLMのAPIの詳細について心配することなく、アプリケーションの構築に集中することができます。
この記事では、インストール、プロンプト、LLM、チェーン、エージェントなどのキーコンセプトを含むLangChainの基本について説明し、コード例を提供しています。これにより、LangChainの使用を開始するのに役立ちます。
LangChainについて詳しくは、公式ドキュメンテーションのhttps://langchain.readthedocs.io/をご覧ください。また、GitHubリポジトリのexamplesディレクトリを探索することで、より高度なユースケースやアイデアを見つけることができます。 (opens in a new tab)
LLMが進化し続ける中、LangChainのようなツールは、さまざまなアプリケーションに対してアクセス可能で使用しやすいものとして、ますます重要な役割を果たすでしょう。LangChainを活用することで、強力な言語ベースのアプリケーションを構築し、このエキサイティングな分野の最前線に立つことができます。