了解如何开启一轮对话后,就需要了解如何开启多轮对话。根据deepseek官方文档指出,/chat/completionsAPI是一个无状态API,服务端并不会记录用户请求的上下文,为了实现多轮对话,用户只能在每次请求时,将所有对话历史拼接到本次请求后,一起传给API。

第一步还是先创建client

messages = [
    {"role": "system", "content": f'你只能使用{tools}中的函数,你要从中选择合适的函数来回答问题,如果提供的函数不能解决问题,告诉用户没有相应的函数就行,如果有的话,以标准json'
                                  f'的格式输出,例如:{{ '
                                  f'"func":"calculator","args":"{{ '
                                  f'参数键值对}}"}}'},
    {"role": "user", "content": "西安的天气怎么样?"}
]
completion = client.chat.completions.create(
    model="deepseek-r1:1.5b",
    messages=messages,
    max_tokens=1024,
    temperature=0.7,
    response_format={
        'type': 'json_object'
    }
)

client创建好之后,我们先打印第一次传入API的message值和API给我们的返回值

print(messages)
print(completion.choices[0].message.content)

可以看到第一条是我们传入的messages,第二条是AI给我们返回的。可以看到AI已经识别并且返回了需要调用的函数名和参数列表。

现在我们将传入的messages和AI给我们的返回数据拼接到一起(此时messages是第一轮对话的全部内容,包括问题和答案)

messages.append(completion.choices[0].message)

接下来我们将第二轮对话的messages拼接上去

messages.append({"role": "user", "content": "上海的呢?"})

接着创建第二个client

completion = client.chat.completions.create(
    model="deepseek-r1:1.5b",
    messages=messages,
    max_tokens=1024,
    temperature=0.7,
    response_format={
        'type': 'json_object'
    }
)

我们看一下两轮下来,messages变成了什么样?

此时的message已经将第二轮我们的问题拼接了上去,接下来我们看看AI的返回

可以看到第二轮虽然我只问了上海的呢,并没有问上海的天气,但是AI依旧返回了调用函数的名称和参数列表。

接下来我们只需要在每轮对话结束之后,调用处理AI返回值的函数,即可根据AI返回值来执行我们需要的函数。从而实现根据需求,多次调用本地方法。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