当前位置: 首页 > news >正文

【LangChain系列二】聊天模型上:两种接入方式与参数调优

【LangChain系列二】聊天模型上:两种接入方式与参数调优

上一篇我们聊了 LangChain 的整体架构,这一篇直接上手——怎么把大模型接进来跑起来。

文章目录

  • 【LangChain系列二】聊天模型上:两种接入方式与参数调优
    • 两种方式接入聊天模型
    • 参数详解:这些数字到底怎么设
      • temperature
      • max_tokens
      • top_p
      • frequency_penalty 和 presence_penalty
      • stop
      • timeout 和 max_retries
      • streaming
      • base_url
    • invoke 方法详解
    • 本地部署 LLM 接入
    • 小结

两种方式接入聊天模型

LangChain 里接入聊天模型主要有两种姿势:

方式一:直接用具体模型类

fromlangchain_deepseekimportChatDeepSeek llm=ChatDeepSeek(model="deepseek-chat",api_key="your-api-key")response=llm.invoke("你好")

简单粗暴,适合快速上手。ChatDeepSeek的继承链是这样的:

BaseChatModel → BaseChatOpenAI → ChatDeepSeek

因为 DeepSeek 的 API 兼容 OpenAI 协议,所以底层走的是 OpenAI 那套。换成ChatOpenAIChatAnthropic也差不多,都是BaseChatModel的子类。

方式二:用init_chat_model()统一初始化

fromlangchain.chat_modelsimportinit_chat_model llm=init_chat_model("deepseek:deepseek-chat",api_key="your-api-key")

这个工厂函数的好处是,切换模型供应商时只改字符串参数,代码其他部分不用动。还支持configurable_model()做运行时动态切换:

fromlangchain.chat_modelsimportinit_chat_model,configurable_fields configurable_llm=init_chat_model("deepseek:deepseek-chat",api_key="your-api-key").configurable_fields(model_name=configurable_fields("model_name"))

这样可以在调用时动态指定用哪个模型,适合做对比测试或者多模型路由。

参数详解:这些数字到底怎么设

接入模型之后,参数调优是绕不开的话题。下面逐个拆解。

temperature

这个参数控制输出的随机性,范围 0~2:

temperature适用场景说明
0代码生成、数学计算输出最确定,每次结果基本一样
0~0.5技术文档、数据提取有一点变化但大体稳定
0.5~1创意写作、对话平衡创意和一致性
1~2头脑风暴、诗歌高度随机,容易出"惊喜"

实战建议:写代码设 0,写文档设 0.3,聊天设 0.7,搞创意设 1

max_tokens

控制模型单次生成的最大 token 数。注意这里说的是输出token,不包含输入。

llm=ChatDeepSeek(model="deepseek-chat",max_tokens=1024)

设太小会截断回答,设太大会浪费钱。根据你的场景来:摘要任务 512 够了,长文生成可以拉到 4096。

top_p

和 temperature 类似但机制不同。temperature 调整概率分布的"平坦度",top_p 是截断概率累积。一般二选一调就行,别同时改两个。

llm=ChatDeepSeek(model="deepseek-chat",temperature=0.7,top_p=0.9)

frequency_penalty 和 presence_penalty

  • frequency_penalty(-2.0~2.0):惩罚重复出现的词,值越大越不容易重复
  • presence_penalty(-2.0~2.0):惩罚已经出现过的词,鼓励新话题

写小说可以拉高一点避免车轱辘话,写技术文档保持默认就行。

stop

设置停止标记,模型遇到这些字符串就停止生成:

llm=ChatDeepSeek(model="deepseek-chat",stop=["\n\n","END"])

timeout 和 max_retries

网络不稳的时候很有用:

