
目錄一、什么是聊天模型1.1 什么是消息1.2 模型的分類1.2.1 真實聊天模型1.2.2 可配置模擬器模型1.3 與LLM的區別1.4 注意事項二、通過API來定義聊天模型2.1 ChatDeepSeek2.2 init_chat_model2.2.1 函數定義2.2.2 實例1創建無配置模型2.2.3 實例2創建可配置模型2.2.4 實例3創建帶有默認值的可配置模型一、什么是聊天模型在 LangChain 體系里聊天模型 ChatModel是專門面向對話場景的模型抽象區別于老式的大文本 LLM。老式LLM輸入字符串輸出字符串ChatModel聊天模型輸入消息對象列表輸出消息對象AIMessage這就調用.invoke()拿到的返回值。1.1 什么是消息聊天模型不拿裸字符串當完整輸入使用消息對象區分角色SystemMessage系統提示設定角色、規則HumanMessage用戶輸入人類說的話AIMessageAI 模型返回的消息ToolMessage工具調用返回結果from langchain_core.messages import HumanMessage, SystemMessage chat_model ChatDeepSeek( modeldeepseek-chat, # 或 deepseek-reasoner temperature0, max_tokensNone, timeoutNone, max_retries2, ) messages [ SystemMessage(content你是助手), HumanMessage(content你叫什么名字) ] res chat_model.invoke(messages) # res 得到 AIMessage 對象res.content 才是文本 print(res.content)1.2 模型的分類1.2.1 真實聊天模型代表ChatOpenAI、ChatAnthropic、ChatZhipuAI實例化的時候就創建底層 http 客戶端構造時填入model、temperature、api_key、max_tokens直接向真實大模型服務發網絡請求如果想要運行時動態修改參數需要混入RunnableConfigurable配置configurable_fields。chat_model ChatDeepSeek( modeldeepseek-chat, # 或 deepseek-reasoner temperature0, max_tokensNone, timeoutNone, max_retries2, )1.2.2 可配置模擬器模型init_chat_model()不傳入model參數時返回它只是占位包裝器不是真正的聊天模型。不會創建底層模型客戶端不會發起網絡請求實現了BaseChatModel全部接口對外 API 和真實模型一模一樣。invoke 調用階段讀取config[configurable]里的運行時配置用拿到的model、model_provider和其他參數現場構建真實聊天模型實例。特例不傳入model時model、model_provider無需寫進configurable_fields就可以運行時配置其余所有參數必須加入configurable_fields白名單運行時才允許修改。使用場景開發通用框架把選用什么模型推遲到業務請求到來時才確定避免代碼硬編碼模型modelinit_chat_model(configurable_fields{model,model_provider, temperature, max_tokens}) aimessmodel.invoke( 你是誰, config{configurable:{ model:deepseek-chat,model_provider:deepseek,temperature:0.6,max_tokens:100}} ) print(aimess.content)1.3 與LLM的區別項目ChatModel聊天模型老式 LLM輸入消息對象列表[HumanMessage,SystemMessage]原始字符串輸出AIMessage對象.content拿文本原始字符串原生支持system 提示、工具調用、多輪對話需要手動拼接字符串代表ChatOpenAIOpenAI1.4 注意事項返回值是對象不是字符串直接打印對象會看到完整對象必須取.content工具調用場景AIMessage.content可以為空工具調用數據放在additional_kwargs[tool_calls]_ConfigurableModel模擬器只是包裝只有 invoke 那一刻才創建真實模型模擬器本身沒有 api_key、model 這些真實客戶端屬性模擬器僅model/model_provider享有默認可配置特權其余參數必須寫進configurable_fields。簡單總結聊天模型是 LangChain 針對對話任務的抽象接收結構化消息返回結構化消息對象模擬器是它的延遲實例化包裝變體專門用于運行時動態選定模型。二、通過API來定義聊天模型2.1 ChatDeepSeekChatDeepSeek 是 LangChain 官方維護的 DeepSeek 云 API 聊天模型包裝器屬于 langchain-deepseek 包基類是 BaseChatOpenAIBaseLanguageModel └── BaseChatModel └── BaseChatOpenAI └── ChatDeepSeek # langchain-deepseek 提供參數說明model模型名如deepseek-v4-flash/deepseek-v4-protemperature采樣溫度默認 1max_tokens生成上限timeout/max_retries客戶端超時與重試api_key不傳則讀系統環境變量DEEPSEEK_API_KEY代碼示例from langchain_deepseek import ChatDeepSeek from langchain_core.messages import HumanMessage, SystemMessage from langchain_core.output_parsers import StrOutputParser #直接定義模型自動讀取系統環境變量中的 DEEPSEEK_API_KEY model ChatDeepSeek( modeldeepseek-chat, # 或 deepseek-reasoner temperature0, max_tokensNone, timeoutNone, max_retries2, ) messages[ SystemMessage(content), HumanMessage(contenthi!), ] parserStrOutputParser() 定義鏈 chainmodel | parser chainmodel.pipe(parser) 執行鏈 print(chain.invoke(messages))其中StrOutputParserLangChain是LangChain 最簡單的輸出解析器把大模型返回的AIMessage對象提取里面的文本.content輸出普通 Python 字符串 str。關于的invoke() 調用。該方法是將單個輸入轉換為對應的輸出。例如對于聊天模型來說就是根據用戶的問題輸入并輸出相應的答案。2.2 init_chat_model上面的ChatDeepSeek 用于明確創建 DeepSeek 聊天模型的實例。而init_chat_model()是一個工廠函數它可以初始化多種支持的聊天模型如 OpenAI、Anthropic、FireworksAI 等不僅僅是 DeepSeek 的聊天模型。2.2.1 函數定義langchain.chat_models.base.init_chat_model( model: str, *, model_provider: str | None None, configurable_fields: Literal[None] None, config_prefix: str | None None, **kwargs: Any, ) - BaseChatModel參數名參數描述model要使用的模型的名稱model_provider模型提供方。支持的 model_provider 值和相應的集成包有? openai - langchain-openai? anthropic - langchain-anthropic? google_genai - langchain-google-genai? ollama - langchain-ollama? deepseek - langchain-deepseek如果未指定將嘗試從模型推斷 model_providerconfigurable_fields設置哪些模型參數是可配置的。若配置為?None: 沒有可配置的字段。?any所有字段都是可配置的類似 api_key、base_url 等可以在運行時更改。?Union [List [str], Tuple [str, …]]: 指定的字段是可配置的。config_prefix配置為非空字符串則模型將在運行時通過查找config[configurable][{config_prefix}_{param}]字段設置配置項。配置為空字符串那么模型將可以通過config[configurable][{param}]字段設置配置項。temperature采樣溫度溫度值越高AI 回答越天馬行空溫度越低回答越保守靠譜。max_tokens要生成的最大令牌數timeout請求超時時間max_retries最大重試次數openai_api_key / api_keyOpenAI API 密鑰。如果未傳入將從環境變量中讀取OPENAI_API_KEY。base_urlAPI 請求的基本 URL。……其他拓展參數init_chat_model() 返回值說明函數返回一個與指定的 model_name 和 model_provider 相對應的 BaseChatModel如 ChatOpenAIChatAnthropic 等。注意要是模型可配置則返回一個聊天模型模擬器該模擬器在傳入配置后于運行時才會初始化底層模型。2.2.2 實例1創建無配置模型使用不同的模型提供方需要安裝為其各自包與設置各自的 API Key 環境變量例如OpenAI 環境變量配置為OPENAI_API_KEY your_openai_api_key安裝命令pip install -U langchain-openaiAnthropic 環境變量配置為ANTHROPIC_API_KEY your_anthropic_api_key安裝命令pip install -U langchain-anthropicDeepSeek 環境變量配置為DEEPSEEK_API_KEY your_deepseek_api_key安裝命令pip install -U langchain-deepseekGoogle VertexAI 環境變量配置為GOOGLE_API_KEY your_google_api_key安裝命令pip install -U langchain-google-vertexai使用init_chat_model創建一個聊天模型deepseek_modeldeepseek_modelinit_chat_model(deepseek-chat,model_providerdeepseek,temperature0) print(deepseek_model.invoke(你是誰).content\n)2.2.3 實例2創建可配置模型以通過指定configurable_fields來創建一個運行時可配置的模型。如果不指定model值則“model”和“model_provider”將默認可配置。也就是說在使用init_chat_model()創建可配置模型時可以通過configurable_fields指定運行時可配置的參數未指定的參數默認不可配置。但model與model_provider這兩個參數除外如果在調用init_chat_model()時未傳遞且未通過configurable_fields指定它們仍然可以在運行時進行配置。#這里我們沒有事先指定model也沒有通過configurable_fields將其指定為可配置項 modelinit_chat_model(temperature0) #但是我們在運行的時候依然可以配置model字段,且編譯時會自動按照model推到provider print(model.invoke( 你是誰, config{configurable:{model:deepseek-chat}} ))除了model與model_provider之外的其他參數如果需要運行時配置必須在調用init_chat_model接口的時候通過參數configurable_fields來指定。modelinit_chat_model(modeldeepseek-chat,configurable_fields{model_provider, temperature, max_tokens}) #參數model_provider, temperature, max_tokens運行時指定 aimessmodel.invoke( 你是誰, config{configurable:{model_provider:deepseek,temperature:0.6,max_tokens:100}} ) print(aimess.content)2.2.4 實例3創建帶有默認值的可配置模型如果我們在調用init_chat_model()接口的時候給參數添加了默認值我們還希望該參數在后續運行時也要動態配置與變化那么我們就可以創建出帶有默認值的可配置模型。具體做法就是將該參數也添加到configurable_fields中.modelinit_chat_model(modeldeepseek-chat, temperature0.5, max_tokens50, configurable_fields{model_provider, temperature, max_tokens} ) #參數model_provider, temperature, max_tokens運行時指定 aimessmodel.invoke( 你是誰, config{configurable:{model_provider:deepseek,temperature:0.6,max_tokens:100}} ) print(aimess.content)