四步打造赛博智商秤!0.01元解锁「防割韭菜」IQ测试

2025-11-14 11:40:54
文章摘要
✨ おはようございます(大家好),继蚂蚁百宝箱MCP的实战篇(三)来喽,此次的落脚点在于游戏娱乐,本次搭建的工作流智能体的名称叫做测测你的IQ,本篇文章在于分享创作的一些心得以及历程,话不多说,直接启动!!!

✨ おはようございます(大家好),继蚂蚁百宝箱MCP的实战篇(三)来喽,此次的落脚点在于游戏娱乐,本次搭建的工作流智能体的名称叫做测测你的IQ,本篇文章在于分享创作的一些心得以及历程,话不多说,直接启动!!!



​一、开局一张卡,智商全靠“肝”​


> ​当代年轻人测IQ现状:​​

> 题目?看不懂!分数?不敢查!结果?图个乐!_

> ​直到我掏出这款赛博智商检测仪——「测测你的IQ」​​


智能体效果展示(附界面、卡片、演示视频👇)


用户:​​ “这智能体能处,有分它真算!”


- ​🎮 交互式卡片:10道烧脑题,专治“自认天才”症候群

- ​📊 智商可视化​:生成带梗文案的IQ海报

- ​💰 付费墙骚操作:扫码0.01元解锁报告 → ​真·知识付费刺客

- ​🧠 科普彩蛋:附赠《智商防坑指南》→ 拒绝“爱因斯坦脑”智商税




二、灵感来源:从“自虐测试”到“科学整活”​


​破防瞬间💥:


> 某次被网红IQ测试坑骗29.9元后,本冤种在深夜怒刷科普视频——

> 突然刷到《90%的智商测试都是耍流氓》的硬核解析:

> ​​“焯!题库+模糊算法=割韭菜?这不管不行啊!”​


​痛点暴击(智商测试圈的魔幻现实):


- 🤹 娱乐测试像地摊算命,专业测试贵过奶茶自由

- 📉 同一人三天测出三个分数段,稳定性堪比比特币

- 💸 付费墙后只有“天才”“普通人”“加油哦”三档废话文学


​于是…

❗️ ​本INTJ拍案而起​:


> 用技术给智商测试造个“公平秤”——

> ​科学层​:爬取权威题库+严谨计分 → 测试界“米其林指南”

> ​娱乐层​:梗图海报+段子评分 → 结果页变吐槽大会

> ​闭环层:0.01元解锁 → ​真·赛博功德(赞助科普创作)​






三、架构逆袭:从“人工智障”到“智商裁判”​​


​初代黑历史(用户锐评:“这AI怕不是来搞笑的?”):


> ❌ 变量无法更新 → 用户:“永远刷不到第三题!”

> ❌ 题库固定 → 用户:“第二次刷题全记得!”

> ❌ 海报崩成马赛克 → “这像素是诺基亚拍的?”

> ❌ 支付状态没有记忆→ “直接白嫖咯!”


​重构狠活​(键盘冒火星版🔥):


模块

技术骚操作

用户爽点

科普达人

​夸克+Bing双挖学术文献

​夸克+Bing双挖学术文献

海报生成

Minimax生图+HTML部署→ 文案带梗图炫酷

朋友圈装X神器

支付触发

支付宝MCP → 结果页自动埋支付锚点

扫码丝滑过德芙

动态题库

权威题库 → 随机组卷防刷题

每次测试都像开盲盒



​流程图の真相

还有点像凤凰有木有,嘻嘻!!

```
flowchart TD
A[开始节点] --> B[变量节点: 获取会话状态]
    B --> C[意图识别节点]
    C -->|开始测试| D[代码节点: 状态处理]
    C -->|回答问题| D
    C -->|查看结果| D
    C -->|帮助说明| D
    C -->|其他| D
    D --> E[分支节点: 动作路由]
    E -->|show_question| F[卡片消息节点: 题目展示]
    E -->|test_completed| G[卡片消息节点: 测试完成]
    E -->|show_result| H[文本大模型节点: 结果生成]
    E -->|show_help| I[文本大模型节点: 帮助信息]
    E -->|default| J[文本大模型节点: 默认回复]
    F --> K[变量节点: 保存会话状态]
    G --> K
    H --> L[卡片消息节点: 结果卡片]
    I --> K
    J --> K
    L --> K
    K --> M[结束节点]
```




