聊天 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)
posted @ 2025-03-25 17:07  向着朝阳  阅读(28)  评论(0)    收藏  举报