当前位置: 首页 > news >正文

把历史对话作为提示词会怎样

、历史对话能作为提示词吗?

大模型的用户那么多,推理过程已经消耗许多算力了,不可能再给每个用户分配单独的存储空间以实现记忆功能。既然大模型放弃了记忆功能,开发者就得在AI应用这边增加对话记忆,以弥补大模型缺失的记忆。
具体而言,在用户每次退出会话之时,AI应用就要保存本次会话的各轮问答内容。然后下次开启新会话时,AI应用先把上次的多轮问答合并后作为初始提示词发给大模型,再接收处理用户的新问题。好让大模型知晓用户之前已经问过了哪些问题,并且上次的大模型都做了哪些回答,于是心中有数、方能投用户之所好。

二、提示词形式的历史对话例子

包含上回多轮问答内容的初始提示词举例如下:

“用户之前已经问过你多个问题了,后续推理请参考之前的问答内容。 上次用户的问题和AI的回答按照时间升序排列如下: 【用户】推荐一本关于历史的书,要内容详细、适合入门 【AI】推荐《明朝那些事儿》,通俗好读 【用户】有没有国外历史的?比如欧洲史 【AI】推荐《欧洲通史上下两千年》 【用户】太长了有没有更短的?我只想快速了解核心脉络 【AI】那看《极简欧洲史》精简版,100页搞定”

上面的初始提示词首先说明这不是普通的问题,而是上次用户与AI的问答交互内容;接着把用户与AI的对话内容一一罗列,其中用户的提问以【用户】开头,AI的回答以【AI】开头。这样大模型一开始就了解用户比较关注入门的历史读物,尤其是欧洲的历史梗概。

三、根据消息数量精简上下文

当然,历史会话中的问答内容可能很多,把所有历史对话统统发给下次的大模型,既不经济也不可取。只能摘取历史对话的局部内容,提炼之后形成下次会话的初始提示词,才是可行的做法。
历史对话的提炼方式有很多,最简单的就是拾取最新最近最靠后的几条问答内容。因为较老较远较靠前的问答过去比较久了,很可能用户已经不再关注。按照思维惯性,用户大概率更关注上次最后的几次问达,那么提取最新的会话问答就足够了。

接下来将以Python代码演示如何按照消息数量来截断早期的上下文(即问答内容)。在运行Python代码之前,请确保电脑已经按照本教程的第一篇文章安装了 Python 3.10.11 和 PyCharm 2022.2 。
下面是只保留两轮对话内容的Python代码例子:

# 上下文仓库:存放所有历史对话 context_history = [] # 限制最多保留 2 轮对话,超出自动截断 MAX_CONTEXT_ROUND = 2 # 模拟角色标记 ROLE_USER = "用户" ROLE_AI = "AI" # 模拟一轮对话 & 上下文管理 def chat(user_input: str) -> tuple[str, str]: # ① 先把当前用户问题加入上下文 context_history.append({ "role": ROLE_USER, "content": user_input }) # 关键:上下文截断,超出限制就删掉最旧的 while len(context_history) > MAX_CONTEXT_ROUND * 2: context_history.pop(0) # 删除列表第一个(最早的记录) # ② 拼接完整上下文的提示词(发给大模型的最终内容) full_prompt = "" for msg in context_history: full_prompt += f"{msg['role']}:{msg['content']}\n" # ③ 模拟AI回答(实际项目要调用大模型接口) ai_reply = f"我结合上下文回答:收到你的问题【{user_input}】" # ④ AI回答也存入上下文,供下一轮使用 context_history.append({ "role": ROLE_AI, "content": ai_reply }) return ai_reply, full_prompt # 测试运行 if __name__ == "__main__": # 连续多轮提问,观察截断效果 questions = [ "请推荐一本小说", "再来一本科幻的", "不要太长的", "有没有悬疑类?" ] for idx, q in enumerate(questions, 1): print(f"\n===== 第{idx}轮对话 =====") reply, prompt = chat(q) print("当前拼接的完整上下文:") print(prompt) print("AI回复:", reply)

