2026年4月5日 星期日

LangChain 學習筆記 : 串接 LLM 模型 (四)

在前一篇測試中, 我使用 venv 建立一個虛擬環境, 並於其中安裝 langchain-google-genai 與 langchain-openai 這兩個外掛套件來分別串接 Gemini 與 OpenAI API, 目前 Gemini 免費帳戶可用 gemini-2.5-flash 與 gemini-2.5-flash-lite 等快捷與低成本模型; OpenAI 可使用經典的 gpt-3.5-turbo 或較新的 gpt-4o-mini 模型 (需付費購買 API key). 

本篇旨在測試如何查詢有哪些模型可用, 這會用到 OpenAI 與 Gemini 的原生 API : openai 與 google_genai, 這兩個套件在安裝 langchain_openai 與 langchain_google_genai 時都會作為底層依賴套件被自動安裝. 

本系列全部文章索引參考 :



1. 查詢 OpenAI 模型 : 

查詢 OpenAI 模型列表是透過 OpenAI 物件的 models 屬性的 list() 方法 : 

# list_openai_models.py
from openai import OpenAI
from dotenv import dotenv_values

# 讀取 .env 中的 OPENAI_API_KEY
config=dotenv_values('.env')
client=OpenAI(api_key=config.get('OPENAI_API'))

print("--- OpenAI 目前可用模型清單 ---")
try:
    models=client.models.list()
    for m in models:
        # 過濾掉一些老舊或非對話的模型,只看主流的
        if "gpt" in m.id or "o3" in m.id or "o5" in m.id:
            print(f"模型 ID: {m.id}")
except Exception as e:
    print(f"查詢失敗:{e}")

結果如下 :

(myvenv) D:\python\test>python list_openai_models.py
--- OpenAI 目前可用模型清單 ---
模型 ID: gpt-4-0613
模型 ID: gpt-4
模型 ID: gpt-3.5-turbo
模型 ID: gpt-5.4-mini
模型 ID: gpt-5.4
模型 ID: gpt-5.4-nano-2026-03-17
模型 ID: gpt-5.4-nano
模型 ID: gpt-5.4-mini-2026-03-17
模型 ID: gpt-3.5-turbo-instruct
模型 ID: gpt-3.5-turbo-instruct-0914
模型 ID: gpt-3.5-turbo-1106
模型 ID: gpt-3.5-turbo-0125
模型 ID: gpt-4-turbo
模型 ID: gpt-4-turbo-2024-04-09
模型 ID: gpt-4o
模型 ID: gpt-4o-2024-05-13
模型 ID: gpt-4o-mini-2024-07-18
模型 ID: gpt-4o-mini
模型 ID: gpt-4o-2024-08-06
模型 ID: gpt-4o-audio-preview
模型 ID: gpt-4o-realtime-preview
模型 ID: gpt-4o-realtime-preview-2024-12-17
模型 ID: gpt-4o-audio-preview-2024-12-17
模型 ID: gpt-4o-mini-realtime-preview-2024-12-17
模型 ID: gpt-4o-mini-audio-preview-2024-12-17
模型 ID: gpt-4o-mini-realtime-preview
模型 ID: gpt-4o-mini-audio-preview
模型 ID: o3-mini
模型 ID: o3-mini-2025-01-31
模型 ID: gpt-4o-2024-11-20
模型 ID: gpt-4o-mini-search-preview-2025-03-11
模型 ID: gpt-4o-mini-search-preview
模型 ID: gpt-4o-transcribe
模型 ID: gpt-4o-mini-transcribe
模型 ID: gpt-4o-mini-tts
模型 ID: o3-2025-04-16
模型 ID: o3
模型 ID: gpt-4.1-2025-04-14
模型 ID: gpt-4.1
模型 ID: gpt-4.1-mini-2025-04-14
模型 ID: gpt-4.1-mini
模型 ID: gpt-4.1-nano-2025-04-14
模型 ID: gpt-4.1-nano
模型 ID: gpt-image-1
模型 ID: gpt-4o-realtime-preview-2025-06-03
模型 ID: gpt-4o-audio-preview-2025-06-03
模型 ID: gpt-4o-transcribe-diarize
模型 ID: gpt-5-chat-latest
模型 ID: gpt-5-2025-08-07
模型 ID: gpt-5
模型 ID: gpt-5-mini-2025-08-07
模型 ID: gpt-5-mini
模型 ID: gpt-5-nano-2025-08-07
模型 ID: gpt-5-nano
模型 ID: gpt-audio-2025-08-28
模型 ID: gpt-realtime
模型 ID: gpt-realtime-2025-08-28
模型 ID: gpt-audio
模型 ID: gpt-5-codex
模型 ID: gpt-image-1-mini
模型 ID: gpt-5-pro-2025-10-06
模型 ID: gpt-5-pro
模型 ID: gpt-audio-mini
模型 ID: gpt-audio-mini-2025-10-06
模型 ID: gpt-5-search-api
模型 ID: gpt-realtime-mini
模型 ID: gpt-realtime-mini-2025-10-06
模型 ID: gpt-5-search-api-2025-10-14
模型 ID: gpt-5.1-chat-latest
模型 ID: gpt-5.1-2025-11-13
模型 ID: gpt-5.1
模型 ID: gpt-5.1-codex
模型 ID: gpt-5.1-codex-mini
模型 ID: gpt-5.1-codex-max
模型 ID: gpt-image-1.5
模型 ID: gpt-5.2-2025-12-11
模型 ID: gpt-5.2
模型 ID: gpt-5.2-pro-2025-12-11
模型 ID: gpt-5.2-pro
模型 ID: gpt-5.2-chat-latest
模型 ID: gpt-4o-mini-transcribe-2025-12-15
模型 ID: gpt-4o-mini-transcribe-2025-03-20
模型 ID: gpt-4o-mini-tts-2025-03-20
模型 ID: gpt-4o-mini-tts-2025-12-15
模型 ID: gpt-realtime-mini-2025-12-15
模型 ID: gpt-audio-mini-2025-12-15
模型 ID: chatgpt-image-latest
模型 ID: gpt-5.2-codex
模型 ID: gpt-5.3-codex
模型 ID: gpt-realtime-1.5
模型 ID: gpt-audio-1.5
模型 ID: gpt-4o-search-preview
模型 ID: gpt-4o-search-preview-2025-03-11
模型 ID: gpt-5.3-chat-latest
模型 ID: gpt-5.4-2026-03-05
模型 ID: gpt-5.4-pro
模型 ID: gpt-5.4-pro-2026-03-05
模型 ID: gpt-3.5-turbo-16k


