聊天 ChatOpenAI
和大模型聊天使用ChatOpenAI类,
直接调用 ChatOpenAI.invode(messages). 常见的 messages类型为 BaseMessage 数组
还有其他调用
ainvode 异步调用
abatch 异步批量调用
astream 流式响应 。 一个字一个字的返回
消息的类型
消息类型 | 用途 | 触发场景 | 内容格式 | 关联关系 | 示例代码 |
---|---|---|---|---|---|
SystemMessage | 设定对话规则、AI角色或上下文 | 对话开始时或需要重置AI行为时触发 | content : 纯文本的系统指令 |
通常作为第一条消息 | python SystemMessage(content="你是一个客服助手,回复需简洁。") |
HumanMessage | 表示用户输入,支持多模态内容(文本、文件等) | 用户发送消息时触发 | content : 字符串或包含多模态数据的列表 |
可被 AI 回复或触发工具调用 | python HumanMessage(content="请分析 sales.csv 数据") |
AIMessage | 存储模型生成的回复,可能包含工具调用请求 | 模型生成回复时触发 | - content : 回复文本- tool_calls : 工具调用列表(可选) |
可能触发后续的 ToolMessage | python AIMessage( content="正在处理...", tool_calls=[{"name":"analyze", "args": {...}}] ) |
ToolMessage | 传递工具执行结果 | 工具执行完成后触发 | - content : 工具结果(字符串)- name : 工具名- tool_call_id : 调用ID |
必须对应前序 AIMessage 的 tool_call | python ToolMessage( name="analyze", content="结果: 销售额+20%", tool_call_id="call_123" ) |
FunctionMessage | (已弃用)旧版工具结果消息 | 旧版本代码兼容时使用 | - name : 函数名- content : 结果字符串 |
替代 ToolMessage 的旧方案 | python FunctionMessage(name="old_tool", content="处理完成") |
ChatMessage | 自定义角色消息(非标准角色时使用) | 需要扩展非预设角色时使用 | - role : 自定义角色名- content : 消息内容 |
无强制关联 | python ChatMessage(role="admin", content="系统维护中") |
前
1 需要将大模型的key写到环境变量
echo "export DASHSCOPE_API_KEY='YOUR_DASHSCOPE_API_KEY'" >> ~/.bash_profile
source ~/.bash_profile
简单聊天
发送简单消息例子
from langchain_openai import ChatOpenAI
import os
def create_llm() -> ChatOpenAI:
"""创建并返回配置好的大模型实例"""
return ChatOpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY") or "your_api_key_here",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
model="qwen2.5-math-72b-instruct"
)
messages=[
{"role": "system", "content": "你是一位乐于助人的AI智能小助手"},
{"role": "user", "content": "你好,请你介绍一下你自己。"}
]
llm = create_llm()
response = llm.invoke(messages)
print(response.content)
升级例子:使用LangChain 的ChatPromptTemplate 替换占位符, 生成messages
ChatPromptTemplate
主要方法
- from_messages 从各种消息格式创建聊天提示模板
- format_messages 。做占位符替换,Format messages from kwargs. Should return a list of BaseMessages.
from langchain_core.prompts import ChatPromptTemplate
from ali_llm import create_llm
chat_template = ChatPromptTemplate.from_messages(
[
("system", "你是一个有帮助的AI机器人,你的名字是{name}。"),
("human", "{user_input}"),
]
)
messages = chat_template.format_messages(name="小明", user_input="你叫什么名字?")
def create_llm() -> ChatOpenAI:
"""创建并返回配置好的大模型实例"""
return ChatOpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY") or "your_api_key_here",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
model="qwen2.5-math-72b-instruct"
)
llm = create_llm()
response = llm.invoke(messages)
print(response.content)
使用管道命令LCEL 调用大模型
总结: 管道 ChatPromptTemplate | ChatOpenAI
invoke入参:替换因子的数组
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
import os
def create_llm() -> ChatOpenAI:
"""创建并返回配置好的大模型实例"""
return ChatOpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY") or "your_api_key_here",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
model="qwen2.5-math-7b-instruct"
)
chat_template = ChatPromptTemplate.from_messages(
[
("system", "你是一个有帮助的AI机器人"),
("human", "{user_input}"),
]
)
llm = create_llm()
chain = chat_template | llm
response = chain.invoke({
"user_input": "你叫什么名字"
})
print(response.content)