四、历史对话上下文的精简结果

运行上面的Python代码,观察到下面的输出日志:

===== 第1轮对话 ===== 当前拼接的完整上下文: 用户:请推荐一本小说 AI回复: 我结合上下文回答:收到你的问题【请推荐一本小说】 ===== 第2轮对话 ===== 当前拼接的完整上下文: 用户:请推荐一本小说 AI:我结合上下文回答:收到你的问题【请推荐一本小说】 用户:再来一本科幻的 AI回复: 我结合上下文回答:收到你的问题【再来一本科幻的】 ===== 第3轮对话 ===== 当前拼接的完整上下文: AI:我结合上下文回答:收到你的问题【请推荐一本小说】 用户:再来一本科幻的 AI:我结合上下文回答:收到你的问题【再来一本科幻的】 用户:不要太长的 AI回复: 我结合上下文回答:收到你的问题【不要太长的】 ===== 第4轮对话 ===== 当前拼接的完整上下文: AI:我结合上下文回答:收到你的问题【再来一本科幻的】 用户:不要太长的 AI:我结合上下文回答:收到你的问题【不要太长的】 用户:有没有悬疑类? AI回复: 我结合上下文回答:收到你的问题【有没有悬疑类?】
http://www.jsqmd.com/news/1092055/

相关文章:

  • 破解教育系统定制化难题:3个MeEdu Hook系统实战解决方案
  • 如何利用ReadCat阅读器打造纯净小说阅读体验:完整使用指南
  • 面试官挖坑:Gemini有2M上下文,Agent还要记忆干嘛?
  • AI是如何理解和生成代码的?
  • 文件上传漏洞攻防全解析:从原理到实战的Web安全必修课
  • 容器编排平台:调度算法与服务发现的机制
  • Strix Halo 芯片前瞻,端侧 AI 未来的硬件想象力
  • MPLS、IPLC与SD-WAN的技术定位与融合演进
  • 工业机器人供应商选型指南:如何评估技术口碑与产品线覆盖度?仙工智能给你答案
  • 解构工业级机器狗落地痛点:如何布局复杂工况下的跨形态控制底座?
  • 免费开源gerbv:你的PCB设计验证终极指南
  • 【招聘】嫉妒,是最被低估的猎头武器
  • TI MSPM0汽车MCU深度评测:低成本高集成度方案重塑车身电子设计
  • PHP AES-ECB加密完整实现:从原理到安全实践
  • 3步掌握SMUDebugTool:解锁AMD Ryzen处理器深度调试的完整方案
  • 从零到一:手把手教你用Elsevier cas-sc LaTeX模板完成投稿
  • 思科模拟器实战:二层与三层链路聚合的配置差异与排错指南
  • 魔珐星云SDK实战测评:重构数字人交互的底层逻辑
  • 微信聊天记录删了还能找回来?自带 3 个隐藏功能
  • 移动开发技术跨平台框架ReactNative与Flutter的比较
  • 性能基准测试对比,AMD GPU 在大 Batch 场景下的真实表现
  • Codex 桌面端新手使用教程
  • 计算机毕业设计之基于深度学习的苹果成熟度识别系统的设计与实现
  • SMUDebugTool终极指南:免费AMD Ryzen硬件调试工具快速上手
  • 俄罗斯OZON跨境运营流程及工具
  • HS2-HF Patch:Honey Select 2的终极增强解决方案
  • 20W 工业 AC-DC 模块电源硬件技术选型解析丨LD20-23B03R2 和钡特电源 AD20-23S03 全系列稳选型丨国产丨参数规格丨封装互通
  • 基于Matlab与STM32的串口数据可视化调试:从算法仿真到硬件验证
  • 物联网安全中的设备认证与固件保护
  • 阿里云盘Refresh Token获取终极指南:三步扫码解锁云盘自动化能力