【LangChain Model I/O 02】
介绍
Modle I/O模块是与语言模型(LLMs)进行交互的核心组件,包括:输入提示(Pormat)、调用模型(Predict)、 输出解析(Parse);简单来说就是输入、模型处理、输出这三个步骤

针对每个环节,LangChain都提供了模版和工具,可以快捷的调用各种语言模型的接口
1、Model I/O 调用模型
LangChain作为一个工具,不提供任何LLMs,而是依赖与第三方集成的各种大模型
1)模型调用的分类
简单来讲,就是用谁家的API已什么方式调用那种类型的大模型
角度1:按照模型功能的不同
- 非对话模型(LLMs、Text Model)
- LLMs也叫Text Model、非对话模型,是许多语言模型应用程序的支柱。主要特点:
- 输入:接受文本字符串或者PromptValue对象
- 输出:总是返回文本字符串
- 使用场景:仅需单次文本生成任务(如:摘要生成、翻译 、代码生成、单次问答)或对接不支持消息结构的旧模型(如部分本地部署模型)
- 不支持多轮对话上下文,每次调用单独处理输入,无法自动关联历史对话(需要手动拼接历史文本)
- 局限性:无法处理角色分工或复杂对话逻辑
- 对话模型(Chat Model)(推荐)
- 大语言模型调用,以ChatModel为主,主要特点:
- 输入:接收消息列表List[BaseMessage]或PromptValue,每条消息需指定角色(如:SystemMessage、HumanMessage、AIMessage)
- 输出:总是返回带角色的消息对象(BaseMessage子类),通常是AIMessage
- 原生支持多轮对话。通过消息列表维护上下文,模型可基于完整对话历史生成回复
- 适用场景:对话系统(如客服机器人、长期交互的AI助手)
- 嵌入模型(Embedding Models)
- 也叫文本嵌入模型,这些模型将文本作为输入并返回浮点数列表,也就是Embedding
角度2:模型调用时,重要参数存放的位置不同(api-key、base_url、model-name)
- 硬编码:写在代码文件中
- 使用环境变量
- 使用配置文件(推荐)
相关方法及属性:
- OpenAI(...) chatOpenAI(...):创建一个模型对象(非对话类/对话类)
- model.invoke(xxx):执行调用,将用户输入发送给模型
- .content:提起模型返回的实际文本内容
模型调用函数使用时需初始化模型,并设置必要的参数
1)必须设置的参数:
- base_url:大模型API服务的根地址
- api_key:用于身份验证的密钥,由大模型服务商(如:OpenAI、阿里百炼)提供
- model/model_name:指定要调用的具体大模型名称(如:gpt-4-turbo等)
2)其他参数:
- temperature:温度,控制生成文本的“随机性”,取值范围为0~1
- 值越低 -->输出越确定、保守(适合事实回答)
- 值越高 -->输出越多样、有创意(适合创意写作)
通常,根据需要设置如下:
- 精确模式(0.5或更低):生成的文本更加安全可靠,但可能缺乏创意或多样性
- 平衡模式(通常是0.8):生成的文本通常既有一定的多样性,又能保持较好的连贯性和准确性
- 创意模式(通常是1):生成的文本更有创意 、但也更容易出现语法错误或者逻辑不合理的内容
- max_tokens:限制生成文本的最大长度,防止输出过长
- Token是什么?----->简单可理解为Byte(字节)
-
-
-
- 基本单位:大模型处理文本的最小单位是token,输出时逐个token依次生成
- 收费依据:大预言模型(LLM)通常也是以token的数量作为其计量(或收费)的依据
-
1个Token≈1-1.8个汉字,1个Token≈3-4个英文字母
- Token与字符转化的可视化工具:
OpenAI提供:https://platform.openai.com/tokenizer百度智能云提供:https://console.bce.baidu.com/support/#/tokenize
-
-
-
- max_tokens设置建议:
- 客服短回复:128-256。比如:生成一句客服回复(如“订单已发货,预计明天送达”)
- 常规对话、多轮对话:512-1024
- 长内容生成:1024-4096。比如:生成一篇产品说明书(包含功能、使用方法等结构
角度3:具体调用的API
- LangChain的统一方式调用API(推荐)
- OpenAI提供的API
- 可以使用CloseAI(https://www.closeai-asia.com/)注册和充值
- 其他大模型自家提供的API
结合角度1、2、3代码示例:
在实际的工作中,常常使用的是配置文件+对话模型的形式
import os from dotenv import load_dotenv from langchain_openai import ChatOpenAI load_dotenv() ''' 采用配置文件的方式加载对话模型 1、在项目根目录创建.env文件,添加如下配置项 OPENAI_API_BASE_URLL=你的openai api base url OPENAI_API_KEYY=你的openai api key 2、在代码中通过os.getenv()方法获取配置项的值 3、将获取到的值传递给ChatOpenAI类的base_url和api_key参数 ''' llm=ChatOpenAI( model="gpt-4o-mini", base_url=os.getenv("OPENAI_API_BASE_URLS"), api_key= os.getenv("OPENAI_API_KEY1"), temperature=0.7, max_tokens=200 ) res=llm.invoke("RAG技术的核心流程") print(res.content) # 当然可以给os内部环境变量赋值 -->如果model采用默认的模型,ChatOpenAI()初始化时可以不传base_url和api_key参数 os.environ["OPENAI_BASE_URL"]=os.getenv("OPENAI_BASE_URLS") os.environ["OPENAI_API_KEY"]=os.getenv("OPENAI_API_KEY1") chat = ChatOpenAI() response = chat.invoke("请简要介绍一下RAG技术的核心流程") print(response.content)
2、Model I/O 调用模型2
1)关于对话模型的Message(消息)
对话模型除了将字符串作为输入后,还可以使用“聊天信息”作为输入,并返回聊天信息作为输出
LangChain有一些内置的消息类型:
- SystemMessage:设定AI行为规则或背景信息。比如设定AI的初始状态,行为模式或对话的总体目标。比如:作为一个代码专家,或者返回json格式。通常作为输入信息序列中的第一个传递
- HumanMessage:表示来自用户输入。比如:实现一个快速排序方法
- AIMessage:存储AI回复的内容。这可以是文本,也可以是调用工具的请求
- ChatMessage:可以自定义角色的通用信息类型
- FunctionMessage/ToolMessage:函数调用/工具消息,用于函数调用结果的消息类型
注意: FunctionMessage和ToolMessage分别是在函数调⽤和⼯具调⽤场景下才会使⽤的特殊消息类 型,HumanMessage、AIMessage和SystemMessage才是最常⽤的消息类型。
举例:
from langchain_core.messages import SystemMessage, HumanMessage from langchain_openai import ChatOpenAI import os import dotenv dotenv.load_dotenv() base_url = os.getenv("OPENAI_BASE_URLS") api_key = os.getenv("OPENAI_API_KEY1") chat = ChatOpenAI( model="gpt-4o-mini", base_url=base_url, api_key=api_key ) message = [ SystemMessage(content="你是一个擅长人工智能的相关学科的专家"), HumanMessage(content="请用中文解释一下什么是机器学习") ] response = chat.invoke(message) print(response.content) print(type(response)) #打印查看到大模型执行后返回的对象类型=AIMessage
2)关于模型调用的方法