UCS AI 助手—开发日记

, ,
4,502字
19–29 分钟

PART 01

 UCS 是什么?

 What it’s UCS

图片

UCS(Universal Category System)通用分类系统是一项公共领域计划,由蒂姆·尼尔森(Tim Nielsen)、贾斯汀·德鲁里(Justin Drury)、凯·帕奎因(Kai Paquin)等人发起,并得到了全球各地的声音资料馆员、供应商和用户的支持。

这个计划是将我们使用的声音素材分类为 700多个大类,便于整理归档和查找使用,并且已经得到了 soundminer、soundly、explorer 等音频素材管理软件的适配和支持,是现在全球范围内通用程度最高的音效素材整理系统。

在几年期我也出过关于 UCS 系统的详细文章,在阅读本文章之前我强烈建议大家先点击图片耐心阅读一下往期文章,了解 UCS 的核心功能和定义。

图片

文章内介绍了 UCS 的各种核心参数定义和使用方法,以及如何和音效库管理软件结合来打造属于自己的工业化音效库。

PART 02

  起因

 reasons

图片

尽管UCS已经在各国参与者的努力下推出了诸如UCS Ranamer和AudiocategoryClipper之类的工具, 在我整理这一两年的实地录音素材的时候我希望有一种更为 “傻瓜式” 的方法来输出正在使用的UCS文件名。

理想情况下,如果我能用自然语言进行描述,就能生成UCS标准格式,所以我将目标设定在了大语言模型(LLM)上。

图片
实际上,早在一年半以前,我尝试将大语言模型(LLM)用于一个关于同期录音的教育项目。当时,我可能是中国唯一尝试用大语言模型来整理录音设备参数并教授录音知识的人。
我发现,尽管当前的大语言模型离通用人工智能(AGI)仍有很大差距,但通过 “知识库 + 关键提示” 的方法,已经取得了不错的效果。所以我尝试将这种模式应用到UCS辅助工具中。我主要使用两家中国公司的大语言模型进行了实验,即DeepSeek和Qwen。根据我之前的经验,我发现这两个模型在中文语境下能更准确地理解形容词和描述,当然在英文语境下也是如此。对于其他语言,还需要进行更多尝试。

PART 03

  第一种技术路径:工作流

 wprkflow

图片

工作流是一种编程工具,用于引导大模型完成标准化的工作。大模型会按照工作流执行,但这需要大量的调试和迭代。

图片
图片

图片中我尝试的两个工作流,是用于检索类别ID(CatID)以及生成标准的UCS命名。

我们可以看到第一个橘黄色的节点:长期记忆节点。

图片

长期记忆功能旨在记住输入的关键词,类似于那些会反复出现的信息,例如设备型号、录音人员姓名、项目名称等等。当然,这些信息分别对应着创建者ID(CreatorID)和来源ID(SourceID )。比如下图我输入自己的录制人名字、设备信息和项目关键词,可以将它识别并保存为记忆,不需要我每次都进行这种重复内容的多次输入。

图片

后面的一个大模型节点可有可无,是用来进行翻译的,我将其定义为“用户输入非英语时,将其翻译为英语输出”这可以在后续的检索过程中缩短时间和增加准确性。

图片

不过也可以简化这个流程,这就要说到下面的内容:构建知识库的准备工作。

知识库是人工智能用于学习的数据,它能规范 AI 输出内容的范围和准确性,而不是胡编乱造或者是在网上随意搜索出不相关的东西硬套。

UCS 文件名助手的知识库当然使用的是UCS V8.2.1版本的表格。不过,我对表格进行了精简,去除了我不需要的语言,只保留了英语和中文,这样可以提高人工智能检索的准确性并节省时间。其次,我使用BAAI或其他的向量化模型对表格进行向量化检索扫描,这相当于给不同的类别ID(CatID)标注坐标,这也便于大语言模型(LLMs)进行查询。

图片

根据我的实验结果,知识库的使用和修改都是必要的,由于我删除了不需要的语言,只保留了英语和中文,那么我就不需要翻译的过程,可以直接进入的检索流程,因此翻译节点在后续版本里面被删除。

图片

第三个大模型节点用于从构建的UCS知识库中检索CatD,并根据UCS的文件名格式生成符合标准的文件名。

图片

为了完成这项任务,我必须让人工智能知道如何去做,我为它定制并测试了一条很长的提示词,到目前为止已经迭代了20个版本,并且仍在不断完善。 这条提示词的结构为:

##角色

我告知人工智能,你是一位UCS分类专家,根据用户给出的语音内容文本生成相应的UCS分类文件名。

##UCS文件格式

我向人工智能说明了UCS的基本格式和完整格式。

##工作步骤

我告诉人工智能:

  1. 理解输入描述并找出关键声音对象。
  2. 到我指定的UCS表格中进行查找。
  3. 各种ID的含义

##限制条件

  1. CatID必须取自UCS表,CatID数据列中的原始字符,包括空格和符号,不得添加或修改,且不得随意拼凑类别(Category)和子类别(SubCategory)的缩写。
  2. 输出必须全部为英文。
  3. 如果用户输入不是英文,需先将其翻译成英文,再进行参考。
  4. CatID不允许使用下划线或空格进行连接。
  5. 需正确识别每个类别的不同含义。
  6. 至少需要以基本格式向用户输出文件名。

输了这套提示词之后,AI会根据我给出的工作步骤和内容,对用户输入的声音描述进行理解和拆分,并严格按照现实条件去往知识库里进行检索。

如下图中的事例,我像AI直接使用自然语言描述声音的内容:风声,在下雨的竹林里录制,有一些鸟叫和远处的车声。

图片

应该正确的给予了我UCS 的标准文件名格式,并将各个 ID 的内容分别展示,还显示了引用内容,也就是在知识库中检索的结果,便于我查错。

