第二章:模型 (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)**的世界!

相关推荐
爱喝喜茶爱吃烤冷面的小黑黑2 小时前
小黑一层层削苹果皮式大模型应用探索:langchain中智能体思考和执行工具的demo
python·langchain·代理模式
大千AI8 小时前
LangChain Core架构解析:模块化设计与LCEL原语实现原理
langchain
Chatopera 研发团队8 小时前
智能体开发,实现自定义知识库,基于 LangChain,qwen 7b, ollama, chatopera | LLMs
langchain
硅谷神农9 小时前
第一章:AI与LangChain初探 —— 你的第一个“智能”程序
langchain
你那个道上的1 天前
LangChain4j学习与实践
langchain·ai编程
缘友一世1 天前
LangChain【8】之工具包深度解析:从基础使用到高级实践
langchain
bytebeats1 天前
强大的代理通信其实是 A2A + MCP + LangChain
langchain·mcp
架构师那点事儿1 天前
一文带你俯瞰大模型领域的世界
langchain·aigc·ai编程
用户84913717547162 天前
🚀5 分钟实现 Markdown 智能摘要生成器:LangChain + OpenAI 实战教程
langchain·openai