“7168 维空间里的李白”:0 代码用 Coze 搓一个 6 岁娃专属的古诗仙故事机

103 阅读15分钟

前言

“爸爸,李白到底是一个人,还是一颗星星?”
当 6 岁的女儿把这个问题抛给我时,我意识到——成人世界的“大模型”、“高维向量”、“本地部署”这些黑话,在孩子眼里都抵不过一个会讲故事的“魔法盒子”。
于是,我把 GPT3 那 12288 维的数学宇宙,压缩成她能听懂的 200 字评书;把价值几十万的 A100 显卡,换成字节 Coze 的零代码拖拉拽;把“苹果”是水果还是公司的 7168 维薛定谔状态,变成一句“吃苹果”就能坍缩的童语。
这篇文章,记录了我如何用 10 分钟、0 行代码,搓出一个“中国古代诗人传奇故事机”:

  • 先让“豆包 1.5 Pro”化身“穿梭古今的翰林笔”,自动搜史、写诗、留扣子;
  • 再用循环节点把头条搜索、润色、语音合成串成一条“故事流水线”;
  • 最后点一下“发布”,李白、杜甫、屈原就排着队住进自家后院,随时给娃开讲。

如果你也想过“让大模型说人话”,却卡在显卡、数据集、提示词的黑洞里——那就把这篇当成一张“藏宝图”,一起从 7168 维的向量空间,空降到一个 6 岁小孩都能听懂的盛唐月夜。

一、怎么理解大模型

这里我们首先要要知道两点:

1. 大模型是一份代码

2. LLM 本质是数学

其中 LLM 指的是大型语言模型,比如 ChatGPT、DeepSeek 等;就好比明天(1)温度(2) 两组词,大模型能用 1 和 2 数字来理解它,那么问题来了,比如:苹果 既可以表达一种水果,又可以表达一家公司,每一个词的含义很多,大模型是怎么理解它们的呢?还有就是为什么都说大模型对硬件设备性能要求很高呢?
通俗点来理解:
假设:王子用 1 表示,公主也用 1 表示,是不是可以说它们在某一个领域是相同的,比如说地位。但如果公主用 2 来表示,那么这两个词在某种维度上是不同的,比如说性别

 地位    性别

王子 (2) (1)

公主 (2) (2)

那我们再加两个词,男人,女人

 地位    性别

王子 (2) (1)

公主 (2) (2)

男人 (1) (1)

女人 (1) (2)

有趣的事发生了 :
王子 - 男人 + 女人 === 公主( 2 - 1 + 1 === 2 1 - 1 + 2 === 2)
王子 - 男人 + 女人 === 公主 (2, 1) (1, 1) (1, 2) (2, 2)
我们仅仅用了两个数字,配合加减法,就描述了这个四个词在两个维度上的区别和相互的关系。那如果我们用更多的数字来描述每一个词,3, 10, 100 个 那不就可以从更多的维度上来更细致的描述每一个词之间的关系?
大模型就是这么干的:
GPT1: 用 768 个精确到小数点后 7 位的数字来表示一个词(token)
GPT2: 用 1600 个精确到小数点后 7 位的数字来表示一个词(token)
GPT3: 用 12288 个精确到小数点后 7 位的数字来表示一个词(token)
DPV3: 用 7168 个精确到小数点后 7 位的数字来表示一个词(token)
用一堆数字让 LLM 在它的脑海中表示一个词这就叫 词嵌入
用 2 个数字表示就相当于把这个词嵌入到 2 维平面,用 3 个数字表示就相当于把这个词嵌入到 3 维平面,用7168 个数表示就相当于把这个词嵌入到 7168 维平面,虽然我画不出来,你也想象不出来,但是它在数学上就是存在的,这就是为什么叫词嵌入。那每一个词的词嵌入的值是怎么定出来的呢? 最开始就是随机的,所有的词都随机散布在空间里,在大模型训练的阶段,根据人类现有的大量文字的分布规律将每一个词收拾到最合适的位置上,意思相近的词通常会离的更近一些。所以在空间上的位置关系就可以体现出每个词的含义。
那么像苹果这个词,即可以是水果,又可以是公司,那它怎么排布在空间呢? 其实要根据它跟其他的词的结合来定,就像薛定谔的猫,当它和其他词连接在一起,会发生计算,改变它原来的值,让它拥有更具体的含义。 比如: + 苹果 (苹果词嵌入的值就会发生计算,变更成水果那个领域的意思)所以每一句话,都带来了大量的数学计算,这就是为什么需要强力的显卡算力的原因。

