![見出し画像](https://assets.st-note.com/production/uploads/images/132529270/rectangle_large_type_2_0c887a0be198d3d7d323eac55a9b2d8d.png?width=1200)
LangChain の Gemini統合 を試す
「LangChain」の「Gemini」統合を試したので、まとめました。
・langchain 0.1.9
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))
content='夢織り工房'
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 の値は、次のいずれかになります。
・パブリック画像のURL
・アクセス可能なgcsファイル (例: "gcs://path/to/file.png")
・ローカルファイルパス
・base64でエンコードされた画像 (例: "data:image/png;base64,abcd124")
・PIL画像
(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)
![](https://assets.st-note.com/img/1709259084400-Jdt3mhszyB.png?width=1200)
(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])
AIMessage(content=' 猫とゲームのコントローラーです。')
6. GeminiプロンプトのFAQ
「Gemini」は受け入れるプロンプトにいくつかの制限があります。
・マルチモーダル入力を提供する場合、HumanMessageは最大1つまでに制限されます。複数のメッセージを渡すことはできません。
・SystemMessageは受け付けられません。
・通常のチャット会話の場合、メッセージは人間/AI/人間/AI の交互パターンに従う必要があります。 AI または人間のメッセージを2つ続けて提供することはできません。
・LLMの安全性チェックに違反するメッセージはブロックされる場合があります。 この場合、モデルは空の応答を返します。
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)
・HARM_CATEGORY_HARASSMENT : ハラスメント
・HARM_CATEGORY_HATE_SPEECH : ヘイトスピーチ
・HARM_CATEGORY_SEXUALLY_EXPLICIT : 性的表現
・HARM_CATEGORY_DANGEROUS_CONTENT : 有害コンテンツ
・しきい値 (threshold)
・HARM_BLOCK_THRESHOLD_UNSPECIFIED : 設定なし (BLOCK_MEDIUM_AND_ABOVEと同等)
・BLOCK_LOW_AND_ABOVE : NEGLIGIBLEのコンテンツを許可
・BLOCK_MEDIUM_AND_ABOVE : NEGLIGIBLE、LOWのコンテンツを許可
・BLOCK_ONLY_HIGH : NEGLIGIBLE、LOW、MEDIUM のコンテンツを許可
・BLOCK_NONE : 全コンテンツを許可
・確率 (probability)
・NEGLIGIBLE : コンテンツが安全でない可能性がほぼない
・LOW : コンテンツが安全でない可能性が低い
・MEDIUM : コンテンツが安全でない可能性が中程度
・HIGH : コンテンツが安全でない可能性が高い
調整可能な「カテゴリ」に加え、子供の安全を脅かすなど、中核的な危害に対する保護機能も組み込まれています。このタイプの危害は常にブロックされ、調整することはできません。
8. 追加パラメータ
次の追加パラメータを「ChatGoogleGenerativeAI」に渡すことができます。
・client_options : Google API クライアントに渡すClient Options ( client_options["api_endpoint"] など)
・transport : 使用するトランスポート (rest、grpc、grpc_asyncio など)
関連
この記事が気に入ったらサポートをしてみませんか?