ch03 的 Colab 範例最後一個儲存格執行時會看到以下的錯誤訊息:
```
ChatGoogleGenerativeAIError: Invalid argument provided to Gemini: 400 Developer instruction is not enabled for models/gemini-pro
```
這是因為範例中的模板使用了 `system` 角色的訊息, 但 Google 的 gemini 模型並不支援 `system` 角色。為了解決這個問題, 建立 `ChatGoogleGenerativeAI` 物件時提供有參數 `convert_system_message_to_human`, 只要傳入 `True` 就可以自動將 `system` 角色的訊息轉換成 `Human` 角色訊息:
```python
from langchain_core.runnables import ConfigurableField
llm = chat_model.configurable_alternatives(
ConfigurableField(
id="llm",
name="LLM",
description="多種語言模型"),
# 預設模型 gpt-3.5-turbo
default_key="openai",
# 新增模型 gpt-4-turbo
gpt4=ChatOpenAI(model="gpt-4-turbo"),
# 新增模型 gemini-pro
gemini = ChatGoogleGenerativeAI(
model="gemini-pro",
temperature=0.7, convert_system_message_to_human=True)
)
```
修改後就可以正常執行如下:
```
/usr/local/lib/python3.10/dist-packages/langchain_google_genai/chat_models.py:344: UserWarning: Convert_system_message_to_human will be deprecated!
warnings.warn("Convert_system_message_to_human will be deprecated!")
兔子
```
不過你可能已經發現除了回覆內容以外, 還會出現警告, 表示未來會棄用 `convert_system_message_to_human` 這個參數。若要讓這個警告不出現, 就要避免使用 `system` 角色的訊息, 也不能使用 `convert_system_message_to_human` 參數。你可以自己手動將 `system`訊息都改放在 `human` 訊息內的最前面, 像是把建立模板的儲存格改成以下這樣, 最後一格儲存格就能順利執行:
```python
prompt = PromptTemplate.from_template(
"告訴我一個{topic}相關知識").configurable_alternatives(
ConfigurableField(
id="prompt",
name="提示模板",
description="多種提示"),
# 預設模板
default_key="knowledge",
# 新增提示模板
discuss=PromptTemplate.from_template(
"根據顏色{color}列出可能的水果"),
# 新增對話提示模板
chat=ChatPromptTemplate.from_messages(
[
# ("system","你是一個動物專家"),
("human",
"你是一個動物專家, 相關特徵有{topic}, 請猜出是十二生肖的哪一個動物")
]),
)
```
就可以正常運作了。