![見出し画像](https://assets.st-note.com/production/uploads/images/171719784/rectangle_large_type_2_8dc634343efa4224f4a825c4f053468c.png?width=1200)
VertexAI Geminiを使ってみる|Cloud Runを使ってwebアプリ(API)を作成する(その2:Geminiから応答を取得するエンドポイントを作成する)
GCPの提供するcloud runにweb APIを作成する記事を書きましたが、今回は、Geminiからの応答を取得するAPIを作成します。
Flaskを使い、エンドポイントを作成するコードを作成します。
VertexAIライブラリーを使用して呼び出してもよいのですが、後々の拡張性を考えてLangchainを使用してGeminiを使用します。
・Code
app.py
langchain-core == 0.3.28
langchain-google-vertexai == 2.0.9
# app/main.py
from flask import Flask, request, jsonify
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
import os
from langchain_google_vertexai import VertexAI
PROJECT_ID = "プロジェクトIDを設定します。"
LOCATION = "us-central1"
#RESOURCE_ID = "gemini-1.5-flash-002"
#RESOURCE_ID = "gemini-1.5-pro-002"
RESOURCE_ID ="gemini-2.0-flash-exp"
#RESOURCE_ID = "gemini-2.0-flash-thinking-exp-1219"
app = Flask(__name__)
# LangChainの設定
@app.route('/generate', methods=['POST'])
def generate_response():
data = request.get_json()
question = data.get('question')
llm = VertexAI(model_name=RESOURCE_ID)
system = "You are a helpful AI."
prompt = ChatPromptTemplate.from_messages(
[
("system", system),
("human","{question}"),
]
)
# チェーンの作成と実行
chain = (
{"question": RunnablePassthrough()}
| prompt | llm)
response = chain.invoke(question)
return {"response": response}
if __name__ == '__main__':
#app.run(host='0.0.0.0', port=5000)
app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
Dockerfile
# Dockerfile
FROM python:3.11-slim
WORKDIR /app
# 必要なパッケージのインストール
COPY requirements.txt .
RUN pip install --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt
# アプリケーションのコードをコピー
COPY . .
# APIの起動
CMD ["flask", "run", "--host=0.0.0.0"]
requirements.txt
Flask
langchain
langchain-google-vertexai
・cloud runへデプロイ
デプロイ方法の詳細は今回省きますが、流れは、
1. Artifact RegistryでDockerリポジトリを作成
2. ビルドしたイメージをArtifact RegistryにPush
3. Cloud Runでデプロイする
だけです。
例えば、GCP CLIを使って以下のようなコマンドでpushします。
docker build -t us-central1-docker.pkg.dev/flask-demo/geminitest/app:1.0 .
docker push us-central1-docker.pkg.dev/flask-demo/geminitest/app:1.0
pushできたらcloud runへportを5000に変更してデプロイします。
cloud runのURLを使ってpythonからrequestします。
import requests
import json
prompt = "こんにちは。"
post_url = "https://app-*********.us-central1.run.app/generate" #自分のアドレスを入力
json = {"question": prompt} #条件を入力
#POST送信
response = requests.post(
post_url,
json = json,
)
print(response.json().get('response'))
こんにちは!お元気ですか? 😊