当前位置: 首页 > article >正文

2026山东大学软件学院项目实训(六)

一、基本信息组号69组员李重昊负责模块AI 工作流 —— 图片收集节点二、任务概述在 LangGraph4j 工作流中完成图片收集节点开发根据用户自然语言需求自动规划并收集网站所需图片为后续提示词增强与代码生成提供素材。具体包括封装 Pexels 内容图片搜索工具封装 UnDraw 插画图片搜索工具实现 Mermaid CLI 腾讯云 COS 架构图绘制工具接入 阿里云 DashScope Logo 文生图工具实现 AI 图片收集规划服务输出结构化ImageCollectionPlan在 ImageCollectorNode 中通过CompletableFuture并发调用四类工具并汇总结果三、需求分析与方案设计1.1 核心功能拆解功能说明智能规划AI 分析用户提示词确定需要的图片类型及参数内容图片Pexels 关键词搜索实景/产品类配图插画图片UnDraw 关键词搜索装饰性矢量插画架构图片Mermaid 代码转 SVG上传 COS 获取 URLlogoDashScope 文生图按描述生成品牌标识结果汇总写入WorkflowContext.imageList供下游使用1.2 业务处理流程用户输入 originalPrompt → ImageCollectionPlanServiceAI 规划 → ImageCollectionPlan四类任务列表 → 并发调用四类 Tool → 汇总 ListImageResource → 写入 WorkflowContext.imageList → 流转至「提示词增强」节点工作流中图片收集节点作为入口与后续节点串联如下.addNode(image_collector, ImageCollectorNode.create()) .addNode(prompt_enhancer, PromptEnhancerNode.create()) .addNode(router, RouterNode.create()) .addNode(code_generator, CodeGeneratorNode.create()) .addNode(project_builder, ProjectBuilderNode.create()) // 添加边 .addEdge(START, image_collector) .addEdge(image_collector, prompt_enhancer) .addEdge(prompt_enhancer, router) .addEdge(router, code_generator) .addEdge(code_generator, project_builder) .addEdge(project_builder, END)START → image_collector → prompt_enhancer → ...表明图片收集是整个 Agent 工作流的第一步收集到的图片 URL 将在后续节点拼入增强提示词供代码生成使用。1.3 技术方案选型方案优点缺点造型AI多轮工具调用实现简单耗时长、Token 多、易误输出代码不采用规划节点内并发性能好、改动小、逻辑集中需手动管理线程池主选LangGraph4j 并行分支可视化清晰需额外多个节点扩展三、数据模型设计3.1 图片资源对象 ImageResource所有工具统一返回该结构便于在工作流中传递public class ImageResource implements Serializable { /** * 图片类别 */ private ImageCategoryEnum category; /** * 图片描述 */ private String description; /** * 图片地址 */ private String url;category标识用途description供 AI 理解图片语义url供前端或生成代码直接引用。3.2 图片类型枚举public enum ImageCategoryEnum { CONTENT(内容图片, CONTENT), LOGO(LOGO图片, LOGO), ILLUSTRATION(插画图片, ILLUSTRATION), ARCHITECTURE(架构图片, ARCHITECTURE);与四种工具一一对应代码生成阶段可按类别决定图片在页面中的位置。3.3 图片收集计划 ImageCollectionPlan由 AI 结构化输出使用record简化任务定义private ListImageSearchTask contentImageTasks; private ListIllustrationTask illustrationTasks; private ListDiagramTask diagramTasks; private ListLogoTask logoTasks; public record ImageSearchTask(String query) implements Serializable {} public record IllustrationTask(String query) implements Serializable {} public record DiagramTask(String mermaidCode, String description) implements Serializable {} public record LogoTask(String description) implements Serializable {}各record字段与对应工具入参严格映射节点调用时无需额外转换四、四类图片收集工具实现4.1 内容图片收集工具 ImageSearchToolTool(搜索内容相关的图片用于网站内容展示) public ListImageResource searchContentImages(P(搜索关键词) String query) { ListImageResource imageList new ArrayList(); try (HttpResponse response HttpRequest.get(PEXELS_API_URL) .header(Authorization, pexelsApiKey) .form(query, query) .form(per_page, SEARCH_COUNT) .form(page, 1) .execute()) { // ... imageList.add(ImageResource.builder() .category(ImageCategoryEnum.CONTENT) .description(photo.getStr(alt, query)) .url(src.getStr(medium)) .build());调用 Pexels/v1/searchAuthorization头传入 API Key每次最多 6 张取medium尺寸失败返回空列表不阻断整体流程。4.2 插画图片收集工具UndrawIllustrationToolTool(搜索插画图片用于网站美化和装饰) public ListImageResource searchIllustrations(P(搜索关键词) String query) { String apiUrl String.format(unDrawApiUrl, query, query); try (HttpResponse response HttpRequest.get(apiUrl).timeout(10000).execute()) { // ... 解析 pageProps.initialResults ... imageList.add(ImageResource.builder() .category(ImageCategoryEnum.ILLUSTRATION) .description(title) .url(media) .build());API 地址从配置读取支持更换 UnDraw 的 Next.js buildId解析initialResults中的title与media10 秒超时防止阻塞工作流。4.3 架构图绘制工具 MermaidDiagramToolTool(将 Mermaid 代码转换为架构图图片用于展示系统结构和技术关系) public ListImageResource generateMermaidDiagram(P(Mermaid 图表代码) String mermaidCode, P(架构图描述) String description) { File diagramFile convertMermaidToSvg(mermaidCode); String cosUrl cosManager.uploadFile(keyName, diagramFile); return Collections.singletonList(ImageResource.builder() .category(ImageCategoryEnum.ARCHITECTURE) .description(description) .url(cosUrl) .build());Mermaid 转 SVG 核心逻辑String command SystemUtil.getOsInfo().isWindows() ? mmdc.cmd : mmdc; String cmdLine String.format(%s -i %s -o %s -b transparent, command, tempInputFile.getAbsolutePath(), tempOutputFile.getAbsolutePath()); RuntimeUtil.execForStr(cmdLine);先将 Mermaid 写入临时.mmd调用mmdc生成透明背景 SVG再通过CosManager上传 COS 获得长期可访问 URL自动区分 Windows/Linux 命令。4.4 Logo 图片生成工具 LogoGeneratorToolTool(根据描述生成 Logo 设计图片用于网站品牌标识) public ListImageResource generateLogos(P(Logo 设计描述如名称、行业、风格等尽量详细) String description) { String logoPrompt String.format(生成 LogoLogo 中禁止包含任何文字Logo 介绍%s, description); ImageSynthesisParam param ImageSynthesisParam.builder() .apiKey(dashScopeApiKey) .model(imageModel) .prompt(logoPrompt) .size(512*512) .n(1) .build(); // ... 解析返回 url ... logoList.add(ImageResource.builder() .category(ImageCategoryEnum.LOGO) .description(description) .url(imageUrl) .build());五、AI图片收集规划服务5.1 系统提示词## 输出要求 请严格按照 JSON 格式返回图片收集计划包含以下字段 - contentImageTasks: 数组元素含 query 字段 - illustrationTasks: 数组元素含 query 字段 - diagramTasks: 数组元素含 mermaidCode 和 description 字段 - logoTasks: 数组元素含 description 字段 注意 - 如果某种类型的图片不需要对应数组可以为空 - mermaidCode 要是有效的 Mermaid 语法代码 - 只规划图片收集任务不要输出任何网站代码5.2 AI服务接口与工厂public interface ImageCollectionPlanService { SystemMessage(fromResource prompt/image-collection-plan-system-prompt.txt) ImageCollectionPlan planImageCollection(UserMessage String userPrompt); } Bean public ImageCollectionPlanService imageCollectionPlanService() { return AiServices.builder(ImageCollectionPlanService.class) .chatModel(chatModel) .build(); }复用 DeepSeekChatModel利用 LangChain4j 结构化输出将 AI 回复直接映射为ImageCollectionPlan无需手写 JSON 解析。六、图片收集工作节点实现6.1 SpringContextUtil节点通过静态create()创建无法直接Resource注入故封装上下文工具Component public class SpringContextUtil implements ApplicationContextAware { private static ApplicationContext applicationContext; Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { SpringContextUtil.applicationContext applicationContext; } public static T T getBean(ClassT clazz) { return applicationContext.getBean(clazz); }6.2 ImageCollectorNode 核心逻辑阶段一AI 规划ImageCollectionPlanService planService SpringContextUtil.getBean(ImageCollectionPlanService.class); ImageCollectionPlan plan planService.planImageCollection(originalPrompt); log.info(获取到图片收集计划开始并发执行);阶段二四类工具并发执行if (plan.getContentImageTasks() ! null) { ImageSearchTool imageSearchTool SpringContextUtil.getBean(ImageSearchTool.class); for (ImageCollectionPlan.ImageSearchTask task : plan.getContentImageTasks()) { futures.add(CompletableFuture.supplyAsync(() - imageSearchTool.searchContentImages(task.query()))); } } // 插画、架构图、Logo 同理 ... CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();阶段三汇总写入上下文context.setCurrentStep(图片收集); context.setImageList(collectedImages); return WorkflowContext.saveContext(context);七、总结本次修改主要完善了AI生成网页的图片的一些显示功能之前生成的图片都是随机的占位符。本次改动的工作量较大我这次完成的是其中的部分配置。然后这次成果的测试中我们发现编辑模式选择编辑块有一点问题不能完全确定形状而且会重新生成一个新版本覆盖之前的版本这样可能比较消耗token也是后续改善的方向。