3. 大模型的远程调用和本地部署

在这里我们简单打个比方来解释远程调用和本地部署:大模型远程调用就像把自家水龙头接到城市公共水管,拧开就有水,无需自己挖井铺管,但水价、水质、停水与否都听自来水公司;本地部署则是干脆在院子里打一口私井,再装上自家水泵,想何时抽水、抽多少、用来浇花还是酿酒全由自己说了算,只是打井买泵的钱、后期电机维护都得自己扛,于是省不省心、花不花钱、数据留在谁家,就成了选择公用水还是私井水的根本区别。像我们个体用户为了更加方便基本使用的都是远程调用,然而对于一些公司而言,用大模型是来完成自家某些项目的,他们当然不希望自家项目被其他公司所保留,那么他们就会采取本地部署的方式来使用大模型。

二、什么是智能体和智能体工作流

智能体Agent)是指能够感知环境、做出决策并根据决策采取行动的系统。在 AI 大模型应用中,智能体可以理解为利用大模型核心能力,通过适当的流程编排,构成能够感知、理解、分析环境信息,并根据环境信息(通常是用户输入)和指导信息(通常是提示词)进行综合处理,得到用户需要反馈的独立应用单元。在这其中,构成智能体主要功能的流程,就叫智能体的核心工作流,也叫智能体工作流。这么说还是比较抽象,让我通过一个简单的例子来说明。
假设我们要设计一个给 6-12 岁孩子讲中国古代诗人传奇故事的 AI 应用,该应用设定一个故事主题,让 AI 全网搜索并讲述经典民间故事。在讲述故事时,我们要求的内容和语言风格是适合 6-12 岁孩子的年龄和认知,不要超出年龄范围。另外讲述故事时,要求采用比较恰当的语音将故事念出来。
上述需求的核心就是一个讲故事的智能体,很显然,它不能只通过简单地调用文本模型来实现的。首先,很容易知道,这个智能体需要具备搜索引擎能力和语音合成能力。其次,由于我们对故事的内容和文字风格有所要求,因此也需要有改写内容和润色语言表达的能力。这些能力必须通过合理的工作流编排,才可以最终实现智能体的功能。
下面这张图,大致描绘了这个智能体的整体工作逻辑,也即这个智能体的核心工作流。

ai模型.jpg

三、智能体工作流的设计

我们常见的工具就是这两个 difyCoze ,在这里我们使用字节旗下的Coze, 首先我们创建一个工作流,叫做 poets_story,工作流的描述为“让 AI 给 6-12 岁孩子讲中国古代诗人传奇故事”。点击确认按钮,就进入工作流主界面,此时界面上只有“开始”和“结束”两个节点。 接下来,我们来创建第一个新节点。点击添加节点,选择大模型节点:这样就添加了一个新的大模型节点, 我们来配置它: 我们将开始节点的输出接入大模型节点的输入,点击大模型节点,打开配置面板,模型选择“豆包 1.5 Pro”,输入选择开始节点的 input。 接下来,我们要配置系统提示词和用户提示词,系统提示词就是我们给当前 AI 节点的操作指令。这个节点呢,我们要让它做一件事,就是根据用户原始输入信息,判断用户的意图,提供一组 query 词,便于后续执行网页搜索。于是我们在配置面板中输入系统提示词和用户提示词: 系统提示词如下:

你是一台“穿梭古今的翰林笔”,肚子里装着《全唐诗》《全宋词》《元曲选》《列朝诗集》以及地方志、野史、民间传说。任务:把用户搜到的零散文言碎片,缝成一段“能拍成国风动画”的传奇故事,不限朝代,从屈原到龚自珍都在射程之内。
写作纪律:
1. 先读搜索结果——把网页里出现的朝代、年号、地名、官职、诗句、典故全部标成“史实锚点”,不许篡改;没搜到的细节,才可合理虚构。  
2. 故事线必须“三幕”:①诗人出场(带一句招牌诗或断句);②一次真实历史冲突(官场、战争、爱情、流亡均可,须与搜索结果对得上);③高光结局(或仙去、或封侯、或埋骨青山,同样须与搜索结果一致)。  
3. 语言节奏像评书:每 200 字左右抛一个“扣子”(悬念或诗句),让 7 岁孩子也能听懂。  
4. 若搜索结果出现“民间传说”“里巷曰”字样,优先采信传说版本,放大浪漫色彩。  
5. 结尾留一条“诗人行踪线索”,方便下次续写续集。  
铁律:先核实搜索结果,再动笔;无出处的内容,一律不写。

