【LangChain系列二】聊天模型上:两种接入方式与参数调优
【LangChain系列二】聊天模型上两种接入方式与参数调优上一篇我们聊了 LangChain 的整体架构这一篇直接上手——怎么把大模型接进来跑起来。文章目录【LangChain系列二】聊天模型上两种接入方式与参数调优两种方式接入聊天模型参数详解这些数字到底怎么设temperaturemax_tokenstop_pfrequency_penalty 和 presence_penaltystoptimeout 和 max_retriesstreamingbase_urlinvoke 方法详解本地部署 LLM 接入小结两种方式接入聊天模型LangChain 里接入聊天模型主要有两种姿势方式一直接用具体模型类fromlangchain_deepseekimportChatDeepSeek llmChatDeepSeek(modeldeepseek-chat,api_keyyour-api-key)responsellm.invoke(你好)简单粗暴适合快速上手。ChatDeepSeek的继承链是这样的BaseChatModel → BaseChatOpenAI → ChatDeepSeek因为 DeepSeek 的 API 兼容 OpenAI 协议所以底层走的是 OpenAI 那套。换成ChatOpenAI、ChatAnthropic也差不多都是BaseChatModel的子类。方式二用init_chat_model()统一初始化fromlangchain.chat_modelsimportinit_chat_model llminit_chat_model(deepseek:deepseek-chat,api_keyyour-api-key)这个工厂函数的好处是切换模型供应商时只改字符串参数代码其他部分不用动。还支持configurable_model()做运行时动态切换fromlangchain.chat_modelsimportinit_chat_model,configurable_fields configurable_llminit_chat_model(deepseek:deepseek-chat,api_keyyour-api-key).configurable_fields(model_nameconfigurable_fields(model_name))这样可以在调用时动态指定用哪个模型适合做对比测试或者多模型路由。参数详解这些数字到底怎么设接入模型之后参数调优是绕不开的话题。下面逐个拆解。temperature这个参数控制输出的随机性范围 0~2temperature适用场景说明0代码生成、数学计算输出最确定每次结果基本一样0~0.5技术文档、数据提取有一点变化但大体稳定0.5~1创意写作、对话平衡创意和一致性1~2头脑风暴、诗歌高度随机容易出惊喜实战建议写代码设 0写文档设 0.3聊天设 0.7搞创意设 1。max_tokens控制模型单次生成的最大 token 数。注意这里说的是输出token不包含输入。llmChatDeepSeek(modeldeepseek-chat,max_tokens1024)设太小会截断回答设太大会浪费钱。根据你的场景来摘要任务 512 够了长文生成可以拉到 4096。top_p和 temperature 类似但机制不同。temperature 调整概率分布的平坦度top_p 是截断概率累积。一般二选一调就行别同时改两个。llmChatDeepSeek(modeldeepseek-chat,temperature0.7,top_p0.9)frequency_penalty 和 presence_penaltyfrequency_penalty-2.0~2.0惩罚重复出现的词值越大越不容易重复presence_penalty-2.0~2.0惩罚已经出现过的词鼓励新话题写小说可以拉高一点避免车轱辘话写技术文档保持默认就行。stop设置停止标记模型遇到这些字符串就停止生成llmChatDeepSeek(modeldeepseek-chat,stop[\n\n,END])timeout 和 max_retries网络不稳的时候很有用llmChatDeepSeek(modeldeepseek-chat,timeout30,# 30秒超时max_retries3# 最多重试3次)streaming开启流式输出体验上打字机效果llmChatDeepSeek(modeldeepseek-chat,streamingTrue)forchunkinllm.stream(写一首诗):print(chunk.content,end,flushTrue)base_url自定义 API 端点用代理或者私有部署时会用到llmChatDeepSeek(modeldeepseek-chat,base_urlhttps://your-proxy.com/v1)invoke 方法详解invoke是调用模型的核心方法responsellm.invoke(input你好,config{run_name:my_run,tags:[test],metadata:{user_id:123}})input输入内容可以是字符串或消息列表config运行配置包含run_name、tags、metadata等用于 LangSmith 追踪和调试configurable字段配合configurable_fields使用可以在调用时动态替换参数responsellm.invoke(你好,config{configurable:{model_name:gpt-4}})本地部署 LLM 接入不想用远程 API本地跑也行。用 Ollama 举例fromlangchain_ollamaimportChatOllama llmChatOllama(modelqwen2.5:7b)responsellm.invoke(你好)或者通过 OpenAI 兼容接口接入任何本地服务llmChatDeepSeek(modellocal-model,base_urlhttp://localhost:11434/v1,api_keyollama)小结方式优点缺点具体模型类参数丰富功能完整换供应商要改代码init_chat_model统一接口切换方便某些特有参数可能不支持参数调优没有银弹多试多调。建议先从temperature0开始根据效果逐步调整。下一篇我们聊工具调用Tool Calling——让大模型从只会说进化到能干活。觉得有帮助的话点个赞收藏⭐支持一下吧