LangChain の Gemini統合 を試す
「LangChain」の「Gemini」統合を試したので、まとめました。
1. ChatGoogleGenerativeAI
「langchain-google-genai」パッケージの「ChatGoogleGenerativeAI」を通じて、Googleの「gemini」と「gemini-vision」およびその他の生成モデルにアクセスできます。
2. LLM呼び出し
Colabでの実行手順は、次のとおりです。
(1) パッケージのインストール。
「langchain-google-genai」をインストールします。pillowはマルチモーダルで使用します。
# パッケージのインストール
!pip install langchain==0.1.9 langchain-google-genai pillow
(2) 環境変数の準備。
左端の鍵アイコンで「GOOGLE_API_KEY」を設定してからセルを実行してください。
# 環境変数の準備 (左端の鍵アイコンでGOOGLE_API_KEYを設定)
import os
from google.colab import userdata
os.environ["GOOGLE_API_KEY"] = userdata.get("GOOGLE_API_KEY")
(3) LLM呼び出し。
from langchain_google_genai import ChatGoogleGenerativeAI
# LLMの準備
llm = ChatGoogleGenerativeAI(model="gemini-pro", temperature=0.9)
# LLMの呼び出し
print(llm.predict("コンピュータゲームを作る日本語の新会社名をを1つ提案してください。"))
3. システムメッセージ
「Gemini」は現時点ではシステムメッセージをサポートしていませんが、最初のHumanMessageに追加できます。SystemMessageを使う場合は、convert_system_message_to_human=True を設定してください。
(1) システムメッセージ付きでLLM呼び出し。
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage
# LLMの準備
llm = ChatGoogleGenerativeAI(
model="gemini-pro",
temperature=0.9,
convert_system_message_to_human=True
)
# LLMの呼び出し
messages = [
SystemMessage(content="あなたは優秀なAIアシスタントです。"),
HumanMessage(content="コンピュータゲームを作る日本語の新会社名をを1つ提案してください。")
]
print(llm.predict_messages(messages))
4. ストリーミングとバッチ処理
ChatGoogleGenerativeAIストリーミングとバッチ処理をネイティブにサポートしています。
(1) streamでストリーミング。
for chunk in llm.stream("日本の首都は?その観光名所は?"):
print(chunk.content)
print("---")
(2) batchでバッチ処理。
results = llm.batch(
[
"日本の首都は?",
"ドイツの首都は?",
]
)
for res in results:
print(res.content)
5. マルチモーダル
画像を提供するには、List[dict] のコンテンツを含む HumanMessage を渡します。各辞書には画像値(image_urlの型)またはテキスト(textの型)値が含まれています。image_url の値は、次のいずれかになります。
(1) 画像の読み込み。
import requests
from IPython.display import Image
# 画像の読み込み
image_url = "https://assets.st-note.com/img/1702729103440-HNg2BRgA8R.png"
content = requests.get(image_url).content
Image(content)
(2) LLM呼び出し。
from langchain_core.messages import HumanMessage
from langchain_google_genai import ChatGoogleGenerativeAI
# LLMの準備
llm = ChatGoogleGenerativeAI(model="gemini-pro-vision")
# LLMの呼び出し
message = HumanMessage(
content=[
{
"type": "text",
"text": "この画像は何?",
},
{"type": "image_url", "image_url": image_url},
]
)
llm.predict_messages([message])
6. GeminiプロンプトのFAQ
「Gemini」は受け入れるプロンプトにいくつかの制限があります。
7. セーフティセッティング
「Gemini」には、「セーフティセッティング」があります。 モデルから多くの「安全性警告」を受信している場合は、モデルの safety_settings を調整してみてください。たとえば、危険なコンテンツに対するブロックをオフにするには、次のように設定します。
(1) safety_settings でセーフティセッティングを設定。
from langchain_google_genai import (
ChatGoogleGenerativeAI,
HarmBlockThreshold,
HarmCategory,
)
# LLMの準備
llm = ChatGoogleGenerativeAI(
model="gemini-pro",
safety_settings={
HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_NONE,
},
)
# LLMの呼び出し
print(llm.predict("まどか☆マギカでは誰が一番かわいい?"))
利用可能な「カテゴリ」と「しきい値」は次のとおりです。詳しくは「safety setting types」を参照してください。
・カテゴリ (category)
・しきい値 (threshold)
・確率 (probability)
調整可能な「カテゴリ」に加え、子供の安全を脅かすなど、中核的な危害に対する保護機能も組み込まれています。このタイプの危害は常にブロックされ、調整することはできません。
8. 追加パラメータ
次の追加パラメータを「ChatGoogleGenerativeAI」に渡すことができます。
関連
この記事が気に入ったらサポートをしてみませんか?