2.1 动力单元:模型接口详解


2.1 动力单元:模型接口详解

本节摘要:LangChain 把大模型封装成三类标准接口——补全型、对话型、嵌入型,统一的调用协议让换型号只改一行。本节拆解模型参数仪表盘、流式与批量两种供电方式,并给出按产线需求选型的对照表。

一、为什么要有统一的模型接口

装配线的第一个铁律:动力单元必须可替换。2023 年到 2025 年间,主流模型换了三四代,接口规范也各家不同——如果产线代码里到处散落着某家的私有调用写法,每次换代都是一场全文搜索式的手术。LangChain 的解法是把模型抽象成三类标准件:

  • 补全型:吃一段文本,吐一段续写,适合传统的文本补全任务,如今多数场景已被对话型取代;
  • 对话型:吃一个消息列表(系统消息、用户消息、助手消息交替),吐一条回复,聊天与指令场景的主力;
  • 嵌入型:把文本压成定长向量,不生成内容,负责"算语义坐标",是 2.7 节向量仓库的进货规格。

三类件的调用协议完全一致:单个用 invoke,一批用 batch,边生成边交付用 stream。先看对话型这个主力:

from langchain_openai import ChatOpenAI # 对话型动力单元:型号与参数在这里声明 llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0) # 单件生产:invoke 吃一条消息 result = llm.invoke("把这句话改写成客服口吻:退货要七天之内") print(result.content) # 输出示例:您好,若您需要办理退货,请务必在签收后七日内提出申请哦~ # 批量生产:batch 吃一个列表,返回顺序与输入一致 outs = llm.batch(["写一个五字标题", "再写一个"]) print([o.content for o in outs]) # 输出示例:['晨光微语集', '夜色温柔记']

嵌入型长得像同一类零件,只是输出变成了向量:

from langchain_openai import OpenAIEmbeddings embedder = OpenAIEmbeddings(model="text-embedding-ada-002") # 单文本嵌入:返回一个高维向量(这里只看前三维) vec = embedder.embed_query("彩色袜子") print(len(vec), vec[:3]) # 输出示例:1536 [0.0123, -0.0456, 0.0789] # 批量嵌入:检索产线建库时用,价格按条计费 vecs = embedder.embed_documents(["红色围巾", "蓝色手套"]) print(len(vecs)) # 输出:2

二、动力单元的仪表盘:参数怎么调

参数不是玄学旋钮,每个都对应一种产线行为。四个最常用的:

参数 控制什么 调高的效果 调低的效果
temperature 采样随机度 输出多样,适合创意工位 输出稳定,适合质检工位
max_tokens 单次输出上限 允许长文,费用上限变高 强制简短,防跑题
top_p 候选词池宽度 与升温类似,影响更柔和 更保守
timeout 等待上限 容忍慢响应 快速失败好重试

经验值一句话:写代码、抽取、分类用低温;起名、写文案、头脑风暴用高温;两者都先锁输出长度再谈质量。 看一个对照实验:

creative = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.9) stable = ChatOpenAI(model="gpt-3.5-turbo", temperature=0) # 同一张工艺单,两种供电状态 q = "给彩色袜子品牌起一个名字" print("高温:", creative.invoke(q).content) # 每次跑都不同,可能蹦出怪名字 print("低温:", stable.invoke(q).content) # 基本稳定,安全但平庸 # 高温输出示例:Bubble Toes 气泡脚趾 # 低温输出示例:彩织坊

流式供电是交互产线的刚需——用户盯着空白等待三秒就会怀疑卡死:

# 边生成边交付:产线一有产出就往下游送 for chunk in llm.stream("用两段话介绍向量数据库"): print(chunk.content, end="", flush=True) # 输出示例(逐字出现):向量数据库是一种……

⚠️ 参数只在实例化时生效一次,很多初学者在调用后再改温度,以为会生效。需要同一产线两种温度时,就装配两个模型实例,各管一段工序。

💡 关键直觉:把模型实例当成"定了规格的发动机",而不是"随叫随改的函数"。规格在装配时锁定,运行期只喂输入。

三、按产线需求选型

选动力单元先看工序性质,再看预算,最后看部署约束:

产线类型 推荐配置 理由
客服问答 对话型 + 低温 + 长超时 稳定压倒一切,偶发慢响应可接受
营销文案 对话型 + 高温 + 限长 要多样性,但要防跑飞
文档检索 嵌入型 + 批量接口 建库一次算好,查询时单条嵌入
离线批处理 任意型号 + batch 吞吐优先,可等夜间低价时段
内网敏感数据 本地开源模型 数据不出内网,牺牲部分质量

换发动机的实操在 1.3 节演示过:把 ChatOpenAI 换成 ChatOllama,产线其余部分一字不改。再补一个换到 Hugging Face 托管模型的例子,体会"适配包"的含义:

# pip install langchain-huggingface 后可用 from langchain_huggingface import HuggingFaceEndpoint # 同样是三行:声明动力单元 → 组装 → 调用 llm = HuggingFaceEndpoint(repo_id="mistralai/Mistral-7B-Instruct-v0.2", temperature=0.3) print(llm.invoke("用一句话解释装配线")) # 输出示例:装配线是把工序拆分并按序固定下来的生产组织方式。

常见问题

问:对话型和补全型能混用吗? 能,但不建议在一条链里混。两者消息格式不同,混用要加转换层,徒增故障点。新项目直接选对话型。

问:模型输出的额外信息去哪了? 消息对象上除了正文还有 token 用量、结束原因等字段,回调与计费会用到,2.9 节细讲。

本节要点回顾

  • 三类标准件:补全型、对话型、嵌入型,覆盖生成与语义计算两种动力需求;
  • 统一协议:invoke、batch、stream 三种供电方式,换型号不改产线;
  • 参数即规格:temperature 定风格、max_tokens 定长度、timeout 定容忍度,装配时锁定;
  • 选型看工序:稳定工序低温、创意工序高温、检索工序嵌入、敏感数据本地化。

下一节看给发动机喂料的工艺单:提示词模板怎么把"写死的话术"变成"带占位器的图纸"。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U