news 2026/9/10 5:54:59

Next AI Draw.io 如何从 URL 链接提取网页内容生成图表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Next AI Draw.io 如何从 URL 链接提取网页内容生成图表

Next AI Draw.io 如何从 URL 链接提取网页内容生成图表

【免费下载链接】next-ai-draw-ioA next.js web application that integrates AI capabilities with draw.io diagrams. This app allows you to create, modify, and enhance diagrams through natural language commands and AI-assisted visualization.项目地址: https://gitcode.com/GitHub_Trending/ne/next-ai-draw-io

Next AI Draw.io 除了支持上传图片和 PDF/文本文件,还可以直接粘贴一个网页链接:应用会抓取页面正文、转成 Markdown,再把它作为上下文发给 AI 模型,生成对应的 draw.io 图表。这篇文章面向已经能运行该应用(本地开发环境或在线演示站)的读者,说明如何完成「粘贴 URL → 提取正文 → 输入提示词 → 图表渲染」这条路径,以及如何核对每一步是否成功。

整条链路由前端组件和服务端接口协作完成:

  • 输入框工具栏上的链接按钮打开 UrlInputDialog,前端校验 URL 后调用 extractUrlContent,向POST /api/parse-url发送{"url": "..."}
  • 服务端 parse-url 路由 自己发起抓取(带 15 秒超时、拒绝重定向、拦截内网地址),用@extractus/article-extractor提取正文,再用 Turndown 把 HTML 转成 Markdown(移除scriptstyleiframenoscript节点);
  • 提取成功后,chat-panel 在你提交消息时,把内容以[URL: 链接]\nTitle: 标题\n\n正文的形式拼进发送给模型的消息文本;
  • 模型返回 draw.io XML 后,图表渲染在画布上。

准备运行环境

按 README 的本地安装步骤执行:

git clone https://github.com/DayuanJiang/next-ai-draw-io cd next-ai-draw-io npm install cp env.example .env.local npm run dev

启动后在浏览器打开 http://localhost:6002。如果跳过本地部署,也可以用 README 中提到的在线演示站(自带使用限额,可在聊天面板设置里用自己的 API Key 绕过)。

无论哪种方式,都要先配好一个可用的 AI Provider 和模型——提取本身不依赖模型,但「用提取内容生成图表」需要模型参与。各 Provider 的环境变量配置见 Provider Configuration Guide。

在聊天面板中提取 URL 内容

  1. 在聊天输入框右下角的工具栏找到链接图标按钮(悬停提示为 “Extract from URL”,中文界面为“从 URL 提取”)。
  2. 弹窗标题为「从 URL 提取内容」,说明文字是“粘贴 URL 以提取和分析其内容”。把网页地址粘贴进去,按回车或点「提取」。
  3. 前端先做本地校验:URL 不能为空(否则提示“请输入 URL”),且必须能被new URL()解析(否则提示“URL 格式无效”),校验不通过时请求根本不会发出。
  4. 校验通过后按钮变为“提取中...”并禁用输入。此期间 UrlInputDialog 与 chat-input 通过isExtracting状态锁住弹窗,避免重复提交。
  5. 成功时弹窗关闭,输入框上方出现该 URL 的预览卡片,展示页面标题和字符数,可点击移除(移除后该 URL 不再随下一条消息发送)。
  6. 失败时 URL 会从预览列表里删除,并用 toast 显示服务端返回的具体错误文案(错误对照见下文)。

输入提示词并生成图表

URL 提取完成后,输入框中写你的提示词(例如「根据这篇文章生成一张系统架构流程图」),点发送。提交时 chat-panel 的processFilesAndAppendContent会把已提取的内容拼接到你的提示词后面,再连同当前画布 XML 一起发给/api/chat;发送成功后该 URL 附件会自动清空,不会残留到下一条消息。

验证方式:图表按流式输出渲染到右侧 draw.io 画布上,聊天消息中出现display_diagram工具调用即表示 XML 已生成并显示。如果只看到错误提示而没有图表,先确认上一节提取是否成功——内容根本没提取到的 URL 不会拼进消息。

直接调用提取接口核对

