Skip to content

About

把「让 AI 有创造力」做成可运行、可评分的流程:多 Agent 生成机制 + Agent Skill + 自动评分基准。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Creativity Engine

把「让 AI 有创造力」做成可运行、可评分的流程:一套多 Agent 生成机制,一份 Agent Skill,一套自动评分基准。

这是什么

这是一个 Node 项目,不需要安装第三方依赖。它把创造力研究里几个有出处的做法拼成一条流水线:

  • 每路生成者绑定一条创造力技法(SCAMPER、TRIZ 矛盾消解、结构映射类比、概念融合等 12 条,见 data/operators.json),而不是只说「请有创意」;
  • 评审者只找漏洞,给出可行性、新颖度、影响和一条失败原因;
  • 融合者从不同档案格里挑想法配对,输出它们共享的抽象结构和涌现性质;
  • 质量-多样性档案(MAP-Elites 式网格)每格只留最好的一条,最后交付一组想法而不是一条「最佳答案」;
  • 每轮测量想法之间的语义距离,同质化时升温并换一批技法。

同一套代码还带了一个基准:四类任务(替代用途测验 AUT、发散联想任务 DAT、远距离联想测验 RAT、带已知方案清单的设计简报)、多个自动指标(新颖度、可行性、多样性、灵活性、跨配置区分度等)和几个对照 / 消融配置。用来回答「某个提示词、某个模型、某种编排是不是真的更有创造力」。

结论速览(不打算读实验部分的看这里)

  • 这套机制能让 AI 更有创意吗? 能,但说的是「发散」这一类:同一道题,用它比直接问模型能给出更多、更不重复、更不容易和别人撞车的想法。代价是想法更飘,同一个评委给它的可行性打分更低。
  • 它超过人类了吗? 不能说超过。拉来三个公开的人类实验数据(约 2.2 万条真人作答)对照后:在一个标准小测验上,它排在真人第 63 百分位,也就是比大约三分之二的参与者高、比三分之一低;在「砖头/盒子能干嘛」这类题上,它的答案离题目更远,落在人类分布的最前面几个百分点——但没有真人评价过它的答案,这只是「在同一把自动尺子上排得靠前」,不等于「人类觉得它想得更好」。
  • 这些自动分数可信吗? 中等:它和真人评委的打分方向一致,相关系数 0.4~0.5;在替代用途测验上比原论文的 GloVe 距离更贴近人类评分,在词语联想上不如。可以拿它比较不同配置和不同版本,不能当成人类评分。

数字、口径和局限见 实验结果、docs/report.md 和 docs/human-baseline.md。

三种用法

你想做的事 用哪个 要不要写代码
让 Agent 在写方案、做设计时按这套方法想问题 Skill 不用
直接生成一批想法,或跑对照实验拿数字 命令行 不用
把机制接进自己的程序 TypeScript API 要

用法一:作为 Agent Skill

Skill 是给 Agent 读的 Markdown 指令包。放进应用会扫描的目录里,Agent 自己判断什么时候加载,不需要执行任何脚本。

本仓库已经把它放在 .agents/skills/creativity-engine/SKILL.md。opencode 和 DSH 都会扫描项目里的 .agents/skills/,所以在仓库目录里打开任一个,技能列表里就有 creativity-engine。

各应用扫描的位置:

应用 项目级 全局(所有项目可用)
opencode .opencode/skills/<name>/SKILL.md、.claude/skills/<name>/SKILL.md、.agents/skills/<name>/SKILL.md ~/.config/opencode/skills/<name>/SKILL.md
DSH .dsh/skills/<name>/SKILL.md、.agents/skills/<name>/SKILL.md ~/.dsh/skills/<name>/SKILL.md

装到全局目录,任何项目都能用:

mkdir -p ~/.config/opencode/skills
cp -r .agents/skills/creativity-engine ~/.config/opencode/skills/

用法就是正常提需求,比如「给独居老人想 10 个防忘关火的方案,要具体、别落俗套」,Agent 会按 SKILL.md 里的七步走。手册里面是提示词协议和反模式,没有命令行步骤。

这个技能目录里只有 SKILL.md,可以单独拷到别的项目用,不需要本仓库的其它代码,也不需要 Node 环境。仓库里的实现只是把同一套协议自动化了:批量跑任务、自动算分、出报告。要自动评分才需要代码,要想法只要这个文件。两者各能做什么,见下面的常见问题。

用法二:命令行

先配模型端点。环境变量优先,读不到就退回本机 OpenCode 的配置:

export CREATIVE_BASE_URL=http://127.0.0.1:11434/v1
export CREATIVE_API_KEY=sk-...
export CREATIVE_CHAT_MODEL=deepseek-v4.1-flash   # 可选
export CREATIVE_EMBED_MODEL=qwen3-embedding:latest   # 可选

密钥只在运行时读取,不会写进任何产物。

跑一个任务,看它产出什么

node scripts/demo.ts aut-brick                              # data/ 里的任务
node scripts/demo.ts --task "社区里的共享单车经常被推倒,设计一个让它不容易倒的办法"
node scripts/demo.ts aut-brick --generations 1 --save runs/demo/brick.json

