この用語をシェア
概要
LangChainは、大規模言語モデル(LLM)を活用したアプリケーション開発フレームワークです。複雑なAIアプリケーションの構築を支援し、RAG(Retrieval Augmented Generation)やエージェントシステムの開発を可能にします。モジュール化されたアーキテクチャにより、様々なLLMプロバイダーやデータソースを統合し、高度な言語処理アプリケーションを構築できます。
詳細説明
主な特徴
- モジュール設計:コンポーネントベースの柔軟なアーキテクチャ
- マルチプロバイダー対応:OpenAI、Claude、Llama等の様々なLLMに対応
- RAG機能:外部データソースとの統合による知識拡張
- エージェント機能:自動的なタスク実行とツール使用
- メモリ機能:会話履歴の保持と文脈理解
- チェーン機能:複数のLLM呼び出しの連鎖
主要コンポーネント
- Models:LLMやチャットモデルのラッパー
- Prompts:プロンプトテンプレートと管理
- Chains:LLM呼び出しの連鎖と制御
- Agents:動的な意思決定とツール使用
- Memory:会話履歴とコンテキスト管理
- Vector Stores:ベクトルデータベースとの統合
使用例
基本的なLLM使用
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
# LLMの初期化
llm = OpenAI(temperature=0.7)
# プロンプトテンプレートの作成
template = """
あなたは{role}です。
以下の質問に答えてください:
質問: {question}
回答:
"""
prompt = PromptTemplate(
input_variables=["role", "question"],
template=template
)
# チェーンの作成
chain = LLMChain(llm=llm, prompt=prompt)
# 実行
response = chain.run(
role="プロフェッショナルなITコンサルタント",
question="AIプロジェクトの成功要因は何ですか?"
)
print(response)
RAG(Retrieval Augmented Generation)の実装
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
from langchain.document_loaders import TextLoader
# ドキュメントの読み込み
loader = TextLoader("company_documents.txt")
documents = loader.load()
# テキストの分割
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
texts = text_splitter.split_documents(documents)
# 埋め込みベクトルの作成
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(texts, embeddings)
# RAGチェーンの作成
qa_chain = RetrievalQA.from_chain_type(
llm=OpenAI(temperature=0),
chain_type="stuff",
retriever=vectorstore.as_retriever()
)
# 質問の実行
query = "弊社のAIサービスについて教えてください"
result = qa_chain.run(query)
print(result)
エージェント機能の実装
from langchain.agents import create_react_agent, AgentExecutor
from langchain.tools import Tool
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
import requests
# カスタムツールの定義
def search_web(query):
"""Web検索を実行するツール"""
# 実際の検索APIを呼び出す
return f"検索結果: {query}に関する情報"
def calculate(expression):
"""数式を計算するツール"""
try:
result = eval(expression)
return f"計算結果: {result}"
except Exception as e:
return f"計算エラー: {str(e)}"
# ツールの作成
tools = [
Tool(
name="WebSearch",
func=search_web,
description="インターネットで情報を検索します"
),
Tool(
name="Calculator",
func=calculate,
description="数式を計算します"
)
]
# エージェントの作成
llm = OpenAI(temperature=0)
agent = create_react_agent(llm, tools)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# エージェントの実行
result = agent_executor.run(
"2023年のAI市場規模を調べて、前年比の成長率を計算してください"
)
print(result)
メモリ機能付きチャットボット
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain
from langchain.llms import OpenAI
# メモリの作成
memory = ConversationBufferMemory()
# 会話チェーンの作成
llm = OpenAI(temperature=0.7)
conversation = ConversationChain(
llm=llm,
memory=memory,
verbose=True
)
# 会話の実行
print("チャットボットとの会話を開始します...")
while True:
user_input = input("あなた: ")
if user_input.lower() == "quit":
break
response = conversation.predict(input=user_input)
print(f"ボット: {response}")
関連技術
- OpenAI API:GPTモデルとの統合
- Claude API:AnthropicのClaude統合
- Vector Databases:Pinecone、Chroma、FAISS
- Hugging Face:オープンソースモデル統合
- LangSmith:LangChainアプリケーションの監視
- Streamlit:WebアプリケーションのUI
適用分野
- カスタムチャットボット・AI助手
- 文書検索・質問応答システム
- 知識管理システム
- 自動化エージェント
- コンテンツ生成・要約
- 多言語翻訳・通訳
- データ分析・レポート生成
メリット・デメリット
メリット
- モジュール化された設計による柔軟性
- 多様なLLMプロバイダーとの統合
- RAGによる知識拡張が容易
- 豊富なツールと統合オプション
- 活発な開発コミュニティ
- 包括的なドキュメント
デメリット
- 学習コストが高い
- 頻繁なAPI変更
- 複雑なアプリケーションでの性能問題
- デバッグが困難な場合がある
- 依存関係の管理が複雑