四、4步解决智能体构建


1️⃣ ​框架设计


- 选择基座模型:Qwen3-235B-A22B(思考模式、强逻辑推理、支持插件)/千问2.5max/千问max

- 设置智能体类型:对话型+工作流

- 设置基础信息:智能体名称+简介+Logo


2️⃣ ​MCP斗地主:四张王牌碾压开发痛点


​王牌组合​:


> ♠️ ​Bing CN /fetch MCP​:全网爬取IQ科普知识(斯坦福-比奈量表变形题)

> ♥️ ​生成图片 MCP:用提示词控制海报风格

> ♦️ ​支付宝/文本处理 MCP​:一键支付生成

> ♣️ ​网页部署/Minimax MCP​:美观海报展示


3️⃣ ​代码与变量工程(成功关键!)

第一步:

我们需要获取变量,避免变量被初始化,没有记忆,无法为节点线传输正确数据,影响工作流进行,长期记忆尤为重要。

开始我们可以开启运行环境以及附加数据,并用两个变量节点获取会话状态和支付状态。

第二步:意图识别

我将意图分为五类:开始测试、回答问题、查看结果、帮助说明以及其他,能确保逻辑的通畅以及分支的稳定执行。


第三步:状态处理与进一步分支

我们需要对会话状态等数据进行配置以及各种参数赋值,例如:current_question,correct_answers,current_question_dat,session_data,questions_total,trade_num等,并根据参数值,判断next_action,来进一步的意图导向,当然这里的状态处理部分还可以嵌入题库知识库,用以动态随机读取(可自行扩展)。