相关文章:

2026山东大学软件学院项目实训(六)

一、基本信息组号:69组员:李重昊负责模块:AI 工作流 —— 图片收集节点二、任务概述在 LangGraph4j 工作流中完成图片收集节点开发,根据用户自然语言需求自动规划并收集网站所需图片,为后续提示词增强与代码生成提供素…...

【LeetCode】50. pow(x,n) 题解

【LeetCode】50. pow(x,n)\text{pow}(x,n)pow(x,n) 题解 Link: https://leetcode.cn/problems/powx-n/ 实现 pow(x, n) ,即计算 xxx 的整数 nnn 次幂函数(即 xnx^nxn)。 其中 xxx 是浮点数,nnn 是可正可负的 323232 位有符号整…...

[A2A协议与实现-03]从Protobuf消息详解A2A协议四大核心操作

接下来我们将介绍A2A协议中定义的核心操作列表。这些操作构成了Agent之间交互的基础,每个操作都对应一个特定的功能,允许Agent以标准化的方式进行通信和协作。之前已经说过,A2A协议的所有操作定义在A2AService这个gRPC服务中。我们将逐一介绍…...

构建智能家居自动化桥梁:基于Webhook与事件驱动的跨平台集成实战

1. 项目概述与核心价值最近在折腾智能家居和自动化流程,发现很多朋友都卡在了一个看似简单却非常关键的环节上:如何让不同的智能设备或软件服务之间“说上话”。比如,你希望家里的智能音箱在收到指令后,不仅能控制灯光&#xff0c…...

