GPT Academic 插件系统提供了一个灵活的框架,用于扩展应用程序的核心功能并添加自定义功能。本文档涵盖了插件的架构、注册、执行和开发。有关托管这些插件的核心系统的信息,请参阅 核心系统。
插件系统允许开发人员在不修改核心代码的情况下为 GPT Academic 添加新功能,并利用大型语言模型来完成代码分析、文档翻译和交互式功能等任务。
插件系统在 crazy_functional.py 中实现了注册表模式。 get_crazy_functions() 函数作为中央注册表,用于创建并返回所有可用插件的字典。每个插件都注册有元数据,定义了其行为和在 UI 中的显示方式。
每个插件都定义为 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 函数。这种方法允许在不重新启动应用程序的情况下应用代码更改。
示例
基于类的插件提供了更多的结构,通常继承自基模板类。这些插件可以定义 UI 组件,并且可以更好地分离关注点。
示例
来源: crazy_functional.py227-234
来源: crazy_functional.py54-382 crazy_utils.py68-164
插件根据其元数据集成到 UI 中
AsButton:确定插件显示为按钮还是下拉菜单Group:将插件组织到类别中Color:设置视觉样式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 模型令牌限制的情况,通过智能地修剪输入来尽可能多地保留有用内容。
对于需要并行处理多个输入的插件,request_gpt_model_multi_threads_with_very_awesome_ui_and_high_efficiency 函数提供了一种高性能解决方案,并带有实时 UI 更新。
HotReload 工具允许插件代码在不重启应用程序的情况下进行修改和生效,从而方便了快速开发和测试。
创建新插件的步骤如下:
crazy_functions 包下的适当模块中创建一个函数get_crazy_functions() 中注册该函数,并提供适当的元数据HotReload 中示例骨架
然后注册它
对于更复杂的插件,创建继承自模板类的类可以提供更好的结构
get_crazy_functions() 中注册该类示例注册
插件系统还通过 get_multiplex_button_functions() 函数支持多用途主提交按钮,该函数将用户界面选择映射到特定插件。
来源: crazy_functional.py737-755
学术插件侧重于论文翻译、摘要和 LaTeX 处理等任务
来源: crazy_functional.py112-119
编程插件协助代码分析、文档编写和项目理解
对话插件通过保存对话和联网响应等功能来增强聊天体验
来源: crazy_functional.py242-249
插件系统包含错误处理机制以确保健壮性
request_gpt_model_in_new_thread_with_ui_alive 这样的实用函数包含重试逻辑,用于处理网络错误或令牌限制问题来源: crazy_functional.py419-456 crazy_utils.py102-147
GPT Academic 插件系统提供了一种灵活强大的方法来扩展应用程序的核心功能。通过遵循现有插件中建立的模式,开发人员可以创建利用大型语言模型进行广泛任务的新插件。
有关特定插件实现及其功能的信息,请参阅 插件 部分。