LangChainをDockerで実行!gpt-4o-miniと会話するまでの手順まとめ

LangChain

LangChainとは

LangChainは、大規模言語モデル(LLM)を活用したアプリケーション開発を効率化するためのフレームワーク。チャットボットやテキスト要約といった様々なAIアプリケーションの作成を短いコードで実現できる。

Python版とJavaScript版があり、今回はPythonで実行する流れを紹介する。

作るもの

公式のチュートリアルを参考に、質問を投げてOpenAI(gpt-4o-mini)に回答してもらうというプログラムをDocker環境で作成する。

手順

以下についてはこのページでは省略するので各自で用意してください。

  • Docker自体のインストール
  • OpenAIのAPIキーの取得

環境変数用ファイル(.env)の準備

「.env」ファイルを作業ディレクトリに用意して、下記のようにOpenAIのAPIキーを記載する。

OPENAI_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Dockerfileの準備

作業ディレクトリにDockerfileを用意する。内容は以下とする。

FROM python:3.13-bookworm

WORKDIR /app

RUN pip install langchain[openai]

CMD ["/bin/bash"]
  • pip install で、 langchain[openai] を指定することにより、LangChain本体とOpenAIモデル連携に必要な追加ライブラリをまとめてインストールできる。

Pythonスクリプトの用意

以下のようなファイルを src/kotohazime.py として用意する。

from langchain.chat_models import init_chat_model
from langchain_core.messages import HumanMessage, SystemMessage

model = init_chat_model("gpt-4o-mini", model_provider="openai")

messages = [
    SystemMessage("あなたはLangChainを使いこなしているAIエンジニアです"),
    HumanMessage("LangChainをこれから活用しようとしているエンジニアに一言アドバイスをお願いします。"),
]

print(model.invoke(messages))
  • init_chat_model() で、モデルプロバイダとモデルの種類を指定する
  • messages としてこれから投げるメッセージを定義している
    • SystemMessage
      • LLM側の振る舞いを指定できる
    • HumanMessage
      • ユーザーから投げるメッセージを指定できる
  • model.invoke() でLLMを呼び出すことができる

実行

Dockerのビルドと起動

cd 今回の作業ディレクトリ

docker build -t my-langchain-app:latest .

docker run -it --rm --env-file .env -v $(pwd)/src:/app/src --name lc-app my-langchain-app:latest

Pythonスクリプト実行

上のコマンドでDocker起動すると、コンテナに入った状態になるのでそこで下記コマンドを実施する。

python src/kotohazime.py

以下のような内容が返ってくれば成功。

# python src/kotohazime.py 
content='LangChainを活用する際には、まずその基本概念や構造をしっかり理解することが重要です。特に、チェーン、ドキュメント、およびエージェントの仕組みを grasp すると、より効果的にサービスを構築できます。また、実際のプロジェクトで試行錯誤しながら学ぶことが大切です。コミュニティやドキュメントも活用して、最新の情報やベストプラクティスを取り入れてください。頑張ってください!' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 126, 'prompt_tokens': 55, 'total_tokens': 181, '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': 'fp_54eb4bd693', 'id': 'chatcmpl-Badvh7DSnMPUSN9J4vYO8WksaiX6t', 'service_tier': 'default', 'finish_reason': 'stop', 'logprobs': None} id='run--b1567225-342d-49b3-9250-4190e918ab6c-0' usage_metadata={'input_tokens': 55, 'output_tokens': 126, 'total_tokens': 181, 'input_token_details': {'audio': 0, 'cache_read': 0}, 'output_token_details': {'audio': 0, 'reasoning': 0}}

回答自体は content に入っている。

コメント

タイトルとURLをコピーしました