菜单

插件系统

相关源文件

介绍

GPT Academic 插件系统提供了一个灵活的框架,用于扩展应用程序的核心功能并添加自定义功能。本文档涵盖了插件的架构、注册、执行和开发。有关托管这些插件的核心系统的信息,请参阅 核心系统

插件系统允许开发人员在不修改核心代码的情况下为 GPT Academic 添加新功能,并利用大型语言模型来完成代码分析、文档翻译和交互式功能等任务。

来源: crazy_functional.py1-4

插件架构

来源: crazy_functional.py5-733

插件注册

插件系统在 crazy_functional.py 中实现了注册表模式。 get_crazy_functions() 函数作为中央注册表,用于创建并返回所有可用插件的字典。每个插件都注册有元数据,定义了其行为和在 UI 中的显示方式。

来源: crazy_functional.py5-733

插件元数据结构

每个插件都定义为 function_plugins 字典中的一个条目,结构如下:

元数据字段类型描述默认
分组字符串用于 UI 组织分类(例如,“编程”、“学术”、“对话”)"对话"
颜色字符串UI 颜色方案"secondary"
AsButton布尔值是否显示为按钮True
Info字符串在 UI 中显示的描述None
功能功能处理函数或热重载包装器None
用于基于类的插件None
AdvancedArgs布尔值是否显示高级参数输入
ArgsReminder字符串高级参数的提示文本None

默认值在 crazy_functional.py 的第 723-731 行应用。

示例插件注册

来源: crazy_functional.py69-75 crazy_functional.py722-731

插件类型

GPT Academic 插件系统支持两种类型的插件:

基于函数的插件

基于函数的插件是使用 HotReload 工具包装的简单 Python 函数。这种方法允许在不重新启动应用程序的情况下应用代码更改。

示例

来源: crazy_functional.py97-103

基于类的插件

基于类的插件提供了更多的结构,通常继承自基模板类。这些插件可以定义 UI 组件,并且可以更好地分离关注点。

示例

来源: crazy_functional.py227-234

插件执行流程

来源: crazy_functional.py54-382 crazy_utils.py68-164

插件 UI 集成

插件根据其元数据集成到 UI 中

  1. AsButton:确定插件显示为按钮还是下拉菜单
  2. Group:将插件组织到类别中
  3. Color:设置视觉样式
  4. Info:提供悬停时显示的描述

当触发插件时,系统会处理输入并执行插件函数或类方法。对于需要 LLM 处理的插件,系统会使用 request_gpt_model_in_new_thread_with_ui_alive 等实用函数来管理与 LLM 的交互,同时保持 UI 的响应性。

来源: crazy_functional.py722-731

插件开发实用工具

GPT Academic 提供了一些实用工具来协助插件开发人员

令牌管理

crazy_utils.py 中的 input_clipping 函数处理输入超出 LLM 模型令牌限制的情况,通过智能地修剪输入来尽可能多地保留有用内容。

来源: crazy_utils.py7-66

多线程 LLM 请求

对于需要并行处理多个输入的插件,request_gpt_model_multi_threads_with_very_awesome_ui_and_high_efficiency 函数提供了一种高性能解决方案,并带有实时 UI 更新。

来源: crazy_utils.py187-355

热重载

HotReload 工具允许插件代码在不重启应用程序的情况下进行修改和生效,从而方便了快速开发和测试。

来源: crazy_functional.py1

插件开发指南

创建基本插件

创建新插件的步骤如下:

  1. crazy_functions 包下的适当模块中创建一个函数
  2. get_crazy_functions() 中注册该函数,并提供适当的元数据
  3. 为了开发方便,将函数包装在 HotReload

示例骨架

然后注册它

创建高级类插件

对于更复杂的插件,创建继承自模板类的类可以提供更好的结构

  1. 定义一个带有适当方法的类
  2. get_crazy_functions() 中注册该类

示例注册

复用按钮功能

插件系统还通过 get_multiplex_button_functions() 函数支持多用途主提交按钮,该函数将用户界面选择映射到特定插件。

来源: crazy_functional.py737-755

插件类型示例

学术插件

学术插件侧重于论文翻译、摘要和 LaTeX 处理等任务

来源: crazy_functional.py112-119

编程插件

编程插件协助代码分析、文档编写和项目理解

来源: crazy_functional.py69-75

对话插件

对话插件通过保存对话和联网响应等功能来增强聊天体验

来源: crazy_functional.py242-249

错误处理和插件健壮性

插件系统包含错误处理机制以确保健壮性

  1. 每个插件都加载在一个 try-except 块中,以防止单个失败的插件影响整个系统
  2. request_gpt_model_in_new_thread_with_ui_alive 这样的实用函数包含重试逻辑,用于处理网络错误或令牌限制问题
  3. 系统在发生错误时向用户提供视觉反馈

来源: crazy_functional.py419-456 crazy_utils.py102-147

结论

GPT Academic 插件系统提供了一种灵活强大的方法来扩展应用程序的核心功能。通过遵循现有插件中建立的模式,开发人员可以创建利用大型语言模型进行广泛任务的新插件。

有关特定插件实现及其功能的信息,请参阅 插件 部分。