在目前超过300次询问的词条测试中,这套方案达到了超过95%的正确率平均现在时间在120秒之内。我相信只要不断地精简大模型的思考流程并对模型进行微调或者使用蒸馏版的快速响应版本的模型,现在时间还会再次缩减。

但还没有等到我进行这一步的测试,我发现这种方案将会面临高昂的API成本和计算成本。我使用字节跳动旗下火山方舟在线知识库和 API 进行测试,单单只是在线知识库的存储费用就达到了 0.9 RMB/小时,注意这里是每小时。

一天大概是二十多块人民币。在此之上,每次生成还会有额外的计算费用,我在3天的测试中花费了100元人民币,以我认为这不是我想要的。因此,我开始尝试仅对大语言模型(LLM)进行API调用并搭配本地知识库的技术路线,以避免在线知识库存储和检索的高昂成本。

这便是第二种技术路径-CherryStudio+本地化知识库+精简知识库内容。

PART 04

CherryStudio+本地知识库

 Cherry Studio

图片

在之前的文章中我也有介绍过CherryStudio是一款人工智能运营客户端,其最大特点在于能够构建本地化知识库,并且通过API调用,几乎可以接入市场上所有的大语言模型(LLM)。这里就不赘述 CherryStudio 的使用方法了,

图片

具体步骤是:

  1. 使用外部 API 的方式把大模型添加到 Cherrystudio 中

    图片
  2. 准备精简的 UCS 表格,去除其他语言只留下中文和英文,去除干扰项比如 CatID Short

  3. 使用向量化模型创建 Cherrystudio 本地知识库

    图片
  4. 创建新助手,并关联大模型、知识库和提示词

图片
图片

经过这三步之后本地部署版本的 UCS 助手就完工了。

图片

细心的读者应该注意到了,这个方案里面,要让 AI 进行精确的工作,提示词就是重中之重,我在这个方案里已经迭代了27 个版本的提示词,不断的完善到 V0.27,我把这个提示词放在下一个板块,需要的朋友记得点赞关注三连就好。

PART 05

 V0.27 提示词

 prompt

图片

# 角色 

你是一名UCS分类专家,通过用户{input}声音描述,生成相应的UCS分类文件名,并且要尽可能快的得到结果。

## UCS文件名格式 

UCS系统(Universal Category System)适用于声音素材的分类整理。

1. 完整格式的格式为CatID-UserCategory_VendorCategory-FXName_CreatorID_SourceID-UserData

2. 基础格式为“CatID”_“FXName”_“CreatorID”_”SourceID”。

### 工作步骤 

  1. 根据用户描述的声音内容提取出其中的关键字并且对照知识库中{Category}和}SubCategory}两列内容,匹配最合适的CatID,注意CatID必须来自于知识库

  2.  根据用户的描述进行简化,生成FXName,这是简短描述内容或标题,最好小于25个字符,并且字符之间不允许有空格和任何符号连接。

  3. CreatorID是声音设计师、录音师或者发行商的名字,也可以是缩写但必须是英文,在15个字符之内,你可以优先提取用户名进行填写,也可以询问用户并形成记忆。可以在对话记忆中进行查找,如果用户没有提供则默认填写CreatorID

  4. SourceID是项目名称、节目名称或素材库名(也可以使用缩写替代),但必须是英文,在20个字符之内,你需要在一开始询问用户并形成记忆,可以在对话记忆中进行查找,直到用户提示你修改,如果用户没有提供则默认填写 SourceID

  5. UserCategory是可用户自定义的分类,一般是录音设备或者麦克风的型号、声音景别等等,你需要提取用户描述中关于话筒型号、录音录制制式、录音机型号等信息作为UserCategory输出,必须是英文,中间不可以使用任何符号和空格来连接,如果用户描述中没有这类词语可以忽略并不输出。

  6. VendorCategory是FXName前缀,一般是用于定义发行商或声音设计师所使用的特定的分类名称,可以是用户描述中主要发出声音的物体的名称、比如枪械、车辆等,同时也可以是录制地点的名称。你需要提取用户描述中关于上述内容的信息作为VendorCategory输出,必须是英文,中间不可以使用任何符号和空格来连接,如果用户描述中没有这类词语可以忽略并不输出。

  7. UserData是为了保证文件名的唯一性,可以是录制的地点、日期或者用计数的方式进行标注,格式为T00x如果生成出来的文件名和对话记忆中重复,则需要加上这个,没有则不需要。

###信息更换

如果用户描述录制设备、录制人、项目名称等信息要知道是想要提示更换UserCategory、CreatorID、SourceID,则不需要生成文件名,直接需告知用户后续的内容将会按照此进行修改,并形成记忆,直到用户再次修改。

# 限制

1. CatID必须来自于知识库 ,CatID数据列中的原始字符,不得添加和修改,包括空格和符号,也不得随意将Category与SubCategory的缩写拼凑。

2. 输出的内容必须是全英文

3. CatID不允许使用_或者空格连接

4. 请正确识别每个分类的不同含义。

5. 你至少需要输出基础格式的文件名给用户。

6. 尽可能快速的得到结果。

PART 06

  总结

  END

图片

目前来看第二种技术路线是最具成本效益的解决方案,硬件上仅需一台能运行Cherrystudio的电脑,软件上则是只需要大语言模型(LLM)的API 密钥就行了,使用硅基流动的 API 收费也非常实惠。

除此之外,本地知识库的部署方式可防止知识库文件被污染或篡改,非常适合个体工作者、工作室或小团队。目前在准确性与效率之间尚未达到最佳平衡,还需要持续进行试验。而且本地知识库文件不能像在线知识库那样随意调用,只能在本地机器上使用。