2. 查詢 Gemini 模型 : 

查詢 Gemini 模型列表是透過 genai 物件的 models 屬性的 list() 方法, 注意, 新版 API 的判斷欄位改為 supported_actions (舊版為 supported_generation_methods) : 

# list_gemini_models.py
from google import genai
from dotenv import dotenv_values

# 1. 讀取 .env
config=dotenv_values('.env')
api_key=config.get('GEMINI_API_KEY')

# 2. 初始化 Client (新版 API 不再用 genai.configure)
client=genai.Client(api_key=api_key)
print("--- 可用的 Google AI 模型如下: ---")

try:
    # 3. 使用 client.models.list() 查詢
    for m in client.models.list():
        # 新版 API 的判斷欄位為 supported_actions
        if 'generateContent' in m.supported_actions:
            print(f'模型 ID: {m.name:}')
            
except Exception as e:
    print(f"查詢出錯:{e}")

執行結果 : 

(myvenv) D:\python\test>python list_gemini_models.py  
--- 可用的 Google AI 模型如下: ---
模型 ID: models/gemini-2.5-flash
模型 ID: models/gemini-2.5-pro
模型 ID: models/gemini-2.0-flash
模型 ID: models/gemini-2.0-flash-001
模型 ID: models/gemini-2.0-flash-lite-001
模型 ID: models/gemini-2.0-flash-lite
模型 ID: models/gemini-2.5-flash-preview-tts
模型 ID: models/gemini-2.5-pro-preview-tts
模型 ID: models/gemma-3-1b-it
模型 ID: models/gemma-3-4b-it
模型 ID: models/gemma-3-12b-it
模型 ID: models/gemma-3-27b-it
模型 ID: models/gemma-3n-e4b-it
模型 ID: models/gemma-3n-e2b-it
模型 ID: models/gemma-4-26b-a4b-it
模型 ID: models/gemma-4-31b-it
模型 ID: models/gemini-flash-latest
模型 ID: models/gemini-flash-lite-latest
模型 ID: models/gemini-pro-latest
模型 ID: models/gemini-2.5-flash-lite
模型 ID: models/gemini-2.5-flash-image
模型 ID: models/gemini-3-pro-preview
模型 ID: models/gemini-3-flash-preview
模型 ID: models/gemini-3.1-pro-preview
模型 ID: models/gemini-3.1-pro-preview-customtools
模型 ID: models/gemini-3.1-flash-lite-preview
模型 ID: models/gemini-3-pro-image-preview
模型 ID: models/nano-banana-pro-preview
模型 ID: models/gemini-3.1-flash-image-preview
模型 ID: models/lyria-3-clip-preview
模型 ID: models/lyria-3-pro-preview
模型 ID: models/gemini-robotics-er-1.5-preview
模型 ID: models/gemini-2.5-computer-use-preview-10-2025
模型 ID: models/deep-research-pro-preview-12-2025

