Message模块¶
简介¶
Message是对大语言模型输入输出信息的封装,可以简化大家和大语言模型的交互。
在ERNIE Bot Agent中,主要有如下4类Message:
HumanMessage:用户输入给模型的普通信息,比如聊天的问题。SystemMessage:用户输入给模型的全局信息,比如角色扮演的指令、输出格式设置的指令。AIMessage:模型返回的信息,比如聊天的回答、触发Function call的回答。FunctionMessage:上一轮模型的输出是带有Funciton call的AIMessage,则用户需要首先调用Function,然后将Function的结果输入给大语言模型。
Message模块的详细API接口,请参考文档。
鉴权¶
大家在使用ERNIE Bot Agent之前,需要完成鉴权步骤:
- 在AI Studio星河社区注册并登录账号
- 在个人中心的访问令牌页面获取用户凭证
Access Token - 通过环境变量或者
Python代码设置Access Token
In [18]:
Copied!
# %env EB_AGENT_ACCESS_TOKEN=xxxxxxxx
import os
os.environ["EB_AGENT_ACCESS_TOKEN"] = "xxxxxxxx"
# %env EB_AGENT_ACCESS_TOKEN=xxxxxxxx
import os
os.environ["EB_AGENT_ACCESS_TOKEN"] = "xxxxxxxx"
使用Message¶
首先,导入必要的依赖库。
In [19]:
Copied!
import os
import json
import asyncio
import erniebot
from erniebot_agent.chat_models import ERNIEBot
from erniebot_agent.memory import HumanMessage, AIMessage, SystemMessage, FunctionMessage
import os
import json
import asyncio
import erniebot
from erniebot_agent.chat_models import ERNIEBot
from erniebot_agent.memory import HumanMessage, AIMessage, SystemMessage, FunctionMessage
大家在使用ERNIE Bot调用文心一言进行多轮对话时,需要按照规范定义每轮对话的信息(如下),稍显复杂。
In [ ]:
Copied!
erniebot.api_type = "aistudio"
erniebot.access_token = "<access-token-for-aistudio>"
messages = [
{"role": "user", "content": "我在深圳,周末可以去哪里玩"},
{"role": "assistant", "content": "深圳有许多著名的景点,以下是三个推荐景点:1. 深圳世界之窗,2. 深圳欢乐谷,3. 深圳东部华侨城。"},
{"role": "user", "content": "从你推荐的三个景点中,选出最值得去的景点是什么,直接给出景点名字即可"},
]
response = erniebot.ChatCompletion.create(model="ernie-3.5", messages=messages)
print(response.get_result())
erniebot.api_type = "aistudio"
erniebot.access_token = ""
messages = [
{"role": "user", "content": "我在深圳,周末可以去哪里玩"},
{"role": "assistant", "content": "深圳有许多著名的景点,以下是三个推荐景点:1. 深圳世界之窗,2. 深圳欢乐谷,3. 深圳东部华侨城。"},
{"role": "user", "content": "从你推荐的三个景点中,选出最值得去的景点是什么,直接给出景点名字即可"},
]
response = erniebot.ChatCompletion.create(model="ernie-3.5", messages=messages)
print(response.get_result())
如果基于ERNIE Bot Agent调用文心一言,大家使用Message模块,可以较好地简化代码。
In [20]:
Copied!
model = ERNIEBot(model="ernie-3.5")
# 使用Message模块
messages = [
HumanMessage("我在深圳,周末可以去哪里玩"),
AIMessage("深圳有许多著名的景点,以下是三个推荐景点:1. 深圳世界之窗,2. 深圳欢乐谷,3. 深圳东部华侨城。"),
HumanMessage("从你推荐的三个景点中,选出最值得去的景点是什么,直接给出景点名字即可"),
]
ai_message = await model.chat(messages=messages)
print(ai_message.content)
model = ERNIEBot(model="ernie-3.5")
# 使用Message模块
messages = [
HumanMessage("我在深圳,周末可以去哪里玩"),
AIMessage("深圳有许多著名的景点,以下是三个推荐景点:1. 深圳世界之窗,2. 深圳欢乐谷,3. 深圳东部华侨城。"),
HumanMessage("从你推荐的三个景点中,选出最值得去的景点是什么,直接给出景点名字即可"),
]
ai_message = await model.chat(messages=messages)
print(ai_message.content)
最值得去的景点是深圳欢乐谷。
创建各种Message的示例代码如下:
In [21]:
Copied!
human_message = HumanMessage(content="你好,你是谁?")
system_message = SystemMessage(content="你是一名数学老师,使用浅显易懂的方法来回答问题")
result = {"temperature": 25, "unit": "摄氏度"}
function_message = FunctionMessage(
name="get_current_temperature", content=json.dumps(result, ensure_ascii=False)
)
print(human_message)
print(system_message)
print(function_message)
human_message = HumanMessage(content="你好,你是谁?")
system_message = SystemMessage(content="你是一名数学老师,使用浅显易懂的方法来回答问题")
result = {"temperature": 25, "unit": "摄氏度"}
function_message = FunctionMessage(
name="get_current_temperature", content=json.dumps(result, ensure_ascii=False)
)
print(human_message)
print(system_message)
print(function_message)
<role: 'user', content: '你好,你是谁?'>
<role: 'system', content: '你是一名数学老师,使用浅显易懂的方法来回答问题', token_count: 23>
<role: 'function', name: 'get_current_temperature', content: '{"temperature": 25, "unit": "摄氏度"}'>
使用SystemMessage的示例代码如下:
In [22]:
Copied!
model = ERNIEBot(model="ernie-3.5")
system_message = SystemMessage(content="你是一名数学老师,尽量使用浅显易懂的方法来解答问题")
messages = [HumanMessage("勾股定理是什么")]
ai_message = await model.chat(messages=messages, system=system_message.content)
print(ai_message.content)
model = ERNIEBot(model="ernie-3.5")
system_message = SystemMessage(content="你是一名数学老师,尽量使用浅显易懂的方法来解答问题")
messages = [HumanMessage("勾股定理是什么")]
ai_message = await model.chat(messages=messages, system=system_message.content)
print(ai_message.content)
勾股定理是一个基本的几何定理,它指出在一个直角三角形中,直角边的平方和等于斜边的平方。换句话说,如果我们知道一个直角三角形的两个直角边的长度,我们就可以使用勾股定理来找出斜边的长度。这个定理在中国古代被称为“勾股定理”,因为在古代,人们把较短的直角边称为“勾”,较长的直角边称为“股”,而斜边则被称为“弦”。这个定理也可以被写作 a² + b² = c² 的形式,其中 a 和 b 是直角三角形的两个直角边,c 是斜边。 勾股定理是人类早期发现并证明的重要数学定理之一,它可以用代数思想解决几何问题,也是数形结合的纽带之一。这个定理有很多种证明方法,据统计,目前已知的证明方法约有500种,是数学定理中证明方法最多的定理之一。在中国,周朝时期的商高提出了“勾三股四弦五”的勾股定理的特例。在西方,最早提出并证明此定理的为公元前6世纪古希腊的毕达哥拉斯学派。 这个定理在数学、物理、工程等多个领域都有应用,并且也有很多重要的实际应用,例如计算直角三角形的角度、求解几何问题、设计建筑结构等等。因此,理解和掌握勾股定理是非常重要的。