菜单

交互功能

相关源文件

GPT Academic 提供了一系列丰富的交互式功能,使用户能够以动态、有状态的方式与语言模型互动,超越了基本的文本生成。这些功能包括游戏、图像生成能力、插件调用系统以及配置修改工具。

本文档涵盖了这些交互式功能的实现和架构,重点介绍了它们如何维护状态、处理用户输入以及在多次交互中生成响应。

状态管理架构

GPT Academic 中的交互式功能建立在共享状态管理架构之上,该架构支持复杂的多轮交互。该架构围绕几个关键组件展开:

  1. 状态管理类 - 扩展 GptAcademicGameBaseStateGptAcademicState 以管理交互状态的类。
  2. 基于 Cookie 的状态持久化 - 状态存储在 chatbot._cookies 对象中。
  3. 结构化 LLM 交互 - 使用 GptJsonIO 类从 LLM 响应中提取结构化数据。

图示:交互式功能架构

该图展示了如何使用 GptAcademicGameBaseStateGptAcademicState 类实现交互式功能。状态存储在 chatbot._cookies 对象中,从而在多次交互中实现状态持久化。

来源

  • [crazy_functions/multi_stage/multi_stage_utils.py]
  • [crazy_functions/vt_fns/vt_state.py]
  • [crazy_functions/json_fns/pydantic_io.py]

交互式游戏

GPT Academic 包含演示语言模型创意能力的游戏,同时为用户提供娱乐价值。

互动故事游戏

互动故事游戏允许用户与语言模型协作创作故事。系统提供故事发展的主题和选项,用户可以选择或建议叙事方向。

图示:互动故事游戏流程

该图展示了互动故事游戏的流程。它从一个随机的故事开头开始,并将其呈现给用户。然后,用户选择一个方向,系统根据该选择生成下一部分。每个故事部分都可以伴随使用 DALL-E 集成自动生成的图像。

来源

  • [crazy_functions/game_fns/game_interactive_story.py]
  • [crazy_functions/Image_Generate.py:gen_image]

ASCII 艺术游戏

ASCII 艺术游戏是一个功能,系统在此生成 ASCII 艺术,用户尝试猜测该艺术代表什么。它展示了模型仅使用文本字符创建可识别模式的能力。

图示:ASCII 艺术游戏实现

游戏选择一个随机对象,生成代表该对象的 ASCII 艺术,并将其呈现给用户。然后,用户尝试猜测该对象是什么。游戏使用 is_same_thing 来语义上比较用户的猜测与目标对象,允许语言的细微差别或同义词。

来源

  • [crazy_functions/game_fns/game_ascii_art.py]
  • [crazy_functions/game_fns/game_utils.py]

图像生成

GPT Academic 提供使用 OpenAI 的 DALL-E 模型生成和编辑图像的功能。这些功能允许用户根据文本描述创建视觉内容或修改现有图像。

图示:图像生成系统

该图说明了 GPT Academic 中的图像生成系统。 ImageGen_Wrap 类提供了一个用户界面,用于选择模型和配置选项。根据所选模型,它会调用 图片生成_DALLE2图片生成_DALLE3。这两个函数都使用 gen_image 来构建 API 请求,将其发送到 DALL-E API,下载生成的图像,并将其本地保存。

DALL-E 3 支持其他质量和样式选项,在选择该模型时会包含在 API 请求中。

来源

  • [crazy_functions/Image_Generate_Wrap.py]
  • [crazy_functions/Image_Generate.py]

图像编辑

GPT Academic 还支持使用 DALL-E 2 进行图像编辑。此功能允许用户上传图像,指定修改提示,并生成图像的修改版本。

图示:图像编辑系统

图片修改_DALLE2 函数使用 ImageEditState 类来收集必要的输入:图像文件、分辨率和编辑提示。一旦收集到所有输入,它就会调用 edit_image 来处理图像,构建 API 请求,将其发送到 DALL-E API,下载生成的图像,并将其本地保存。

图像预处理步骤对于与 DALL-E API 的兼容性至关重要。系统使图像透明(以便白色区域被解释为需要修改的区域),确保图像为正方形(API 要求),并将其调整到适当的尺寸。

来源

  • [crazy_functions/Image_Generate.py:ImageEditState]
  • [crazy_functions/Image_Generate.py:edit_image]

插件调用系统

GPT Academic 包含一个根据用户输入动态调用插件的功能。这允许系统分析用户请求并自动选择和执行最合适的插件。

图示:插件调用系统

系统读取可用插件,使用语言模型根据用户请求选择最合适的插件,提取插件的参数,然后用这些参数执行插件。

一个值得注意的功能是与文件上传系统的集成。如果用户最近上传了文件,系统会将该文件的信息包含在用于参数提取的提示中,允许插件使用上传的文件作为输入。

来源

  • [crazy_functions/vt_fns/vt_call_plugin.py]
  • [crazy_functions/json_fns/pydantic_io.py]

配置修改

GPT Academic 提供交互式修改系统配置的功能,允许用户在不直接编辑配置文件的情况下调整设置。

图示:配置修改系统

系统首先通过 ALLOW_RESET_CONFIG 设置检查是否允许配置修改。如果允许,它会从 config.__dict__ 读取可用的配置选项,创建这些选项的枚举,并为配置意图定义一个 Pydantic 类。然后,它使用 GptJsonIO 来分析用户请求并提取配置键和新值。

配置键必须在用户请求中明确提及的要求,是一种安全措施,可以防止系统修改用户未明确提及的配置设置。

来源

  • [crazy_functions/vt_fns/vt_modify_config.py]
  • [crazy_functions/json_fns/pydantic_io.py]

GptJsonIO:结构化 LLM 交互

GPT Academic 中许多交互式功能的核心是 GptJsonIO 类,它提供了一种结构化的方式来与语言模型进行交互,以进行信息提取和决策。

图示:GptJsonIO 系统

交互式功能为需要从语言模型响应中提取的数据定义 Pydantic 模型。 GptJsonIO 类根据这些模型生成格式说明,这些说明会包含在发送给语言模型的提示中。然后,该类从响应中提取 JSON,将其解析为 Python 对象,根据 Pydantic 模型进行验证,并返回一个结构化的数据对象。

如果 JSON 解析或验证过程中出现错误,generate_output_auto_repair 方法可以通过生成一个包含损坏的 JSON 和错误消息的新提示来尝试修复 JSON。这种修复过程使与语言模型的结构化交互更加健壮,能够处理模型生成格式错误的 JSON 的情况。

来源

  • [crazy_functions/json_fns/pydantic_io.py]

结论

GPT Academic 中的交互式功能提供了一套丰富的工具,用于以创意和实用的方式与语言模型互动。通过利用通用的状态管理和结构化交互架构,这些功能为用户提供了无缝且一致的体验。

从协作讲故事到图像生成,从 ASCII 艺术游戏到动态插件调用,这些功能展示了 GPT Academic 系统的多功能性和强大功能,同时为用户提供了有价值的功能。

该实现展示了深思熟虑的设计原则,重点关注可维护性、一致性和健壮性。状态管理类、通过 GptJsonIO 进行的结构化 LLM 交互以及模块化架构的使用,共同构成了一个强大而灵活的系统。