LangChainは、大規模言語モデル(LLM)を活用したアプリケーション開発を劇的に効率化するオープンソースフレームワークです。本チュートリアルでは、LangChainの基本概念から実践的な活用方法まで、体系的に解説します。AIアプリケーション開発を始めたい方、脱プロンプトエンジニアを目指す方に最適な一冊です。
LangChainとは?なぜ必要なのか
LangChainは、2022年にリリースされたLLMアプリケーション開発フレームワークで、以下の主要原因機能を提供します。
**コンポーネント**:プロンプトテンプレート、メモリストア、ベクトルデータベース連携などのモジュール群 **チェーン**:複数のコンポーネントを組み合わせた処理パイプライン **エージェント**:ユーザーの入力に応じて自律的にツールを選択し、行動するAIシステム
従来のLLM活用では、個別のAPI呼び出しやプロンプト管理が複雑でした。LangChainはこれらの課題を一括解決し、開発期間の大幅短縮を実現します。
LangChainの基本使い方
LangChainを始めるには、まずPython環境の準備とライブラリインストールが必要です。
インストール
pip install langchain langchain-openai
基本的な使用例
from langchain_openai import OpenAI
llm = OpenAI(api_key="your-api-key")
response = llm.invoke("LangChainについて教えてください")
print(response)
プロンプトテンプレートを活用すれば、再利用可能なプロンプト設計が可能になります。
from langchain_core.prompts import PromptTemplate
template = "以下の{max_words}語で{topic}を説明してください"
prompt = PromptTemplate(template=template, input_variables=["max_words", "topic"])
formatted_prompt = prompt.format(max_words=100, topic="AI")
response = llm.invoke(formatted_prompt)
チェーンとエージェントの実装
LangChainの真価はチェーンとエージェント機能にあります。
**チェーン**は複数の処理ステップを連結し、複雑なタスクを自動化します。LLMChainはプロンプトテンプレートとLLMを組み合わせた基本的なチェーンです。
from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)
result = chain.invoke({"max_words": 200, "topic": "機械学習"})
**エージェント**は、ユーザーのGoalを達成するために必要なツールを自律的に選択・実行します。
from langchain.agents import AgentType, initialize_agent, load_tools
tools = load_tools(["serpapi", "python_repl"])
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
RAGと外部データ連携
Retrieval-Augmented Generation(RAG)は、LangChainの重要な機能の一つです。外部ドキュメントからの情報検索と回答生成を組み合わせられます。
from langchain_community.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
ドキュメント読み込みと分割
loader = TextLoader("data.txt")
documents = loader.load()
splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = splitter.split_documents(documents)
ベクトルデータベース作成
embeddings = OpenAIEmbeddings()
db = FAISS.from_documents(docs, embeddings)
RAGチェーン構築
from langchain.chains import RetrievalQA
qa_chain = RetrievalQA.from_chain_type(llm=llm, retriever=db.as_retriever())
answer = qa_chain.invoke("データファイルの内容を要約してください")
RAGを活用すれば、LLMの学習データに依存せず