打印每轮的算子分派、语义距离、簇数、档案覆盖率和精英想法,结果存进 runs/demo/。用 --task 直接给文本时没有已知方案清单,新颖度会一律记成 1.00,这时只看可行性列。

跑对照实验

node scripts/bench.ts --dry                                                        # 假模型跑通流水线,不联网
node scripts/bench.ts --tasks aut-brick,brief-box --configs engine,zero-shot --out runs/my-run
node scripts/rescore.ts --run runs/my-run                                          # 只重算分数与报告
node scripts/analyze.ts runs/my-run > docs/my-results.md                           # 结果导成 Markdown 表
bash scripts/run-all.sh                                                            # 主实验 + 消融 + 报告一次跑完

配置:zero-shot、structured-cot、self-refine、engine,另外两个消融配置 engine-flat、engine-noadapt 需要显式写在 --configs 里。产出在 runs/my-run/:每条想法的 JSON 原文、逐格分数、summary.json,以及 report.md 和 report.html(后者可以用鼠标悬停看想法原文和 PCA 投影散点)。

其他命令:

npm test               # 55 个单元测试,离线,不需要模型端点
node scripts/smoke.ts  # 连通性自检:一次对话 + 一次嵌入

用法三:在自己的代码里调用

最短的完整例子是 examples/quickstart.ts,node examples/quickstart.ts 可以直接跑。

import { runCreativeEngine } from "../src/agents/engine.ts";

const result = await runCreativeEngine({
  client,                       // ChatClient,或任何实现了 chat/json 的对象
  catalog: loadCatalog(),       // data/operators.json 里的技法与角色
  space,                        // 语义空间,用来算新颖度与多样性
  taskId: "my-task",
  task: "把要解决的问题写在这里",
  knownSolutions: ["已知做法一", "已知做法二"],  // 有它,新颖度才有意义
  config: { generations: 3, generators: 4, ideasPerGenerator: 3, blendPairs: 2 }
});

for (const idea of result.archive.elites) {
  console.log(idea.novelty, idea.feasibility, idea.text);
}

常用参数(默认值在 src/agents/engine.ts 的 DEFAULT_ENGINE_CONFIG):

参数 默认 作用
generations 3 发散轮数
generators 4 每轮几路生成者,每路换一条技法
ideasPerGenerator 3 每路要几条想法
blendPairs 2 每轮跨格融合几对
diversityFloor 0.35 平均两两语义距离低于它时升温并换算子,设 0 关闭
temperature / temperatureStep / maxTemperature 1.0 / 0.15 / 1.4 采样温度及其自适应范围
useCritic / useMetaReflector true 是否调用评审者和元反思者
seed 20240930 随机种子

基准与指标

任务 测什么 主要指标
AUT(aut-brick、aut-bottle) 发散思维 流畅性、灵活性、原创性、具体化、DT 指数
英文 AUT(aut-box-en、aut-rope-en、aut-brick-en) 发散思维,且与公开人类数据同题 同上,外加与人类作答的距离分布
DAT(dat-7、dat-10、dat-en-7) 语义发散程度 前 7 个有效词的 21 对余弦距离均值 ×100(标准 DAT 计分)
RAT(rat-20) 聚合思维 严格命中率、任意候选命中率
设计简报(brief-stove、brief-box) 新颖且可用的方案 新颖度、可行性、新颖度×可行性、固定抽样多样性、跨配置区分度

新颖度 = 1 − 与已知方案的最大余弦相似度;可行性由独立评委按同一份提示词给所有配置打分;跨配置区分度衡量同一道题上各家的想法有多容易撞车。完整定义见 docs/benchmark.md。

人类数据基线:仓库导入了三个公开人类数据集(SemDis 的 AUT 与词语联想、Olson 等人的 DAT,共约 2.2 万条人类作答),用来做两件事——校验自动指标与人类评分者的相关,以及把机器输出放进人类分布里看百分位(npm run human)。数据来源、口径与结果见 docs/human-baseline.md。

目录结构

AGENTS.md              给编码 Agent 的项目约定(命令、约束、验证流程、已知坑)
.agents/skills/creativity-engine/SKILL.md   Agent Skill(opencode 与 DSH 都会扫描)
data/                  技法目录、AUT / DAT / RAT / 设计简报任务与已知方案语料
data/human/            导入后的公开人类数据(由 npm run human:fetch 生成)
src/core/              语义空间、新颖度、AUT / RAT 评分、质量-多样性档案、统计
src/llm/               OpenAI 兼容客户端(磁盘缓存、并发、重试、审计日志)与提示词
src/agents/            多 Agent 引擎、基线策略、成对比较评审
src/bench/             任务加载、自动评分、矩阵运行器、报告生成、PCA 投影、人类数据基线与指标校验
examples/quickstart.ts 最小代码调用示例
scripts/               demo / bench / rescore / analyze / human / fetch-human-data / run-all 命令行
test/                  55 个单元测试(确定性夹具或假模型,离线)
runs/                  实验产物与报告(模型调用缓存在 runs/cache/)
docs/                  调研笔记、机制设计、基准方法、结果与结论

