手把手教你打造一个AI知识图谱生成助手

手把手教你打造一个AI知识图谱生成助手

背景

2023年真可谓是大模型与AIGC爆发之年了,在整个 2023 年期间,中国乃至国际上各大互联网厂商都在正向退出自己的大模型与 AIGC 应用,并不断地在各种应用场景深入探索尝试,像是阿里的通义千问、百度的文心一言等通用大模型,以及网易有道的 子曰 这样的某个垂直领域的大模型,都放入雨后春笋般的纷纷涌现而出,可谓是百家争鸣,让人目不暇接。

而作为开发者的我们,更是要把我这个千载难逢的时代契机,以大模型为盔甲武装自己,用 AIGC 作为我们用于开疆扩土的利剑,助我们征伐出一片不一样的天地。我们应该时刻地用:"不会使用 AI 的人,终将被AI淘汰"这句话来警醒自己。

恰逢 扣子(coze.cn 上线,我们们广大开发者提供了更加便捷的方式与能力,让很多原本没有什么机会接触 AIGC 的开发同学,能够低成本的打造自己的 AIGC 应用。因此,本人也借此机会深入体验了一下 扣子 平台,并且尝试实现了一个用于生层思维导图的 "AI知识图谱生成助手"的工具,带大家一起看一下,我们应该如何使用这个平台,都有什么需要注意的地方。

应用场景

我为什么想要做一个 "知识图谱生成助手" 呢?因为我们大部分长将下面,接触的知识都是零散的,非结构化的,这不仅让我们比较难以记忆,就算强行记一下来也很容易遗忘。如果能够将我们想要记住的某一个知识点,某一个重要的事情脉络,通过思维导图的方式进行结构化的表达和梳理,对于我们掌握这些知识和牢记这些重要事件的脉络是非常有帮助的。因此,这个工具,适用范围还是挺广的,包括但不限于:

  • 教育场景的知识点辅助记忆
  • 办公场景的会议纪要梳理
  • 生活场景的今日TODO
  • 旅游场景的旅游攻略和计划
  • ...

思路

首先,我们在创建一个 AIGC 应用之前,我们要先明确你要创建的应用究竟是用来干嘛的,它能帮我们做些什么,适合那些应用场景,只有明确了这些之后,我们才能有的放矢,更好的完成我们的 AIGC 应用。

我们想要做一个 AI知识图谱生成器 ,其实说白了就是一个思维导图的生成器,他需要有以下的一些能力:

  • 输入分析能力 :用户输入可能随心所欲,我们可能没办法强求用户一定要怎样输入,不太可能也不太合理,如果强行限制的话,可能会影响我们应用的灵活性,我们最多就是规定一下用户输入的一些格式,在格式允许的范围内,应该允许用户自有发挥。因此,这需要我们的应用具备一定的对用户输入内容的分析能力。这个能力,我们可以通过 提示词 来完成,这个我们在后文中会详细介绍。
  • 检索能力:我们的这个助手,可以根据用户提供的一个关键词,如:"光合作用的光暗反应全过程细节",我们只是给出这样的一个描述,就需要助手自行想办法从网络中检索相关的数据,例如:光合作用应该是属于生物学领域的,就从网络中查询相关的的一些知识细节,才能够得到后续用于生成思维导图的关键信息。
  • 信息提炼能力:通过上面的检索得到一些关键信息之后,还需要助手能够从这些关键信息当中排除干扰项,剔除一些无关紧要的信息,将我们需要的关键节点信息提炼整理出来。
  • 格式整理能力 :将信息提炼整理成一个个关键词之后,就需要根据这些关键词,按照指定的输出格式进行内容整理与合并了,例如,我们要生成 *.json 格式的文件,就需要按照 json 格式文件来组织这些关键词的层次结构和信息。
  • 思维导图在线预览能力:已经有了整理好的思维导图数据了,如何展示是一个问题,目前 扣子 好像展示无法在线预览这些思维导图,而其它的一下在线思维导图的平台基本都是需要注册登录的,也不太适合,因此,只能考虑另一种方式,将生成的内容保存到文件中,直接在本地打开预览了。
  • 文件下载能力:我们如果想要更好的体验,最好是能够将生成的结构直接输出到文件中,然后提供用户下载功能,让用户点击下载。然而,目前 扣子好像也没有提供保存文件的插件或 api ,我们暂且只能手动的将结果复制出来,然后保存在本地文件中了。

创建一个 bot

我们已经梳理清楚想要做的功能了,接下来就在 扣子上正式创建一个 bot 。在 扣子上要创建一个 bot 也是很简单的,用一句话描述就是:"用AI助手帮你创建AI助手"。能够打败 AI 只有 AI。

首先,我们进入 扣子 官网首页:coze。进入后,就会有个系统助手,此时,我们可以在输入框中输入:"我想创建一个 Bot ",这样,系统助手就会开启一个创建一个 Bot 的流程,并询问你这个 Bot 使用来做什么的,系统助手会根据你的描述,为你的 Bot 取一个恰当的名字,并为你创建这个 Bot

创建成功之后,我们只需要点击链接就可以对我们创建的 Bot 进行更进一步的调试了。

提示语

作为一个 AIGC 应用,最重要的莫过于提示词(在 扣子 中被称之为"人设与回复逻辑 ")了,一个优秀的提示词,能够让 AI 更容易理解你要表达的含义,让他更加有条理的执行你所布置的任务。针对我们这个 知识图谱生成器Bot,我们的提示语中的核心点主要有以下几点:

  • 角色描述:即我们这个机器人的人设,你想让他扮演怎样的一个角色,后续的处理结果,会跟你所给的这个人设息息相关,不同的人设,针对输入的结果,通常会得到不同的回答

    复制代码
    你是一个高级智能搜索引擎,能够根据用户提供的关键词,自动搜索网络知识库,并生成多种格式的思维导图。
  • Skills :即技能,也就是我们这个 Bot 所具备的核心能力

    xml 复制代码
    ## Skills
    ### 技能 1: 搜索网络知识库
    - 侦听用户的关键词请求,如:杭州一日游。
    - 利用关键词在网络知识库中进行全面搜索。
    - 根据搜索出来的结果提炼关键节点
    - 将关键节点按照输出格式要求生成输出文本
    ​
    ### 技能 2: 生成思维导图
    - 根据搜索结果生成思维导图。
    - 提供多种格式的思维导图供用户选择,支持的格式包括:*.mm, *.md, *.opml。
      - *.mm格式如下:
      <map version="1.0.1"> <node text="杭州一日游攻略"> <node text="早餐"> <node text="杭州特色早餐"></node> </node> <node text="上午"> <node text="西湖"></node> <node text="灵隐寺"></node> </node> <node text="午餐"> <node text="杭帮菜"></node> </node> <node text="下午"> <node text="宋城"></node> <node text="龙井茶园"></node> </node> <node text="晚餐"> <node text="小籠包"></node> <node text="东坡肉"></node> </node> <node text="晚上"> <node text="杭州歌剧院"></node> <node text="西湖夜游"></node> </node> </node> </map>
      - *.opml
      <?xml version="1.0"?><opml version="2.0"><head><title>杭州一日游攻略</title></head><body><outline text="西湖"><outline text="游船" /><outline text="断桥残雪" /><outline text="苏堤春晓" /></outline><outline text="灵隐寺"><outline text="大雄宝殿" /><outline text="飞来峰" /></outline><outline text="宋城"><outline text="宋城千古情" /><outline text="宋城大街" /></outline><outline text="龙井茶园"><outline text="品茗" /><outline text="采茶体验" /></outline><outline text="美食"><outline text="西湖醋鱼" /><outline text="龙井虾仁" /><outline text="东坡肉" /></outline><outline text="购物"><outline text="河坊街" /><outline text="南宋御街" /></outline></body></opml>
  • 约束:也就是想让机器人特别注意的一些点,通常,我们需要向机器人强调的一下关键点,就可以放在约束里面,例如:强调输出格式应该是怎样的,输出字数是多少,以怎样的口吻回答等等。

    markdown 复制代码
    ## 约束
    - 只能处理与关键词搜索和思维导图生成相关的请求。
    - 输出格式如果是 *.mm , *.opml 必须参考输出示例的格式进行输出,*.md 根据 markdown 格式输出即可。
  • 输入说明:如果我们的机器人要求用户输入一定格式的数据的话,我们可以在这里跟机器人讲清楚,应该如何去理解用户的输入,例如:

    shell 复制代码
    ## 输入说明
    ​
    用户输入时输入的 "格式:" 后面的内容作为 mind_flow 工作流的 "ext" 变量,"关键词:"后面的内容作为 "mind_flow" 工作流的 "keyword" 变量,如:
    格式:mm,关键词:北京一日游
    上面输入中,ext 为 mm, keyword 为 北京一日游
    也就是说,在用户输入当中,"格式:" 对应了 ext,"关键词:" 对应 "keyword"
  • 示例:为了能够让机器人更好的理解你所描述的人物,我们还需要提供一些输入输出示例,让他可以参考理解,避免机器人的理解跟你的认知出现偏差

    xml 复制代码
    ## 示例
    ​
    ### opml 输入示例
    ​
    杭州一日游,输出格式:*.opml
    ​
    ### opml 输出示例
    ​
    <?xml version="1.0"?><opml version="2.0"><head><title>杭州一日游攻略</title></head><body><outline text="西湖"><outline text="游船" /><outline text="断桥残雪" /><outline text="苏堤春晓" /></outline><outline text="灵隐寺"><outline text="大雄宝殿" /><outline text="飞来峰" /></outline><outline text="宋城"><outline text="宋城千古情" /><outline text="宋城大街" /></outline><outline text="龙井茶园"><outline text="品茗" /><outline text="采茶体验" /></outline><outline text="美食"><outline text="西湖醋鱼" /><outline text="龙井虾仁" /><outline text="东坡肉" /></outline><outline text="购物"><outline text="河坊街" /><outline text="南宋御街" /></outline></body></opml>
    ​
    ### mm 输入示例
    ​
    杭州一日游,输出格式:*.mm
    ​
    ### mm 输出示例
    ​
    <map version="1.0.1"> <node text="杭州一日游攻略"> <node text="早餐"> <node text="杭州特色早餐"></node> </node> <node text="上午"> <node text="西湖"></node> <node text="灵隐寺"></node> </node> <node text="午餐"> <node text="杭帮菜"></node> </node> <node text="下午"> <node text="宋城"></node> <node text="龙井茶园"></node> </node> <node text="晚餐"> <node text="小籠包"></node> <node text="东坡肉"></node> </node> <node text="晚上"> <node text="杭州歌剧院"></node> <node text="西湖夜游"></node> </node> </node> </map>

以上就是我们在 扣子 当中,对于 知识图谱生成助手人设与回复逻辑 的设定。除了我们手动添加之外, 扣子 还给我们提供了智能优化的按钮,使用 AI 帮我们智能优化这部分内容,可谓是将 AI 的剩余价值榨取地一干二净了,有木有。

技能

插件

在扣子当中,提供了丰富的插件生态,让我们可以在自己的 AIGC 应用当中,可以拥有更加强大的能力,例如搜索引擎搜索插件、图片理解插件等等,我们可以在这边选择自己需要的插件配合我们的需求使用,例如,在我们的这个知识图谱生成助手当中,也需要拥有知识检索的能力,就可以配合搜索引擎搜索的插件,让 AI 根据用户输入的关键词在网络上搜索一些内容作为后续内容的备选。当然,我们如果线程的插件没办法满足沃恩的需求,我们也可以考虑自己根据提供的 API 开发一个更符合业务场景的插件。

工作流

由于目前的插件对于我们想要实现的需求来说,都不太试用,这边并没有使用第三方插件,而是创建了自己的一个工作流来完成我们的核心任务。

我们可以在这里选择一些公共的已经发布的工作流,也可以根据自己的需求创建一个工作流。

在 扣子 当中,使用了流程节点自由编排组合的形式来实现工作流,这让我们能够更加灵活自由的将各种节点相互组合,以上一个节点的输出作为下一个节点的输入。而我们所有的工作流都会有一个唯一的输入和唯一的输出节点,输入节点就是用户在外部自定义输入的文案,而输出节点输出的结果则会交由 扣子 进行合理的展示。

在我们这个的机器人当中,没有使用太复杂的流程节点,主要包括以下几个:

  • 开始节点 :用于接受用户输入,可以接受多个参数,扣子会将用户输入进行初步的识别和分类,在调用工作流时智能的将相应的值传入进来。例如上图中,我们的输入节点定义了两个变量:keywordext,而用户的输入则是形如:"格式:mm,关键词:北京一日游"的文案。

    我们可以看到,在调用我们的工作流的时候,扣子并不是将用户的输入原原本本传给工作流的,是是经过了一定的分析匹配,从用户输入里面,找到匹配 extkeyword 定义描述的内容,并作为工作流的入参传进去

  • 选择器 :为了增加我们应用程序的容错性和提升效率,我们会对传入内容的格式字段format进行一定的判断,必须是支持的 mmmdopml 类型中的一个,我们才继续后续的检索和内容生成流程,否则就直接结束流程,返回空的结果,因为如果格式不对的话,我们就没必要进行后续操作了。(PS: 我本来像要支持添加默认值的,比如外部识别格式的时候,没能正常识别,就使用默认值,这样就始终都能得到一些结果了,但目前 扣子 并不支持,希望以后能够支持起来)。

  • 大模型节点 :这个节点是我们整个流程中最核心的额节点,就是利用内置大模型对于语言处理的能力,将我们输入的 keyword 作为关键词在搜索引擎和预订知识库中检索,并将得到的结果进行提炼组织成目标输出格式文本,并将其输出。

  • 输出节点:将工作流最终处理的结果输出给 扣子用于展示

知识库

如果我们自己开发的工具有自己的一些知识库用户更加专业和准确的检索的话,我们也可以配置知识库,例如客服机器人,文档机器人等等,这边由于用户输入的内容不确定性过大,因此没有使用到这个功能。

开场白

用于用户打开你的机器人时向用户展示的开场白,通常我们会写一写用于介绍我们这个机器人的简要说明,以及如何使用的介绍,也可以加几个预设的使用示例,方便用户能够快速的体验你的功能。

至此我们就已经完成了生成思维导图的文本内容的工作了,受限于目前 扣子 的功能,我们没办法在线预览和下载文件,我们智能将工作流返回的结果复制下来,保存到本地,并命名为:光合作用光暗反应全过程.opml

xml 复制代码
<opml version="2.0">
    <head>
        <title>光合作用光暗反应全过程</title>
    </head>
​
    <body>
        <outline text="光合作用">
            <outline text="光反应">
                <outline text="原初反应"></outline>
                <outline text="电子传递"></outline>
                <outline text="光合磷酸化"></outline>
            </outline>
            <outline text="暗反应">
                <outline text="卡尔文循环">
                    <outline text="CO2 固定"></outline>
                    <outline text="还原阶段"></outline>
                    <outline text="RuBP 再生阶段"></outline>
                </outline>
            </outline>
        </outline>
    </body>
</opml>

然后在思维导图工具,如:xmind 中打开

coze的意见与建议

总的来说,扣子的整体体验还是非常棒的,让很多没有变成开发能力的同学,也可以享受到大模型时代带来的红利,创建属于自己的 AIGC 应用。但因为刚刚发布,可能很多细节上尚未完善,这边总结一些自己遇到的一些问题和意见,希望未来能够得到官方的支持:

  • 问题:在自动识别用户输入转换为 flow 输入时,经常会出现识别异常的情况,如:格式:mm,关键词:北京一日游,有时能够正常识别出 ext: mm, keyword: 北京一日游 作为 flow 的输入,但有时完全相同的输入,却无法识别出来。

    • 建议:识别用户输入并匹配 flow 字段是非常关键的步骤,一旦出错将影响后续所有流程,因此应该尽可能的降低随机性,增加准确性,最好是允许用户自己配置相关的映射规则,以确保每次都一定能够正常匹配,如参考 flow 当中让用户自己输入一段js代码进行匹配
  • 问题:对于输出结果的处理能力较弱

    • 建议:增加一些能够自定义处理输出结果的插件或工具,例如:将输出结果保存到文件并下载、支持输出结果在线预览等等
  • 问题:工作流变量不支持默认值

    • 建议:建议支持默认值,如果用户未输入某些非必填变量则使用默认值
  • 问题:同一选择器插件只支持所有都是 并且 或所有都是 或者的逻辑,不支持混合

    • 建议:支持混合模式
  • 问题:不支持枚举数据类型

    • 建议:增加枚举数据类型,例如上面机器人的格式字段,有:mm、opml、md、json 几种枚举可选,此时可以支持用户直接在页面上进行选择,而不用用户去输入

bot演示

上面的机器人id:7330632324591239205

结语

至此,我们通过 扣子 平台完成了一个将关键词生成思维导图的知识图谱生成助手了,整体体验还是挺不错的,看完之后,是否已经蠢蠢欲动了呢,赶紧来创建一个属于你自己的 Bot 吧。

相关推荐
爱吃的小肥羊9 小时前
【最全】Kiro 注册安装使用全教程|同样用 Opus 4.6,比 Claude Code 便宜 3 倍
aigc·ai编程
程序员阿伦9 小时前
璋㈤鏈虹殑Java澶у巶闈㈣瘯璁帮細浠嶴pring Boot鍒癒ubernetes锛�3杞湡棰樺叏瑙f瀽锛�
spring boot·redis·kubernetes·aigc·java闈㈣瘯·寰湇鍔�·鐢靛晢绉掓潃
DigitalOcean11 小时前
如何使用DigitalOcean Gradient 平台上的无服务器推理
aigc·agent
鲲志11 小时前
别等 Sora 了!一代神话陨落?OpenAI 这一手“弃车保帅”我看懂了...
aigc·agent·sora
imbackneverdie14 小时前
如何从海量文献中跨界汲取创新灵感?
论文阅读·人工智能·ai·自然语言处理·aigc·ai写作·ai工具
饼干哥哥14 小时前
用AI 48小时速通梅花易数之后,我想通了「学习」的最终解
aigc
用户51914958484515 小时前
SEO LAT Auto Post 插件远程代码执行漏洞利用工具 (CVE-2024-12252)
人工智能·aigc
树獭叔叔15 小时前
向量数据库的双索引架构:HNSW与Payload的协同机制
后端·aigc·openai
DO_Community16 小时前
使用 DigitalOcean 实现 Claude Code “低配订阅 + 外部 Token”
人工智能·aigc·ai编程·ai推理
吾鳴17 小时前
扣子(Coze)实战:公众号爆款封面的秘密!20秒一张手绘黑板报,点赞率直接翻倍
coze