System Prompt设计剖析:Ontology Playground的AI本体提取提示词是怎么写的
【免费下载链接】Ontology-PlaygroundFree, open-source web app for learning about ontologies and Microsoft Fabric IQ. Explore a catalogue of pre-built ontologies, design your own visually, export as RDF/XML, and share interactive diagrams. Zero backend, fully static.项目地址: https://gitcode.com/GitHub_Trending/on/Ontology-Playground
Ontology Playground是一款免费开源的本体(Ontology)学习与设计工具,其中的AI 本体提取功能可以让你用一句自然语言描述业务场景,就由 AI 自动提取出实体、关系和属性,生成完整本体。这个"一句话变本体"的魔法,几乎全部由一段精心设计的System Prompt驱动。本文完整剖析它的写法、参数配置与多层校验机制,帮你看懂一个生产级提示词是怎么炼成的。
一、整体链路:提示词只是其中一环
AI 本体的生成链路其实非常短:
- 用户在界面输入业务场景描述,提交到后端;
- 后端把系统提示词与用户描述拼成一条消息,调用 Azure OpenAI;
- AI 返回一段严格符合 schema 的 JSON,服务端校验后交给前端;
- 用户预览、编辑、确认,本体被应用到可视化画布。
核心代码位置:
- 系统提示词与调用逻辑:api/generate-ontology/index.ts
- 前端输入与预览界面:src/components/NLBuilderModal.tsx
- 本体数据结构定义:src/data/ontology.ts
二、逐层拆解:System Prompt 的五层结构
整段提示词不长,但结构教科书级地清晰,可以拆成 5 层:
1️⃣ 角色定义:一句话说清身份
You are an expert ontology extraction system.
第一行就把 AI 锁定在"本体提取专家"这个身份上。角色词越具体,模型越会调用对应领域的知识。
2️⃣ 输出契约:内嵌完整 JSON Schema
这是提示词的灵魂。它没有让 AI"自由发挥",而是把完整的目标 JSON 结构原样写进提示词,每个字段后面还跟着格式说明(用注释风格写在值的位置):
{ "name": "string - Name for this ontology", "entityTypes": [ { "id": "string - lowercase, snake_case identifier", "name": "string - Display name", "properties": [ { "name": "string - camelCase property name", "type": "string|integer|decimal|boolean|date|datetime|enum", "isIdentifier": "boolean (true for primary key)" } ] } ], "relationships": [ ... ] }注意 schema 里对命名的隐形约束:实体id要求lowercase snake_case,属性名要求camelCase——这些规则不写,AI 很可能给你混着来,下游代码解析时就会翻车。
还有一个值得玩味的细节:schema 只列出 6 种属性类型,而前端 src/data/ontology.ts 的类型定义里还有double。也就是说,提示词是"契约"而非"镜像"——它只承诺 AI 必须稳定输出的部分,其余交给兜底逻辑。
3️⃣ 编号规则清单:8 条硬约束
schema 之后紧跟一个Rules:编号列表,每条都对应一个真实痛点:
| # | 规则 | 解决什么问题 |
|---|---|---|
| 1 | 名词提取为实体、动词提取为关系 | 给出本体的核心建模原则 |
| 2 | 每个实体必须有至少一个isIdentifier: true | 保证主键存在,下游可用 |
| 3 | 每个实体 3–6 个属性 | 防止输出过大或信息稀疏 |
| 4 | 基数关系必须符合业务逻辑 | 关系质量 |
| 5 | 关系名用具体动词(places / contains / manages) | 给出范例,比抽象描述更有效 |
| 6 | 图标用贴切的 emoji | 视觉展示 |
| 7 | 每个实体分配唯一的微软主题色 | 品牌一致性 |
| 8 | 只输出 JSON,禁止任何解释 | 防"啰嗦",保证可解析 |
第 8 条看似简单,却是 AI 工程中最经典的坑:模型动辄在 JSON 前后加一段"好的,这是您需要的……"。一句 "Output ONLY the JSON" 能直接避免解析失败。
4️⃣ 具体示例优于抽象描述
第 5、7 条规则都带了具体范例(动词列表、8 个色值)。这是提示词设计的高频经验:与其说"颜色要和谐",不如直接把#0078D4、#107C10、#5C2D91…列出来,AI 会照单全收,风格瞬间统一。
5️⃣ 首尾呼应
开头强调"create acompleteontology",结尾用Output ONLY the JSON, no explanations收尾,形成首尾闭环,进一步压缩模型"发挥空间"。
三、API 参数:Prompt 之外的另一半功夫
提示词只决定"说什么",参数决定"怎么说"。api/generate-ontology/index.ts 里三个关键参数:
| 参数 | 取值 | 为什么这么设 |
|---|---|---|
temperature | 0.3 | 低随机性——生成结构化本体要的是稳定,不是创意 |
max_tokens | 4000 | 给足空间输出完整 schema,又不至于浪费 |
response_format | json_object | 强制 JSON 模式,从 API 层面再兜一道底 |
模型默认选用轻量级的gpt-4o-mini(可在配置中切换),对这类结构化任务性价比很高。
四、多层校验:不盲信 AI 输出
这段系统提示词没有止步于"让 AI 说对",后端还搭了多层防线:
| 层级 | 位置 | 做什么 |
|---|---|---|
| 服务端结构校验 | index.ts | 检查name、entityTypes、relationships是否存在且为数组 |
| 前端兜底 | NLBuilderModal.tsx | 若实体缺失color,按序号从默认色板补齐 |
| 用户确认 | NLBuilderModal.tsx | 生成后先预览、可手改 JSON,点击 Apply 才进画布 |
提示词负责"大概率正确",代码负责"绝对不崩",用户负责最终把关——三层责任划分得非常干净。
五、新手可以直接抄走的 6 个设计点
如果你也要给自己的应用写 System Prompt,这 6 点可以直接搬:
- 一句话说清角色,用领域术语锁定身份;
- 内嵌完整输出 Schema,字段说明直接写在值的位置;
- 命名规范显式声明(snake_case / camelCase);
- 规则编号 + 带具体示例,范例比形容词管用;
- 低 temperature + 强制 JSON 模式双保险;
- 服务端结构校验兜底,永远不盲信模型输出。
六、想本地跑一遍?
这套 AI 生成功能是可选项。配置 Azure OpenAI 的密钥与环境变量后,将VITE_ENABLE_AI_BUILDER置为true即可开启,界面中就会出现"用自然语言描述你的本体"的输入框(支持语音输入),输入一段场景描述,就能亲眼看到这套系统提示词如何把文字变成一张可交互的本体图谱。
想深入更多细节,可以看看项目的 AGENTS.md 与 docs/ 目录下的文档;本提示词的完整源码在 api/generate-ontology/index.ts,全文不到 50 行,非常值得逐行读一遍。
【免费下载链接】Ontology-PlaygroundFree, open-source web app for learning about ontologies and Microsoft Fabric IQ. Explore a catalogue of pre-built ontologies, design your own visually, export as RDF/XML, and share interactive diagrams. Zero backend, fully static.项目地址: https://gitcode.com/GitHub_Trending/on/Ontology-Playground
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考