首页
/ GPT Academic 虚空终端(Void Terminal):用自然语言驾驭全部插件的意图调度系统详解

GPT Academic 虚空终端(Void Terminal):用自然语言驾驭全部插件的意图调度系统详解

2026-09-04 19:11:42作者:蔡丛锟

虚空终端是 GPT Academic 中的智能调度入口:您无需记住上百个插件按钮的名称和参数格式,只需用自然语言描述需求,系统就会自动完成「意图识别 → 插件选择 → 参数提取 → 任务执行」的完整链路。本文以 虚空终端官方文档 为主体,结合 主入口实现vt_fns 调度模块的源码,完整讲清它的使用方式、三类意图的分发机制、与上传文件的自动关联,以及配置修改的安全边界。

一、它在项目中的位置:一个特殊的"元插件"

与普通的函数插件按钮不同,虚空终端本身不调用任何具体功能,而是充当整个插件体系的"调度总机"。从 插件注册表 可以看到它的注册信息:

"虚空终端": {
    "Group": "对话|编程|学术|智能体",
    "Color": "stop",
    "AsButton": True,
    "Info": "使用自然语言实现您的想法",
    "Function": HotReload(Void_Terminal),
},
  • "AsButton": True:它固定显示在界面的函数插件按钮区(通常位于显眼位置),同时也可以在插件下拉菜单中找到;
  • "Group": "对话|编程|学术|智能体":横跨多个功能分组,暗示它是面向全部功能的统一入口;
  • 函数被 HotReload 包装:源码实现 被修改后无需重启即可热加载生效。

其入口函数 Void_Terminal 定义在 crazy_functions/Void_Terminal.py。值得注意的是,模块文件顶部的 docstring 本身就是一份使用说明书(L1-L22),列举了 PDF 论文翻译、Arxiv 论文翻译、图片生成、README 翻译、配置修改等示例指令,与本文后面"实用示例"一一对应。

二、核心能力:三类意图的识别与分发

虚空终端的设计理念是"用自然语言驾驭所有功能"。它通过语言模型分析输入,识别出三类意图并执行相应操作(摘自官方文档):

意图类型 触发场景 系统行为 源码中对应的枚举值
调用插件 描述需要完成的任务 自动选择并执行匹配的插件 ExecutePlugin
修改配置 表达配置更改需求 修改系统设置并提示重启 ModifyConfiguration
聊天对话 提出普通问题 像普通聊天一样回答问题 Chat

举例来说,当您输入"帮我把这篇 Arxiv 论文翻译成中文,论文 ID 是 2301.00234"时,虚空终端会识别这是一个翻译任务,自动调用 Arxiv 论文翻译插件,并将论文 ID 作为参数传递给插件执行。整个过程无需手动查找插件或填写参数。

这三分法在源码中对应一个 Pydantic 模型(Void_Terminal.py L60-L64):

class UserIntention(BaseModel):
    user_prompt: str = Field(description="the content of user input", default="")
    intention_type: str = Field(
        description="the type of user intention, choose from ['ModifyConfiguration', 'ExecutePlugin', 'Chat']",
        default="ExecutePlugin")
    user_provide_file: bool = Field(description="whether the user provides a path to a file", default=False)
    user_provide_url: bool = Field(description="whether the user provides a url", default=False)

意图识别采用"关键词优先、模型兜底"的两级策略,这一点直接影响您的使用体验:

第一级:硬编码关键词规则。 analyze_intention_with_simple_rules 会直接扫描输入文本,命中以下三个关键词之一即视为意图明确,跳过模型分析:

意图 源码硬编码关键词 文档推荐关键词
调用插件 用插件 "用插件"、"调用插件"
修改配置 修改配置 "修改配置"、"更换主题"
聊天对话 请问 "请问"、"什么是"

从源码结构看,只有 用插件 被硬编码,文档推荐词中的 调用插件更换主题什么是 等表述走的是第二级的模型分析路径。因此在使用较弱模型时,尽量使用上表左列的精确关键词可以显著提高识别准确率。

第二级:LLM 结构化分析。 当关键词未命中时,主路由函数 会构造一段"意图分析"提示词,要求当前选用的语言模型从 ['ModifyConfiguration', 'ExecutePlugin', 'Chat'] 中选择一个,并通过 GptJsonIO 将模型回复解析、自动修复为 UserIntention 对象。解析失败时会得到您熟悉的提示:"当前语言模型({模型名})不能理解您的意图"——这正是 FAQ 中对应问题 的出处。

三、基本使用

启动虚空终端

在界面的函数插件区域找到 虚空终端 按钮并点击。由于它是一个常用功能(注册时 AsButton: True),通常会显示在按钮区的显眼位置,也可以在插件下拉菜单中找到。

首次点击时,系统会显示使用说明,介绍虚空终端的能力和使用方法。这一行为在源码中由状态机制实现:VoidTerminalState 通过 chatbot._cookies 里的 plugin_state 记录是否已向用户展示过说明(has_provided_explanation),并且在首次展示期间调用 lock_plugin 锁定插件,防止误触发。当输入命中明确关键词(is_certain)或说明已展示过时,入口函数unlock_plugin 并直接进入 Void_Terminal主路由。因此,阅读完说明后,在输入框中再次提交您的需求即可开始使用。

