【SuperSonic】:PluginParser 插件解析器
困惑
“当 LLM 处理用户输入时,如果检测到用户意图符合该功能,它就会调用这个插件的逻辑。”
- 这里提到的插件(plugins)是我们平时提到的软件插件吗?比如IDEA IDE中安装的各种插件。
- 另外,既然是检索插件,为什么在 SuperSonic 底层代码中看到:将查询文本转换为embedding,与 embedding 数据库中的 embeddings 进行相似度计算并返回呢?那不成了文本相似度计算了?难道说插件是一种文本吗?
解答
“插件(plugins)”并不是我们平时所说的像 IDEA 等 IDE 中安装的那种软件插件,而是指 SuperSonic 平台体系中的扩展组件。它们是通过 Java SPI 机制配置并加载的 扩展接口;插件的功能是将系统与第三方工具集成,对话系统可以调用这些工具提供的特定能力;用户可在配置中定义多个插件(包括插件功能描述和示例问题);在生成对话时,LLM会根据当前场景,从这些插件中选择最适合的一个来处理用户请求 。
读完上面这段话你会注意到,在配置插件时,包含了插件的功能描述。那么上面的困惑也就解决了,用户输入文本就是与插件功能描述进行文本相似度匹配,这样就能匹配到最适合用户需求的插件了。
我以一个例子来说明:用户在 Supersonic 的 UI 输入“帮我导出这张表到 Excel 文件”。
- 系统会把用户的输入传递给插件检索模块,该模块负责判断:用户这句话是否对应某个插件的能力;
- 插件检索(这里用到了 embedding):在 Supersonic 中,每个插件并不是光秃秃的一段代码,而是带有元数据,例如:
- 插件 ID
- 插件名称
- 插件描述(自然语言描述,比如:“将数据导出为 Excel 文件”)
- 插件示例问题(FAQ 样例,比如:“导出表格”、“下载数据到 Excel”)
这些描述性文本都会在插件注册时 转换为向量 embedding,并存入 embedding 数据库。
于是,用户输入的 queryText 也会先通过 embedding 模型转换为向量;系统再在 embedding 数据库中检索,找到与用户输入最相似的插件描述/样例问题,并返回最相似的 N 个插件的相关信息。