也可以不直接使用原生 API (google_genai 套件), 而是透過 LangChain 調用底層 Client 物件 :

# list_gemini_models_2.py
from langchain_google_genai import ChatGoogleGenerativeAI
from dotenv import dotenv_values

config=dotenv_values('.env')
api_key=config.get('GEMINI_API_KEY')

# 初始化 LangChain 模型物件
chat_model=ChatGoogleGenerativeAI(model='gemini-2.5-flash', api_key=api_key)
print("--- 透過 LangChain 的底層 Client 查詢模型 ---")

try:
    # 直接存取 LangChain 內部的 client 物件 (這就是 google-genai 的實體)
    # 注意:這屬於「私有屬性」存取,通常用於調錯或特殊查詢
    client=chat_model.client
    for m in client.models.list():
        if 'generateContent' in m.supported_actions:
            print(f"可用模型: {m.name}")
            
except Exception as e:
    print(f"查詢失敗:{e}")

執行結果與上面直接使用原生 API 相同 : 

(myvenv) D:\python\test>python list_gemini_models_2.py    
--- 透過 LangChain 的底層 Client 查詢模型 ---
可用模型: models/gemini-2.5-flash
可用模型: models/gemini-2.5-pro
可用模型: models/gemini-2.0-flash
可用模型: models/gemini-2.0-flash-001
可用模型: models/gemini-2.0-flash-lite-001
可用模型: models/gemini-2.0-flash-lite
可用模型: models/gemini-2.5-flash-preview-tts
可用模型: models/gemini-2.5-pro-preview-tts
可用模型: models/gemma-3-1b-it
可用模型: models/gemma-3-4b-it
可用模型: models/gemma-3-12b-it
可用模型: models/gemma-3-27b-it
可用模型: models/gemma-3n-e4b-it
可用模型: models/gemma-3n-e2b-it
可用模型: models/gemma-4-26b-a4b-it
可用模型: models/gemma-4-31b-it
可用模型: models/gemini-flash-latest
可用模型: models/gemini-flash-lite-latest
可用模型: models/gemini-pro-latest
可用模型: models/gemini-2.5-flash-lite
可用模型: models/gemini-2.5-flash-image
可用模型: models/gemini-3-pro-preview
可用模型: models/gemini-3-flash-preview
可用模型: models/gemini-3.1-pro-preview
可用模型: models/gemini-3.1-pro-preview-customtools
可用模型: models/gemini-3.1-flash-lite-preview
可用模型: models/gemini-3-pro-image-preview
可用模型: models/nano-banana-pro-preview
可用模型: models/gemini-3.1-flash-image-preview
可用模型: models/lyria-3-clip-preview
可用模型: models/lyria-3-pro-preview
可用模型: models/gemini-robotics-er-1.5-preview
可用模型: models/gemini-2.5-computer-use-preview-10-2025
可用模型: models/deep-research-pro-preview-12-2025

注意, 由於 Google 與 OpenAI 兩家公司在 SDK 設計邏輯上的根本差異, 使得 LangChain 在整合這兩者時採取了不同策略, Gemini 可以直接透過 .client 取得模型清單, 而 OpenAI 則不行, 因此查詢 OpenAI 的模型清單必須用底層 SDK 套件 openai. 

沒有留言 :