2026-09-18 · 原文发布日
Gemini多角色循环:生成并审核公务员考试式选择题
手动运行的出题质检流程:初始化主题和迭代计数后,由Google Gemini分饰三角——先生成草稿选择题,再优化,最后以Examiner身份给出结构化JSON审核结论;解析decision字段,若驳回且未满三次,就把反馈意见带回下一轮重新生成,直至通过或达到上限。适合想理解“生成—评审”多智能体循环如何搭建的题库生产者。
原文要点
原工作流为手动触发的n8n流程:先用Initialize State节点写入主题、迭代计数(从1开始)和可选反馈;Google Gemini分饰Generator(生成草稿)、Solver(优化)、Examiner(评审)三个角色;Examiner须输出至少含decision字段(如APPROVED/REJECTED)的合法JSON,解析节点从中提取结论并追加迭代次数与主题元数据;若驳回且未满三次,把反馈带回下一轮重新生成,直至通过或达到上限。需配置Google Gemini (PaLM) API凭据并在三个节点分别选模型。
这次做成什么
在自己的n8n里搭一条“生成—评审”循环:Gemini先出公务员考试式选择题草稿,再优化,再以Examiner身份输出结构化JSON审核结论,驳回则带反馈重试,最多三轮,输出最终通过的题目。下面流程与提示词均为本站独立设计,界面按钮名称以你实际n8n版本为准。
准备什么
- 一个可用的n8n实例(云端或自托管),有新建与手动执行工作流的权限
- Google Gemini (PaLM) API凭据,已在n8n的Credentials中配置完成
- 一个明确的出题主题字符串,例如“中国古代史常识”
- 理解n8n的If分支与表达式引用基础操作
具体怎么做
手动触发并初始化状态
新建工作流,用Manual Trigger作为起点,后接一个Set节点命名为Initialize State,写入三个字段:topic(字符串,如“中国古代史常识”)、iteration(数字,设为1)、feedback(字符串,留空)。手动执行一次确认字段都能读出。
生成草稿选择题
接Google Gemini节点命名为Generator,模型任选你已开通的Gemini模型,提示词中同时引用{{$json.topic}}和{{$json.feedback}}:要求生成一道四选一选择题,含题干、四个选项、正确答案和解析;若feedback非空,必须逐条修正反馈中指出的问题。
优化与评审
再接一个Gemini节点Solver,把Generator输出的题目文本传入,要求润色题干、消除歧义选项。然后接Gemini节点Examiner,提示词强制其只输出一个JSON对象,至少包含decision字段(只能取APPROVED或REJECTED)和feedback字段(驳回时的修改意见)。
解析审核结论
接Code节点,对Examiner的文本输出做JSON.parse,取出decision与feedback,并把当前iteration和topic合并进输出对象,得到形如{decision,feedback,iteration,topic,question}的记录。解析失败时把decision置为REJECTED并写明原因,避免流程静默通过。
分支循环与输出
接If节点:条件为decision等于REJECTED且iteration小于3。走True分支时用一个Set节点把iteration加1、把Examiner的feedback写回feedback字段,然后连线回到Generator节点形成循环;走False分支(通过或已达3次)时把最终记录作为工作流结果输出,结束。
可直接复制的材料
Generator生成提示词
本站独立编写的示例提示词,{{$json.topic}}与{{$json.feedback}}为n8n表达式,需按你的节点实际字段名调整。
你是一名公务员考试命题人。请围绕主题「{{$json.topic}}」出一道单项选择题。
要求:
1. 题干不超过80字,考查一个明确知识点;
2. 给出A、B、C、D四个选项,只有一个是正确答案,干扰项要有迷惑性但不能有争议;
3. 给出正确答案字母和不超过60字的解析;
4. 输出格式为:题干/选项A-D/答案/解析,分四段。
【反馈】{{$json.feedback}}
如果上面反馈不为空,请逐条修正反馈指出的问题后再输出。Examiner评审提示词
本站独立编写的示例提示词;decision取值必须限定为APPROVED/REJECTED,否则下游If分支无法判断。
你是严格的题库审核员(Examiner)。请审核下面这道选择题:
【题目】{{$json.draft}}
审核标准:答案唯一且正确;解析与答案一致;无知识性错误;干扰项无歧义;主题与「{{$json.topic}}」相关。
只输出一个JSON对象,不要输出任何其他文字,格式:
{"decision":"APPROVED或REJECTED","feedback":"若驳回,用一句话写明最主要的修改意见;若通过,填“通过”"}一轮循环的测试状态数据
本站虚构的单条测试记录,用于在Code/If节点调试解析与分支,非原工作流文件。
{"topic":"中国古代史常识","iteration":2,"feedback":"上一轮的解析与答案字母不一致,请让解析明确指向正确选项","draft":"题干:下列哪一项不属于“战国七雄”?\nA. 齐国 B. 楚国 C. 鲁国 D. 秦国\n答案:C\n解析:战国七雄为齐、楚、燕、韩、赵、魏、秦,鲁国不在其中。"}输入与输出示例
本站虚构演示,非原作者运行结果;你的模型输出格式可能不同,需按实际调整解析代码。
输入
topic=“中国古代史常识”,iteration=1,feedback为空,在Generator节点用上面的生成提示词手动执行一轮。对应输出
解析后的记录示例:{"decision":"APPROVED","feedback":"通过","iteration":1,"topic":"中国古代史常识","question":{"stem":"下列哪一项不属于“战国七雄”?","options":["A. 齐国","B. 楚国","C. 鲁国","D. 秦国"],"answer":"C","explanation":"战国七雄为齐、楚、燕、韩、赵、魏、秦,鲁国不在其中。"}}做完检查这些
- Examiner节点的输出能被Code节点JSON.parse成功,且包含decision字段,取值仅为APPROVED或REJECTED
- 把decision故意改成REJECTED后,流程会回到Generator且iteration从1变为2,feedback被带入下一轮提示词
- 连续三次REJECTED后流程停在第3次并输出最终记录,不会进入第4轮
- 最终输出记录里同时包含question内容、iteration和topic三个字段
容易卡住的地方
- Examiner若输出了JSON以外的解释文字,JSON.parse会抛错,需在提示词里强调“只输出JSON”并在Code节点加try/catch兜底
- 三个Gemini节点都要单独选择已配置的Google Gemini (PaLM)凭据,漏选会在执行时报凭据缺失
- 循环回连Generator时若忘记把iteration加1,If条件恒真会形成无限循环
- 原文只描述流程结构,正文未附提示词原文,本指南的字段名、提示词与节点命名均为本站独立设计,与原模板可能不同,需在你自己的n8n里逐一核对
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Validate civil service exam questions with an AI council using Google Gemini
- 原作者
- Pawan
- 原始发布日期
- 2026-09-17T20:14:49.651Z
- 来源
- https://n8n.io/workflows/19695