本指南将介绍如何为 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` 装饰器包装它,以启用热重载(插件代码的更改无需重新启动应用程序即可生效)。
基于类的插件提供了更大的灵活性和更好的结构化方法。它们应继承自 `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` 类用于定义插件参数的属性。它包括:
来源: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 请求(并行处理多个项目)
来源:crazy_functions/crazy_utils.py68-163 crazy_functions/crazy_utils.py187-355
处理可能超出令牌限制的长文本时
来源:crazy_functions/crazy_utils.py7-66
这是一个翻译 PDF 文档的基于类的插件的简化示例
来源:crazy_functions/PDF_Translate_Wrap.py1-33
要测试插件,您可以使用 `tests/test_plugins.py` 中提供的测试框架。
线程安全:请记住,插件执行发生在单独的线程中。避免使用可能同时被多个线程访问的类变量。
用户反馈:使用 `yield` 模式定期提供 UI 更新,以让用户了解进度。
错误处理:实现适当的错误处理,以防止崩溃并向用户提供有意义的错误消息。
文档:添加清晰的描述和参数说明,以帮助用户理解插件的功能。
资源管理:注意 LLM 令牌使用情况,并为长文本实现输入截断。
热重载:始终使用 `HotReload` 装饰器包装基于函数的插件,以在不重新启动的情况下启用代码更改。
参数验证:验证用户输入,以防止意外行为。
使用辅助函数:利用 `crazy_utils.py` 中的辅助函数来处理常见任务。
遵循这些指南,您可以创建强大且用户友好的插件,以扩展 GPT Academic 框架的功能。