通义千问-大模型,多轮对话原理与实现
大模型
·
与大模型的单次对话相比,多轮对话过程中,维护了上下文信息(也可以说是保存了每次的提问与返回的答案信息),这样每次问大模型新的问题时候,实际上是携带者历史的所有聊天内容进行提问,大模型于是就知道了新问题的上下文。
1、导入大模型包
from http import HTTPStatus
//pip install dashscope
from dashscope import Generation
2、创建保存上下文信息的变量,此处是列表
messages = [{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'user', 'content': '如何做西红柿炖牛腩?'}]
3、向大模型提问
response = Generation.call(model="qwen-turbo",messages=messages,result_format='message')
4、将大模型的回复,追加到上下文变量中,即 列表中
messages.append({'role': response.output.choices[0]['message']['role'],
'content': response.output.choices[0]['message']['content']})
此时列表中内容大概如下:
[{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'user', 'content': '如何做西红柿炖牛腩?'},
{'role': 'assistant',
'content': '材料:\n牛腩500克,西红柿3个,大葱1根,生姜2片,省略。。。。。'}]
5、第二轮提问,先把新的问题,追加到上下午中
messages.append({'role': 'user', 'content': '不放糖可以吗?'})
6、发起提问
此时的提问,包含了之前上下文,所以,大模型能够理解“不放糖可以吗?”这一句新问题
response2 = Generation.call(model="qwen-turbo",messages=messages,result_format='message')
7、响应结果如下:
当然可以。如果你不喜欢或不想添加糖,那么在烹饪过程中就无需加冰糖了。糖主要是为了中和牛肉的腥味,,,,
如果某次提问,大模型没有响应,返回了错误码,
应该把这次提问的问题从上下文列表中删除,即列表中最后一个记录。
messages = messages[:-1]更多推荐


所有评论(0)