菜单

插件开发

相关源文件

本指南将介绍如何为 GPT Academic 框架开发插件。插件可以扩展系统的核心功能,允许您添加与 LLM 功能集成的自定义功能。该框架同时支持基于函数的插件(旧方法)和基于类的插件(推荐新开发使用)。

有关使用现有插件的信息,请参阅 核心插件。有关特定学术插件的详细信息,请参阅 学术插件

插件系统概述

GPT Academic 插件系统提供了一种灵活的方式来扩展应用程序的功能。插件在 UI 中显示为按钮或下拉菜单选项,可以执行各种操作,从简单的文本转换到涉及 LLM 调用的复杂多步处理。

来源:crazy_functional.py5-733 themes/gui_advanced_plugin_class.py1-57

插件注册

所有插件在使用前都必须在系统中注册。这发生在 `crazy_functional.py` 中的 `get_crazy_functions()` 函数内。

插件注册结构

插件在字典中注册,其中每个键是插件名称(显示给用户),值是一个包含以下属性的元数据字典:

属性描述必填
分组用于对插件进行分组的类别(例如,“学术”、“编程”)
颜色按钮颜色
AsButton是否显示为按钮(True)或在下拉菜单中显示(False)
Info鼠标悬停时显示的描述文本
功能指向基于函数的插件实现的引用对于基于函数的插件
指向基于类的插件实现的引用对于基于类的插件
AdvancedArgs插件是否接受高级参数否(默认为 False)
ArgsReminder显示在高级参数输入区域的文本仅当 AdvancedArgs 为 True 时

来源:crazy_functional.py54-381 crazy_functional.py722-730

注册示例

插件在系统中注册的方式如下

来源:crazy_functional.py370-381 crazy_functional.py722-730

创建插件

基于函数的插件(旧方法)

基于函数的插件是更简单、更旧的实现方式。每个插件都实现为一个具有特定签名的 Python 函数。

在注册基于函数的插件时,请使用 `HotReload` 装饰器包装它,以启用热重载(插件代码的更改无需重新启动应用程序即可生效)。

来源:crazy_functional.py1-2

基于类的插件提供了更大的灵活性和更好的结构化方法。它们应继承自 `GptAcademicPluginTemplate`。

来源:crazy_functions/plugin_template/plugin_class_template.py1-52 crazy_functions/PDF_Translate_Wrap.py1-33

插件模板结构

`GptAcademicPluginTemplate` 类为基于类的插件提供了基础。

来源:crazy_functions/plugin_template/plugin_class_template.py6-52

参数属性

`ArgProperty` 类用于定义插件参数的属性。它包括:

  • `title`:参数的显示名称
  • `description`:参数的说明
  • `default_value`:初始值
  • `type`:输入类型('string' 或 'dropdown')
  • `options`:下拉菜单类型的选项列表

来源:crazy_functions/plugin_template/plugin_class_template.py6-11

插件执行流程

当用户点击插件按钮或从下拉菜单中选择时,会发生以下顺序:

来源:themes/gui_advanced_plugin_class.py33-54 crazy_functions/crazy_utils.py68-163

使用辅助函数

GPT Academic 提供了一些辅助函数来帮助完成常见的插件任务。

进行 LLM 请求

在插件中进行简单的 LLM 请求

进行多线程 LLM 请求(并行处理多个项目)

来源:crazy_functions/crazy_utils.py68-163 crazy_functions/crazy_utils.py187-355

输入截断

处理可能超出令牌限制的长文本时

来源:crazy_functions/crazy_utils.py7-66

示例插件:PDF 翻译器

这是一个翻译 PDF 文档的基于类的插件的简化示例

来源:crazy_functions/PDF_Translate_Wrap.py1-33

测试插件

要测试插件,您可以使用 `tests/test_plugins.py` 中提供的测试框架。

来源:tests/test_plugins.py1-66

最佳实践

  1. 线程安全:请记住,插件执行发生在单独的线程中。避免使用可能同时被多个线程访问的类变量。

  2. 用户反馈:使用 `yield` 模式定期提供 UI 更新,以让用户了解进度。

  3. 错误处理:实现适当的错误处理,以防止崩溃并向用户提供有意义的错误消息。

  4. 文档:添加清晰的描述和参数说明,以帮助用户理解插件的功能。

  5. 资源管理:注意 LLM 令牌使用情况,并为长文本实现输入截断。

  6. 热重载:始终使用 `HotReload` 装饰器包装基于函数的插件,以在不重新启动的情况下启用代码更改。

  7. 参数验证:验证用户输入,以防止意外行为。

  8. 使用辅助函数:利用 `crazy_utils.py` 中的辅助函数来处理常见任务。

遵循这些指南,您可以创建强大且用户友好的插件,以扩展 GPT Academic 框架的功能。