```
/**
 * 处理IQ测试状态和用户输入 - 扩展题库版本
 * @param {Object} event - 输入项的集合
 * @param {Object} context - 包含环境参数、应用ID等信息
 * @return {Object} data - 返回的数据集合
 */
exports.main = async (event, context) => {
  // 获取输入参数
  const userInput = event.userInput || '';
  const intent = event.intent || '';
  
  // 从变量中获取会话状态,如果不存在则初始化
  let sessionData = event.sessionData || {};
  
  // 打印当前会话状态,用于调试
  console.log('当前会话状态:', JSON.stringify(sessionData));
  
  // 初始化或获取会话状态
  let currentQuestion = sessionData.current_question !== undefined ? sessionData.current_question : 0;
  let correctAnswers = sessionData.correct_answers !== undefined ? sessionData.correct_answers : 0;
  let userAnswers = sessionData.user_answers || [];
  let testCompleted = sessionData.test_completed || false;
  let selectedQuestions = sessionData.selected_questions || [];
  let selectedQuestionIds = sessionData.selected_question_ids || [];
  
  // 生成新的交易编号,确保每次测试都不同
  let tradeNum;
  if (intent === '开始测试' || !sessionData.trade_num) {
    tradeNum = 'IQ' + (Math.floor(Math.random() * 1000000) + 100000);
    console.log(`生成新的交易编号: ${tradeNum}`);
  } else {
    tradeNum = sessionData.trade_num;
  }
  
  // IQ测试题目数据 - 扩展到30
  const allQuestions = [
    {
      id: 1,
      question: '如果2+3=8,3+7=27,4+5=32,那么7+8=?',
      options: ['A. 56', 'B. 60', 'C. 63', 'D. 98'],
      answer: 'D',
      explanation: '这是一个数学规律题。规律是:第一个数 × 第二个数 + 第一个数 × (第一个数-1)。所以7+8 = 7×8 + 7 × (7-1) = 56 + 42 = 98。'
    },
    {
      id: 2,
      question: '找出不属于该组的数字:1, 4, 9, 16, 25, 36, 49, 64, 81, 101',
      options: ['A. 1', 'B. 36', 'C. 64', 'D. 101'],
      answer: 'D',
      explanation: '这组数字是完全平方数:1=1², 4=2², 9=3², 16=4², 25=5², 36=6², 49=7², 64=8², 81=9²。但101不是这个序列的下一个数,应该是100。'
    },
    {
      id: 3,
      question: '如果APPLE=50,BANANA=33,那么ORANGE=?',
      options: ['A. 56', 'B. 60', 'C. 63', 'D. 69'],
      answer: 'B',
      explanation: '这是一个字母计算题。正确规律是:字母位置值之和:(15+18+1+14+7+5) = 60。'
    },
    {
      id: 4,
      question: '一个数列:3, 6, 18, 72, ?,下一个数是什么?',
      options: ['A. 144', 'B. 288', 'C. 360', 'D. 432'],
      answer: 'C',
      explanation: '这个数列的规律是:×2, ×3, ×4, ×5...。所以下一个数是72×5=360。'
    },
    {
      id: 5,
      question: '如果所有的哺乳动物都有毛发,而鲸鱼是哺乳动物,那么:',
      options: ['A. 鲸鱼有毛发', 'B. 鲸鱼没有毛发', 'C. 有些鲸鱼有毛发', 'D. 信息不足,无法判断'],
      answer: 'A',
      explanation: '这是一个逻辑推理题。根据前提"所有的哺乳动物都有毛发"和"鲸鱼是哺乳动物",可以推出"鲸鱼有毛发"。这是三段论的有效推理形式。'
    },
    {
      id: 6,
      question: '找出规律:1, 11, 21, 1211, 111221, ?',
      options: ['A. 312211', 'B. 1221', 'C. 122221', 'D. 212211'],
      answer: 'A',
      explanation: '这是一个描述数列。每个数字描述前一个数字的组成:1(一个1)→11(两个1)→21(一个2一个1)→1211(一个1一个2两个1)→111221(三个1两个2一个1)→312211(一个3一个1两个2两个1)。'
    },
    {
      id: 7,
      question: '如果一个立方体的每条边长增加一倍,它的体积会增加多少倍?',
      options: ['A. 2倍', 'B. 4倍', 'C. 7倍', 'D. 8倍'],
      answer: 'C',
      explanation: '立方体的体积公式是V=a³,其中a是边长。如果边长增加一倍变为2a,则新体积为V\'=(2a)³=8a³=8V。所以体积增加了7倍,变为了8倍。'
    },
    {
      id: 8,
      question: '一个家庭有两个孩子,已知其中一个是女孩,那么两个孩子都是女孩的概率是多少?',
      options: ['A. 1/4', 'B. 1/3', 'C. 1/2', 'D. 2/3'],
      answer: 'B',
      explanation: '两个孩子的可能性有:(男,男)、(男,女)、(女,男)、(女,女),每种可能性概率相等为1/4。已知其中一个是女孩,排除(男,男),剩下(男,女)、(女,男)、(女,女)三种可能,概率分别为1/3。其中两个都是女孩的情况只有(女,女),概率为1/3。'
    },
    {
      id: 9,
      question: '如果6个人6分钟能刷6面墙,那么12个人12分钟能刷多少面墙?',
      options: ['A. 12面', 'B. 24面', 'C. 36面', 'D. 48面'],
      answer: 'B',
      explanation: '设每个人每分钟能刷x面墙,则6个人6分钟能刷6面墙,即6×6×x=6,解得x=1/6。那么12个人12分钟能刷12×12×(1/6)=24面墙。'
    },
    {
      id: 10,
      question: '在一个标准的扑克牌中,抽出一张红桃的概率是多少?',
      options: ['A. 1/4', 'B. 1/2', 'C. 1/13', 'D. 13/52'],
      answer: 'A',
      explanation: '标准扑克牌有4种花色(红桃、方块、黑桃、梅花),每种花色13张牌,共52张。抽出红桃的概率是13/52=1/4。'
    },
    {
      id: 11,
      question: '一列火车以每小时60公里的速度行驶,需要多少时间才能完全通过一个长度为500米的隧道?假设火车长度为500米。',
      options: ['A. 30秒', 'B. 60秒', 'C. 90秒', 'D. 120秒'],
      answer: 'B',
      explanation: '火车要完全通过隧道,需要行驶的总距离是火车长度加隧道长度,即500+500=1000米。火车速度是60公里/小时=1000米/分钟=16.67米/秒。所以通过时间是1000÷16.67≈60秒。'
    },
    {
      id: 12,
      question: '如果所有的A都是B,所有的B都是C,那么:',
      options: ['A. 所有的A都是C', 'B. 所有的C都是A', 'C. 没有A是C', 'D. 信息不足,无法判断'],
      answer: 'A',
      explanation: '这是一个三段论推理。如果所有的A都是B,所有的B都是C,那么根据三段论的传递性,可以推出所有的A都是C。'
    },
    {
      id: 13,
      question: '找出规律:2, 6, 12, 20, 30, ?',
      options: ['A. 36', 'B. 40', 'C. 42', 'D. 56'],
      answer: 'C',
      explanation: '这个数列的规律是:每项比前一项增加的数依次为4, 6, 8, 10, 12...。所以下一项应该是30+12=42。'
    },
    {
      id: 14,
      question: '如果今天是星期二,那么100天后是星期几?',
      options: ['A. 星期三', 'B. 星期四', 'C. 星期五', 'D. 星期六'],
      answer: 'B',
      explanation: '一周有7天,100÷7=14余2,所以100天后比今天多2天,星期二加2天是星期四。'
    },
    {
      id: 15,
      question: '一个正方形的面积是16平方厘米,它的对角线长度是多少厘米?',
      options: ['A. 4', 'B. 4√2', 'C. 8', 'D. 8√2'],
      answer: 'B',
      explanation: '正方形面积是16平方厘米,所以边长是4厘米。根据勾股定理,对角线长度是4√2厘米。'
    },
    {
      id: 16,
      question: '计算:(3^4 - 2^5) ÷ 7',
      options: ['A. 3', 'B. 4', 'C. 5', 'D. 7'],
      answer: 'D',
      explanation: '3^4 = 81, 2^5 = 32, (81 - 32) = 49, 49 ÷ 7 = 7。'
    },
    {
      id: 17,
      question: '一个数的平方是它的三倍,这个数是多少?',
      options: ['A. 0', 'B. 1', 'C. 3', 'D. 0或3'],
      answer: 'D',
      explanation: '设这个数为x,则x² = 3x,整理得x² - 3x = 0,x(x - 3) = 0,所以x = 0或x = 3。当x = 0时,0² = 0 = 3×0,等式成立;当x = 3时,3² = 9 = 3×3,等式也成立。'
    },
    {
      id: 18,
      question: '如果 log₂(x) = 3,那么 x 等于多少?',
      options: ['A. 6', 'B. 8', 'C. 9', 'D. 12'],
      answer: 'B',
      explanation: 'log₂(x) = 3 意味着 2³ = x,所以 x = 8。'
    },
    {
      id: 19,
      question: '一个圆的面积是36π,它的周长是多少?',
      options: ['A. 6π', 'B. 12π', 'C. 18π', 'D. 24π'],
      answer: 'B',
      explanation: '圆的面积公式是A = πr²,所以36π = πr²,r² = 36,r = 6。圆的周长公式是C = 2πr,所以C = 2π×6 = 12π。'
    },
    {
      id: 20,
      question: '解方程:2x² - 5x - 3 = 0',
      options: ['A. x = -1/2 或 x = 3', 'B. x = 1/2 或 x = 3', 'C. x = -1/2 或 x = -3', 'D. x = 1/2 或 x = -3'],
      answer: 'A',
      explanation: '使用求根公式:x = (-b ± √(b² - 4ac)) / (2a),其中a = 2, b = -5, c = -3。代入得:x = (5 ± √(25 + 24)) / 4 = (5 ± √49) / 4 = (5 ± 7) / 4。所以x = (5 + 7) / 4 = 3或x = (5 - 7) / 4 = -1/2。'
    },
    {
      id: 21,
      question: '如果 sin(θ) = 0.6,那么 cos(θ) 等于多少?',
      options: ['A. 0.6', 'B. 0.8', 'C. 0.36', 'D. 0.64'],
      answer: 'B',
      explanation: '根据三角恒等式:sin²(θ) + cos²(θ) = 1,所以cos²(θ) = 1 - sin²(θ) = 1 - 0.6² = 1 - 0.36 = 0.64,cos(θ) = 0.8(因为通常我们考虑第一象限,cos(θ) > 0)。'
    },
    {
      id: 22,
      question: '一个等差数列的首项是3,公差是4,第10项是多少?',
      options: ['A. 36', 'B. 39', 'C. 40', 'D. 43'],
      answer: 'B',
      explanation: '等差数列的通项公式是an = a1 + (n - 1)d,其中a1是首项,d是公差。代入a1 = 3, d = 4, n = 10,得a10 = 3 + (10 - 1)×4 = 3 + 36 = 39。'
    },
    {
      id: 23,
      question: '在一个袋子里有5个红球和3个蓝球,随机抽取2个球,抽到2个红球的概率是多少?',
      options: ['A. 5/28', 'B. 10/28', 'C. 15/28', 'D. 20/28'],
      answer: 'B',
      explanation: '总共有C(8,2) = 28种不同的抽取方式。抽到2个红球的方式有C(5,2) = 10种。所以概率是10/28。'
    },
    {
      id: 24,
      question: '如果 f(x) = x² + 2x + 1,那么 f(3) 等于多少?',
      options: ['A. 12', 'B. 14', 'C. 16', 'D. 18'],
      answer: 'C',
      explanation: 'f(3) = 3² + 2×3 + 1 = 9 + 6 + 1 = 16。'
    },
    {
      id: 25,
      question: '一个正方体的表面积是96平方厘米,它的体积是多少立方厘米?',
      options: ['A. 16', 'B. 32', 'C. 64', 'D. 128'],
      answer: 'C',
      explanation: '正方体的表面积公式是S = 6a²,其中a是边长。所以96 = 6a²,a² = 16,a = 4。正方体的体积公式是V = a³,所以V = 4³ = 64。'
    },
    {
      id: 26,
      question: '如果所有的猫都有尾巴,而Fluffy有尾巴,那么:',
      options: ['A. Fluffy一定是猫', 'B. Fluffy可能是猫', 'C. Fluffy不是猫', 'D. 信息不足,无法判断'],
      answer: 'B',
      explanation: '这是一个逻辑推理题。从"所有的猫都有尾巴"可以推出"如果是猫,那么有尾巴",但不能推出"如果有尾巴,那么是猫"(这是肯定后件谬误)。所以从"Fluffy有尾巴"不能确定Fluffy是猫,只能说Fluffy可能是猫。'
    },
    {
      id: 27,
      question: '以下哪个选项是演绎推理的例子?',
      options: ['A. 我见过的所有乌鸦都是黑色的,所以所有乌鸦都是黑色的', 'B. 所有人都会死,苏格拉底是人,所以苏格拉底会死', 'C. 每次下雨时地面都会湿,地面是湿的,所以下雨了', 'D. 大多数鸟类会飞,企鹅是鸟类,所以企鹅会飞'],
      answer: 'B',
      explanation: '演绎推理是从一般到特殊的推理,如果前提为真,结论必然为真。A是归纳推理;B是有效的三段论演绎推理;C是肯定后件谬误;D是概率推理且结论错误。'
    },
    {
      id: 28,
      question: '如果"有些A是B"和"有些B是C"都为真,那么以下哪个陈述一定为真?',
      options: ['A. 有些A是C', 'B. 所有A都是C', 'C. 没有A是C', 'D. 以上都不一定为真'],
      answer: 'D',
      explanation: '从"有些A是B"和"有些B是C",不能确定A和C之间的关系。可能有些A是C(如果这些A同时也是B和C),也可能没有A是C(如果是B的A和是C的B没有交集)。所以以上选项都不一定为真。'
    },
    {
      id: 29,
      question: '在一个岛上,居民要么总是说真话,要么总是说假话。一个居民说:"我有时说真话,有时说假话。"这个居民是:',
      options: ['A. 总是说真话的人', 'B. 总是说假话的人', 'C. 有时说真话,有时说假话的人', 'D. 无法确定'],
      answer: 'B',
      explanation: '如果这个居民总是说真话,那么他的陈述"我有时说真话,有时说假话"应该为真,但这与"总是说真话"矛盾。如果这个居民总是说假话,那么他的陈述是假的,实际上他要么总是说真话,要么总是说假话,这与题设一致。所以他是总是说假话的人。'
    },
    {
      id: 30,
      question: '三个盒子,一个装苹果,一个装香蕉,一个装苹果和香蕉。盒子上的标签分别是"苹果"、"香蕉"和"苹果和香蕉",但所有标签都是错的。如果只允许从一个盒子中取出一个水果,最少需要看几个盒子才能确定所有盒子的内容?',
      options: ['A. 1个', 'B. 2个', 'C. 3个', 'D. 无法确定'],
      answer: 'A',
      explanation: '因为所有标签都是错的,所以"苹果和香蕉"标签的盒子不可能装有苹果和香蕉,只能是单一水果。如果从这个盒子中取出一个水果,比如是苹果,那么这个盒子装的是苹果。标有"香蕉"的盒子不可能装香蕉,也不可能装苹果(因为装苹果的盒子已经确定),所以它装的是苹果和香蕉。标有"苹果"的盒子不可能装苹果,只能装香蕉。所以只需要看1个盒子就能确定所有盒子的内容。'
    }
  ];
  
  // 处理用户意图
  let nextAction = 'default';
  let currentQuestionData = null;
  
  if (intent === '开始测试') {
    // 重置测试状态
    currentQuestion = 0;
    correctAnswers = 0;
    userAnswers = [];
    testCompleted = false;
    
    // 随机选择10道题目
    selectedQuestions = [];
    selectedQuestionIds = [];
    
    // 创建一个包含029的数组(对应30道题的索引)
    const indices = Array.from(Array(allQuestions.length).keys());
    
    // 随机打乱数组
    for (let i = indices.length - 1; i > 0; i--) {
      const j = Math.floor(Math.random() * (i + 1));
      [indices[i], indices[j]] = [indices[j], indices[i]];
    }
    
    // 选择前10个索引对应的题目
    for (let i = 0; i < 10; i++) {
      selectedQuestions.push(allQuestions[indices[i]]);
      selectedQuestionIds.push(allQuestions[indices[i]].id);
    }
    
    nextAction = 'show_question';
    currentQuestionData = selectedQuestions[0];
    console.log('开始测试,随机选择了题目:', selectedQuestionIds);
  }
  else if (intent === '回答问题' && !testCompleted) {
    // 从用户输入中提取选项(A/B/C/D)
    let userAnswer = '';
    if (userInput.includes('A') || userInput.includes('a')) {
      userAnswer = 'A';
    } else if (userInput.includes('B') || userInput.includes('b')) {
      userAnswer = 'B';
    } else if (userInput.includes('C') || userInput.includes('c')) {
      userAnswer = 'C';
    } else if (userInput.includes('D') || userInput.includes('d')) {
      userAnswer = 'D';
    }
    
    // 更新用户答案数组
    userAnswers.push(userAnswer);
    
    // 检查答案是否正确
    if (currentQuestion < selectedQuestions.length && userAnswer === selectedQuestions[currentQuestion].answer) {
      correctAnswers += 1;
      console.log(`答案正确! 当前正确数: ${correctAnswers}`);
    } else {
      console.log(`答案错误! 当前正确数: ${correctAnswers}`);
    }
    
    // 更新当前题目序号
    currentQuestion += 1;
    
    // 判断是否完成所有题目
    if (currentQuestion >= selectedQuestions.length) {
      testCompleted = true;
      nextAction = 'test_completed';
      console.log('测试完成');
    } else {
      nextAction = 'show_question';
      currentQuestionData = selectedQuestions[currentQuestion];
      console.log(`进入下一题: ${currentQuestion + 1}`);
    }
  }
  else if (intent === '查看结果' && testCompleted) {
    nextAction = 'show_result';
    // 确保currentQuestionData不为null
    currentQuestionData = {
      question: '测试已完成',
      options: []
    };
  }
  else if (intent === '帮助说明') {
    nextAction = 'show_help';
    // 确保currentQuestionData不为null
    currentQuestionData = {
      question: '帮助信息',
      options: []
    };
  }
  else if (testCompleted) {
    nextAction = 'show_result';
    // 确保currentQuestionData不为null
    currentQuestionData = {
      question: '测试已完成',
      options: []
    };
  }
  else if (currentQuestion > 0 && !testCompleted) {
    nextAction = 'show_question';
    currentQuestionData = selectedQuestions[currentQuestion];
    console.log(`继续当前题目: ${currentQuestion + 1}`);
  }
  else {
    nextAction = 'default';
    // 确保currentQuestionData不为null
    currentQuestionData = {
      question: '欢迎参加IQ测试',
      options: []
    };
  }
  
  // 更新会话数据
  const updatedSessionData = {
    current_question: currentQuestion,
    correct_answers: correctAnswers,
    user_answers: userAnswers,
    test_completed: testCompleted,
    trade_num: tradeNum,
    selected_questions: selectedQuestions,
    selected_question_ids: selectedQuestionIds,
    all_questions: allQuestions // 保存所有题目,以便结果生成时使用
  };
  
  console.log('更新后状态:', JSON.stringify(updatedSessionData));
  
  // 确保返回的数据不包含null值
  return {
    next_action: nextAction || 'default',
    current_question: currentQuestion || 0,
    correct_answers: correctAnswers || 0,
    current_question_data: currentQuestionData || {
      question: '欢迎参加IQ测试',
      options: []
    },
    session_data: updatedSessionData || {},
    questions_total: selectedQuestions.length || 10,
    trade_num: tradeNum
  };
};
```


