前言
1.langchain_core.messages.HumanMessage
这个包在LangChain框架中扮演着重要的角色,主要用于表示和处理用户(人类)在对话或交互过程中发送的消息。LangChain是一个旨在简化大语言模型(LLMs)应用开发的框架,它提供了一系列组件化的工具,帮助开发者快速构建复杂的LLM应用。
具体来说,langchain_core.messages.HumanMessage
的作用包括:
-
消息封装:它封装了用户发送的消息内容,使得这些消息可以以一种结构化的方式被处理和传递。这种封装有助于保持代码的清晰性和可维护性,同时也便于在系统中跟踪和管理用户的输入。
-
角色区分:在对话或交互过程中,消息可能来自不同的角色,如用户(Human)、系统(System)或AI模型本身(AIMessage)。
HumanMessage
明确表示了这些消息是由用户发送的,从而有助于在系统中区分不同角色的消息,并据此进行相应的处理。 -
内容传递:通过
HumanMessage
,用户可以将其输入(如问题、指令或请求)传递给LLM或其他处理组件。这些输入随后会被转换为适当的格式,以便LLM能够理解和处理。 -
上下文管理:在对话系统中,用户的输入往往与之前的对话内容紧密相关。
HumanMessage
可以作为上下文管理的一部分,帮助系统跟踪和记录用户的输入历史,以便在需要时能够回顾和引用之前的对话内容。 -
灵活性和可扩展性:
langchain_core.messages
模块中的不同消息类型(如HumanMessage
、AIMessage
、SystemMessage
等)为开发者提供了灵活性和可扩展性。通过定义和使用这些消息类型,开发者可以轻松地构建复杂的对话逻辑和交互流程。
2.QianfanChatEndpoint 类
QianfanChatEndpoint
是langchain_community.chat_models
模块中定义的一个类,它封装了与千帆大模型(或任何其他通过该接口支持的对话模型)进行交互所需的所有逻辑。这个类提供了发送请求、接收响应、处理错误等多种功能。
-
封装API调用:该类封装了与百度千帆大模型交互所需的HTTP API调用。用户不需要直接处理HTTP请求和响应的细节,而是可以通过这个类提供的方法以更高级别、更抽象的方式与模型进行交互。
-
处理请求和响应:当用户想要向模型发送一个问题或请求时,他们可以通过这个类的实例来构造(在本例中是chat)并发送请求。同样,当模型返回响应时,这个类也负责解析响应内容,并将其以用户友好的方式(如文本、字典、对象等)呈现给用户。
通过初始化 QianfanChatEndpoint
对象,你的程序就获得了一个与千帆聊天服务进行交互的接口。你可以通过这个接口发送聊天消息,并接收来自服务的响应,而无需关心底层的网络通信细节。这使得与聊天服务的集成变得更加简单和直接。
打印chat的类型,结果如下:
<class 'langchain_community.chat_models.baidu_qianfan_endpoint.QianfanChatEndpoint'>
一、安装LangChain
pip install langchain
#安装qianfan
pip install qianfan
二、获取千帆API Key、Secret Key
- 登录百度云搜索进入千帆大模型控制台
- 没有应用则创建应用
- 获取APIKey、SecretKey
三、简单对话案例实现
import os
from langchain_community.chat_models import QianfanChatEndpoint
from langchain_core.messages import HumanMessage
# 设置环境变量 #换成网页中的API_KEY和SECRET_KEY
os.environ["QIANFAN_AK"] = "API_KEY"
os.environ["QIANFAN_SK"] = "SECRET_KEY"
# 初始化聊天端点
chat = QianfanChatEndpoint(streaming=True)
# 无限循环,直到用户输入 'exit'
while True:
# 获取用户输入
user_input = input("请输入您的问题(输入'exit'退出): ")
# 检查是否输入了 'exit'
if user_input.lower() == 'exit':
print("退出程序...")
break
# 构造 HumanMessage 对象并发送请求
response = chat([HumanMessage(content=user_input)])
# 打印响应内容
print(response.content)
当打印response的类型时,结果如下:
<class 'langchain_core.messages.ai.AIMessage'>
表面response是AIMessage对象(即AI信息对象,AI发出的信息)
四.代码解读
import os
作用:这行代码导入了Python的os
模块。os
模块提供了许多与操作系统交互的功能,比如文件操作、环境变量管理等。在这里,它被用来设置环境变量,这些环境变量通常用于配置外部服务(如API)的访问权限
from langchain_community.chat_models import QianfanChatEndpoint
- 作用:这行代码从
langchain_community.chat_models
这个包(或模块)中导入了QianfanChatEndpoint
类。这表明QianfanChatEndpoint
是一个与百度文心一言(或其他类似的大语言模型)进行交互的客户端类,它封装了与模型通信的逻辑。
from langchain_core.messages import HumanMessage
- 作用:这行代码从
langchain_core.messages
这个包中导入了HumanMessage
类。HumanMessage
类用于表示用户发送给聊天模型的消息,它包含了消息的内容以及其他可能的元数据(尽管在这个简单的例子中我们只使用了内容)。
# 设置环境变量 #换成网页中的API_KEY和SECRET_KEY
os.environ["QIANFAN_AK"] = "API_KEY"
os.environ["QIANFAN_SK"] = "SECRET_KEY"
- 作用:这两行代码使用
os.environ
字典设置了两个环境变量QIANFAN_AK
和QIANFAN_SK
。这些环境变量通常用于存储敏感信息,如API的访问密钥(Access Key, AK)和密钥(Secret Key, SK),它们用于验证用户的身份和权限,以便安全地访问外部服务(如百度文心一言的API)。
# 初始化聊天端点
chat = QianfanChatEndpoint(streaming=True)
- 作用:这行代码创建了一个
QianfanChatEndpoint
的实例,并将其赋值给变量chat
。streaming=True
参数指示该实例以某种形式的流式传输。这个实例将用于发送用户消息并接收聊天模型的响应。
# 构造 HumanMessage 对象并发送请求
response = chat([HumanMessage(content=user_input)])
作用:代码中使用了 chat([HumanMessage(content=user_input)])
这样的调用方式),允许用户发送 HumanMessage
对象作为请求到聊天服务。这些 HumanMessage
对象包含了用户希望发送给聊天服务的消息内容。
详解:
-
HumanMessage(content=user_input)
: 这里,HumanMessage
类被实例化,传递了一个关键字参数content
,其值为变量user_input
。这个实例化的对象代表了一个包含用户输入内容的消息。 -
chat([HumanMessage(content=user_input)])
: 这里,chat()
方法被调用,并且传入了一个列表,列表中包含了一个HumanMessage
的实例。虽然在这个例子中,列表只包含一个元素,但chat()
方法的设计可能允许它接收多个消息,并批量处理它们。将HumanMessage
实例放在列表中,是为了保持方法的灵活性,允许未来的扩展(比如一次性发送多个消息)。 -
response = ...
:chat()
方法的返回值(在这个例子中是模型的响应)被赋值给变量response
。然后,这个响应(另一个封装了模型输出的消息对象,即AIMessage)的content
属性被打印出来,以便用户可以看到模型的回答。