表达您的需求

使用虚空终端最重要的是清晰地表达您想要做什么。您可以用自然、口语化的方式描述任务,就像在和一个了解这个项目所有功能的助手交流。以下是文档给出的有效表达方式:

论文翻译类任务

请调用插件翻译这篇 Arxiv 论文,论文 ID 是 1812.10695
帮我把上传的 PDF 论文翻译成中文

代码处理类任务

用插件分析一下这个 Python 项目的代码结构,代码我已经上传了
请解析 /home/user/my_project 这个文件夹里的代码

其他任务

用插件生成一张图片,图中有一片开满鲜花的草地
帮我翻译这个 README 文件,GitHub 地址是 https://github.com/example/repo

意图识别提示词

为了让虚空终端更准确地理解意图,可以在描述中加入关键词(如"用插件"、"修改配置"、"请问")。加入这些关键词后系统会走第一级规则识别,直接命中意图;即使不加入,系统也会尽力通过模型理解意图,但使用较弱模型时,关键词能显著提高识别准确率。

四、插件调度的完整链路(ExecutePlugin 路径源码解析)

这是虚空终端最核心的路径,实现在 vt_call_plugin.pyexecute_plugin 函数中,分三步完成:

1. 构建插件清单并让模型选择插件

read_avail_plugin_enum 从插件注册表动态读取当前所有可用插件,过滤掉缺少说明的条目后,为每个插件生成编号(F_0001F_0002…),并把插件说明(Info 字段)整理成 JSON 注入提示词:

plugin_arr = get_crazy_functions()
# remove plugins with out explanation
plugin_arr = {k: v for k, v in plugin_arr.items() if ('Info' in v) and ('Function' in v)}
plugin_arr_info = {"F_{:04d}".format(i): v["Info"] for i, v in enumerate(plugin_arr.values(), start=1)}

随后通过 GptJsonIO(Plugin) 要求模型输出 {"plugin_selection": "F_1234", "reason_of_selection": "..."}。模型必须从清单中选择一个真实存在的插件编号,否则系统会提示"找不到合适插件执行该任务"并终止——这是对幻觉调用的防御。

2. 从自然语言中提取插件参数

选中插件后,系统会进行第二轮模型调用(PluginExplicit 模型,L94-L105),把该插件的 Info 说明与您的原始描述一起交给模型,提取出 plugin_arg(如论文 ID、文件路径等)。这就是为什么"论文 ID 是 2301.00234"这类细节能自动流入插件参数,而不需要您手动填写。

3. 执行插件

执行前界面会明确告知:"{模型名}为您选择了插件:{插件名}、插件说明、插件参数,假如偏离了您的要求,按停止键终止"。然后以提取出的参数调用插件函数,执行过程和结果实时显示在对话区。

五、配合文件使用:上传文件的自动关联

虚空终端的强大之处在于它能够自动关联您上传的文件——这一点并非仅靠"约定",而是有明确源码支撑:

  • have_any_recent_upload_files 检查 chatbot._cookies 中记录的最近上传时间,5 分钟窗口内的上传视为"有效";
  • get_recent_file_prompt_support 会把上传文件路径追加进提示词:"…the user has recently uploaded a file, located at: {path}",让模型在提取插件参数时优先考虑该路径;
  • 入口处还会通过 is_the_upload_folder(txt) 检测您是否刚提交了上传区的路径,并回复"很好,您已经上传了文件,现在请您描述您的需求"。

标准流程

  1. 将需要处理的文件拖拽到上传区域
  2. 等待上传完成,对话区会显示确认消息
  3. 点击虚空终端按钮
  4. 在输入框中描述您的需求(无需手动输入文件路径)
  5. 提交并等待任务完成

直接指定路径

您也可以在描述中直接指定本地文件或文件夹的路径:

用插件分析 /home/user/projects/my_app 这个目录下的 Python 代码

这种方式适合处理本地已有的项目,无需先打包上传。

六、修改系统配置(ModifyConfiguration 路径与安全开关)

当您希望更改 GPT Academic 的界面风格时,可以通过自然语言操作:

修改配置,把主题 THEME 更换为 High-Contrast

该路径的实现在 vt_modify_config.py,流程与安全性值得特别注意:

  1. 安全总开关修改入口 首先检查 ALLOW_RESET_CONFIG。该开关在 config.py 中默认关闭(ALLOW_RESET_CONFIG = False),且 配置参考文档 也标注其"具有安全风险"。未开启时,系统会直接回复"当前配置不允许被修改!如需激活本功能,请在 config.py 中设置 ALLOW_RESET_CONFIG=True 后重启软件"。
  2. 枚举可配置项modify_configuration_hot 通过反射读取 config 模块的全部顶层变量名,构建成 ConfigOptions 枚举供模型选择,因此"能改什么"以 config.py 实际暴露的变量为准。
  3. 防幻觉校验:模型解析出的配置项名必须逐字出现在您的原始输入中ok = (explicit_conf in txt)),否则拒绝修改并提示"您需要明确说明并在指令中提到它"。
  4. 应用与重启:校验通过后调用 set_conf(配置名, 新值) 写入;modify_configuration_reboot 路径还会在提示"五秒后即将重启"后,通过 os.execl 以相同参数重新启动整个应用(L81),使更改真正生效。

