LangChain教程:调用阿里千问聊天模型chat model(使用序列封装角色)

说明

在 LangChain教程:调用阿里千问聊天模型chat model(使用Message类) 案例中,使用类封装角色:

  • SystemMessage:系统角色
  • HumanMessage:用户角色
  • AIMessage:AI角色

还有一种简化的写法,简化代码中,不用 SystemMessage、MessagesPlaceholder、HumanMessage,而是用元组或列表:

  • ("system", ""):第一个元素是 system 表示系统角色
  • ("human", ""):第一个元素是 human,表示用户角色
  • ("ai", ""):第一个元素是 ai,表示ai角色

案例

简化 LangChain教程:调用阿里千问聊天模型chat model(使用Message类) 案例

系统角色
("system", "你是一个温柔的小学数学老师,回答问题时用“亲”、“小朋友”,并且简短回答问题,回答问题不要用markdown格式"),
用户角色
("human", user_input)
AI角色
("ai", res_txt)

完整代码

from langchain_community.chat_models.tongyi import ChatTongyi

# 初始化模型
chat = ChatTongyi(model="qwen3-max", api_key="填你的阿里前文api key")

# 准备消息list
messages = [
    # 设置系统角色
    ("system", "你是一个温柔的小学数学老师,回答问题时用“亲”、“小朋友”,并且简短回答问题,回答问题不要用markdown格式"),
]
"""
第一次提问:3x+5=20,x 等于多少?
第二次提问:把x=6代入公式,等于多少
"""

def printMessages(messages):
    """
    打印消息列表
    :param messages:
    :return:
    """
    print("------messages内容:")
    for item in messages:
        print(item[0], ":", item[1])

    print("------messages内容结束")


print("===== 小学数学老师对话助手 =====\n")

while True:
    # 4. 用户角色:获取当前轮次的用户提问(变量输入)
    user_input = input("请提问:")

    # 设置用户角色
    user_msg = ("human", user_input)
    # 将用户提问加入对话历史
    messages.append(user_msg)

    printMessages(messages)
    # 5. 通过 stream() 流式调用,调用模型生成回答(AI角色的「实时回答」)。
    res = chat.stream(messages)
    # 将回答的内容拼装到该字符串
    res_txt = ""

    # 输出AI回答
    print("\n\nAI老师的回答:")
    # 流式输出
    for chunk in res:
        print(chunk.content, end="", flush=True)
        res_txt = res_txt + chunk.content
    print("\n回答完毕!\n")
    # 删除上次用户的提问
    messages.pop()
    # 6. 设置AI角色
    ai_msg = ("ai", res_txt)
    # 将本次回答加入历史(核心!作为下一轮的上下文)
    messages.append(ai_msg)

代码解释1

messages = [
    # 设置系统角色
    ("system", "你是一个温柔的小学数学老师,回答问题时用“亲”、“小朋友”,并且简短回答问题,回答问题不要用markdown格式"),
]

将系统角色放入到元组或list列表中:

  • 第一个元素是 systen,表示系统角色
  • 第二个元素:内容

代码解释2

user_msg = ("human", user_input)
messages.append(user_msg)

将用户角色放入到元组或list列表中:

  • 第一个元素是 human,表示用户角色
  • 第二个元素:内容

代码解释3

ai_msg = ("ai", res_txt)
messages.append(ai_msg)

将ai角色放入到元组或list列表中:

  • 第一个元素是 ai,表示用户角色
  • 第二个元素:内容

原文出处:/show_1GW2pzaQGhxd.html