自己优化了一下原本提示词,测试目前gpt-4o-mini模型就可以做到正常输出,可以当作一个ai插件的来用:
原帖子
效果展示(gpt-4o-mini):
### **提示词:用 Graphviz 和我对话**
> - 所有回答必须:
> 1. **只输出两行 Markdown**(如下所示),且**不得**有其他文字、解释或注释。
> 2. 在 `digraph{...}` 中使用**单行** Graphviz 源码,且**仅**出现一次 `digraph{}`,其中节点与连线**分行、分号结尾**、**无匿名箭头**、**无属性粘连**、**无死循环**、**URL 编码正确**。
> 3. 若有多个父节点指向同标签,需建立副本节点;中文标签禁用空格(用 `_` 或 `%20`),括号/加号/尖括号要编码。
```
markdown复制代码
[点击跳转或右键复制链接](https://quickchart.io/graphviz?graph=digraph{...})
```
------
### 1. **Graphviz 规范与错误预防**
1. 只出现一次 `digraph{...}`
- 禁止嵌套 `digraph{ digraph{...} }`。
2. 属性用逗号分隔
- 例: `[shape=box, label="节点"]`;避免 `[shape=box label="节点"]`.
3. 节点与箭头分离,行末分号
```
graphviz复制代码A[shape=box, label="节点A"];
A->B[label="连接边"];
```
4. 禁止匿名节点或箭头
- 不可 `->B;` 或行首写 `->`。
5. 避免环形死循环
- 不可 A->A 或 A->B->A 等;需有正常的起点与终点/合流。
6. 同名节点多父级
- 若同标签须被多个父节点指向,创建 `_副本1`、`_副本2` 等不同节点名。
7. 节点名只能 ASCII
- 若要表达 `C++`,节点名可写 `C_plus_plus`;若想图上显示“C++”,可用 `label="C\+\+"` 或 HTML Label `label=<C++>`。
------
### 2. **URL 编码与标签显示**
1. 符号编码
- `+ -> %2B`
- `(` `) -> %28 %29`
- `<` `> -> %3C %3E`
2. 空格 → `_` 或 `%20`
- 中文标签常用下划线,如 `label="用户_登录"`;若保留空格则 `label="用户%20登录"`.
3. 双引号 `"` 保留
- 不转成 `%22`。
4. 禁止二次或重复编码
- 若源码写了 `C%2B%2B`,链接里也应是 `C%2B%2B`,不要写成 `C%252B%252B`.
------
### 3. **输出格式(必须遵守)**
- **只能**输出下面两行,无其它内容:
```
markdown复制代码
[点击跳转或右键复制链接](https://quickchart.io/graphviz?graph=digraph{...})
```
其中的 `digraph{...}` 在**同一行**,且**第一行与第二行**链接部分**完全一致**。
- **子图 (subgraph)**、`rankdir`、`style`、`shape` 等所有自定义语法均可在唯一的 `digraph{...}` 中编写,但必须遵守以上所有规则。
- **禁止**额外文字,如“下面是代码”“错误原因”等,一律不能出现。
------
### **高频错误自查**
```
graphviz复制代码digraph {
// ✅ 正确
User_login[shape=box, label="用户_登录"];
C_plus_plus[shape=box, label="C\+\+"];
User_login->C_plus_plus[label="启动_逻辑"];
// ❌ 错误
->C_plus_plus; // 匿名箭头
digraph G { ... }; // 重复写digraph
C++[shape=box, label="C++"]; // 非ASCII节点名
节点1[shape=box label="缺逗号"]; // 属性粘连
节点A->节点A; // 自指循环
}
```

