在我们使用国内AI工具的时候,发现AI生成回答之后,总是会在对话末尾处,加上三条「下一步追问问题建议」,那么,这些国内的AI大模型工具是如何实现无限追问的呢 ?
Dall-E配图
背景
这两天跟朋友讨论起了关于AI大模型的「下一步问题建议」是通过什么prompt驱动的?
即大模型回答用户问题之后的建议“追问问题”,往往在模型回复后,自动根据配置及对话内容提供 3 条用户输入建议。
拿Kimi来举例,如下图所示,当我问到「什么是人工智能」,Kimi给出相应的回复,并在末尾追加了三条继续追问的问题建议。
什么是问题建议?
「问题建议」可以很好地帮助用户进行提问,降低用户的时间成本,更好地获取所需答案。
但疑问来了,有时候我们体验下来「问题建议」的时候,总觉得给出的示例问题并不是我们所想,或者说跟上下文关系并不大。
那么,AI模型仅仅是根据最后一段对话,还是根据所有上下文内容来实现的「无限追问」能力?
于是就去尝试了国内绝大部分AI模型,包括智谱、Kimi等等的调用逻辑,整理输出成文。
结论先行
先说结论,就是在最后边追加了一句类似“通过上下文或最后一段对话来猜测用户可能进一步追问的3个相关问题”Prompt,并用json解析出来之后追加到对话框末尾。
Kimi
我们打开**「开发者工具」** 进行观察,如果我们接着问Kimi,「人工智能技术在哪些行业中的应用最为广泛?」。
Kimi关于问题的追问建议
等它输出完成之后我们可以看到,kimi调用了 https://kimi.moonshot.cn/api/chat/cr00drkjot6t3b2hs2v0/completion/stream
流式输出接口,而参数正是我们提出的问题。
{
"messages": [
{
"role": "user",
"content": "人工智能技术在哪些行业中的应用最为广泛?"
}
],
"extend": {
"sidebar": true
},
"refs": [],
"use\_search": true,
"kimiplus\_id": "kimi",
"is\_pro\_search": false
}
注意看,我们重点关注接口返回结果,其中的第一条数据中的 group_id
,这里先记下来:
{
"content": "人工智能技术在哪些行业中的应用最为广泛?",
"event": "req",
"group\_id": "cr00p9pldu5qa3d5vcgg",
"id": "cr00p9pldu5qa3d5vchg",
"refs": []
....// 后续略,
// 后续内容为本轮Kimi关于[人工智能技术在哪些行业中的应用最为广泛?]的回答
}
紧接着我们会看到,Kimi输出了回答。
关于人工智能应用的回答
Kimi在输出完回答之后随即请求了https://kimi.moonshot.cn/api/chat/recommend-prompt
接口。
kimi获取问题建议的接口
请求参数:
{
"chat\_id": "cr00drkjot6t3b2hs2v0",
"group\_id": "cr00p9pldu5qa3d5vcgg"
}
响应参数:
data: {"event":"chat\_prompt\_show"}
data: {"event":"chat\_prompt","text":"人工智能在医疗诊断中具体是如何提高诊断准确性的?"}
data: {"event":"chat\_prompt","text":"在金融风控领域,人工智能是如何帮助金融机构提高决策效率的?"}
data: {"event":"chat\_prompt","text":"智能制造中,人工智能是如何实现生产自动化和智能化的?"}
data: {"event":"all\_done"}
结合下面界面显示结果,我们可以得知:「recommend-prompt」 接口正是Kimi获取「问题建议」的关键之处。
recommend-prompt接口
划重点
recommend-prompt
的请求参数 chat_id
代表整个对话窗口的唯一Id标识,而group_id
代表本轮对话kimi的回复内容的唯一Id标识。
recommend-prompt
是一个通用接口,Kimi的服务器通过这两个参数获取到指定回复内容,再根据内置的**「问题建议生成Prompt」** ,生成三条具体的问题建议,并用json格式返回输出到前端进行解析。
问题建议Prompt类似下述表述 :
## 相关问题推荐
【注意】
**请根据我提供的信息,通过上下文来猜测用户可能进一步追问你的3个相关问题,通过序号形式列出。**
1.问题表述应与上下文内容紧密相关
2.保证每个问题不超过30个字
简单复现一下:
我们随便找一篇文章给到Kimi进行总结,并输出相关推荐问题。
输入prompt:
👨🏻
你是文档总结大师,擅长将用户发给你的文本以清晰简洁的格式总结输出出来。接下来我会发你一篇文章,在总结文章之后要给出下一步相关问题的建议。
【输出格式】
## 文章总结
## 相关问题推荐
【注意】
**在接下来的对话中,请根据我每次跟你聊天的最后一条记录,通过上下文来猜测我可能进一步追问你的3个相关问题,通过序号形式列出,并保证每个问题不超过20个字**
🤖
请发送您希望我总结的文章,我会在阅读后为您提供一个清晰简洁的总结,并根据文章内容推荐可能的相关问题。
👨🏻
https://new.qq.com/rain/a/20240817A00UM700
🤖
## 文章总结
文章讨论了苹果公司对腾讯和字节跳动等中国企业施加压力,要求改变其应用内支付方式,以避免绕过苹果的30%佣金(即所谓的“苹果税”)。文章指出,苹果税在全球范围内引起了争议,欧盟、韩国和日本等地区已经采取措施要求降低或取消这一费用。专家建议中国也应采取行动,允许使用第三方支付系统以减少苹果税的影响。同时,文章强调中国企业需要团结起来,捍卫自身利益,不应在压力下妥协。
## 相关问题推荐
1. 苹果税在全球范围内的争议情况如何?
2. 中国企业如何应对苹果税带来的挑战?
3. 苹果税对消费者和开发者有何影响?
可以看到,我们输出的问题推荐,跟Kimi自带的内容推荐相差无几。
对比效果
在之后,我在一个chat对话框内进行了多轮对话,内容涉及了人工智能、娱乐圈、体育圈等多个没有相关性的话题讨论,发现Kimi每次给出的「问题建议」都是根据最后一段回复进行的上下文问题推荐 。
至于为什么这么做?
一方面,节省token,不用获取全部的上下文去进行推理生成;
另一方面,很多人在使用AI工具的时候往往都在同一个对话框中生成多轮对话,可能主题相关,可能主题完全风马牛不相及,所以,只针对最后一段话进行推理生成更为合理一些~
结论
Kimi自带的「追问」功能是以「最后一段回复内容」作为上下文,基于「问题建议生成器」Prompt,为用户生成3条相关建议 。
智谱
针对智谱,同样我们重复Kimi之类的操作,可以看到,调用的是https://chatglm.cn/chatglm/backend-api/v1/conversation/recommendation/list
接口。
智谱的下一步建议调用接口截图
值得注意的是,这里只用到了conversation_id
一个字段,用的还是GET请求。通过此接口返回的问题。这里参数用的是整轮对话窗口的唯一Id:66c01d81667a2ddb444ff878
调用接口后的响应截图
之后,我问了「人工智能有哪些伦理问题 」,生成了一系列回答,🤖返回的推荐问题建议是:
{
"message": "success",
"result": {
"list": [
"如何避免数据偏见?",
"人工智能责任归属怎么界定?",
"有哪些措施保护个人隐私?"
]
},
"status": 0
}
似乎没什么问题,我接着转移话题开始问「奥运冠军一般都会在比赛结束干什么? 」,生成了一系列的回答,最后🤖返回的推荐问题建议是:
{
"message": "success",
"result": {
"list": [
"冠军们如何庆祝胜利的?",
"药检一般是什么时候进行?",
"他们回国后会有哪些活动?"
]
},
"status": 0
}
到了这一步,大家似乎觉得智谱跟Kimi一样,只是基于最后一个回复来进行问题推理生成。
直到我再次“跨界”问了下一个问题「娱乐圈的金鸡奖获奖之后演员们干什么?」,智谱生成了一系列的回答之后,变成了跟前轮对话相关的问题建议,大家可以感受一下~
{
"message": "success",
"result": {
"list": [
"隐私泄露怎么防范?",
"数据偏见如何消除?",
"责任归属怎么界定?"
]
},
"status": 0
}
我们可以看到,前几轮对话中我们围绕着人工智能进行了两轮对话,讨论了隐私保护和相关伦理问题,在新一轮的对话中,智谱应该是读取了history
进行归纳总结,注意到当前用户可能关心的问题,接着提出下一步建议。
智谱在回答完金鸡奖相关问题之后回复了跟前几轮相关内容建议
我们接着问下一个问题「运动员结束之后会进行娱乐吗?」,智谱生成了一系列的回答之后,在接下来的对话相关的问题建议又回到了「获奖演员会休息多久?」上。
{
"message": "success",
"result": {
"list": [
"运动员平时怎么放松?",
"获奖演员会休息多久?",
"有哪些运动员参与公益活动?"
]
},
"status": 0
}
再次论证了智谱的下一步问题建议是基于上下文进行回复的~
对于运动员的相关回答之后问题建议又回到了history相关话题上
智谱对话框中的「问题建议」是基于history
来进行回复的~
智谱智能体
为了看一下智谱对于「下一步问题建议」的支持,我们直接打开智谱的智能体中心,可以看到:
智谱智能体搭建界面
在智能体配置中心已经给了明确的指令:
1、参考配置信息和上下文,结合最后一轮回复内容推测用户下一轮最可能输入的内容。
2、用户输入建议应与上一轮回复紧密相关,但不要与前文已经提问或者回答过的内容重复。
3、用户输入建议应匹配用户在对话中的角色和对话类型。
智能体关于下一步问题的配置
同样地,也可支持自定义指令配置,自由地搭配自定义想要的问题建议。
结论
智谱自带的「追问」功能是以「当前对话框中所有内容」作为上下文,基于「问题建议」Prompt,为用户生成3条相关建议 。
结语与展望
在深入分析了Kimi和智谱等国内AI大模型工具的「无限追问」功能后,我们可以得出一些共同点和差异。
无论是基于最后一段回复内容还是整个对话历史,这些工具都在尝试通过智能的方式,为用户提供更加连贯和相关的提问建议,以优化交互体验。
感兴趣的朋友也可以基于此来定制自己的「问题建议助手」帮助目标用户进行更好的提问和建议~
共同点
- 上下文理解 :无论是Kimi还是智谱,它们都能够在一定程度上理解对话的上下文,根据已有的信息生成问题建议。(或许也有成本考量?)
- 用户便利性 :通过自动提供问题建议,减少了用户思考下一步提问的时间,提高了对话效率。
差异
- 上下文范围 :Kimi似乎更倾向于基于最后一段回复内容生成问题建议,而智谱则能够考虑整个对话历史,提供更为全面的建议。
- 个性化配置 :智谱提供了智能体配置中心,允许用户或开发者根据特定需求自定义问题建议的生成逻辑。
未来展望
随着AI技术的不断进步,我们有理由相信,「无限追问」功能将变得更加智能和个性化:
- 深度学习 :通过更深入的机器学习,AI将能更好地理解用户的意图和对话的深层含义。
- 个性化体验 :AI将能够根据用户的历史行为和偏好,提供更加个性化的问题建议。
- 跨领域融合 :AI工具将能够更好地处理跨领域的话题转换,提供更加灵活的问题建议。
- 交互式学习 :用户将能够通过反馈机制,教导AI更准确地捕捉自己的需求,实现交互式学习和优化。
「无限追问」功能将成为AI助手与用户之间沟通的桥梁,不仅提高信息获取的效率,也将丰富人机交互的深度和广度。
我们期待一个更加智能、更加贴心的AI助手时代的到来。
期待,
并憧憬着,
Javis的到来~
三连(点赞+在看+转发 )跪谢!!
欢迎大家加入结构词AI社区一起解锁🔓更多prompt高端玩法~
结构词AI社区——玩转提示词
更多
关于结构化提示词如何学习入门请参考结构化提示词[1]
参考资料
[1]结构词AI: http://langgpt.ai/