以上便是完整的状态处理代码部分。


第四步(核心):卡片变量配置

卡片不是死的,而是随着参数改变而灵活的变化的。

首先你需要选择自己喜欢的组件进行搭配,最常用的便是按钮,文本,图片,音频。

这里主讲文本、按钮两项不可避免的应用。

文本:最主要的是绑定变量的应用,他的内容可以跟随变量值,如:

内容的组合便是:函数+自定义变量+自定义字符串

以上自定义变量便是我的“题目展示”卡片引用的外部变量,利用函数,输出自己想要展现的数据,数据类型分为文本、数字、布尔、数组、对象五种,需要注意的是:

这里的Mock值用于画布展示和变量解析,且一定要打开外部调用。


按钮:里面可以嵌套文本、图像,但最主要的是他的点击事件响应。

按钮的点击事件里的动作配置有:跳转URL、内容填写到输入框、回复消息、图片预览、调用插件工具、下载内容(仅H5场景可用)、复制到剪切板、打开半屏弹窗、变量赋值。

最常用的就是调用插件和回复消息,能够实现强大的UI交互。


第五步:变量存储


别忘了在分支结束前,将变量存储哦!!


4️⃣ ​提示词工程与对话配置


帮助信息提示词:

```
# 角色
你是一个专业的IQ测试引导员,同时具备科普知识查询能力,能够向用户清晰解释IQ测试的相关规则,并提供友好的测试引导服务。你还能够使用搜索引擎查询科普知识,并以Markdown格式整理输出。

## 技能
### 技能 1: 解释IQ测试规则
1. 当用户询问IQ测试规则时,详细说明IQ测试的目的和意义。
2. 提供详细的测试流程,包括题目数量(这里是10道题)、题型和完成方式。
3. 指导用户如何开始测试。
4. 清晰说明支付方式和金额。
5. 解释IQ分数的范围和对应含义。

### 技能 2: 引导用户测试
1. 使用友好、专业的语气回复用户,鼓励用户进行IQ测试。
2. 当用户表示愿意测试时,提供“开始测试”的指令引导。

### 技能 3: 查询和输出科普知识
1. 当用户需要科普知识时,调用fetch/夸克搜索/Bing CN MCP插件进行搜索。
2. 将搜索到的内容总结并以Markdown格式进行排版。
3. 输出排版后的内容给用户。

## 限制
- 在解释IQ测试规则时,必须包含所有用户需要的信息点,不能有遗漏。
- 输出Markdown格式的内容时,必须确保格式正确,便于用户阅读。
- 在与用户交流时,始终保持友好和专业的语气,不得偏离角色设定。
- 对于用户非相关的提问,需要礼貌地引导回主题或表明无法提供相关信息。{{input_hgtoen-currentChatByUser-当前对话信息}}
```

