菜单

对话管理

相关源文件

本文档描述了 Open Interpreter 如何管理对话历史,包括对话的存储、导航和恢复。对话管理系统允许用户保存、浏览和恢复他们与解释器的交互。

有关消息渲染和显示格式的信息,请参阅Markdown 渲染和显示

概述

Open Interpreter 的对话管理系统由三个主要组件组成

  1. 存储机制 - 将对话保存为 JSON 文件
  2. 对话导航器 - 用于浏览和加载过去对话的终端界面
  3. 对话渲染器 - 在终端中显示已加载的对话

来源:interpreter/terminal_interface/conversation_navigator.py16-91

对话存储

Open Interpreter 中的对话以 JSON 文件的形式存储在特定于平台的本地存储目录中。每个文件包含完整的消息历史记录,包括用户输入、助手响应、代码块和执行输出。

存储位置

存储路径由 get_storage_path("conversations") 函数确定,该函数返回一个特定于平台的位置

文件名格式

对话文件名根据对话内容和日期派生

  • 对话的前几个词,后跟日期
  • 词语之间用下划线分隔
  • 示例:Hello_world_program__September_23rd.json

在导航器中显示时,这些文件名会被重新格式化以便更易读

  • 示例:Hello world program... (September 23rd)

来源:interpreter/terminal_interface/conversation_navigator.py19-50

对话导航器

对话导航器是一个终端界面组件,允许用户浏览和恢复过去的对话。它在 conversation_navigator() 函数中实现。

来源:interpreter/terminal_interface/conversation_navigator.py16-91

关键组件

  1. 文件列表:按修改时间(最新优先)检索并排序 JSON 文件
  2. 名称格式化:将文件名转换为可读格式以供显示
  3. 选择界面:使用 inquirer 提供交互式选择菜单
  4. 文件夹访问:提供直接打开对话文件夹的选项
  5. 对话加载:加载选定的对话并更新解释器

来源:interpreter/terminal_interface/conversation_navigator.py29-91

渲染过去的对话

加载对话后,它会使用 render_past_conversation() 函数在终端中渲染,该函数将

  1. 处理对话历史中的每条消息
  2. 将用户消息渲染为以 ">" 为前缀的纯文本
  3. 使用 MessageBlock 组件渲染助手消息
  4. 使用 CodeBlock 组件渲染代码及其输出

来源:interpreter/terminal_interface/render_past_conversation.py11-69 interpreter/terminal_interface/components/message_block.py10-29

消息渲染过程

渲染器处理消息历史中的每个数据块

  1. 用户消息:显示为带有 ">" 前缀的纯文本
  2. 助手消息:在 MessageBlock 中使用 Markdown 格式渲染
  3. 代码块:在 CodeBlock 中使用语法高亮渲染
  4. 控制台输出:添加到关联的 CodeBlock

对于特殊的格式考量,系统会转换 Markdown 中的代码块,以确保它们在视觉上与可执行代码块有所区别。

来源:interpreter/terminal_interface/render_past_conversation.py11-69 interpreter/terminal_interface/components/message_block.py31-49

与解释器的集成

对话管理系统通过以下方式与核心解释器集成

  1. 消息历史记录:使用加载的对话数据更新解释器的 messages 列表
  2. 文件名跟踪:设置 conversation_filename 属性以跟踪当前对话文件
  3. 聊天恢复:调用解释器的 chat() 方法以继续对话

来源:interpreter/terminal_interface/conversation_navigator.py79-91

使用示例

在终端界面访问对话导航器

  1. 启动 Open Interpreter
  2. 使用适当的命令访问对话历史(这因界面而异)
  3. 从列表中浏览并选择一个对话
  4. 从上次中断的地方继续对话

加载对话后,终端将显示整个历史记录,然后允许您继续交互。

来源:interpreter/terminal_interface/conversation_navigator.py16-91