あらすじ
最近はChatGPTを使うだけでなく、仕事でもLLMを使った開発に携わる事が増えてきた。
そんな中、LangChainを使った開発が有名であると聞き、これを試してみようと考えた。
実装してみた
公式に書かれている内容を基にして作ってみた!
実装する際にポイントとなるのは以下の通りである。
- OpenAI APIのキーを取得し、環境変数にOPENAI_API_KEYを設定する
キーを取得するにはChatGPTの有料プランに入る必要がある。
あとはPythonのコードをそのままコピーするだけでも実行できた。
環境変数を設定
.env
先に環境変数を用意する。
私はdocker composeを使ってコンテナを実行するので、 .envファイルとdocker-compose-ymlにそれぞれ以下の内容を記載する。
1OPENAI_API_KEY=...省略...docker-compose.yml
docker-compose.ymlの一部分を写しているが、 ここで重要なのはargs, env_fileの箇所である。
1services:
2app:
3 build:
4 context: app/.
5 args:
6 - OPENAI_API_KEY:${OPENAI_API_KEY}
7 env_file:
8 - app/.env実行ファイルを用意
requirements.txt
インストールしたライブラリは以下の二つである。
今回はOpenAI APIのLLMを使用しているので、二つ目のライブラリは langchain[openai] にしている。
一つ目のライブラリはlangchainであり、これはどのLLMを選ぶにしても共通して使用される。
1langchain二つ目のライブラリに関しては使用するLLMによってインストールするライブラリが異なる。
例として、
- OpenAIを使用する場合はlangchain[openai]、
- Google Geminiを使用する場合はlangchain[google-genai]
をインストールする必要がある。
OpenAIを使用する場合
1langchain[openai]Google Geminiを使用する場合
1langchain[google-genai]main.py
Pythonの実行ファイルは以下の通りである。
ほとんどは公式サイトに載せられているままではあるが、 ファイルの全体像は以下のようになっている。
1# 1. モデルの選択
2from langchain.chat_models import init_chat_model
3
4model = init_chat_model("gpt-4o-mini", model_provider="openai")
5
6# 2. LangChainを実行
7from langchain_core.messages import HumanMessage, SystemMessage
8
9messages = [
10 SystemMessage("Translate the following from English into Japanese"),
11 HumanMessage("Hi, there! It's me!"),
12]
13
14result = model.invoke(messages)
15print('result:', result)上記ではOpenAIのgpt-4o-miniを使用しているが、
Geminiを使いたいときはファイル内の# 1. モデルの選択の部分を以下のように変える。
1# 1. モデルの選択
2from langchain.chat_models import init_chat_model
3
4model = init_chat_model("gemini-2.5-flash", model_provider="google_genai")実行結果
gpt-4o-mini
1result: content='こんにちは!私だよ!' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 6, 'prompt_tokens': 25, 'total_tokens': 31, 'completion_tokens_details': {'accepted_prediction_tokens': 0, 'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}, 'prompt_tokens_details': {'audio_tokens': 0, 'cached_tokens': 0}}, 'model_name': 'gpt-4o-mini-2024-07-18', 'system_fingerprint':
2'fp_34a54ae93c', 'id': 'chatcmpl-BywqXDZ04b98W9TAvfF2zMqjR8Ef5', 'service_tier': 'default', 'finish_reason': 'stop', 'logprobs': None} id='run--d50c1310-ad44-4f41-b98f-6b52c5d17fb5-0' usage_metadata={'input_tokens': 25, 'output_tokens': 6, 'total_tokens': 31, 'input_token_details': {'audio': 0, 'cache_read': 0}, 'output_token_details': {'audio': 0, 'reasoning':
30}}gemini-2.5-flash
1result: Here are a few natural ways to translate "Hi, there! It's me!" depending on the context and speaker's gender:
2
31. **General / Female speaker (e.g., knocking on a door, calling out):**
4 * **はーい、私だよ!** (Haaai, watashi da yo!)
5 * "はーい" (Haaai) is a friendly, soft way to get attention, like "Hi!" or "Yes?".
6 * "私だよ" (watashi da yo) means "It's me!" (watashi is a general/female pronoun, da yo is casual emphasis).
7
82. **Male speaker (e.g., calling out to a friend, announcing arrival):**
9 * **おーい、俺だよ!** (Ooii, ore da yo!)
10 * "おーい" (Ooii) is a more robust way to get someone's attention, like "Hey!" or "Yoo-hoo!".
11 * "俺だよ" (ore da yo) means "It's me!" (ore is a casual, masculine pronoun).
12
133. **Very casual greeting (e.g., seeing a friend from a distance):**
14 * **やあ!私だよ!** (Yaa! Watashi da yo!) - General/Female
15 * **やあ!俺だよ!** (Yaa! Ore da yo!) - Male
16 * "やあ" (Yaa) is a very casual "Hi" or "Hey".
17
18Choose the one that best fits the specific situation and the speaker's gender. The first two options are very common for announcing one's presence.まとめ
これまでOpenAIやGeminiのライブラリを使った開発などを行ってきたが、 LangChainを使う事によりLLMの切り替えがとても簡単であった。
APIを使う際には有料になる事が多いLLMであるが、 用途に合わせて切り替える事でコスト削減を見込める。 これは予算が限られている個人開発ではとても魅力的である。