如果你想确认问题出在「提取」还是「提示词/模型」环节,可以直接请求提取接口。以下命令中把https://example.com/article(即输入框占位示例地址)替换成你要验证的页面:

curl -X POST http://localhost:6002/api/parse-url \ -H "Content-Type: application/json" \ -d '{"url":"https://example.com/article"}'

成功时返回三个字段(字段定义见 lib/url-utils.ts 的UrlResponseSchema):title(页面标题,缺失时为Untitled)、content(Markdown 正文)、charCount(正文字符数)。失败时 HTTP 状态非 200,响应体为{"error": "..."},常见文案与含义对照 route.ts 中的实现:

HTTP 状态错误文案触发条件
400URL is required请求体缺少url或非字符串
400Invalid URL formatnew URL(url)解析失败
400Cannot access private/internal URLs目标为内网地址,见下文限制
400Could not fetch URL content抓取失败,包括页面发生 3xx 重定向
504Timed out while fetching URL content抓取超过 15 秒
422PDF URLs are not supported. Please download and upload the PDF file directly响应 Content-Type 为application/pdf
400Could not extract content from URL页面抓到了但提取不出正文
400Content exceeds 150k character limit (…)Markdown 正文超过 150000 字符
500Failed to fetch or parse URL content服务端未预期的异常

例如返回 400 且文案是Could not extract content from URL,说明页面本身可以访问但正文提取失败(比如纯导航页、登录页),此时应换一个信息更完整的页面地址,而不是调整提示词。

已知限制与排查要点

  • 只接受公网 URL:ssrf-protection.ts 会拦截localhost127.0.0.1::1、私有 IP 段(10/8、172.16/12、192.168/16、169.254/16 等)、.local/.internal/.localhost域名以及云元数据服务地址,且对主机名做 DNS 解析后再校验解析结果;parse-url 路由 中的注释明确该接口对私有地址一律拒绝,ALLOW_PRIVATE_URLS变量只作用于 LLM Provider 的 baseUrl 覆盖,不影响本接口。
  • 不支持重定向:服务端抓取使用redirect: "error",任何 3xx 跳转都会被拒绝并返回Could not fetch URL content。如果链接会跳到登录页或域名迁移页,提取会失败,需使用跳转后的最终地址。
  • 15 秒超时EXTRACT_TIMEOUT_MS固定为 15000 毫秒,慢页面会收到 504。
  • PDF 链接需改走文件上传:422 错误提示下载后用文件上传入口处理 PDF。
  • 内容长度上限 150000 字符:与 PDF 提取上限一致,超长页面会被整体拒绝,需要换用内容更聚焦的页面。
  • 非 UTF-8 页面:服务端会先探测字符集(优先 HTTPContent-Type头,其次文档头部的<meta charset>,默认 UTF-8),再解码,Shift_JIS/GBK/EUC/Big5 等编码的页面不会变成乱码。

若提取成功但生成结果不理想,调整提示词(明确图表类型、模块粒度)即可;若多次提取失败,先按上表的状态码定位是访问、重定向、超时还是提取本身的问题。

【免费下载链接】next-ai-draw-ioA next.js web application that integrates AI capabilities with draw.io diagrams. This app allows you to create, modify, and enhance diagrams through natural language commands and AI-assisted visualization.项目地址: https://gitcode.com/GitHub_Trending/ne/next-ai-draw-io

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 5:54:03

寒假四周复盘:从失控到稳定输出的时间管理实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 5:53:57

概率论期末冲刺:联合分布、边缘密度与独立性判定全解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 5:53:50

2026代码质量左移:九款企业级代码检查工具实测与落地

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 5:53:14

苏轼《东坡八首》教你破局职场内耗:把攀比换成耕耘

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 5:52:44

AI编程高效工作流:Skill机制与ponytail上下文管理实战解析

最近一段时间我几乎把市面上能碰到的 AI 编程工作流工具都折腾了一遍&#xff0c;最大的感受是&#xff1a;模型能力早就不是瓶颈了&#xff0c;真正卡人的是"怎么让 AI 稳定且高质量地干活"。你想想&#xff0c;每次开新项目都得把代码风格、输出格式、验收标准从头…

作者头像 李华