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
- ユーザーから投げるメッセージを指定できる
- SystemMessage
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 に入っている。


コメント