消息是和大模型进行交互的基本单元。LangChain中的Message对象统一了各个模型的消息类型,使得我们用起来更加方便。消息总体上来说有两个属性,分别是role(角色)和content(消息内容)。
用于给大模型定位角色,为大模型提供额外的上下文信息。对应langchain中的SystemMessage对象。
用户发送给大模型的消息。对应langchain中的HumanMessage对象。
代表大模型输出的消息。对应langchain中的AIMessage对象,在采用流式输出时,对应的是AIMessageChunk。AIMessage有以下常用的属性:
在那些支持Function Calling的大模型中,大模型可以选择工具,而tool则代表工具执行后返回的结果。对应langchain中的ToolMessage,在设置ToolMessage时,必须要传递tool_call_id,用来指定该消息是由哪个工具调用执行后的结果,方便大模型理解。
五、示例:
from langchain_core.messages import ToolMessage, SystemMessage, HumanMessage, AIMessagefrom langchain_ollama import ChatOllamafrom langchain_core.tools import toolfrom langchain_openai import ChatOpenAI# llm = ChatOllama(model="deepseek-r1:7b")llm = ChatOpenAI( base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", model="qwen-plus", api_key="平台对应的apiKey",)@tooldefget_weather():""" 获取今天的天气情况 :return: 今天的天气信息 """return ("天气:晴天""温度:24~30摄氏度""风量:微风""湿度:91.1%" )tools = {get_weather.name: get_weather}messages = [ SystemMessage(content="你是一个非常靠谱的私人助手!你的名字叫“小助理”"), HumanMessage(content="帮我看下今天的天气如何?")]tools_llm = llm.bind_tools(tools.values())message: AIMessage = tools_llm.invoke(messages)messages.append(message)print(message)if len(message.tool_calls)>0:#if message.response_metadata['done_reason'] == "stop": tool_calls = message.tool_callsfor tool_call in tool_calls: tool_call_id = tool_call['id'] tool_call_name = tool_call['name'] tool_call_args = tool_call['args'] tool = tools[tool_call_name] result = tool.invoke(tool_call_args) messages.append( ToolMessage( tool_call_id=tool_call_id, content=result, artifact="不会发送给大模型,但是用于跟踪的数据" ) )messages.append( HumanMessage( content="如果今天下雨就待在家里,否则就出去玩。请问我今天适合出去玩吗?" ))result_message: AIMessage = tools_llm.invoke(messages)print(result_message)