第二章:模型 (Models) —— AI应用的大脑

第二章:模型 (Models) ------ AI应用的大脑

你好,我是阿扩。欢迎回到我们的LangChain探索之旅。

如果说AI应用是一辆智能汽车,那么模型(Model)就是它的引擎和驾驶员------它既是动力的来源,也是智能决策的核心。在LangChain中,对模型的抽象和封装是其设计的基石。今天,我们就来彻底搞懂它。

2.1 本节目标

  1. 理解LangChain中两种核心模型类型的区别:大语言模型(LLM)聊天模型(Chat Model)
  2. 学会分别使用这两种模型接口与通义千问进行交互。
  3. 掌握聊天模型中不同**消息类型(Message Types)**的用途。
  4. 学习如何通过调整**模型参数(如 temperature)**来影响AI的输出。

2.2 核心概念速览

在LangChain的世界里,模型主要被分为两大类。让我们用一个生动的比喻来区分它们:

  • 大语言模型 (LLM): 把它想象成一位**"续写大师"**。你给他一段文字的开头,他的唯一任务就是基于这段文字,进行最合理的续写。他非常擅长文本补全、摘要、翻译等"一块式"的任务。

    • 输入 :一个字符串(string)。
    • 输出 :一个字符串(string)。
  • 聊天模型 (Chat Model): 把它想象成一位**"角色扮演对话家"**。他能理解对话中的不同角色(比如系统、用户、AI助手),并根据上下文进行交流。他天生就为构建聊天机器人、多轮问答等对话式应用而生。

    • 输入 :一个由不同角色消息组成的列表(list of messages)。
    • 输出 :一个AI消息对象(AI message object)。

简单来说,LLM接口更原始,适合简单的文本生成;而Chat Model接口更现代、更强大,也更结构化,是目前构建应用的主流选择。

2.3 LangChain组件解析

今天我们将接触到以下几个核心组件:

  1. 模型接口 (Model Interfaces)

    • langchain_community.llms.Tongyi: 这是通义千问的LLM接口。它遵循"字符串进,字符串出"的原则。
    • langchain_community.chat_models.ChatTongyi: 这是通义千问的Chat Model接口,我们在第一章已经用过。它使用消息列表作为输入。
  2. 消息类型 (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.91.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)**的世界!

相关推荐
AI大模型9 小时前
LangGraph官方文档笔记(6)——时间旅行
程序员·langchain·llm
是小王同学啊~1 天前
(LangChain)RAG系统链路向量检索器之Retrievers(五)
python·算法·langchain
AIGC包拥它1 天前
提示技术系列——链式提示
人工智能·python·langchain·prompt
AI大模型1 天前
LangGraph官方文档笔记(4)——提示聊天机器人
程序员·langchain·llm
OpenAppAI2 天前
Few-shot Prompting(少样本提示)概念指南
langchain·few-shot·prompts
余衫马11 天前
LangChain 文本分割器深度解析:从原理到落地应用(上)
langchain·文本分割器
大千AI助手13 天前
LangChain执行引擎揭秘:RunnableConfig配置全解析
人工智能·langchain·config
精灵vector13 天前
Agent的记忆详细实现机制
python·langchain·llm
少林码僧14 天前
14.2 《3小时从零搭建企业级LLaMA3语言助手:GitHub配置+私有化模型集成全实战》
人工智能·机器学习·语言模型·langchain
何双新14 天前
第3讲、LangChain性能优化:上下文缓存与流式响应实战指南
缓存·性能优化·langchain