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

从 ReAct 到 Workflow:基于云端 API 构建事件驱动的智能体

1. 什么是WorkFlow之前咱们的用法是一种QueryEngine的用法就是将大模型当成一个查询的工具在使用而workflow是LlmaIndex的新一代编排引擎。1.1 核心逻辑LlamaIndex的workflow本质上是一个事件驱动Event-driven的状态机如果各位友人们经常做开发的话一定一下就理解。 咱们可以将其流程想象成一场接力赛:选手Steps 我们会在代码里用step装饰函数这个函数就是step负责具体的逻辑。接力棒Events我们会用来判断状态的自定义类继承自Event用于在Step间传递数据。终点线StopEvent 和普通的Event一样只是作为最后一棒某个Step返回StopEvent就意味着接力赛结束了咱们将结果返回给用户。1.2 核心组件Event是Workflow的灵魂咱们可以定义各种Event,其决定了数据流向何处。from llama_index.core.workflow import Event class NewsExtractedEvent(Event): content: str # 这里可以随便定义内容 xxx: int # 多少条都可以step是逻辑处理单元。一个Step可以通过返回值来“发射”事件。生产者 返回一个Event实例。消费者 在接收的下一步Step函数的函数声明参数中加上对应的Event实例。StartEvent StopEvent是流程的起跑线和终点线。一般我们只用定义StopEvent当调用workflow.run()自动会触发StartEvent任何Step只要返回了StopEvent整个workflow就会停止并输出结果。结合起来就是这样一个极简的Workflow模板from llama_index.core.workflow import Workflow, step, StartEvent, StopEvent, Event class ProcessedDataEvent(Event): data: str class MyWorkflow(Workflow): step async def ingest(self, ev: StartEvent) - ProcessedDataEvent: # 1. 接收初始输入 input_data ev.get(input) return ProcessedDataEvent(datainput_data.upper()) step async def finish(self, ev: ProcessedDataEvent) - StopEvent: # 2. 接收上一步处理后的数据 return StopEvent(resultf处理完成: {ev.data}) # 运行 wf MyWorkflow() await wf.run(inputhello world) # - 处理完成: HELLO WORLD通常来讲咱们会把step定义给一个调用llm处理的函数. 我们待会儿就用Workflow重写咱们上一篇中的Agent。2. API获取咱们这次给大家换换口味不用本地加载模型而是用API的方式去调用大模型所以本篇博客的代码可以在没有显卡的电脑上运行可以脱离Kaggle的显卡环境。PS: 虽然调用API更方便但是本地加载或者本地部署更安全阿尔周末也尝试过在kaggle上直接去用vllm/ollama部署然后调用但是遇到了太多没法解决的问题本次就直接用现成的API了。如果能解决到时候再出一篇教程吧如果还记得这个事儿的话哈哈哈接下来介绍两个可以用免费模型的APIGroq和硅基流动。2.1 GroqGroq并不是模型开发者只是大模型的搬运工是一个推理加速平台其核心是自研的LPU(Language Processing Unit),所以它的推理速度那是相当惊人这也是阿尔推荐它的很重要的一个理由。Groq模型矩阵模型系列模型 ID (API 调用名)厂商上下文窗口特点与优势Llama 3.3llama-3.3-70b-versatileMeta128k最强逻辑性能对标 GPT-4oLlama 3.1llama-3.1-8b-instantMeta128k极速响应适合简单逻辑与翻译Llama 3.2llama-3.2-11b-vision-previewMeta128k多模态支持可识别并理解图片Gemma 2gemma2-9b-itGoogle8k指令遵循强结构化输出更稳定Mixtralmixtral-8x7b-32768Mistral32k经典的混合专家模型长文本表现好Whisperwhisper-large-v3OpenAI-极速语音转文字 (STT)Groq的限制Groq的免费层级给的非常慷慨堪称大善人但是为了防止滥用还是设置了很多限制。通常对每个模型独立计算通常从RPM(Requets Per Minute)每分钟请求数RPDRequests Per Day每天请求数TPMTokens Per Minute每分钟消耗Token数三个维度限制当然对于咱们来说是完全够用的注册Groq Api Key进入Groq官网点击右上角的Start Building用谷歌账号登录即可点击最上面菜单栏的API KEYS点击Create API Key可以设置一个过期日期然后保存下来待会儿咱们配置到kaggle的Secrets中即可生成API Key2.2 硅基流动硅基流动是咱们要介绍的二号大模型的搬运工国内开发者使用比较多可以在上面找到很多便宜大碗的模型也有不少免费的模型可以用咱们今天就要用它的免费模型。硅基流动模型矩阵模型系列最新代表型号 (API 调用名)核心优势上下文窗口状态DeepSeekdeepseek-ai/DeepSeek-V3.2性能对标顶级闭源模型极强逻辑128k旗舰收费DeepSeekdeepseek-ai/DeepSeek-R1推理增强模型擅长复杂数学与逻辑64k部分免费QwenQwen/Qwen3-30B-A3B阿里最新一代模型中文语境指令遵循极强128k免费/收费Qwen-VLQwen/Qwen3-VL-72B顶级视觉理解能力支持视频分析32k旗舰收费GLMZ.ai/GLM-5智谱旗舰专注于长周期 Agent 任务205k旗舰收费Kimimoonshotai/Kimi-K2.5原生多模态智能体模型长文本处理极佳262k旗舰收费Stepstepfun-ai/Step-3.5-Flash极高性价比的轻量模型推理速度极快262k低成本/免费MiniMaxMiniMaxAI/MiniMax-M2.5擅长角色扮演与情感交互197k旗舰收费Llama 3meta-llama/Llama-3.3-70B-Instruct国际最强开源模型适配各类 Agent 框架128k旗舰收费硅基流动的限制硅基流动有着比Groq更多的可用模型有不少永久免费的模型, 甚至还有推广阿尔这里就不贴推广码了大家自行注册即可和新用户赠金但是其免费版的并发数很低具体的模型也有RPM和TPM限制。注册硅基流动API Key进入硅基流动官网用手机号或者微信号注册点击左侧侧边栏的API密钥, 点击新建API密钥我们待会儿使用Qwen/Qwen3-8B这个免费模型3. 代码实战3.1 环境准备这次和此前不同诶咱们今天用API不用自己加载模型不用开GPU加速Accelerator选择None即可。然后老样子先装依赖库# 1. 确保安装最新版 uv !pip install -U uv # 2. 使用修正后的包名进行安装 # llama-index 包含核心组件 # llama-index-llms-groq 是 Groq 的适配器 # llama-index-llms-llms-openai-like 是 所有适配openai接口的适配器 !uv pip install llama-index llama-index-llms-groq llama-index-llms-openai-like feedparser requests transformers注意这里咱们硅基流动其实也是有专门的定制库的llama-index-llms-siliconflow只是这里咱们为了通用性用了llama-index-llms-openai-like。实际上是因为最开始试了Groq效果不好觉得换中文模型会好一点然鹅效果也不好这次主要还是介绍这个WorkFlow架构吧3.2 配置密钥和上篇博客一样咱们在Add-ons-Secrets中添加上Groq和硅基流动的API Key命名为GROQ_API_KEY和SILICON-API_KEY当然名字无所谓和代码匹配就好3.3 使用API来示例llmTools和之前一样咱们就不赘述了。定义Groq的模型import os from llama_index.llms.groq import Groq from llama_index.core import Settings os.environ[GROQ_API_KEY] user_secrets.get_secret(GROQ_API_KEY) # 推荐使用 llama-3.3-70b它的逻辑推理能力足以应对多智能体协作 Settings.llm Groq(modelllama-3.3-70b-versatile)定义硅基流动的Qwen模型from llama_index.llms.openai_like import OpenAILike Settings.llm OpenAILike( modelQwen/Qwen3-8B, api_keyuser_secrets.get_secret(SILICON-API_KEY), api_basehttps://api.siliconflow.cn/v1, is_chat_modelTrue )可以看出来定制的接口只用定义对应的API KEY在环境变量里通用的接口需要补充清楚模型名api-keyapi的url等等。3.4 整体流程我们打算定义两个AgentChecker: 负责去调用获取最新博客以及解析Notifier: 负责向我们发送通知当有新的博客的时候Checker向Notifer发送事件告知notifier新博客的标题和链接。然后结束。整体流程如下3.5 定义Eventfrom llama_index.core.workflow import Workflow, step, StartEvent, StopEvent, Context, Event class NewBlogPostEvent(Event): title: str link: str由于Checker流转向Notifer的时候只需要给它标题和链接即可咱们的NewBlogPostEvent只用包含title和link字段。3.6 定义两个合作的Agent我们先定义Checker交代好它的角色ROLE任务TASK和输出要求OUTPUT_FORMAT将checker需要调用的工具给它from llama_index.core.agent.workflow import ReActAgent CHECKER_SYSTEM_PROMPT ### ROLE 咱们是一个极其精准的数据提取专家。 ### TASK 1. 调用工具获取最新博客文章。 2. 提取其标题和链接。 3. **必须**以 JSON 格式输出。 ### OUTPUT_FORMAT {title: 文章标题, link: 文章链接} checker ReActAgent( namechecker, system_promptCHECKER_SYSTEM_PROMPT, tools[tool_get_blog], llmSettings.llm )然后咱们再来定义NotifierNOTIFIER_SYSTEM_PROMPT ### ROLE 咱们是一个通知官。 ### TASK 请根据提供的信息发送通知。 直接调用工具发送不要解释咱们的行为。发送成功后回复“已发出”即可。 notifier ReActAgent( namenotifier, system_promptNOTIFIER_SYSTEM_PROMPT, tools[tool_send_all], llmSettings.llm )3.7 定义Workflow从Workflow类派生出我们的workflow类定义step从StartEvent开始到StopEvent结束这里因为模型的指令跟随能力比较差格式化输出不了咱们用了一个正则来兜底。import os import re import json global_last_title class DemoBlogMonitor(Workflow): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.checker checker self.notifier notifier step async def check_step(self, ev: StartEvent) - NewBlogPostEvent | StopEvent: global global_last_title rss_url ev.get(rss_url) print(f--- [Checker] 目标: {rss_url} ---) print(f--- [Checker] 基准: {global_last_title} ---) response await self.checker.run(user_msgf请提取此 RSS 的最新数据{rss_url}) res_text str(response) print(fDEBUG [Agent Output]: {res_text}) try: json_match re.search(r(\{.*\}), res_text, re.DOTALL) if not json_match: raise ValueError(未在回复中找到 JSON 块) data json.loads(json_match.group(1)) current_title data.get(title, ).strip() current_link data.get(link, ).strip() if not current_title or not current_link: raise ValueError(JSON 数据缺失字段) # 在 Python 侧进行确定性比对 if current_title ! global_last_title: print(f发现新动态: {current_title}) # 注意这里我们只在成功触发通知时更新状态 return NewBlogPostEvent(titlecurrent_title, linkcurrent_link) else: return StopEvent(resultf判定内容未更新) except Exception as e: # 如果 JSON 解析失败尝试最后的正则兜底 print(fWARN: JSON 解析失败 ({e}), 尝试正则兜底...) link_match re.search(r(https?://\S), res_text) if link_match: link link_match.group(1).strip( ”\。) # 假设引号中间的内容是标题 title_match re.search(r[是“\](.*?)[”\], res_text) title title_match.group(1) if title_match else 未识别标题 if title ! global_last_title: return NewBlogPostEvent(titletitle, linklink) return StopEvent(resultf解析彻底失败。原文: {res_text}) step async def notify_step(self, ev: NewBlogPostEvent) - StopEvent: global global_last_title print(f--- [Notifier] 正在发送: {ev.title} ---) await self.notifier.run(user_msgf发送通知标题《{ev.title}》链接 {ev.link}) # 只有通知成功发出后才真正更新全局基准 global_last_title ev.title return StopEvent(resultf完成。新基准已设为: {ev.title})3.8 运行async def main(): monitor DemoBlogMonitor(timeout120) print(\n Run #1) await monitor.run(rss_urlhttps://blog.algieba12.cn/atom.xml) print(\n Run #2) await monitor.run(rss_urlhttps://blog.algieba12.cn/atom.xml) await main()这里咱们运行两遍确认全局变量会同步更新到新状态咱们实际使用的时候可以将其持久化存储下来而不是用变量global_last_title将状态保存在内存中4. 代码本篇博客代码示例可在Kaggle笔记本5. 常见问题 (QA)Q1: 为什么不让 Agent 直接判断是否有更新而是要在 Python 代码里写if current_title ! global_last_title:A:为了系统的绝对稳定性(划重点)大模型在 ReAct 模式下有时会产生“幻觉”或者表现得过于“客气”。现象最开始的设计是让模型自己比对已知标题和新标题结果模型看到传进去的旧标题占位符误以为这是一道“填空题”不仅没有进行比对还很有礼貌地让我把真实标题填进去。结论最佳实践是逻辑解耦。让 Agent 专注于它最擅长的事情从杂乱网页中精准提取非结构化数据而将确定性的逻辑判断字符串比对交还给传统的 Python 代码来做。Q2: 为什么一定要强制模型输出 JSON 格式之前用|这种自定义分隔符不行吗A:因为自然语言的边界太模糊且极易与真实数据冲突。这是本次开发多智能体协作时遇到的最大痛点表达欲失控高级模型比如 Llama-3.3 或 Qwen即使在 Prompt 里千叮咛万嘱咐只输出数据也极大概率会在结果前后加上“好的最新文章是…”之类的废话导致split(|)直接报错。特殊符号冲突碰巧咱们博客的标题里本身就带有|符号。正则匹配遇到这种情况会产生严重的边界歧义。JSON 的优势JSON 拥有明确的边界标识花括号和双引号。再配合 Python 正则re.search(r(\{.*\}))专门抓取大括号之间的内容就能彻底免疫模型的“废话”。Q3: 运行 Workflow 时碰到了WorkflowValidationError: The following events are produced but never consumed报错是怎么回事A:这是 LlamaIndex 工作流引擎的一种“管道安全检查”机制。它的意思是咱们的check_step辛辛苦苦生产了一个NewBlogPostEvent但是工作流里没有任何一个 Step 声明要接收并处理这个事件导致事件“无家可归”。排查方法检查咱们的消费者函数在这个例子中是notify_step。解决方案确保其参数严格加上了对应的类型注解写成async def notify_step(self, ev: NewBlogPostEvent)。这样引擎就能自动把上一步产生的数据路由到这里完成闭环。Q4: 调用 Groq 或硅基流动 API 时频繁遇到429 Too Many Requests怎么办A:这是因为多智能体循环请求过快触发了并发限制。在开发 ReAct Agent 时模型需要反复执行“思考-行动-观察”的循环短时间内会产生高密度的 API 请求。冷却机制如果是演示项目可以在每次检测循环之间或者 Step 之间加一个简单的await asyncio.sleep(2)进行冷却。精简上下文尽量精简 Prompt 和工具返回的数据量避免单次请求打满 TPMTokens Per Minute限制。如果是生产环境建议使用硅基流动的付费版以获取更高的并发额度。Q5: 在生产环境中我还应该使用global global_last_title这种全局变量来管理状态吗

