问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

deepseek开启多轮对话---多次调用本地方法

创作时间:
作者:
@小白创作中心

deepseek开启多轮对话---多次调用本地方法

引用
CSDN
1.
https://m.blog.csdn.net/xixixi_1160/article/details/145934885

本文将介绍如何使用deepseek的/chat/completions API实现多轮对话功能。通过具体的代码示例,展示如何在每次请求时将对话历史拼接到当前请求中,以实现多轮对话功能。

了解如何开启一轮对话后,就需要了解如何开启多轮对话。根据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返回值来执行我们需要的函数。从而实现根据需求,多次调用本地方法。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号