LangChainでOpenRouterを使用する方法

LangChainフレームワークを使用してOpenRouterのAPIを統合する方法を紹介します。LangChainを使えば、OpenRouterを通じて複数のAIモデルにシームレスにアクセスできます。

基本的な設定

import os
from langchain.chat_models import ChatOpenRouter
from langchain.schema import HumanMessage, SystemMessage
 
# OpenRouter APIキーを環境変数に設定
os.environ["OPENROUTER_API_KEY"] = "your_api_key_here"
 
# ChatOpenRouterモデルのインスタンス化
chat = ChatOpenRouter(model="anthropic/claude-3-opus")
 
# 簡単な会話の実行
messages = [
    SystemMessage(content="あなたは親切で役立つアシスタントです。"),
    HumanMessage(content="日本の四季について簡単に説明してください。")
]
 
response = chat(messages)
print(response.content)

チェーンの作成

from langchain.chains import LLMChain
from langchain.prompts import ChatPromptTemplate
 
# プロンプトテンプレートの作成
prompt = ChatPromptTemplate.from_messages([
    ("system", "あなたは{topic}の専門家です。"),
    ("human", "{question}")
])
 
# チェーンの作成
chain = LLMChain(
    llm=ChatOpenRouter(model="openai/gpt-4"),
    prompt=prompt
)
 
# チェーンの実行
result = chain.run(topic="日本文化", question="茶道の歴史と意義について教えてください。")
print(result)

モデルの動的切り替え

from langchain.chat_models import ChatOpenRouter
 
# 利用可能なモデルを指定して初期化
router = ChatOpenRouter()
 
# モデルを動的に切り替え
response1 = router.with_model("anthropic/claude-3-opus").invoke("複雑な質問への回答をお願いします。")
response2 = router.with_model("openai/gpt-3.5-turbo").invoke("シンプルな質問への回答をお願いします。")

エージェント構築への活用

from langchain.agents import AgentType, initialize_agent, load_tools
from langchain.chat_models import ChatOpenRouter
 
# OpenRouterモデルの初期化
llm = ChatOpenRouter(model="mistral/mistral-large")
 
# ツールの読み込み
tools = load_tools(["ddg-search", "wikipedia"], llm=llm)
 
# エージェントの初期化
agent = initialize_agent(
    tools, 
    llm, 
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)
 
# エージェントの実行
agent.run("2023年の日本のノーベル賞受賞者について調べて要約してください。")

複数モデルの結果比較

from langchain.chat_models import ChatOpenRouter
from langchain.schema import HumanMessage
 
# 異なるモデルでインスタンス化
claude = ChatOpenRouter(model="anthropic/claude-3-opus")
gpt4 = ChatOpenRouter(model="openai/gpt-4")
mistral = ChatOpenRouter(model="mistral/mistral-large")
 
# 同じ質問を複数のモデルに投げる
question = HumanMessage(content="AIの未来について簡潔に予測してください。")
 
claude_response = claude([question])
gpt4_response = gpt4([question])
mistral_response = mistral([question])
 
# 結果比較
print("Claude:", claude_response.content)
print("GPT-4:", gpt4_response.content)
print("Mistral:", mistral_response.content)

これらの例を「OpenRouterの使い方」セクションの後に追加することで、LangChainを使ったOpenRouterの活用方法を詳細に説明できます。この情報はObsidianのナレッジベースとして非常に有用でしょう。