GPT Academic 虚空终端(Void Terminal):用自然语言驾驭全部插件的意图调度系统详解
虚空终端是 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.py 的 execute_plugin 函数中,分三步完成:
1. 构建插件清单并让模型选择插件
read_avail_plugin_enum 从插件注册表动态读取当前所有可用插件,过滤掉缺少说明的条目后,为每个插件生成编号(F_0001、F_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)检测您是否刚提交了上传区的路径,并回复"很好,您已经上传了文件,现在请您描述您的需求"。
标准流程
- 将需要处理的文件拖拽到上传区域
- 等待上传完成,对话区会显示确认消息
- 点击虚空终端按钮
- 在输入框中描述您的需求(无需手动输入文件路径)
- 提交并等待任务完成
直接指定路径
您也可以在描述中直接指定本地文件或文件夹的路径:
用插件分析 /home/user/projects/my_app 这个目录下的 Python 代码
这种方式适合处理本地已有的项目,无需先打包上传。
六、修改系统配置(ModifyConfiguration 路径与安全开关)
当您希望更改 GPT Academic 的界面风格时,可以通过自然语言操作:
修改配置,把主题 THEME 更换为 High-Contrast
该路径的实现在 vt_modify_config.py,流程与安全性值得特别注意:
- 安全总开关:修改入口 首先检查
ALLOW_RESET_CONFIG。该开关在 config.py 中默认关闭(ALLOW_RESET_CONFIG = False),且 配置参考文档 也标注其"具有安全风险"。未开启时,系统会直接回复"当前配置不允许被修改!如需激活本功能,请在 config.py 中设置 ALLOW_RESET_CONFIG=True 后重启软件"。 - 枚举可配置项:modify_configuration_hot 通过反射读取
config模块的全部顶层变量名,构建成ConfigOptions枚举供模型选择,因此"能改什么"以 config.py 实际暴露的变量为准。 - 防幻觉校验:模型解析出的配置项名必须逐字出现在您的原始输入中(
ok = (explicit_conf in txt)),否则拒绝修改并提示"您需要明确说明并在指令中提到它"。 - 应用与重启:校验通过后调用
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 对话通道),而不会尝试调用任何插件。
八、工作原理:三阶段调度
虚空终端的运作分为三个阶段(与源码执行顺序完全对应):
- 意图分析:系统使用当前选择的语言模型分析输入,判断属于"调用插件"、"修改配置"还是"聊天对话"中的哪一类。包含明确关键词(如"用插件")的输入直接走规则识别;模糊表达则依赖模型 + JSON 结构化解析(
UserIntention)完成判断。 - 任务路由:主路由 根据意图类型分发到对应模块——
ModifyConfiguration→modify_configuration_reboot,ExecutePlugin→execute_plugin,Chat→ 普通对话。插件路径下还会进一步分析具体调用哪个插件,并从输入中提取参数(论文 ID、文件路径等)。 - 执行反馈:选定的插件或功能开始执行,执行过程和结果实时显示在对话区;文件处理类任务生成的文件会出现在下载区。
九、使用技巧与常见问题
使用技巧
- 选择合适的模型:意图识别能力与所选模型直接相关。文档模块说明中建议"GPT3.5 或更强的模型,弱模型可能无法理解您的想法"(见 Void_Terminal.py L40)。GPT-4 级别的模型能准确理解各种表达方式;识别不准时,切换到更强的模型或加入关键词。
- 描述要具体:越具体理解越准确。"帮我翻译论文"不如"用插件把这篇 Arxiv 论文翻译成中文,论文 ID 是 xxxx"精确。
- 善用关键词:不确定系统能否正确理解时,主动加入"用插件"、"请问"等关键词可以避免误判(左列关键词命中规则识别,见第二节)。
- 查看插件菜单:不确定某项任务是否有对应插件时,先展开插件下拉菜单浏览可用功能(菜单与
read_avail_plugin_enum读取的是同一份注册表),了解项目能力后再用自然语言描述会更有的放矢。
常见问题
虚空终端总是无法理解我的意图? 通常与模型能力有关。请尝试:1. 切换到更强的模型(如 GPT-4o);2. 在描述中加入明确的意图关键词;3. 使用更简洁、直接的表达方式。
我想调用插件,但系统却开始聊天了? 系统可能将输入理解为普通问题。解决方法是在描述中明确加入"用插件"或"调用插件"关键词。
提示"当前语言模型不能理解您的意图"? 这表示模型的结构化输出(意图 JSON)解析失败。可能原因:模型能力较弱、无法完成意图分析,或描述过于复杂/模糊。尝试简化表达或切换到更强的模型。
虚空终端和直接点击插件按钮有什么区别? 功能上没有区别,最终都是执行相同的插件代码(execute_plugin 末尾就是直接调用插件函数)。虚空终端的优势在于:无需记忆插件名称和位置;可以用自然语言组合多种需求;交互方式更符合对话直觉。
十、延伸阅读
- 基础操作 — 掌握文件上传、图片理解等基础技能
- Arxiv 论文翻译 — 直接使用论文翻译功能
- 源码分析 — 直接使用代码分析功能
- 配置详解 — 了解
ALLOW_RESET_CONFIG等配置项的详细说明 - 代码解释器 — 同属"智能体"分组的另一个 Agent 能力
- 核心源码:虚空终端主入口、插件调度、配置修改、状态管理、JSON 结构化解析
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0623
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00