相关文章:

从 ReAct 到 Workflow:基于云端 API 构建事件驱动的智能体

1. 什么是WorkFlow 之前咱们的用法是一种QueryEngine的用法,就是将大模型当成一个查询的工具在使用,而workflow是LlmaIndex的新一代编排引擎。 1.1 核心逻辑 LlamaIndex的workflow,本质上是一个事件驱动(Event-driven&#xff…...

5分钟掌握gInk:Windows上最简单高效的免费屏幕标注工具完整指南

5分钟掌握gInk:Windows上最简单高效的免费屏幕标注工具完整指南 【免费下载链接】gInk An easy to use on-screen annotation software inspired by Epic Pen. 项目地址: https://gitcode.com/gh_mirrors/gi/gInk 你是否曾在演示时想要快速圈出重点数据&…...

OpenClaw与Python:构建高效自动化脚本,赋能复杂工作场景落地

OpenClaw与Python:构建高效自动化脚本,赋能复杂工作场景落地摘要在数字化转型浪潮席卷全球的今天,自动化技术已成为提升企业运营效率、降低人力成本、应对复杂业务挑战的关键利器。其中,机器人流程自动化(RPA&#xff…...

费城“敬畏部”:AI 与艺术融合的新奇沉浸式体验

【导语:费城全新沉浸式艺术体验项目“敬畏部”,由多位艺术家打造,融合了 AI 技术。它以独特的方式让游客与艺术互动,探讨了个人数据存储等主题,为 AI 在艺术领域的应用提供了新视角。】“敬畏部”:费城的新…...

【5大突破】WarcraftHelper:让经典RTS重获新生的跨系统优化方案

【5大突破】WarcraftHelper:让经典RTS重获新生的跨系统优化方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper作为开源解…...

(转发需官方授权)生活中遇到的知识:(转发需官方授权)有些饭店办公的人多所以有个办公地的营业执照也会有一个饭店的营业执照这种情况起码这个主打饭店运营的办公地的公司有起码有两个子饭店其中一个是主饭店。

(转发需官方授权)生活中遇到的知识:(转发需官方授权)有些饭店办公的人多所以有个办公地的营业执照也会有一个饭店的营业执照这种情况起码这个主打饭店运营的办公地的公司有起码有两个子饭店其中一个是主饭店。...

互联网时代出现过的电脑病毒之“小球病毒”也叫“乒乓病毒”的电脑和安卓手机上出现过的病毒“乒乓病毒”简介

(转发需官方授权) 互联网时代出现过的电脑病毒之“小球病毒”也叫“乒乓病毒”的电脑和安卓手机上出现过的病毒“乒乓病毒”简介 1989年4月,西南铝厂一台正在工作的计算机屏幕上突然跳出一个小方块。 ​​​1989年4月,西南铝厂一…...

BiliTools:2026年最强大的免费哔哩哔哩资源管理工具终极指南

BiliTools:2026年最强大的免费哔哩哔哩资源管理工具终极指南 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …...

(支援发出,转发需官方授权)某个名师大家可能还是一个女的自称“廉者不受嗟来之食”对自己对自己的学生和想要招(找)的学生都一样。

(支援发出,转发需官方授权)某个名师大家可能还是一个女的自称“廉者不受嗟来之食”对自己对自己的学生和想要招(找)的学生都一样。...

教师必备:用CosyVoice快速制作带语音讲解的理工科课件

教师必备:用CosyVoice快速制作带语音讲解的理工科课件 作为一名理工科教师,你是否曾为制作多媒体课件而烦恼?尤其是那些布满复杂公式的数学、物理、工程学课件,想要为每个公式配上专业的语音讲解,却面临两大难题&…...

VoxCPM-1.5-WEBUI作品集:高音质语音合成效果大赏

VoxCPM-1.5-WEBUI作品集:高音质语音合成效果大赏 1. 开篇:声音的艺术与技术 在数字内容创作领域,声音质量往往决定了作品的沉浸感和专业度。想象一下,当你听到一段清晰自然、富有情感的语音时,是否会不自觉地被吸引&…...

MogFace-large部署案例:嵌入式AI盒子(Jetson Orin)上轻量运行方案

MogFace-large部署案例:嵌入式AI盒子(Jetson Orin)上轻量运行方案 1. 项目背景与价值 人脸检测技术在实际应用中面临着一个关键挑战:如何在资源受限的嵌入式设备上实现高精度实时检测。传统方案往往需要在精度和速度之间做出妥协…...

AI辅助开发:利用快马多模型AI为9·1免费素材网站添加智能搜索与推荐

AI辅助开发:利用快马多模型AI为91免费素材网站添加智能搜索与推荐 最近在做一个免费素材网站的项目,需要为91免费素材平台添加智能搜索和推荐功能。传统的关键词搜索已经不能满足用户需求了,特别是对于设计素材这种视觉化内容。正好发现了In…...

不平衡电网电压下虚拟同步发电机VSG并网运行及多目标控制策略研究

不平衡电网电压下虚拟同步发电机VSG并网运行(三相电流平衡、有功功率恒定、无功功率恒定三种控制目标皆可实现),下图只现实了不平衡电压下控制三相电流平衡,送相关文档 不平衡电网电压绝对是VSG并网的噩梦,本来好好的…...

如何让旧iPhone/iPad焕发新生:Legacy-iOS-Kit终极降级指南

如何让旧iPhone/iPad焕发新生:Legacy-iOS-Kit终极降级指南 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit …...

WeChatExporter:让微信聊天记录导出实现数据自主权的开源方案

WeChatExporter:让微信聊天记录导出实现数据自主权的开源方案 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 在数字时代,微信聊天记录已成为个人…...

磁流变半主动悬架Simulink模型构建与策略设计概述

磁流变半主动悬架simulink模型,包含模型创建,模型策略设计磁流变悬架的Simulink建模就像搭积木——你得先搞清楚每块积木该放哪儿。咱们从最基础的四分之一车模型开始,车身质量、悬架刚度这些参数直接在Simulink里拖几个Mass和Spring模块就能…...

AI教材写作神器登场,低查重表现出色,助力教材快速产出!

在编写教材的过程中,如何满足多样化的需求成为了一个重要的挑战。不同年龄段的学生有着显著的认知差异,如果教材内容过于深奥或浅显都可能出现问题。同时,随着课堂教学和自主学习等不同情境的出现,教材的呈现方式同样需要灵活调整…...

5大核心突破:WarcraftHelper让魔兽争霸III重获新生

5大核心突破:WarcraftHelper让魔兽争霸III重获新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 你是否也曾遇到这些困扰:宽…...

MyKeymap应用专属键盘映射配置指南

MyKeymap应用专属键盘映射配置指南 【免费下载链接】MyKeymap 一款基于 AutoHotkey 的键盘映射工具 项目地址: https://gitcode.com/gh_mirrors/my/MyKeymap 还在为不同软件快捷键冲突烦恼?当你在Photoshop中习惯使用CtrlS保存,却在Excel中误触导…...

5步攻克AI到PSD无损转换:设计师必备的矢量分层工作流指南

5步攻克AI到PSD无损转换:设计师必备的矢量分层工作流指南 【免费下载链接】ai-to-psd A script for prepare export of vector objects from Adobe Illustrator to Photoshop 项目地址: https://gitcode.com/gh_mirrors/ai/ai-to-psd 在数字设计的协作流程中…...

NFL十年追踪数据与机器学习创新

某机构十年NFL下一代数据统计创新 每场NFL比赛都会产生数百万个来自22名佩戴RFID设备的球员的追踪数据点。75个机器学习模型在云端处理这些数据,耗时不到一秒,将橄榄球运动转变为每一次移动都被测量、建模并即时分析的运动。 最初,每支俱乐部…...

对话式AI与信息抽取技术探索

“帮助人们可靠地获取信息……这是我的动力” 某机构学者Heng Ji,领导UIUC的Blender实验室,她的使命是将真正有价值的信息与噪声区分开来。 作者:Sean O’Neill,2023年8月2日,阅读时长6分钟 曾经,我们可以自…...

AI智能体架构:更复杂不一定更好

为什么更智能的智能体架构并不总能提升效果 我对智能体将给知识工作带来的影响依然持乐观态度。正如我在之前的文章中所指出的,那些由明确规则和成熟系统塑造的领域(包括会计和合同管理)已经看起来非常适合这种自动化。但即使机遇真实存在&am…...

解锁数码影像的胶片灵魂:t3mujinpack开源胶片模拟方案全解析

解锁数码影像的胶片灵魂:t3mujinpack开源胶片模拟方案全解析 【免费下载链接】t3mujinpack Collection of film emulation presets for open-source RAW developer software Darktable. 项目地址: https://gitcode.com/gh_mirrors/t3/t3mujinpack 在数字摄影…...

如何让JSON数据在前端项目中优雅可视化和交互?

如何让JSON数据在前端项目中优雅可视化和交互? 【免费下载链接】json-formatter-js Render JSON objects in beautiful HTML (pure JavaScript) 项目地址: https://gitcode.com/gh_mirrors/js/json-formatter-js 在复杂的前端开发场景中,JSON数据…...

从零开始:5个必知的图像篡改检测数据集下载与使用指南(附避坑提醒)

从零开始:5个必知的图像篡改检测数据集下载与使用指南(附避坑提醒) 当你第一次接触图像篡改检测领域时,最令人头疼的往往不是算法本身,而是如何找到合适的数据集。我曾见过不少研究生花费数周时间在各大论坛和GitHub仓…...

别再手动整理了!用这个Python脚本,一键把TMM刮的演员图灌进Jellyfin

解放双手!Python自动化脚本实现TMM演员图无缝迁移至Jellyfin 每次打开Jellyfin看到那些缺失的演员头像,是不是总有种美中不足的感觉?作为影视库管理员,我们都希望自己的媒体库尽善尽美。但现实是,Jellyfin默认的演员图…...

Windows窗口截图+OpenCV实战:用Python做个自动寻路导航系统

Windows窗口截图OpenCV实战:构建智能寻路导航系统 从游戏自动化到智能导航的技术实现 在数字时代,我们经常需要处理各种界面自动化任务,从游戏辅助到软件测试,再到智能导航系统。想象一下,如果能让你编写的程序像人类一…...

Rufus技术转型中的兼容性管理:从Windows 7支持终止看开源项目的演进策略

Rufus技术转型中的兼容性管理:从Windows 7支持终止看开源项目的演进策略 【免费下载链接】rufus The Reliable USB Formatting Utility 项目地址: https://gitcode.com/GitHub_Trending/ru/rufus 技术变革背景:软件生命周期与系统迭代的必然冲突 …...