2023年真可谓是大模型与AIGC爆发之年了,在整个 2023 年期间,中国乃至国际上各大互联网厂商都在争相推出自己的大模型与 AIGC 应用,并不断地在各种应用场景深入探索尝试,像是阿里的通义千问、百度的文心一言等通用大模型,以及网易有道的 子曰 这样的某个垂直领域的大模型,都放入雨后春笋般的纷纷涌现而出,可谓是百家争鸣,让人目不暇接。
而作为开发者的我们,更是要把握这个千载难逢的时代契机,以大模型为盔甲武装自己,用 AIGC 作为我们用于开疆扩土的利剑,助我们征伐出一片不一样的天地。我们应该时刻地用:“不会使用 AI 的人,终将被AI淘汰”这句话来警醒自己。
恰逢 扣子(coze.cn) 上线,为我们广大开发者提供了更加便捷的方式与能力,让很多原本没有什么机会接触 AIGC 的开发同学,能够低成本的打造自己的 AIGC 应用。因此,本人也借此机会深入体验了一下 扣子 平台,并且尝试实现了一个用于生成思维导图的 “AI知识图谱生成助手”的工具,带大家一起看一下,我们应该如何使用这个平台,都有什么需要注意的地方。
我为什么想要做一个 “知识图谱生成助手” 呢?因为我们大部分场景下面,接触的知识都是零散的,非结构化的,这不仅让我们比较难以记忆,就算强行记忆下来也很容易遗忘。如果能够将我们想要记住的某一个知识点,某一个重要的事情脉络,通过思维导图的方式进行结构化的表达和梳理,对于我们掌握这些知识和牢记这些重要事件的脉络是非常有帮助的。因此,这个工具,适用范围还是挺广的,包括但不限于:
- 教育场景的知识点辅助记忆
- 办公场景的会议纪要梳理
- 生活场景的今日TODO
- 旅游场景的旅游攻略和计划
- 梳理个人的知识图谱
- ...
首先,我们在创建一个 AIGC 应用之前,我们要先明确你要创建的应用究竟是用来干嘛的,它能帮我们做些什么,适合那些应用场景,只有明确了这些之后,我们才能有的放矢,更好的完成我们的 AIGC 应用。
我们想要做一个 AI知识图谱生成器 ,其实说白了就是一个思维导图的生成器,他需要有以下的一些能力:
- 输入分析能力:用户输入可能随心所欲,我们可能没办法强求用户一定要怎样输入,不太可能也不太合理,如果强行限制的话,可能会影响我们应用的灵活性,我们最多就是规定一下用户输入的一些格式,在格式允许的范围内,应该允许用户自由发挥。因此,这需要我们的应用具备一定的对用户输入内容的分析能力。这个能力,我们可以通过 提示词 来完成,这个我们在后文中会详细介绍。
- 检索能力:我们的这个助手,可以根据用户提供的一个关键词,如:“光合作用的光暗反应全过程细节”,我们只是给出这样的一个描述,就需要助手自行想办法从网络中检索相关的数据,例如:光合作用应该是属于生物学领域的,就从网络中查询相关的的一些知识细节,才能够得到后续用于生成思维导图的关键信息。
- 信息提炼能力:通过上面的检索得到一些关键信息之后,还需要助手能够从这些关键信息当中排除干扰项,剔除一些无关紧要的信息,将我们需要的关键节点信息提炼整理出来。
- 格式整理能力:将信息提炼整理成一个个关键词之后,就需要根据这些关键词,按照指定的输出格式进行内容整理与合并了,例如,我们要生成 格式的文件,就需要按照 格式文件来组织这些关键词的层次结构和信息。
- 思维导图在线预览能力:已经有了整理好的思维导图数据了,如何展示是一个问题,目前 扣子 好像暂时无法在线预览这些思维导图,而其它的一些在线思维导图的平台基本都是需要注册登录的,也不太适合,因此,只能考虑另一种方式,将生成的内容保存到文件中,直接在本地打开预览了。
- 文件下载能力:我们如果想要更好的体验,最好是能够将生成的结构直接输出到文件中,然后提供用户下载功能,让用户点击下载。然而,目前 扣子好像也没有提供保存文件的插件或 api ,我们暂且只能手动的将结果复制出来,然后保存在本地文件中了。
我们已经梳理清楚想要做的功能了,接下来就在 扣子 上正式创建一个 bot。在 扣子上要创建一个 bot 也是很简单的,用一句话描述就是:“用AI助手帮你创建AI助手”。能够打败 AI 只有 AI。
首先,我们进入 扣子 官网首页:coze。进入后,就会有个系统助手,此时,我们可以在输入框中输入:“我想创建一个 Bot”,这样,系统助手就会开启一个创建一个 Bot 的流程,并询问你这个 Bot 使用来做什么的,系统助手会根据你的描述,为你的 Bot 取一个恰当的名字,并为你创建这个 Bot。
创建成功之后,我们只需要点击链接就可以对我们创建的 Bot 进行更进一步的调试了。
作为一个 AIGC 应用,最重要的莫过于提示词(在 扣子 中被称之为“人设与回复逻辑”)了,一个优秀的提示词,能够让 AI 更容易理解你要表达的含义,让他更加有条理的执行你所布置的任务。针对我们这个 知识图谱生成器 的 Bot,我们的提示语中的核心点主要有以下几点:
-
角色描述:即我们这个机器人的人设,你想让他扮演怎样的一个角色,后续的处理结果,会跟你所给的这个人设息息相关,不同的人设,针对输入的结果,通常会得到不同的回答
-
Skills:即技能,也就是我们这个 Bot 所具备的核心能力
-
约束:也就是想让机器人特别注意的一些点,通常,我们需要向机器人强调的一下关键点,就可以放在约束里面,例如:强调输出格式应该是怎样的,输出字数是多少,以怎样的口吻回答等等。
-
输入说明:如果我们的机器人要求用户输入一定格式的数据的话,我们可以在这里跟机器人讲清楚,应该如何去理解用户的输入,例如:
-
示例:为了能够让机器人更好的理解你所描述的人物,我们还需要提供一些输入输出示例,让他可以参考理解,避免机器人的理解跟你的认知出现偏差
以上就是我们在 扣子 当中,对于 知识图谱生成助手 的 人设与回复逻辑 的设定。除了我们手动添加之外, 扣子 还给我们提供了智能优化的按钮,使用 AI 帮我们智能优化这部分内容,可谓是将 AI 的剩余价值榨取地一干二净了,有木有。
在扣子当中,提供了丰富的插件生态,让我们可以在自己的 AIGC 应用当中,可以拥有更加强大的能力,例如搜索引擎搜索插件、图片理解插件等等,我们可以在这边选择自己需要的插件配合我们的需求使用,例如,在我们的这个知识图谱生成助手当中,也需要拥有知识检索的能力,就可以配合搜索引擎搜索的插件,让 AI 根据用户输入的关键词在网络上搜索一些内容作为后续内容的备选。当然,我们如果线程的插件没办法满足沃恩的需求,我们也可以考虑自己根据提供的 API 开发一个更符合业务场景的插件。
由于目前的插件对于我们想要实现的需求来说,都不太试用,这边并没有使用第三方插件,而是创建了自己的一个工作流来完成我们的核心任务。
我们可以在这里选择一些公共的已经发布的工作流,也可以根据自己的需求创建一个工作流。
在 扣子 当中,使用了流程节点自由编排组合的形式来实现工作流,这让我们能够更加灵活自由的将各种节点相互组合,以上一个节点的输出作为下一个节点的输入。而我们所有的工作流都会有一个唯一的输入和唯一的输出节点,输入节点就是用户在外部自定义输入的文案,而输出节点输出的结果则会交由 扣子 进行合理的展示。
在我们这个的机器人当中,没有使用太复杂的流程节点,主要包括以下几个:
-
开始节点:用于接受用户输入,可以接受多个参数,扣子会将用户输入进行初步的识别和分类,在调用工作流时智能的将相应的值传入进来。例如上图中,我们的输入节点定义了两个变量:keyword、ext,而用户的输入则是形如:“格式:mm,关键词:北京一日游”的文案。
我们可以看到,在调用我们的工作流的时候,扣子并不是将用户的输入原原本本传给工作流的,是是经过了一定的分析匹配,从用户输入里面,找到匹配 和 定义描述的内容,并作为工作流的入参传进去
-
选择器:为了增加我们应用程序的容错性和提升效率,我们会对传入内容的格式字段进行一定的判断,必须是支持的 、、 类型中的一个,我们才继续后续的检索和内容生成流程,否则就直接结束流程,返回空的结果,因为如果格式不对的话,我们就没必要进行后续操作了。(PS: 我本来像要支持添加默认值的,比如外部识别格式的时候,没能正常识别,就使用默认值,这样就始终都能得到一些结果了,但目前 扣子 并不支持,希望以后能够支持起来)。
-
大模型节点:这个节点是我们整个流程中最核心的额节点,就是利用内置大模型对于语言处理的能力,将我们输入的 作为关键词在搜索引擎和预订知识库中检索,并将得到的结果进行提炼组织成目标输出格式文本,并将其输出。
-
输出节点:将工作流最终处理的结果输出给 扣子用于展示
如果我们自己开发的工具有自己的一些知识库用户更加专业和准确的检索的话,我们也可以配置知识库,例如客服机器人,文档机器人等等,这边由于用户输入的内容不确定性过大,因此没有使用到这个功能。
用于用户打开你的机器人时向用户展示的开场白,通常我们会写一写用于介绍我们这个机器人的简要说明,以及如何使用的介绍,也可以加几个预设的使用示例,方便用户能够快速的体验你的功能。
至此我们就已经完成了生成思维导图的文本内容的工作了,受限于目前 扣子 的功能,我们没办法在线预览和下载文件,我们智能将工作流返回的结果复制下来,保存到本地,并命名为:
然后在思维导图工具,如: 中打开
总的来说,扣子的整体体验还是非常棒的,让很多没有变成开发能力的同学,也可以享受到大模型时代带来的红利,创建属于自己的 AIGC 应用。但因为刚刚发布,可能很多细节上尚未完善,这边总结一些自己遇到的一些问题和意见,希望未来能够得到官方的支持:
-
问题:在自动识别用户输入转换为 flow 输入时,经常会出现识别异常的情况,如:格式:mm,关键词:北京一日游,有时能够正常识别出 ext: mm, keyword: 北京一日游 作为 flow 的输入,但有时完全相同的输入,却无法识别出来。
- 建议:识别用户输入并匹配 flow 字段是非常关键的步骤,一旦出错将影响后续所有流程,因此应该尽可能的降低随机性,增加准确性,最好是允许用户自己配置相关的映射规则,以确保每次都一定能够正常匹配,如参考 flow 当中让用户自己输入一段js代码进行匹配
-
问题:对于输出结果的处理能力较弱
- 建议:增加一些能够自定义处理输出结果的插件或工具,例如:将输出结果保存到文件并下载、支持输出结果在线预览等等
-
问题:工作流变量不支持默认值
- 建议:建议支持默认值,如果用户未输入某些非必填变量则使用默认值
-
问题:同一选择器插件只支持所有都是 并且 或所有都是 或者的逻辑,不支持混合
- 建议:支持混合模式
-
问题:不支持枚举数据类型
- 建议:增加枚举数据类型,例如上面机器人的格式字段,有:mm、opml、md、json 几种枚举可选,此时可以支持用户直接在页面上进行选择,而不用用户去输入
-
机器人id:7330632324591239205
-
商店链接:www.coze.cn/store/bot/7…