多轮对话

2025-03-13   访问量:1008


通义千问 API 默认不会记录您的历史对话信息。多轮对话功能可以让大模型“拥有记忆”,满足如追问、信息采集等需要连续交流的场景。

效果对比

你好,我叫peter

你好,Peter!很高兴认识你。有什么我可以帮忙的吗?

已关闭多轮对话

以上组件仅供您参考,并未真实发送请求。

如何使用

通义千问 API 不会记录您的对话记录。如果您需要让大模型参考历史对话信息,需要将历史对话信息与新的指令一同输入到通义千问 API 中。

前提条件

您需要已获取API Key配置API Key到环境变量。如果通过OpenAI SDKDashScope SDK进行调用,还需要安装SDK

开始使用

实现多轮对话的关键在于维护一个 messages 数组,您可以将每一轮的对话历史以及新的指令以{"role": "xxx", "content": "xxx"}的形式添加到 messages 数组中,从而使大模型可以参考历史对话信息进行回复。

OpenAI兼容

DashScope

Python

Node.js

curl

示例代码以手机商店导购为例,导购与顾客会进行多轮对话来采集购买意向,采集完成后会结束会话。

 

import osfrom openai import OpenAIdef get_response(messages):
    client = OpenAI(        # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    )    # 模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
    completion = client.chat.completions.create(model="qwen-plus", messages=messages)    return completion# 初始化一个 messages 数组messages = [
    {        "role": "system",        "content": """你是一名百炼手机商店的店员,你负责给用户推荐手机。手机有两个参数:屏幕尺寸(包括6.1英寸、6.5英寸、6.7英寸)、分辨率(包括2K、4K)。
        你一次只能向用户提问一个参数。如果用户提供的信息不全,你需要反问他,让他提供没有提供的参数。如果参数收集完成,你要说:我已了解您的购买意向,请稍等。""",
    }
]
assistant_output = "欢迎光临百炼手机商店,您需要购买什么尺寸的手机呢?"print(f"模型输出:{assistant_output}\n")while "我已了解您的购买意向" not in assistant_output:
    user_input = input("请输入:")    # 将用户问题信息添加到messages列表中
    messages.append({"role": "user", "content": user_input})
    assistant_output = get_response(messages).choices[0].message.content    # 将大模型的回复信息添加到messages列表中
    messages.append({"role": "assistant", "content": assistant_output})    print(f"模型输出:{assistant_output}")    print("\n")

错误码

如果模型调用失败并返回报错信息,请参见错误信息进行解决。

常见问题

Q:多轮对话如何收费?

A:多轮对话按照输入与输出的 Token 数进行计费。需要注意的是,历史对话信息也会包含在输入 Token 中。上下文缓存(Context Cache)可以一定程度上降低您在使用多轮对话时的使用成本。


热门文章
更多>