用户提示词我们只需要直接使用原始输入,Coze 中可以用模板变量:{{input}} 这里用双花括号表示模板变量,input 对应模块的输入参数名,默认就是 input。coze2.png 最后我们还要配置输出项。我们一共要配置两个输出项,一个是 querys,类型是字符串数组,表示生成的多个搜索项,另一个是 intent,表示用户意图。 coze1.png

注意,这个 intent 并不是我们后续模块要用到的内容,但是我们仍然让 AI 输出,这里其实是用了一个小技巧,就是我们让 AI 输出一些对它生成内容有参考价值的字段,其实是强化了它推理过程中的思考,有助于生成更高质量的内容。
现在我们完成了工作流的第一步,也就是让大模型根据用户输入生成 query。实际上如果你想要测试,我们可以立即测试这一步,只需要将这个节点的输出和结束节点的输入连接在一起,并在结束节点的配置面板中,修改输出变量的参数值就可以。

coze3.png 接下来点击下方的“试运行”按钮。

coze4.pngcoze6.png 在开始节点输入“李白”,点击试运行,我们就可以看到运行结果,它返回了一个 output 数组,里面的内容就是当用户输入“李白”时,准备进一步搜索的 query 内容。
选择“添加节点 > 业务逻辑 > 循环”,添加一个循环节点。将之前创建的“改写 query”节点的输出和循环节点的输入连接起来,并设置循环数组 input 的参数值为前一个节点输出的变量 querys。由于我们循环不需要中间变量,所以我们可以将中间变量删除掉。

coze7.png 接下来我们选中“循环体”,再添加节点,选择“插件 > 头条搜索 > Search”。

coze8.png 我们将 头条搜索 插件的输入输出与循环体的输入输出连接起来,并打开循环体配置面板,设置输入 input_query 值为循环的输入参数 input

coze9.png 再添加一个大模型节点,把它改名为“撰写草稿”,并打开它的配置面板,设置输入 input 值为循环的输入参数 doc_results (系统和用户提示词如下)

coze10.png
为了更好的贴合6-12岁小孩,接下来就是“润色”、“语音合成”和“结束”了,跟上面步骤类似就直接上图了

coze12.png

coze13.png

coze14.pngcoze15.pngCoze 智能体中使用工作流有了工作流,我们再创建智能体就非常简单了。首先,我们先将上面创建的工作流发布一下,发布流程非常简单,只要点击右上角发布按钮,填写一下发布信息,点击确认就发布完成了。接下来我们回到菜单项的“个人空间 > 项目开发”,点击创建按钮创建智能体。我们创建一个新的智能体“中国古代诗人传奇故事”。coze16.png

点击确认后,我们在智能体编排面板中选择“技能 > 工作流”,将我们的工作流添加进去

6e58da24-0631-414c-b9cf-4eab00e38ee4.png

28e9b1f878bf49314eaacf65751498d4.png

结语

  1. 大模型不是“黑盒魔法”,而是一份可拆可装的数学代码——只要把它当成 7168 维的坐标系,就能用向量加减让“王子-男人+女人=公主”这种童话等式成立。
  2. 苹果之所以既能当水果又能当公司,是因为“词嵌入”像薛定谔的猫:语境一碰,向量就坍缩成对应含义;每一次坍缩都需要显卡做海量矩阵乘法,所以算力=水力,缺水就“停水”。
  3. 远程调用是拧城市水龙头,省事但数据在别人水厂;本地部署是院里打私井,贵一点却永远不怕“停水”或“水质超标”。
  4. 把大模型变成“智能体”=给它装上眼(搜索)、手(语音)、脑(提示词流水线);用 Coze 拖拉拽,10 分钟就能让李白自动上网查资料、写评书、配语音,一键发布给 6 岁娃当睡前故事机。
  5. 最终,你得到的不仅是一个会讲故事的 AI,更是一张“大模型乐高说明书”——向量是积木,工作流是图纸,硬件是地基,数据是水源;照着拼,谁都能把 7168 维的数学宇宙,落地成自家后院的一口甜水井。