我们的 Bot 获得了「掘金 x 扣子 Hackathon 活动 - 深圳站」的总冠军
01 背景
上周末(3 月 30 号),我和队友 ETERNCHAN 参加了字节掘金 x 扣子在深圳举办的线下 Hackathon 活动,这个活动是由字节的 稀土 掘金技术社区( juejin.cn )和 扣子( coze.cn )共同发起,面向开发者群体的 AI 技术实践活动,旨在通过动手实操的方式,帮助开发者将想法和创意进行落地。
这次 Hackathon 活动,不仅仅是一次简单的技术交流会,更是一个将我们脑海中的灵光乍现转化为实际动手能力的实验室,也是一次将 AI 技术、创意与实践相结合的活动。
活动日程如下👇,可以看到,每个小组有两个小时捏 bot 的时间。
02 扣子
扣子( coze.cn )是由字节跳动推出的 AI Bot 开发平台。它整合了插件、长短期记忆、 工作流 等多种功能,能够帮助用户低门槛、快速地搭建个性化或具备商业价值的智能体(Agent),并一键发布到 飞书 、 微信公众号 和掘金等各个渠道。
扣子是一个灵活多用的 AI 开发平台,不仅适用于构建对话式 Bot,也很擅长各类 AI 任务的精细编排,比如构建融合检索与生成的 RAG 系统、搭建复杂的工作 pipeline。
关于扣子和 Agent,笔者此前写了几篇相关的文章,可以参考:
03 小说跃动
3.1 头脑风暴
我们头脑风暴想了几个 idea,最后敲定了一个 idea: 跟小说人物角色对话 。选择这个 idea 有几个原因:
- 沉浸式角色互动 :与小说中的角色进行实时对话,提供一种全新的交互体验,这种互动使得小说角色和故事变得生动起来。
- 情境模拟与 角色扮演 :用户可以在某些情节中扮演某个角色,身临其境与小说人物角色进行互动,甚至从不同的视角探索剧情。
- 具备一定的 商业模式 :提供基本的免费体验(如内容梗概等),并通过订阅服务提供额外的功能,如作者的二次创作、定制的故事体验等。
3.2 主要功能
基于上面的想法,我们给 bot 起了个形象的名称: 小说跃动(原先叫小说跳动) 。
一句话概括就是: 让小说人物角色跃然纸上,穿越时空,和小说人物角色对话,为读者打开一个充满想象力和互动乐趣的娱乐世界,带来全新的互动体验。
在实际开发过程中,我们实现的功能主要有以下几个👇 :
下面,我来介绍下整个 Bot 的开发过程。
3.3 开发调试
在开发过程中,我们遇到的最大问题就是: Bot 遵循 指令 的能力较差 。比如在 Prompt 要求 Bot 当用户选定某个角色时,需要输出一张角色照,它就是不能很好地遵循。还有就是我们尝试让 Bot 扮演不同的小说角色,但对话风格没有角色的性格特点。
针对遇到的一些问题, 我们引入了 工作流 ,对复杂的业务流程进行编排,使得 Bot 的输出更加可控和稳定 。
这个 Bot 涉及到的技术能力整体如下:
下面是这个 Bot 的整体开发环境:
- 最左边是 Bot Prompt
- 中间是给 Bot 增强的技能,如插件、 工作流 ,这里使用了 3 个工作流,工作流里面集成了知识库、代码处理还有生成角色照等功能
- 最右边是调试预览
值得一提的是,本次活动,扣子给我们开放了 Moonshot 大模型 的体验,这也是此次活动的福利,不过是限时体验(最终会不会对外开放还不清楚)。对于我们这个 Bot ,整体体验下来,Moonshot 模型的遵循 指令 能力相比云雀模型更强。
根据上面的 Bot Prompt,这个 Bot 的实现包含了如下 3 个 工作流 :
按照 Bot 的工作流程,第 1 个 工作流 是 get_novel_introduction ,当用户进入选定的小说后,Bot 会调用此工作流向用户展示小说简介、主要的人物角色列表,然后 Bot 会接着询问用户要跟小说中的哪个人物角色对话。
👉 工作流拆解 :
- 第一步:开始节点,接收用户输入的小说名称
- 第二步:知识库节点,将输入的小说名称作为 query 去知识库检索小说简介、主要的人物角色列表
- 第三步:大模型节点,让大模型根据小说简介,编写 AI 生图的 prompt
- 第四步:text2image,输入上一步大模型生成的文生图 prompt,输出小说的封面图
- 第五步:结束节点,输出小说简介、人物角色列表、小说封面图
👉 工作流图参考 :
第 2 个 工作流 是 get_character_lines_portrait ,当用户选择某个小说人物角色后,Bot 会调用此工作流,获取小说人物角色经典台词和角色照。
👉 工作流拆解 :
- 第一步:开始节点,接收用户选择的小说人物角色名称
- 第二步:知识库节点,将输入的小说角色名称作为 query 去知识库检索该角色的性格特点和经典台词
- 第三步:大模型节点,让大模型对信息进行筛选,并采用 json 格式输出
- 第四步:代码节点,对上游的输入数据进行规整,格式化输出
- 第五步:text2image,引用上一步输出的 feature(用于描述人物性格和特点),作为 prompt,生成人物的角色照
- 第六步:结束节点,输出人物台词和角色照
👉 工作流图参考 :
第 3 个 工作流 是 ask_character ,当用户向小说角色提问时,Bot 会调用此工作流获取结果,本质上是一个根据用户 query 进行 RAG(Retrieval Augmented Generation,检索增强生成)的任务,这是非常重要的一个工作流,关系到用户和小说人物角色对话时 Bot 的回答质量。
👉 工作流拆解 :
- 第一步: 开始节点,接 收 用户 向 小说人物角色提问的问题
- 第二步:知识库节点,将问题作为 query 去小说内容中进行语义检索和全文检索
- 第三步:大模型节点,让大模型根据问题和检索到的上下文信息,生成答案
- 第四步:结束节点,输出答案,作为小说人物的回答
👉 工作流图参考 :
另外,大家可以看到,在每个 工作流 里面,我们都嵌入了一个知识库节点,我们维护了如下 3 个知识库:
知识库的整理和清洗,可以说是 dirty work。
- 小说合集 。这里面包含了 4 本小说。
- 小说台词 。包含了小说主要人物角色和经典台词。
- 小说简介 。包含小说简介和主要的人物角色。
因此, 开发这个 Bot 的核心在于知识库的构建和 工作流 的搭建 。
3.4 成果展示
经过不断地调整和优化,我们终于可以说「有那味了」,当然这仅仅是开始。
下面是一些对话示例。
- 庆余年
- 繁花
3.5 存在问题
虽然使用了 Moonshot 大模型 和 工作流 ,但在调试的过程中,还是存在一些不遵循 指令 的 bad case。
比如下面的 case, Bot 的回答,直接说“根据 工作流 ...”。
所以,还是有很多问题需要优化的。
3.6 发布体验
目前,我已经将 Bot 发布到 扣 子 Bot 商店、掘金社区和豆包。 由于对外发布只能使用云雀模型,所以实际体验效果可能会打个折扣。 另外,目前可供对话的人物角色列表是有限的,建议选择 Bot 提供的人物角色进行对话。
- 扣子 Bot 商店链接
https://www.coze.cn/store/bot/7353452051638255628
- 掘金社区 AI 聊天室:
https://juejin.cn/pin/club/7173895829281833012?robotId=7351428879468806144
04 奖项评比
本次作品奖项总共有 5 个奖项:
- 最佳创意奖
- 最佳技术奖
- 最佳用户体验奖
- 最佳解决方案奖
- 总冠军奖 (上述各方面比较均衡,总分最高)
打分规则如下,可以理解为前面 4 个奖是单项得分最高的奖,而冠军奖则为单项得分累加最高的奖。
05 现场氛围
06 总结&感想
这次活动对我们来说不仅是一次技术挑战,更是一次思维和创意的飞跃。在本次活动中,我们通过动手实操将我们的想法和创意变为现实。这样的经历,无疑让我们每个人都收获满满。
捏这个 Bot 其实并不轻松,整体感受如下:
- 产品体验:LUI(Language User Interface ,语言 用户界面 ) 和 GUI ( Graphical User Interface , 图形用户界面 )应该相结合 。在调试的过程中, Bot 的输入变量需要由用户给出,比如小说名称和人物角色名称,如果 Bot 没有遵循 指令 ,提示用户输入小说名称或者角色名称,则不好引导用户进行下一步,在这种情况下,GUI 可能是更好的选择,比如在用户进入对话的时候,通过展示下拉菜单让用户进行选择,这样会更具确定性。
- 用户体验:和 AI 对话,某种程度上可以说是抽卡 。 大模型 的 指令 遵循能力还不是很强,严格要求 Bot 遵循 Prompt 时,它有时就是不遵循,这种情况下可以通过引入 工作流 进行缓解。当然,更重要的是提升 LLM 的性能。
- 开发体验: LLM Agent 是一个高度集成的智能工程系统 。它通过把 LLM、插件、知识库、数据库和 工作流 等功能集成在一起,创造出了一个强大的多功能的智能系统,而 LLM 是这个系统的大脑,它的性能决定了 Agent 能力的上限。最近,Andrew Ng 在一次分享中提到,基于 GPT-3.5 构建的 智能体 工作流在应用中表现比 GPT-4 要好。
相关资料
- https://www.bagevent.com/event/8796081
- https://twitter.com/AndrewYNg/status/1770897666702233815