结果生成提示词:

```
用户答对了{{code_ylw0xj-code_node_9ho1kr.output-correct_answers}}道题目,总共{{code_ylw0xj-code_node_k419ax.output-questions_total}}道题。

请根据正确答案数生成IQ得分和评价:

IQ得分映射表:
- 0-1题正确:70-80分,低于平均水平
- 2-3题正确:81-90分,接近平均水平
- 4-5题正确:91-100分,平均水平
- 6-7题正确:101-115分,高于平均水平
- 8-9题正确:116-130分,优秀水平
- 10题正确:131-145分,天才水平

请根据用户的正确答案数,从对应分数范围内随机生成一个具体分数,并提供简洁的评价分析,包括:
1. 对IQ分数的专业解读(1-2句话)
2. 用户思维特点的分析(1-2句话)
3. 可能擅长的领域和职业方向(列出2-3个)
4. 提升认知能力的建议(1-2点)

同时,请根据会话状态中的信息,对用户回答的题目进行详细解析:

1. 获取用户答题的题目列表:{{code_ylw0xj-code_node_vab0rw.output-session_data}}sessionData.selected_questions
2. 获取用户的答案列表:sessionData.user_answers{{code_ylw0xj-code_node_vab0rw.output-session_data}}

对于每道题目,请提供:
- 题目内容
- 选项
- 正确答案
- 用户的选择
- 详细解析(从题目的explanation字段获取{{code_ylw0xj-code_node_vab0rw.output-session_data}})
- 是否答对

请使用图像生成插件,创建一张极简的IQ测试结果海报。海报必须确保所有文字清晰可见,不出现乱码或模糊:
1. "IQ测试结果"标题(**使用最简单的无衬线字体,大号,黑色**)
2. IQ得分数字(**使用最大号字体**,确保数字**清晰**可读)
3. 水平评价(中号字体,简单明了)
4. 正确率:{{code_ylw0xj-code_node_9ho1kr.output-correct_answers}}/{{code_ylw0xj-code_node_k419ax.output-questions_total}}(使用**清晰**的数字)
5. 使用纯蓝色背景,金色文字,避免复杂图案和装饰

重要:必须使用最简单的字体,避免任何可能导致乱码的特殊字符或符号。所有数字必须使用标准阿拉伯数字,确保清晰可见。

然后,请生成一个极简HTML结果页面,使用最基础的HTML和CSS,确保在任何浏览器中都能正确显示,不出现乱码:
1. 使用UTF-8编码,确保中文正常显示
2. 页面标题:IQ测试结果报告
3. 顶部显示生成的IQ测试结果图像(确保图像URL正确)
4. IQ分数和水平评价(使用标准HTML字体,大号)
5. 简短的评价分析(2-3句话,使用标准段落格式)
6. 题目解析部分,使用简单表格或列表格式,确保所有数字和符号正确显示

重要:HTML代码必须极其简洁,只使用最基本的HTML标签和内联CSS。不使用任何外部依赖、字体或复杂样式。所有数学符号使用Unicode标准字符,确保在所有浏览器中正确显示。

最后,请使用deploy_html插件将HTML页面部署到支付宝云,并提供访问链接。

请在回复中包含:
1. 简短的IQ测试结果描述(3-5句话)
2. 生成的图像(**确保图像中的文字清晰可见,不含乱码**)(**图片需要能显示**)
3. HTML页面的访问链接(**确认链接有效**)
4. 一个简短的分享文本(1句话)
```

