本篇博客主要介绍Langchain
中的Message和Prompt封装
1. Message封装
1.1 Messages
Messages对象可以用在提示词和聊天信息中。目前主要有Message
和MessageChunk
两种类型,这里仅以Message
类为主进行介绍。Message
类主要有以下几种:
- AIMessage: 大模型返回的信息,类似于OpenAI模型中
assistant
类型的消息。 - ChatMessage: ChatMessage有一个
role
字段,用于标识消息发送者的角色或类型。 - FunctionMessage/ToolMessage:向LLM返回函数或工具得到的信息。FunctionMessage是ToolMessage的旧版本。
- SystemMessage: 系统角色信息,类似于OpenAI模型中
system
类型的消息。 - HumanMessage:用户角色的信息,类似于OpenAI模型中
user
类型的消息。
关于Message
类信息其用法举例如下(目前只能用到content
参数):
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage,SystemMessage,ToolMessage
from dotenv import load_dotenv,find_dotenv
_=load_dotenv(find_dotenv())
client=ChatOpenAI(
model_kwargs={
"tools":[{
"type": "function",
"function": {
"name": "sum",
"description": "加法器,计算一组数的和",
"parameters": {
"type": "object",
"properties": {
"numbers": {
"type": "array", "items": {
"type": "number"}}
}
}
}
}]})
messages=[
SystemMessage(content="你是一个数学家,可以计算所有整数的和。"),
HumanMessage(content="请计算12343、4363、984773这三个整数的和"),
]
response=client.invoke(messages)
#response的类型为AIMessage类型
if response.additional_kwargs['tool_calls']:
tool=response.additional_kwargs['tool_calls'][0]
arguments=eval(tool['function']['arguments'])
fun_message=ToolMessage(
content=str(sum(arguments['numbers'])),
tool_call_id=tool['id'])
#ToolMessage向大模型返回function calling执行的结果
messages.extend([response,fun_message])
response2=client.invoke(messages)
print(response2)
其执行结果如下(返回的类型是AIMessage类型):
content='这三个整数的和为1001479。' response_metadata={
'token_usage': {
'completion_tokens': 13, 'prompt_tokens': 114, 'total_tokens': 127}, 'model_name': 'gpt-3.5-turbo'<