0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【LangChain】OpenAIをやめてOpenRouterに統一しよ

Posted at

こんにちは。お久しぶりです。

先日、OpenAIのAPIを久々に実行しようとしたら、クレジットがなくなっていて。愕然としました。
クレジットは1年の制約があったらしい・・・・なんでやねん。

そして、色んなモデルが出てきて、OpenAIだけに執着するのはよくないので、OpenRouterというサービスを利用することにした。このサービスは、様々なサービスの書き方をインターフェースとして包含してくれるものである。
OpenRouterというサービスを経由するので直叩きより遅くなるが、プライベート用であれば十分だと思う。そして、課金も一括集約されてとても便利。

LangChainを最近触りつつあるんですが、昔はOpenAIで書いていたのでそれをOpenRouterに書き換えたいと思う。
ただそれだけ。

手順

  1. 初期設定
  2. 共通メソッドを作成する
  3. LLMを呼び出す

詳細

初期設定

初期設定は本当に簡単である。

  1. pythonの適当なプロジェクトを作成し、下記をpipでインストール
    1. langchain_openai
    2. langchain_core.messages
  2. OpenRouterに初期設定を行う。(サインアップ / 初期課金 / API KEYの作成)
  3. OPENROUTER_API_KEYという名前で、上記で作成したAPI KEYを環境変数に設定

共通メソッドを作成する

下記を共通メソッドとして準備する。
モデルは、モデル一覧から好きにデフォルト設定できる。

llm_util.py
from langchain_openai import ChatOpenAI
from os import getenv

def get_openrouter(model: str = "anthropic/claude-3-sonnet") -> ChatOpenAI:
    """OpenRouter APIを使用してLLMにアクセスするためのChatOpenAIインスタンスを返す

    OpenRouterは複数のLLMプロバイダーへの統一的なアクセスを提供するサービスです。
    直接OpenAIを使用する場合は、ChatOpenAI(model="gpt-4")のように指定することもできます。

    Args:
        model: 使用するモデル名。デフォルトはClaude 3 Sonnet

    Returns:
        ChatOpenAI: 設定済みのChatOpenAIインスタンス
    """
    return ChatOpenAI(
        model=model,
        openai_api_key=getenv("OPENROUTER_API_KEY"),
        openai_api_base="https://openrouter.ai/api/v1"
    )

LLMを呼び出す

後は、このLLMを呼び出す側のメソッドを書くだけでよい。

main.py
import random
from langchain_core.messages import HumanMessage
from llm_util import get_openrouter

# OpenAIクライアントを使ってOpenRouterにアクセス(モデルは意図的に指定)
model = get_openrouter(model="nousresearch/deephermes-3-llama-3-8b-preview:free")

# 適当な質問をいくつか用意
questions = [
    "もし猫が人間の言葉を話せるようになったら、最初に何を言うと思いますか?",
    "スーパーヒーローの能力を1つ選べるとしたら、どの能力を選びますか?その理由は?",
    "タイムマシンで100年後の日本に行ったら、どんな世界が待っていると思いますか?",
    "もし宇宙人と友達になれるとしたら、一緒にやってみたいことは何ですか?"
]

# ランダムに質問を選んでAIに聞いてみる
question = random.choice(questions)
print(f"質問: {question}\n")

messages = [HumanMessage(content=question)]
ai_message = model.invoke(messages)
print(f"AIの回答:\n{ai_message.content}")

簡単に、呼び出すものが作れる。

質問: もし宇宙人と友達になれるとしたら、一緒にやってみたいことは何ですか?

AIの回答:
宇宙人の友達になりたいなら、次のことがありそうです:

1. 宇宙旅行に行く: もし宇宙人が地球に来ていれば、宇宙旅行に参加して、彼らの故郷を訪ねるのは素晴らしい体験になりそうです。
2. 宇宙人の文化や習慣を学ぶ: 宇宙人が持つ独自の文化や習慣を知ることで、地球人と宇宙人の間でより深い理解を深められると思います。
3. 科学の進歩に貢献する: 宇宙人の知識と技術を活用して、地球上の科学的発見や技術の進歩に貢献できるかもしれません。
4. 平和と協力の促進: 地球と宇宙人の間で平和と協力を促進するために、友好関係を築くことができます。
5. 未来の可能性について議論する: 宇宙人の知恵を受けて、地球の人類の未来に関する考えやアイデアを共有し、発展させていくことができます。
6. 食べ物や料理を共有する: 地球の食文化と宇宙人の食文化を比較することで、両者の間で新しい料理や料理法を見つけ出すことができます。
7. 音楽や芸術を共有する: 地球の音楽や芸術と宇宙人の音楽や芸術を共有し、どちらかが持っていない新しい文化や芸術を発見することができます。

これらのアクティビティを通じて、宇宙人との友情を深め、地球と宇宙人の間でより深い理解を築くことができます。

OpenRouterを使うにしても

from langchain_openai import ChatOpenAI

を使うことが個人的には驚きであった。もしかしたら、本当はもっと正しい書き方があるのかもしれないが・・・。
少なくとも、これで動いたのは確認できた。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?