对话配置:







五、致道友:技术传灯の百宝箱爽点

暴言总结💡:


> 🔥 ​垂直娱乐王炸​:

> “别搞万能测试!你卷不过门萨,但能当年轻人第一款防骗智商仪

>

> 🔥 ​MCP搞钱闭环

> “动态题库×梗图海报×微支付=​自循环脑力健身房

>

> 🔥 ​世代痛点暴击

> “用奶茶价1%的成本,满足‘我到底是不是天才’的终极焦虑”


​最后灵魂暴击❓:


> “你说技术没温度?

> 当用户晒出评分海报时——

> 评论区秒变科学辩论场:

> ‘这算法靠谱吗?’‘求题库来源!’‘支付1分钱值了!’

> ​这波啊,是娱乐需求与科普精神的双向奔赴


开发爽点

1. 零代码组装复杂能力

    例如:调用「支付宝MCP打赏」就像搭积木,无需处理支付接口协议

2. ​跨平台资源整合

    例如:Bing抓取+网页部署+Minimax绘图构建完整知识矩阵






​附录:MCP全家桶(建议全文背诵)🧠


```

✅ 夸克搜索(薅题库)

✅ Bing CN MCP(查学术文献)

✅ 生成图片(海报生产线)

✅ 支付宝MCP(1分钱信仰充值器)

✅ 文本处理(敏感词过滤器)

✅ Minimax(高清生图)

✅ fetch(核心内容爬取)

```


end



声明:该内容由作者自行发布,观点内容仅供参考,不代表平台立场;如有侵权,请联系平台删除。
标签:
自然语言处理
工具调用 Agent
自主智能体