一、基础概念详解
1.1 什么是 Chat Models?
Chat Models 是 LangChain 中用于处理对话的核心组件。与普通的语言模型不同,Chat Models 专门设计用于处理多轮对话,能够:
- 维护对话上下文
- 理解不同角色的输入
- 生成连贯的对话响应
1.2 环境配置详解
- 首先安装必要的包
pip install python-dotenv # 用于环境变量管理
pip install langchain-openai # OpenAI 集成
pip install langchain-anthropic # Anthropic 集成
pip install langchain-google-genai # Google AI 集成
- 创建 .env 文件
OPENAI_API_KEY=sk-xxx... # OpenAI API密钥
ANTHROPIC_API_KEY=sk-ant-xxx... # Anthropic API密钥
GOOGLE_API_KEY=xxx... # Google API密钥
二、基础用法深度解析
2.1 创建你的第一个对话模型
# 导入必要的库
from dotenv import load_dotenv # 用于加载环境变量
from langchain_openai import ChatOpenAI, OpenAI # 导入 OpenAI 的聊天模型
# 从 .env 文件加载环境变量(包含 API 密钥等敏感信息)
load_dotenv()
# 创建一个 ChatOpenAI 模型实例
model = ChatOpenAI(model="gpt-4o-mini")
# 调用模型并传入一个问题
# invoke() 方法用于向模型发送消息并获取响应
result = model.invoke("介绍一下你自己?")
# 打印完整的结果对象
print("完整结果:")
print(result)
# 只打印结果的内容部分
print("仅内容:")
print(result.content)
2.2 理解返回结果
- 完整结果:会显示一个包含完整响应信息的 LangChain 消息对象,AIMessage(content=‘…’)
- 仅内容:只显示 AI 的回答内容
三、消息类型与多轮对话
3.1 三种核心消息类型
Langchain 内置三种主要消息类型,分别是:
SystemMessage(系统消息)
from langchain_core.messages import SystemMessage
system_message = SystemMessage(content="你是一位得力的助手")
- 用于设定 AI 的角色、行为和规则
- 相当于给 AI 一个整体的行为指南
- 通常放在对话的最开始
- 用户在对话过程中看不到这个消息
- 示例用途:
- 设定角色:“你是一位经验丰富的Python教师”
- 设定语言:“请用中文回答所有问题”
- 设定行为规则:“回答要简洁且包含代码示例”
HumanMessage(用户消息)
from langchain_core.messages import HumanMessage
human_message = HumanMessage(content="请问如何使用Python打印Hello World?")
- 代表用户输入的内容
- 是对话中用户说的每句话
- 可以包含问题、指令或陈述
- 通常跟在 SystemMessage 或 AIMessage 后面
AIMessage(AI消息)
from langchain_core.messages import AIMessage
ai_message = AIMessage(content="print('Hello World')")
- 代表 AI 的回复内容
- 用于记录 AI 之前的回答
- 在多轮对话中特别重要,帮助维持对话的连贯性
- 通常跟在 HumanMessage 后面
3.2 多轮对话:实际使用示例
from dotenv import load_dotenv # 导入用于加载环境变量的工具
from langchain_core.messages import AIMessage, HumanMessage, SystemMessage # 导入消息类型
from langchain_openai import ChatOpenAI # 导入 OpenAI 聊天模型
# 从 .env 文件加载环境变量
load_dotenv()
# 创建一个 ChatOpenAI 模型实例
model = ChatOpenAI(model="gpt-4o-mini")
messages = [
SystemMessage(content="解决以下数学问题"),
HumanMessage(content="81除以9等于多少?"),
]
# 1)使用消息列表调用模型
result = model.invoke(messages)
print(f"AI的回答:{result.content}")
# 多轮对话,包含之前的对话历史
messages = [
SystemMessage(content="解决以下数学问题"),
HumanMessage(content="81除以9等于多少?"),
AIMessage(content="81除以9等于9"),
HumanMessage(content="10乘以5等于多少?"),
]
# 2)使用包含对话历史的消息列表调用模型
result = model.invoke(messages)
print(f"AI的回答:{result.content}")
四、多模型集成详解
4.1 OpenAI模型
from langchain_openai import ChatOpenAI
openai_model = ChatOpenAI(
model="gpt-4",
temperature=0.7,
streaming=True
)
# 特点:
# 1. 支持流式输出
# 2. 可以设置temperature
# 3. 支持function calling
4.2 Anthropic模型
from langchain_anthropic import ChatAnthropic
anthropic_model = ChatAnthropic(
model="claude-3-opus-20240229",
max_tokens=1000,
temperature=0.7
)
# 特点:
# 1. 更强的推理能力
# 2. 更好的长文本处理
# 3. 更严格的安全限制
4.3 Google模型
from langchain_google_genai import ChatGoogleGenerativeAI
google_model = ChatGoogleGenerativeAI(
model="gemini-1.5-flash",
temperature=0.7
)
# 特点:
# 1. 响应速度快
# 2. 支持多模态输入
# 3. 价格相对较低
总结
通过本文,我们从基础使用入手,逐步深入到更复杂的应用场景。
在下一篇文章中,我们将深入探讨PromptTemplate的用法。学习到如何利用PromptTemplate来优化你的提示设计,从而提升模型的响应质量和准确性。我还会分享一些实用的案例和技巧,帮助你在实际应用中更好地发挥LangChain的潜力。