!!! warning 配置修改风险 配置修改功能默认是关闭的(ALLOW_RESET_CONFIG = False)。如需启用,请在 config.py 中设置 ALLOW_RESET_CONFIG = True 后重启。启用后请谨慎使用,避免误操作。

七、实用示例

翻译 Arxiv 论文

当您需要翻译一篇 Arxiv 上的论文时,只需告诉虚空终端论文的 ID:

把 Arxiv 论文翻译成中文,论文 ID 是 2301.00234,记得用插件!

虚空终端会识别这是一个论文翻译任务,自动调用"Arxiv论文翻译"插件。您可以在对话区看到任务执行的进度,翻译完成后下载区会出现生成的 PDF 文件。

分析上传的代码项目

如果您想分析一个代码项目,先将项目打包成 ZIP 文件并上传到文件上传区。上传完成后,输入:

请调用插件解析这个 Python 源代码项目,代码我刚刚打包上传了

虚空终端会找到"解析整个Python项目"插件并执行(该插件同样注册在 插件注册表 中,说明为"解析一个Python项目的所有源文件(.py) | 输入参数为路径")。分析完成后,您将得到项目的整体架构说明、各文件功能概述,以及文件关系的可视化图表。

修改系统配置

见上一节示例:修改配置,把主题 THEME 更换为 High-Contrast。前提是在 config.py 中开启 ALLOW_RESET_CONFIG

普通问答对话

如果您只是想问一个问题而不需要调用任何插件,虚空终端同样可以处理:

请问 Attention 机制的计算过程是怎样的?

系统识别到"请问"关键词后,会以普通对话模式回答您的问题(走 chat 函数 的普通 LLM 对话通道),而不会尝试调用任何插件。

八、工作原理:三阶段调度

虚空终端的运作分为三个阶段(与源码执行顺序完全对应):

  1. 意图分析:系统使用当前选择的语言模型分析输入,判断属于"调用插件"、"修改配置"还是"聊天对话"中的哪一类。包含明确关键词(如"用插件")的输入直接走规则识别;模糊表达则依赖模型 + JSON 结构化解析(UserIntention)完成判断。
  2. 任务路由主路由 根据意图类型分发到对应模块——ModifyConfigurationmodify_configuration_rebootExecutePluginexecute_pluginChat → 普通对话。插件路径下还会进一步分析具体调用哪个插件,并从输入中提取参数(论文 ID、文件路径等)。
  3. 执行反馈:选定的插件或功能开始执行,执行过程和结果实时显示在对话区;文件处理类任务生成的文件会出现在下载区。

九、使用技巧与常见问题

使用技巧

  • 选择合适的模型:意图识别能力与所选模型直接相关。文档模块说明中建议"GPT3.5 或更强的模型,弱模型可能无法理解您的想法"(见 Void_Terminal.py L40)。GPT-4 级别的模型能准确理解各种表达方式;识别不准时,切换到更强的模型或加入关键词。
  • 描述要具体:越具体理解越准确。"帮我翻译论文"不如"用插件把这篇 Arxiv 论文翻译成中文,论文 ID 是 xxxx"精确。
  • 善用关键词:不确定系统能否正确理解时,主动加入"用插件"、"请问"等关键词可以避免误判(左列关键词命中规则识别,见第二节)。
  • 查看插件菜单:不确定某项任务是否有对应插件时,先展开插件下拉菜单浏览可用功能(菜单与 read_avail_plugin_enum 读取的是同一份注册表),了解项目能力后再用自然语言描述会更有的放矢。

常见问题

虚空终端总是无法理解我的意图? 通常与模型能力有关。请尝试:1. 切换到更强的模型(如 GPT-4o);2. 在描述中加入明确的意图关键词;3. 使用更简洁、直接的表达方式。

我想调用插件,但系统却开始聊天了? 系统可能将输入理解为普通问题。解决方法是在描述中明确加入"用插件"或"调用插件"关键词。

提示"当前语言模型不能理解您的意图"? 这表示模型的结构化输出(意图 JSON)解析失败。可能原因:模型能力较弱、无法完成意图分析,或描述过于复杂/模糊。尝试简化表达或切换到更强的模型。

虚空终端和直接点击插件按钮有什么区别? 功能上没有区别,最终都是执行相同的插件代码(execute_plugin 末尾就是直接调用插件函数)。虚空终端的优势在于:无需记忆插件名称和位置;可以用自然语言组合多种需求;交互方式更符合对话直觉。

十、延伸阅读

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
528
588
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
906
1.83 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
docsdocs
暂无描述
Markdown
891
5.79 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.53 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.34 K
1.45 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
988
506
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384