参与开发

改代码前先看 AGENTS.md:里面有不能引入依赖、只能用类型擦除语法、测试必须离线、生成物不要手改这些硬性约定,以及每类改动对应的验证流程。

环境要求

  • Node.js 22.6 以上(代码用类型擦除直接运行 .ts,不需要编译)
  • 一个 OpenAI 兼容的模型端点,需要支持 /chat/completions 和 /embeddings

实验结果

这一节是给想看数字的人看的;只想知道结论就看开头的「结论速览」。

主实验(4 配置 × 7 任务)与消融实验(4 配置 × 3 任务)的完整数据在 docs/results.md,交互报告是 runs/main-live/report.html 和 runs/ablation/report.html。

跨任务均值:机制的新颖度最高(0.441,基线 0.387–0.405),AUT 灵活性 8 / 6(基线 3–5),跨配置区分度在 7 道题上全部排第一;可行性最低(0.460,基线 0.700–0.727),调用次数约为基线的 2.7 倍。消融显示增益主要来自技法异质化和融合(去掉后多样性 0.504 → 0.347),自适应升温在这批任务上未触发。结论与局限见 docs/report.md。

人类数据基线(runs/human-baseline/report.md,HTML):在 SemDis 公开的 1,800 条 AUT 人类作答上,本仓库的语义距离与人类评分的相关(与最近人类作答的距离 Spearman 0.52、与题目词的距离 0.40)高于原论文 GloVe 距离在同一批作答上的 0.20;在 2,524 名真实参与者的 DAT 数据上(用本仓库嵌入重算,人类均值 39.4±3.9),与人类同题的机制运行落在第 63 百分位,与题目词的距离落在 AUT 人类分布的第 97–99 百分位。口径、样本与局限见 docs/human-baseline.md。

常见问题

用 Skill 需要先有这个仓库的代码吗

不需要。技能目录里只有一个 SKILL.md,内容是技法表、七步流程、提示词模板和自检方法。拷到别的项目或者全局技能目录就能用,那台机器上不需要 Node,也不需要仓库里的其它文件。

那仓库代码还有什么用

代码只负责自动化,不是 Skill 的前置条件。

能力 只有 SKILL.md 加上仓库代码
生成、评审、融合、挑选想法 能,Agent 用自己手里的工具做 能,还能批量并发
新颖度、多样性、可行性打分 按文件里的方法手工估算 自动计算,含标准 DAT 计分和独立评委
对照实验与消融 做不了 scripts/bench.ts 一条命令
复现报告里的数字 只能定性比较 可以,runs/ 里有原始想法和逐格分数

怎么装到别的项目

项目级:把 .agents/skills/creativity-engine/ 整个目录拷到目标仓库的 .agents/skills/ 下,opencode 和 DSH 都会扫描这里。全机器可用:拷到 ~/.config/opencode/skills/ 或 ~/.dsh/skills/。不支持 Skill 的应用:把文件内容贴进系统提示词或自定义指令,效果一样,只是不会按需触发。

不用代码的时候,怎么判断结果好坏

文件最后一节写了手工近似:把想法向量化,算「1 − 与已知方案的最大余弦相似度」当新颖度,算两两余弦距离均值当多样性,数语义类别当灵活性。算法和仓库里的实现一致,但缺少同一批任务上的实测数据做参照,所以分数不要和 docs/results.md 里的数字直接比。

命令行必须联网吗

npm test 和 node scripts/bench.ts --dry 不用网络,后者用假模型跑通整条流水线。其余命令需要一个 OpenAI 兼容的模型端点,/chat/completions 和 /embeddings 都要能用。

想用在自己的问题上,要改代码吗

不用。node scripts/demo.ts --task "你的问题" 可以直接跑。想让新颖度有意义,把已知做法写进 knownSolutions(见 examples/quickstart.ts),或者在 data/briefs.json 里加一条自己的任务。

可以商用吗

可以,MIT 许可,见 LICENSE。

已知限制

  • 每份配置每个任务只跑一次、一个种子,结果说明方向和量级,不是显著性结论;
  • 人类数据来自公开数据集(SemDis 的 AUT/词语联想与 Olson 等人的 DAT),是别人招募的被试,不是本项目招募的;因此能给出「机器输出在人类分布里的位置」和「自动指标与人类评分的相关」,但没有让人类来评价我们自己的想法;
  • 可行性由模型评委打分,而字数越多它给分越低(逐条数据里两者负相关),机制的想法又比基线长两倍多,这个偏置写在 docs/report.md;
  • 投影图的提示框只支持鼠标悬停,触屏上还没有对应交互。

许可

代码用 MIT,见 LICENSE。

data/human/ 里的第三方人类数据(SemDis、Olson 等人的公开数据集)版权属于原作者,按原项目的公开共享条款用于研究复现,不随本仓库的 MIT 许可一并授权;来源、引用与校验和记录在每个 JSON 文件的 sources 字段和 docs/human-baseline.md 里。

参考

About

把「让 AI 有创造力」做成可运行、可评分的流程:多 Agent 生成机制 + Agent Skill + 自动评分基准。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages