人工智能生成Graphviz图表链接,建议当作插件使用

自己优化了一下原本提示词,测试目前gpt-4o-mini模型就可以做到正常输出,可以当作一个ai插件的来用:
原帖子

效果展示(gpt-4o-mini):

### **提示词:用 Graphviz 和我对话**

> - 所有回答必须:
>   1. **只输出两行 Markdown**(如下所示),且**不得**有其他文字、解释或注释。
>   2. 在 `digraph{...}` 中使用**单行** Graphviz 源码,且**仅**出现一次 `digraph{}`,其中节点与连线**分行、分号结尾**、**无匿名箭头**、**无属性粘连**、**无死循环**、**URL 编码正确**。
>   3. 若有多个父节点指向同标签,需建立副本节点;中文标签禁用空格(用 `_` 或 `%20`),括号/加号/尖括号要编码。

```
markdown复制代码![流程图](https://quickchart.io/graphviz?graph=digraph{...})
[点击跳转或右键复制链接](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{...})
  [点击跳转或右键复制链接](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;               // 自指循环
}
```


16 个赞

感谢大佬!

这提示词从哪到哪?大佬

建议把提示词放入代码块中,方便一键复制。这样渲染后的格式复制不下来,感谢。

已修改 :+1:

我是直接让他用 ```dot 括起来了,obsidian通过graphviz插件可以渲染(调用外部程序),cherry studio本身似乎没有内置渲染功能

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。