FreeRTOS SMP多核调试踩坑记:在TC397上如何确认你的任务真的跑在了对的CPU核心?

TC397多核调试实战:如何验证FreeRTOS任务真的跑在指定核心? 调试多核系统就像在迷宫中寻找出口——即使代码看起来正确,任务也可能悄悄溜到错误的核心上执行。当LED闪烁频率异常、任务响应延迟或系统出现难以解释的锁死时,开发者首…...

智能体框架(Harness)深度解析:模型+框架=智能体,一文带你秒懂!

智能体框架(Harness)到底是什么?一文拆透 先把结论摆出来 智能体 模型 框架 如果你不是模型,你就是框架。这个公式听起来简单,但真正理解它需要费点功夫。 所谓框架(Harness),就是…...

[2026最新版] 保姆级 Burp Suite 安装教程

在Windows上安装教程如下: 文件下载:点我下载(NAS分享链接,若链接过期或无法下载,请联系作者:zeyun4699gmail.com) 步骤一:下载来自我上传的文件(你会得到步骤二的图片…...

Multisim导入自定义三极管S8050/S8550保姆级教程:从SPICE文件到成功仿真

Multisim实战:从零构建S8050三极管模型与仿真验证全流程 在电子电路设计与仿真领域,准确的三极管模型往往是项目成功的关键。许多工程师和爱好者在使用Multisim时都遇到过这样的困境:官方元件库中缺少特定型号的三极管(如常见的S8…...

Redis分布式锁进阶第六十八篇

一、本篇前置衔接 第六十八篇我们完成了全系列终局复盘,整理了故障排查SOP与企业级落地铁律。常规单资源锁、热点分片锁、隔离锁全部讲透,但真实复杂业务永远不是单一资源:下单要扣库存、扣优惠券、扣积分、冻结余额,多资源并行争…...

C++ STL set与multiset容器:红黑树实现、核心操作与性能优化指南

1. 容器概览:为什么我们需要 set 和 multiset?在C的日常开发里,尤其是处理需要快速查找、去重或排序的数据集合时,std::set和std::multiset这两个关联容器出场率极高。很多刚从顺序容器(如vector、list)转过…...

终极罗技鼠标宏指南:3步实现PUBG完美压枪

终极罗技鼠标宏指南:3步实现PUBG完美压枪 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 还在为《绝地求生》中难以控制的武器后坐力…...

PUBG罗技鼠标宏终极配置指南:5分钟快速上手完美压枪

PUBG罗技鼠标宏终极配置指南:5分钟快速上手完美压枪 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 还在为《绝地求生》中难以控制的…...

15分钟搞定国标视频监控平台部署,wvp-GB28181-pro让安防系统搭建如此简单!

15分钟搞定国标视频监控平台部署,wvp-GB28181-pro让安防系统搭建如此简单! 【免费下载链接】wvp-GB28181-pro 基于GB28181-2016、部标808、部标1078标准实现的开箱即用的网络视频平台。自带管理页面,支持NAT穿透,支持海康、大华、…...

Awoo Installer:Switch游戏安装终极指南 - 轻松搞定NSP、NSZ、XCI、XCZ格式

Awoo Installer:Switch游戏安装终极指南 - 轻松搞定NSP、NSZ、XCI、XCZ格式 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer 想要在Nint…...

LM265 手持式频谱分析仪:交通超宽频监测旗舰

LM265 手持式频谱分析仪是成都鼎讯信通科技打造的超宽频高性能便携设备,覆盖 9kHz~26.5GHz,射频指标对标台式仪器,兼顾便携与精度,为铁路、高速等交通领域提供全频段信号监测与干扰排查能力。设备集成频谱分析、场强测量、信道扫描…...

永强数据恢复硬盘设备加密数据专业解锁恢复服务

在当今数字化时代,数据的重要性不言而喻。无论是个人用户存储的珍贵照片、视频,还是企业存储的关键商业数据,一旦丢失,都可能带来巨大的损失。而硬盘设备加密数据的丢失或无法解锁,更是让人头疼不已。北京永强数据恢复…...

AI命令行工具箱:将大模型无缝集成到终端工作流

1. 项目概述:一个为AI交互而生的命令行工具箱如果你和我一样,每天有大量时间泡在命令行里,同时又频繁地与各种AI模型打交道,那么你肯定也经历过这种“割裂感”:一边是高效、精准、可脚本化的终端环境,另一边…...

DXL-400E 手持式无线通信测试仪:交通通信运维的便携利器

DXL-400E 手持式无线通信测试仪是成都鼎讯信通科技推出的经济型手持式测试设备,覆盖 9kHz 至 6.1GHz 宽频范围,集成频谱分析、场强测量、干扰排查等核心功能,以轻量化设计和高性价比,成为铁路、高速等交通领域无线通信运维的常用工…...

从失败案例看全球化内容服务的合规架构与自动化风控实践

1. 项目概述与背景解析最近在和一些做全球化内容分发或者跨国协作项目的朋友交流时,大家普遍会提到一个词:“内容合规性审查”。这听起来像是一个法务或者运营的术语,但对我们这些搞技术、做开发的人来说,它背后其实是一整套复杂的…...

IDE扩展管理套件:实现配置即代码与团队环境同步

1. 项目概述:一个为开发者定制的IDE扩展管理套件如果你和我一样,每天的工作都离不开各种集成开发环境(IDE),比如 Visual Studio Code、IntelliJ IDEA 或者 PyCharm,那你一定对“扩展”或“插件”又爱又恨。…...

从数据迷雾到精准洞察:Granblue Fantasy: Relink战斗分析工具深度解析

从数据迷雾到精准洞察:Granblue Fantasy: Relink战斗分析工具深度解析 【免费下载链接】gbfr-logs GBFR Logs lets you track damage statistics with a nice overlay DPS meter for Granblue Fantasy: Relink. 项目地址: https://gitcode.com/gh_mirrors/gb/gbfr…...

半导体测试数据分析难题?STDF Viewer提供一站式专业解决方案

半导体测试数据分析难题?STDF Viewer提供一站式专业解决方案 【免费下载链接】STDF-Viewer A free GUI tool to visualize STDF (semiconductor Standard Test Data Format) data files. 项目地址: https://gitcode.com/gh_mirrors/st/STDF-Viewer 半导体测试…...

边缘云环境下数据流模型FlowUnits的设计与实践

1. 数据流模型的演进与边缘云挑战数据流计算作为分布式系统领域的核心范式,已经深刻改变了我们处理海量数据的方式。这种基于有向无环图(DAG)的计算模型,通过将数据处理逻辑分解为独立的算子(operator)并明…...

本地大模型赋能Thunderbird:离线AI邮件助手部署与实战指南

1. 项目概述:当本地大模型遇上邮件客户端 如果你和我一样,每天被海量的邮件淹没,同时又对AI助手处理邮件的隐私问题心存疑虑,那么“micz/ThunderAI”这个项目可能会让你眼前一亮。简单来说,它是一款为经典邮件客户端Th…...

数据投毒太多,尝试把资料搬进本地知识库

说实话,这几天没睡好。上周翻到一个新闻,看得我后背发凉——谷歌首次发现攻击者用AI开发“零日漏洞”攻击工具。不是概念验证,是真实案例。攻击者拿AI绕过双重认证,代码写得跟教科书似的,还带“幻觉”出来的CVSS评分。…...

数据流计算模型在边缘到云场景的优化实践

1. 数据流计算模型的演进与挑战数据流计算模型自诞生以来,已经成为分布式系统领域处理大规模数据的核心范式。这种模型通过将计算过程抽象为有向无环图(DAG),其中顶点代表数据处理算子,边代表数据流动路径,…...

Microsoft大规模取消 Claude Code 授权,内部强制向 Copilot CLI 迁移

2.8 万行遗留系统重构实战 | Claude Code / Cursor / Copilot 横向对比最近AI Coding工具圈子直接打起来了。Microsoft开始大规模取消Claude Code授权,把内 部开发者往Copilot CLI上推(5月14日左右The Verge等媒体报道);几乎同时O…...

AI Agent创业融资指南:投资人最看好的Agent项目特征与商业模式

AI Agent创业融资指南:投资人最看好的Agent项目特征与商业模式 各位技术创业者、产品经理、投资人朋友,晚上好!我是深耕AI大模型落地与Agent赛道创业3年多、前后帮2个种子轮项目拿到近5000万天使/A轮融资、现在自己正在做垂直医疗场景诊断Age…...

重复内容误标率高达37%?NotebookLM检测逻辑漏洞全曝光,立即修复这6个隐藏开关

更多请点击: https://intelliparadigm.com 第一章:重复内容误标率高达37%?NotebookLM检测逻辑漏洞全曝光,立即修复这6个隐藏开关 NotebookLM 的“重复内容检测”功能并非基于端到端语义比对,而是依赖于分块哈希&#…...

tmphw16tc47

AgentMDT协作:多学科会诊前的信息整理能不能先交给 AI MDT 会诊前,技术系统最容易被抱怨的不是“模型不够聪明”,而是病历、检验、用药、既往记录分散在不同系统里,人工整理耗时且容易遗漏。本文只讨论技术架构和工程流程示例&am…...