llm=ChatDeepSeek(model="deepseek-chat",timeout=30,# 30秒超时max_retries=3# 最多重试3次)

streaming

开启流式输出,体验上打字机效果:

llm=ChatDeepSeek(model="deepseek-chat",streaming=True)forchunkinllm.stream("写一首诗"):print(chunk.content,end="",flush=True)

base_url

自定义 API 端点,用代理或者私有部署时会用到:

llm=ChatDeepSeek(model="deepseek-chat",base_url="https://your-proxy.com/v1")

invoke 方法详解

invoke是调用模型的核心方法:

response=llm.invoke(input="你好",config={"run_name":"my_run","tags":["test"],"metadata":{"user_id":"123"}})
  • input:输入内容,可以是字符串或消息列表
  • config:运行配置,包含run_nametagsmetadata等,用于 LangSmith 追踪和调试

configurable字段配合configurable_fields使用,可以在调用时动态替换参数:

response=llm.invoke("你好",config={"configurable":{"model_name":"gpt-4"}})

本地部署 LLM 接入

不想用远程 API?本地跑也行。用 Ollama 举例:

fromlangchain_ollamaimportChatOllama llm=ChatOllama(model="qwen2.5:7b")response=llm.invoke("你好")

或者通过 OpenAI 兼容接口接入任何本地服务:

llm=ChatDeepSeek(model="local-model",base_url="http://localhost:11434/v1",api_key="ollama")

小结

方式优点缺点
具体模型类参数丰富,功能完整换供应商要改代码
init_chat_model统一接口,切换方便某些特有参数可能不支持

参数调优没有银弹,多试多调。建议先从temperature=0开始,根据效果逐步调整。


下一篇我们聊工具调用(Tool Calling)——让大模型从"只会说"进化到"能干活"。

觉得有帮助的话,点个赞👍收藏⭐支持一下吧!

http://www.jsqmd.com/news/1070946/

相关文章:

  • Cocos Creator 弹窗交互:实现“点击空白关闭”与“按钮切换”
  • 伽罗瓦理论平话 引言 第一章 藏在一元二次方程里的秘密
  • FastText工具——简化word2vec训练、快速实现文本分类
  • 企业级内网视频会议:筑牢内网安全防线,打造高效协同闭环
  • 阿里云发布 OSS Agent:对象存储的下一个交互方式,是自然语言
  • 信仰的具象化的庖丁解牛
  • 手把手教你学Simulink——基于滑模变结构控制(SMC / Sliding Mode Control)的 Buck 变换器鲁棒控制仿真
  • 第1篇|Context的兜底艺术:如何优雅获取 UIAbilityContext 避免组件崩溃
  • 2026年企业私有大模型方案:训练、推理、部署全链路解析
  • MySQL---表的约束(上)
  • 计算机毕设找人定做:交了钱就跑路
  • A-【浅谈AI安全】之 “用户训练数据隐私泄露风险”
  • 17 | ReadWriteLock:如何快速实现一个完备的缓存?
  • 数字化导板引导种植的精度评估与误差控制策略研究
  • Oracle中的插拔式数据库(CDB/PDB)
  • 鸿蒙PC适配llvm-gcc-compat编译安装第三方库chrono,打造Rust 第三方日期时间处理库
  • 从拉流、叠加到国标多平台分发:SmartMediaKit 多模态融合推流方案设计
  • 16-Redis 与 Redisson 采集:缓存节点如何参与问题定位
  • Web渗透测试实战:SQL注入漏洞从入门到深度防御
  • 智能硬件产品 App 全球发布 第 6 章:IoT App 特殊审核体系
  • 无人机航拍输电线路缺陷检测开源数据集|电力电缆散股异物识别YOLODETR双格式图像库10452期
  • 基于U2-Net与深度度量学习的自动化花粉显微图像分析系统实践
  • Linux线程3.0-线程同步与互斥,C/C++互斥锁。
  • 关于GraalVM的说明
  • 豆包导出pdf怎么调顺序?试试AI 导出鸭智能排序
  • 联邦学习实战:破解非独立同分布数据困局的算法策略与调优指南
  • 鸿蒙PC适配llvm-gcc-compat编译安装第三方库itertools,打造Rust 第三方迭代器增强库
  • 东莞企业做GEO为什么AI不推荐你-信源权重的3个硬指标拆开看
  • 基于MobileNetV3的轻量化人脸年龄估计模型:MobileAgeNet实战指南
  • AI开发-多路径写入一致性:从一次 Debug 到系统性防御