什么是让聊天机器人拥有理解上下文的能力?
·
Multi-turn Chat(多轮对话) — KK Chat的上下文理解能力
前面我们已经学习了 SQLite,实现了聊天记录保存。
但是,仅仅保存聊天记录,并不意味着 AI 能够记住之前聊过的内容。
今天,我们学习了 Multi-turn Chat(多轮对话),真正让 Chatbot 拥有理解上下文的能力。
一、为什么需要多轮对话?
先举一个例子。
没有上下文:
你:我今年20岁
AI:好的。
你:那我明年多少岁?
AI:???
为什么 AI 不知道?
因为第二句话:
那我明年多少岁?
里面根本没有:
20岁
如果模型只收到:
那我明年多少岁?
它当然不知道。
所以AI 并不是"忘记"。
而是它根本没有收到上一句话。
二.为什么大模型没有上下文
因为OpenAI API,每一次请求,都是独立的。
例如:
第一次:
messages=[{"role":"user","content":"我今年20岁"}]
第二次:
如果:
messages=[{"role":"user","content":"我明年多少岁?"}]
模型看到的只有:
我明年多少岁?
所以不知道。
三、history 是什么?
Chatbot接下来需要把以前聊天记录,全部发送过去。
例如:
数据库:
user
assistant
user
assistant
load_history()
恢复:
history=[...]
然后组成:
messages=[system]+history
于是真正发送给模型的是:
messages=[{"role":"system",...},{"role":"user","content":"我今年20岁"},{"role":"assistant","content":"好的"},{"role":"user","content":"那我明年多少岁?"}]
这时候模型终于知道上一句话是什么了。
四、什么叫上下文(Context)
上下文就是之前发生的所有聊天。
例如:
用户:
介绍FastAPI
AI:
FastAPI......
下一句:
它和Flask有什么区别?
这里:
它
是谁?只有上下文才能知道:
它=FastAPI
如果没有history,AI根本不知道:"它"是谁。
五、Multi-turn Chat 是怎么实现的?
整个流程如下:
程序启动
│
▼
SQLite
│
SELECT
│
history
│
▼
messages = [system] + history
│
▼
OpenAI SDK
│
▼
GPT
│
▼
返回回答
│
▼
保存到SQLite
这里
-
SQLite负责保存历史。
-
history负责恢复历史。
-
messages负责发送历史。
-
OpenAI负责理解历史。
六、history 和 messages 有什么区别?
这是今天最容易混淆的地方。
其实history只是聊天记录。
例如:
history=[userassistantuserassistant]
而真正发送给模型的是:
messages=[system]+history
所以:
messages
=
system
+
history
七、总结
今天学习的其实也是聊天机器人的整个数据流
SQLite
│
▼
SELECT
│
▼
history
│
▼
messages=[system]+history
│
▼
OpenAI SDK
│
▼
GPT
│
▼
AI回答
│
▼
SQLite
整个流程形成了闭环。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)