第二章:模型 (Models) ------ AI应用的大脑
你好,我是阿扩。欢迎回到我们的LangChain探索之旅。
如果说AI应用是一辆智能汽车,那么模型(Model)就是它的引擎和驾驶员------它既是动力的来源,也是智能决策的核心。在LangChain中,对模型的抽象和封装是其设计的基石。今天,我们就来彻底搞懂它。
2.1 本节目标
- 理解LangChain中两种核心模型类型的区别:大语言模型(LLM) 和 聊天模型(Chat Model)。
- 学会分别使用这两种模型接口与通义千问进行交互。
- 掌握聊天模型中不同**消息类型(Message Types)**的用途。
- 学习如何通过调整**模型参数(如
temperature
)**来影响AI的输出。
2.2 核心概念速览
在LangChain的世界里,模型主要被分为两大类。让我们用一个生动的比喻来区分它们:
-
大语言模型 (LLM): 把它想象成一位**"续写大师"**。你给他一段文字的开头,他的唯一任务就是基于这段文字,进行最合理的续写。他非常擅长文本补全、摘要、翻译等"一块式"的任务。
- 输入 :一个字符串(
string
)。 - 输出 :一个字符串(
string
)。
- 输入 :一个字符串(
-
聊天模型 (Chat Model): 把它想象成一位**"角色扮演对话家"**。他能理解对话中的不同角色(比如系统、用户、AI助手),并根据上下文进行交流。他天生就为构建聊天机器人、多轮问答等对话式应用而生。
- 输入 :一个由不同角色消息组成的列表(
list of messages
)。 - 输出 :一个AI消息对象(
AI message object
)。
- 输入 :一个由不同角色消息组成的列表(
简单来说,LLM接口更原始,适合简单的文本生成;而Chat Model接口更现代、更强大,也更结构化,是目前构建应用的主流选择。
2.3 LangChain组件解析
今天我们将接触到以下几个核心组件:
-
模型接口 (Model Interfaces)
langchain_community.llms.Tongyi
: 这是通义千问的LLM接口。它遵循"字符串进,字符串出"的原则。langchain_community.chat_models.ChatTongyi
: 这是通义千问的Chat Model接口,我们在第一章已经用过。它使用消息列表作为输入。
-
消息类型 (Message Types) 在使用Chat Model时,我们会用到不同的消息类型来构建对话历史,它们都来自
langchain_core.messages
:SystemMessage
: 系统消息。通常放在对话的最开始,用来给AI设定一个"人设"或"总指令"。例如:"你是一位专业的Python编程助手。" 它帮助AI更好地定位自己的角色。HumanMessage
: 用户消息。代表了由真实用户提出的问题或指令。AIMessage
: AI消息。代表了AI之前的回复。在多轮对话中,将AI的旧回复和用户的新问题一起发过去,AI就能"记住"上下文了。
2.4 实战代码演练
确保你的环境中已经安装了必要的库,并且DASHSCOPE_API_KEY
环境变量已正确设置。
bash
# 如果还没安装或需要更新
pip install langchain langchain_community dashscope
现在,让我们通过两个独立的演练来感受LLM和Chat Model的差异。
演练一:使用LLM接口 (Tongyi
)
这个例子展示了最直接的文本补全功能。
python
# model_llm_example.py
from langchain_community.llms import Tongyi
def llm_interface_example():
"""演示如何使用基础的LLM接口"""
print("--- LLM接口演示 ---")
# 1. 实例化LLM模型
llm = Tongyi()
# 2. 准备输入(一个简单的字符串)
prompt = "天空为什么是蓝色的?"
print(f"用户提问:{prompt}")
# 3. 调用模型并获取回答(invoke的输入和输出都是字符串)
response = llm.invoke(prompt)
# 4. 打印回答
print("\nAI的回答是:")
print(response)
if __name__ == "__main__":
llm_interface_example()
运行结果可能如下:
diff
--- LLM接口演示 ---
用户提问:天空为什么是蓝色的?
AI的回答是:
天空之所以呈现蓝色,主要是由于瑞利散射(Rayleigh scattering)现象。
当太阳光穿过地球大气层时,会与大气中的微小分子(主要是氮气和氧气)发生碰撞。太阳光实际上是由不同颜色的光混合而成的,每种颜色的光都有不同的波长。蓝色和紫色的光波长较短,而红色和橙色的光波长较长。
根据瑞利散射定律,光的散射强度与其波长的四次方成反比。这意味着波长越短的光,越容易被大气分子散射。因此,蓝色和紫色的光在大气中被散射的程度远大于其他颜色的光。
这些被散射的蓝光和紫光会向四面八方传播,当我们仰望天空时,进入我们眼睛的就是这些被充分散射的光,所以我们看到的天空是蓝色的。
演练二:使用Chat Model接口 (ChatTongyi
)
这个例子展示了如何通过消息列表,更结构化地与AI交互,并控制其输出风格。
python
# model_chat_example.py
from langchain_community.chat_models import ChatTongyi
from langchain_core.messages import HumanMessage, SystemMessage
def chat_model_interface_example():
"""演示如何使用Chat Model接口,并设置AI角色"""
print("--- Chat Model接口演示 ---")
# 1. 实例化Chat Model
# 我们通过 temperature 参数控制输出的随机性。
# temperature=0.0 意味着输出会更确定、更保守。
# temperature=1.0 意味着输出会更具创造性、更多样。
chat = ChatTongyi(temperature=0.1)
# 2. 准备输入(一个消息列表)
messages = [
SystemMessage(content="你是一位古典诗人,你的回答必须用五言绝句的形式。"),
HumanMessage(content="请赞美一下程序员。")
]
# 3. 调用模型并获取回答
response = chat.invoke(messages)
# 4. 打印回答
print("\nAI的回答是:")
print(response.content)
if __name__ == "__main__":
chat_model_interface_example()
运行结果可能如下:
diff
--- Chat Model接口演示 ---
AI的回答是:
黑屏映月华,
指尖舞代码。
万物皆可造,
智慧传天下。
2.5 代码逻辑详解
演练一 (llm_interface_example
)
llm = Tongyi()
: 我们实例化的是Tongyi
类,这是LLM接口。prompt = "..."
: 输入非常直接,就是一个普通的Python字符串。response = llm.invoke(prompt)
:invoke
方法接收字符串,返回的response
也是一个字符串。整个过程就像调用一个函数,简单明了。
演练二 (chat_model_interface_example
)
chat = ChatTongyi(temperature=0.1)
: 我们实例化了ChatTongyi
类。在实例化时,我们传入了一个重要参数temperature
。它控制着模型回答的"创造性"。0.1
是一个较低的值,意味着模型的回答会比较稳定和可预测。如果你想让它天马行空,可以试试0.9
或1.0
。messages = [...]
: 这是与LLM接口最大的不同。我们的输入是一个列表,里面包含了不同类型的消息对象。SystemMessage(...)
: 我们用它来"导演"这场戏,给AI设定了一个"古典诗人"的角色。这个指令AI会一直记在心里。HumanMessage(...)
: 这是我们作为用户的实际提问。response = chat.invoke(messages)
:invoke
方法接收的是消息列表。print(response.content)
: 返回的response
是一个AIMessage
对象,我们需要通过.content
属性来获取其文本内容。
2.6 总结与思考
今天,我们深入了AI应用的大脑------模型。你现在应该清楚地理解了LangChain中两种模型接口的差异和各自的适用场景。
本章重点回顾:
- LLM接口 (
Tongyi
):简单直接,字符串输入,字符串输出。适合简单的文本生成任务。 - Chat Model接口 (
ChatTongyi
):功能强大,结构清晰,消息列表输入,AI消息对象输出。是构建现代AI应用(尤其是对话式应用)的首选。 - 消息类型 :
SystemMessage
用于设定AI角色,HumanMessage
用于用户提问,AIMessage
用于记录AI回复。 - 模型参数 :我们可以通过
temperature
等参数,精细地控制模型的行为。
思考与练习: 现在,轮到你来扮演"导演"了!请尝试修改演练二中的SystemMessage
,赋予AI一个全新的、有趣的身份,然后向它提问,看看会发生什么奇妙的化学反应。
例如,试试下面这些"人设":
SystemMessage(content="你是一个非常谨慎的安全专家,回答任何问题前都要先强调潜在的风险。")
SystemMessage(content="你是一只来自喵星的猫,说话时总会加上'喵~'。")
这个小练习将让你深刻体会到SystemMessage
的威力,以及Chat Model在构建可定制化AI应用时的巨大潜力。
在下一章,我们将学习如何让提问变得更加灵活和动态------欢迎来到**提示模板(Prompt Templates)**的世界!