为了有效地将检索集成到多轮对话中,提示词必须平衡新的上下文和相关的对话历史记录。这通常通过构建提示词来实现,提示词既包含摘要或截断的历史记录,也包含检索到的信息。关键是确保模型能够访问对话中最关键的部分,同时结合来自检索系统的新数据。例如,提示词可以从最后几次用户-助手交流的压缩版本开始,然后是新检索到的文档或事实。开发人员经常使用滑动窗口方法来保留最近的消息(例如,最后三轮对话),或者应用文本摘要来压缩较旧的交互。这可以防止超过 token 限制,同时保留上下文。
检索应由对话的当前状态及其历史记录来指导。当用户提出后续问题时,系统必须检索能够同时解决当前查询和先前上下文的信息。例如,如果用户首先讨论“Python 错误处理”,然后问“如何记录这些错误?”,则检索组件应获取与日志记录库和 Python 中的错误处理相关的文档。然后,提示词可能会将其格式化为:“[历史记录]用户:如何在 Python 中处理异常?助手:使用 try-except 块。[检索到的上下文] Python 的日志记录模块有助于跟踪错误。[当前查询]用户:如何记录这些错误?”。这将新信息与现有线程联系起来,确保连贯性。
为了保持相关性,开发人员必须过滤检索到的内容,以避免冗余或离题的结果。查询和检索到的文档之间的相似度评分或实体跟踪(例如,识别像“日志记录”或“异常”这样的重复术语)等技术有助于确定有用上下文的优先级。例如,如果对话从“API 身份验证”转移到“速率限制”,系统应检索速率限制文档,但在提示词中保留关键的身份验证术语,如“OAuth 令牌”。像向量数据库这样的工具可以将历史轮次的嵌入与新查询进行比较,以显示相关的上下文。通过动态调整历史记录和检索的融合,系统可以保持专注,而不会丢失早期交互中的关键细节。