开发者工具箱|编程·开发工具·资源
779 subscribers
1.43K photos
766 links
面向开发者的实用工具、库与效率技巧,写代码更快更爽。投稿 @BDHT1
#开发者 #编程工具 #效率 #程序员 · 开源总站 @GitHubTrendingHub
Download Telegram
像写软件一样构建AI Agent

Jake Mannix 指出当前 AI Agent 开发架构混乱,如同 1970 年代的 BASIC。通过引入中间协议层,工程管理者可以构建带版本管理和封装的“虚拟工具”。该设计支持接口映射、动态 schema 投影和运行时污点追踪,在不拖慢开发速度的前提下主动消除数据泄露风险。

#开发者 #工具 #AI #Agent #中间协议层 #架构 #数据安全
@DevToolboxHub
96%勒索软件受害者是中小企业,如何保护栈

Verizon 2026年DBIR报告显示,在已知规模的勒索软件受害者中,96%是中小企业。第三方卷入SMB安全事件的比例跃升至55%,而47%员工少于50人的企业网络安全预算为零(StrongDM 2025)。现代勒索攻击已演变为结构化杀伤链:漏洞利用成为头号初始入口(31%),其次是AI生成的钓鱼邮件、重复凭证及暴露的SSH/RDP端口。更关键的是,CVE公布到野外利用的时间窗口已从数月缩至数小时。

攻击链分五阶段:初始访问(漏洞利用、钓鱼、复用凭证、暴露端口)、静默侦察(数天至数周)、数据窃取(双重勒索)、加密勒索、真实成本(平均停机21天、通知义务、罚款、声誉损失)。好消息:中位赎金已降至约14万美元,69%受害者拒绝付款。但前提是备份可恢复。
仅靠WAF不够——它无法防御服务器配置错误、未修补CMS、开发者凭据泄露等。本周在野的WordPress预认证RCE链(CVE-2026-60137 + CVE-2026-63030 "wp2shell")可在默认安装下夺取管理员权限。WordPress 6.8.6/6.9.5/7.0.2已修复,若未强制更新需立即处理。
三个实际有效的栈级控制:
1. 备份验证:异地、不可变、定期测试恢复(RPO<24h),确保不在同一服务器。
2. 免费安全基线扫描(5分钟):检查SSL/TLS、安全头、DNS、邮件认证、CMS版本、开放端口等。
3. 关闭三大入口:快速修补所有组件、为所有管理面启用MFA、锁定管理面板(IP限制/Cloudflare Access/VPN)。


立即行动:若运行WordPress,立刻修复上述RCE链;测试一次备份恢复;运行免费安全扫描。大多数勒索软件缺口可发现并在被利用前修复。

#开发者 #工具 #勒索软件 #中小企业 #VerizonDBIR #WordPress #CVE202660137 #CVE202663030 #备份验证 #MFA
@DevToolboxHub
320 小时从零为音乐人重建网站

加拿大音乐人 Richard 此前找专业 agency 开发网站,最终收到的是一个 WordPress 转储、臃肿主题和混乱 HTML/CSS 的烂摊子。agency 中途加价,交付品却是基础设施臃肿、可访问性(a11y)完全被破坏、移动端 UX 几乎为零的半成品。

开发者在后端 David 的配合下决定彻底重写——不修补 WordPress 尸体,而是从零构建一个干净、轻量、可访问的前端。

整个项目历时超过 320 小时,起步时没有任何设计素材、Logo 或可用照片,连客户端需求都是边做边定。
技术手段包括:
- 用 Node.js + fluent-ffmpeg 编写 CLI 脚本自动将 MP3 转为所需 WAV 格式,并通过 ffprobe 以 60ms 容差验证时长、声道数和采样率。
- 构建自定义 SPA 路由(vanilla.js),通过 hash 路由模拟多页面站点体验,自动管理 history.pushState/popstate 并更新 aria-current 等无障碍属性。
- 为音频区编写专门的播放列表类,处理 Bandcamp iframe 样式强制剥离、自适应展开/折叠及视图变化监听。
- 编写端到端测试并配置完整的 CI/CD 部署管线,最终选用 Render.com 免费套餐托管(后发现免费套餐屏蔽 SMTP 外发邮件,但核心 Web 服务运行稳定)。

最终交付的站点干净、语义化、可访问,证明了工程所有权和实际代码质量远胜于商业标签与价格。项目目前处于最终交接阶段,后续将公开仓库/演示链接。

#开发者 #工具 #音乐人网站 #WordPress #SPARouter #CICD #Nodejs #a11y
@DevToolboxHub
Workflows:Rust 开源 agentic 工作流引擎

Workflows 是一个 Rust 库(crate 名为 tinyflows),将自动化流程建模为有向图 WorkflowGraph。你构建图→结构验证→编译成 CompiledWorkflow→在 tinyagents 引擎上执行。数据流以 JSON 条目数组形式在节点间传递,合并归约器确保并行分支不冲突。

节点类型完整:trigger、agent、tool_call、http_request、code、output_parser、sub_workflow、condition、switch、merge、split_out、transform。每节点支持 =-prefixed 表达式引用运行状态。

核心特性:主机无关——通过 Rust trait 抽象 LlmProvider、ToolInvoker、HttpClient、CodeRunner、StateStore,库本身不硬编码供应商、不发起网络请求。凭据以不透明的 connection_ref 传递,宿主方解析,避免泄露。相同编译工作流可在 CI 用 mock,生产环境用真实能力,无需分支逻辑。

审批流:节点可标记 requires_approval,执行到此处暂停并暴露为 RunOutcome::pending_approvals,宿主方通过 engine::resume 恢复。错误处理:per-node 策略(stop / continue / 路由至错误输出),有限重试,tracing 可观测性,并提供 RunObserver 钩子。

已实现:完整节点目录、结构验证、每次编译、条目数据流与表达式、条件/分支/归并路由、审批门控、可观测性、版本化线格式(schema_version + type_version)及迁移框架。#![forbid(unsafe_code)],MSRV 1.85,Rust 2024 版。

尚未实现:真正的 jq/jaq 表达式引擎(当前仅基本点路径评估)、重试退避与超时、持久化检查点断点续跑、可视化和 agent-first 创作工具(属于宿主层,由 OpenHuman 产品提供)。OpenHuman 宿主集成本身(Phase B)在独立仓库,尚未公开。


许可证 GPL-3.0-or-later。

GitHub

#开发者 #工具 #Rust #开源 #工作流 #agentic #tinyflows #Workflows
@DevToolboxHub
Higgsfield 积分与无限模式使用选择

Higgsfield 提供「所有模型无限生成」的套餐,但这句话仅对 Web UI 有效,CLI/API 必须消耗积分。混淆两者会浪费预算或打断自动化流程。作者实测了各类输出在 CLI 下的真实积分成本。

关键区别:Web UI 无限模式适合手动探索(速度慢、免费),CLI/API 按生成消耗积分(速度快、可脚本化)。例如 Kling 3.0 pro 5 秒视频消耗 12.5 积分,Seedance 2.0 1080p 5 秒视频消耗 45 积分。

使用建议:探索阶段用 Web UI 无限计划或试用;自动化批量管线用 CLI 积分模式。约 46 镜头的电影级素材库单次需 750–1000 积分。PLUS 套餐(1200 积分)可覆盖一个项目加约 35 次重生成,ULTRA(3000 积分)适合多次完整尝试。

实测 CLI 消耗(部分关键生成)
生成项:Kling 3.0 pro, 5s video → 12.5
Kling 3.0 std, 5s video → 10
Kling 3.0 std, 3s video → 6
Seedance 2.0, 1080p 5s → 45
Seedance 2.0, 720p 5s → 22.5
Nano Banana Pro image, 2K → 2

批量前先用 higgsfield generate cost 命令检查预估积分。


总结:先用 Web UI 免费探索,需要自动化时再购买积分。下一篇文章会实现在预算内自动运行整个管线。

#开发者 #工具 #Higgsfield #AI视频 #积分 #CLI #API #自动批处理
@DevToolboxHub
Tooltify360:免费开发者工具集(无注册)

频繁切换网站处理 JSON、JWT、Base64、UUID 等常见开发任务?Tooltify360 将多款常用工具汇集一处,轻量快速,无需注册,桌面和移动端均可使用。

目前已收录的工具包括:
JSON 格式化与校验、JWT 解码、Base64 编解码、UUID 生成、cURL ↔ Fetch 转换、cURL ↔ Axios 转换、SQL 格式化、XML 格式化、正则测试、URL 编解码、密码生成、哈希生成、Markdown 预览、CSV ↔ JSON 转换等。

作者表示将持续根据开发者工作流添加新工具,并开放反馈收集。


该工具完全免费,无需安装,浏览器打开即用。

#开发者 #工具 #Tooltify360 #免费 #在线工具
@DevToolboxHub
Canvas 多语言文本渲染四大坑

仅测试英文和日文时 Canvas 2D 文本渲染看起来正常,但一旦加入西班牙语、法语、葡萄牙语,就会暴露四个常见陷阱。根源在于拉丁语系文本长度通常比日语长 1.4–2 倍(法语/葡萄牙语 1.4–1.7 倍,西班牙语可达近 3 倍),为日语优化的字号和最大宽度无法容纳拉丁语系。

模式一:基于空格的分词(text.split(/\s+/))对中日韩文(CJK)无效,整个句子成为不可分割的 token,在画布边缘截断。
模式二:使用 ASCII 类 tokenizer(如 [A-Za-z0-9'\-_])会把带有重音的字符(ç、é、ã)从单词中间分开,例如 produção 变成 produ / ç / ão。英文测试无法发现,只有生成实际 PNG 才能看见。
模式三:拉丁语系文本溢出到两行后被加省略号,被吃掉的部分往往是语义关键的尾部词(如 production / produção)。修复方法是将字段分为两类:可截断的字段用折行加省略号,不可截断的字段自动适配字号。
模式四:在 Canvas 一侧实现自动适配字号,但 DOM 预览保持固定字号,导致预览换行与下载 PNG 不一致。必须将字号计算集中到离屏 canvas,并同时应用到渲染和预览的 style.fontSize。


预发布检查清单:日语需检查最后一行渲染到最后一个字符;法语/西语/葡语需检查重音字符处不分裂;法语/葡语需检查省略号不吃掉尾词;所有五种语言需保证预览与下载 PNG 换行一致。验证时间:2026年4–5月,基于 Canvas 2D API / vanilla JS / 英日西法葡五种语言生产环境。

#开发者 #工具 #Canvas #i18n #多语言 #前端 #JavaScript #CJK #文本渲染
@DevToolboxHub
Gitlord:将 AI 对话变成 Git 提交

每次 agent 对话都变成一个 Git commit,让 AI 会话历史可导航、可分支、可 diff,像管理代码一样管理 AI 工作流。Gitlord 是一个开源 CLI 工具,兼容多种 AI 提供方并内置 MCP 工具集成与 RAG 语义搜索。

核心能力:
• 每次 agent 交互自动生成 Git commit,支持分支、回退和 diff
• 通过 MCP 连接文件系统、搜索、浏览器等工具,子 agent 自动继承工具链
• 统一接口在 170+ 提供方、近 3000 个模型间切换,或一行代码切换本地模型
• 4 行 Python 代码即可启动 agent

性能改进 (v0.1.0):
• 结构化 trailer 消除 JSON 遍历,元数据解析达到 O(1)
• 每次交互自动更新索引,缓存至 .gitlord/index.json
• 新增内存查询层,支持快速过滤与聚合
• 长会话快照压缩:将旧轮次压缩为 JSON,从检查点 rebase


完全模块化、可替换,MIT 许可。适用于需要可追踪、可复现 AI 工作流的开发者。

GitHub

#开发者 #工具 #Gitlord #AI #Agent #MCP #开源 #CLI
@DevToolboxHub
GitLab CLI 文档自相矛盾的六种情况与 CI 陷阱

一位开发者通过 grep 弃用标记的方法,在 GitLab CLI 中发现了六处文档与代码矛盾的地方,并提交了修复。同时记录了新手在 CI 中容易掉入的两个陷阱。

具体发现包括:
1. glab issue list 和 glab incident list 的示例中使用了 --opened 标记,该标记已被隐藏、弃用且已是默认行为。
2. glab mr note 的帮助文档仍展示 --resolve 和 --unresolve,这两个标记已被子命令替代。
3. bug 报告模板建议使用 DEBUG=true,但实际需要 GLAB_DEBUG 前缀才能避免弃用警告。
4. deploy-key delete 声明参数可选,但实际未提供参数时会删除 ID 0 的部署密钥。
5. ci lint 不对远程 URL 进行状态码检查,指向 404 页面会将错误页 HTML 当作输入,返回误导的语法错误。
6. glab api 的数组参数正则只允许小写字母和下划线,包含大写字母或连字符时会静默转为 JSON 字符串。
另外,Windows 上的测试存在临时目录路径转义错误和 HOME 环境变量未设置两处问题。


CI 陷阱包括:新 GitLab 账号需完成身份验证才能使用共享 runner,否则管道无声失败;分支推送不触发 MR 管道,需通过草稿 MR 验证。该开发者提交了6个合并请求,全部通过:!3536 序列化数组元素大小写,!3537 使用 GLAB_DEBUG,!3538 停止指向弃用标记的帮助,!3539 修复 Windows 测试路径,!3540 要求 deploy-key delete 必传参数,!3541 拒绝无效远程 URL 响应。

#开发者 #工具 #GitLab #CLI #glab #Go #DevOps #文档
@DevToolboxHub
Python 基础速通:面向 JS 开发者

这份教程专门为 JavaScript 开发者设计,通过逐项对比 JS 与 Python 的语法和关键概念,帮你快速掌握 Python 核心。从基本语法、变量类型、控制流、函数、数据结构到 OOP、错误处理、异步编程,覆盖 10 个常用主题,附快速参考表和练习。

基本语法:Python 无分号,缩进代替花括号,注释用 # 而非 //
变量类型:Python 使用 snake_case,True/False 大写,None 替代 null/undefined,列表≈数组,字典≈对象
控制流:if/elif/else 代替 if/else if/else;for i in range(n) 代替 for(let i=0;i<n;i++);无 ++ 运算符
函数:def 关键字,lambda 近似箭头函数,f-string 类似模板字面量,支持多返回值(元组解包)
数据结构:列表支持 append/pop 及 list comprehension;字典用括号访问或 .get();元组不可变;集合自动去重
类与 OOP:class 后需冒号,实例方法首参数为 self,构造方法 init,静态方法用 @staticmethod
模块导入:import math 或 from math import add;支持别名 import math as m
错误处理:try/except/finally,except Exception as e 代替 catch
异步编程:使用 asyncio 和 async/await,与 JS 的 Promise/Async 模式相似
快速参考:变量声明无需关键字;null/undefined 对应 None;=== 对应 == 和 is;数组长度用 len();for 循环用 range()


教程还包含一个练习题:将 JS 的 filter+map 改写为 Python list comprehension,并给出示例。

适合从 JavaScript 切换 Python 的开发者在短时间内快速补齐基础概念差异。

#开发者 #工具 #Python #JavaScript #编程基础 #学习资源 #对比 #教程
@DevToolboxHub
迟来的后端模式清单

一位开发者回顾早期职业生涯,发现真正提升代码质量的不是学会更多新技术,而是识别并运用常见后端设计模式。以下是他认为最值得掌握的10种模式。

1. Repository 模式:将数据访问逻辑与业务逻辑分离。控制器不再直接写SQL,而是通过 user_repository.get_user(id) 统一操作。更换数据库时业务层无需改动。

2. Service Layer 模式:把业务规则从控制器中抽离。控制器只负责“如何接收请求”,Service 层处理余额校验、账户验证、费用计算等核心逻辑。业务变化时只需更新Service。

3. 依赖注入:不直接在类内部创建依赖(如 self.database = PostgreSQL()),而是通过构造函数传入。测试时可替换为 mock,提高灵活性。

4. Observer 模式:事件驱动——用户注册后,系统广播事件,邮件服务、分析服务、通知服务各自监听响应。发送方无需知道谁在监听。

5. Strategy 模式:替代冗长的 if-else 条件。例如支付方式,将每种支付策略封装成独立类,新增方式只需新增策略类,不修改原有代码。

6. Factory 模式:集中管理复杂对象的创建逻辑。例如根据配置创建不同通知渠道(Email、SMS、Push),应用只需请求“给我一个通知”。

7. Queue 模式:将实时操作与后台任务分离。用户上传头像后,立即返回;后台队列处理图片缩放、缩略图生成等耗时操作,提升响应速度和可靠性。

8. Cache-Aside 模式:读取前先查缓存,命中直接返回;未命中再查数据库并写回缓存。减少重复数据库查询,但需注意缓存与数据库的同步。

9. Circuit Breaker 模式:当依赖的外部服务持续失败时,暂时停止请求,给其恢复时间,防止故障蔓延。分布式系统中关键容错手段。

10. Middleware 模式:将认证、日志、限流等横切关注点从每个端点中抽离,通过请求管道统一处理。增加功能时无需修改每个组件。


最终要点:模式不是规则,而是工具——应减少复杂度,而非增加。最大的价值在于提供团队共享的沟通语言:“这里需要一个 Observer 模式”所有人立刻理解架构方向。

#开发者 #工具 #后端 #设计模式 #架构 #系统设计 #Repository #ServiceLayer #依赖注入 #Observer #Strategy #Factory #Queue #CacheAside #CircuitBreaker #Middleware
@DevToolboxHub
用MCP服务器整合分散的LLM配额

频繁遇到一个LLM提供商速率限制、另一个还有配额、第三个更便宜但当前工作流用不上?@mrrlin-dev/external-agents 是一个MCP服务器,让 Codex 和 Claude Code 等工具通过统一接口将任务路由到多个LLM提供商,把孤立的配额桶合并成一个更大的有效token预算。

实际痛点:大多agent设置默认只用一个提供商。一旦开始长审查会话、多文件编辑、重复评审、大批量分析或并行运行agent,单一提供商的配额和延迟就成了瓶颈——要么为简单任务花高价,要么因一个提供商忙而卡住整个流程。许多开发者其实在 Anthropic、OpenAI、Gemini、Groq、OpenRouter、DeepSeek 等处已有可用配额,只是碎片化了。

核心思路:不把每个提供商当作独立工作流,而是统一执行池。agent只和这个MCP服务器对话,服务器在后端将请求分发给多个已配置的提供商。这不会绕过速率限制,而是更智能地利用已有容量。

MCP的好处:提供稳定接口,无需为每个工具写自定义回退逻辑。配置一次,后面在接口背后迭代策略。没有这一层,多提供商设置往往变成无人维护的硬编码脚本、看不见的临时重试、手动切换API密钥或为不同提供商使用不同工具——都破坏agent流畅度。

实际改善点:①成本效率——强模型留给难任务,便宜/免费层处理简单工作;②更少中断——一个提供商忙时,会话通过其他路线继续;③更好利用碎片化配额——将分散的付费计划、免费额度、低价溢出整合为可用资源;④更干净的审查工作流——多模型评审时不依赖单一供应商路径。

适用人群:日常用 Codex 或 Claude Code、跑长会话、在意花费、已有多个提供商账户、希望增强韧性但不重写agent栈的人。也适合实验不同路由策略和供应商组合。

保留声明:不能保证输出一致,不能替代任务-模型匹配的判断,不是让成本消失——目标是让花费可见、有意识、分配更合理。


GitHub: GitHub
npm: npm

#开发者 #工具 #MCP #LLM #Codex #ClaudeCode #配额路由 #Anthropic #OpenAI #Gemini #Groq #OpenRouter #DeepSeek
@DevToolboxHub
实时视频换脸的浏览器工作流

使用 Vivify Realtime Face Swap,在浏览器中即可完成实时人脸替换。你只需要一张参考肖像、一个摄像头和 AI 实时预览。参考肖像提供新面孔,摄像头捕捉动作与表情。

操作流程:进入 Face Swap 模式并选择一张示例肖像(也可上传授权人脸),检查显示帧率后点击 Start live preview,允许浏览器摄像头权限,对比摄像头输入与 AI 输出,缓慢转动头部验证效果。所谓“实时”——离线换脸输出单个文件,而实时换脸持续处理摄像头帧并应用参考脸;仅有一帧效果好还不够,需多角度确认 AI 持续更新。

常见问题:无摄像头画面——检查网站权限并关闭其他占用摄像头的应用;摄像头正常但 AI 无输出——重新开启实时会话,这是输出或连接问题而非权限问题;首帧正常但运动后变形——减慢动作速度、使用清晰参考肖像并保证均匀光照。


使用须知:请使用自己的脸或经明确授权的参考肖像,不得用于冒充、欺诈或绕过身份验证,在目标平台要求时披露合成媒体。该浏览器页面仅预览,不录制、下载或保存变换后的流。如需将结果用于 OBS、Zoom 等其他应用,需额外安装虚拟摄像头客户端。

#开发者 #工具 #实时换脸 #Vivify #浏览器 #AI
@DevToolboxHub
PtH 与 Kerberoasting:红队经典攻击技法

Pass‑the‑Hash 直接使用系统已有的 NTLM 哈希进行身份验证,无需破解密码,即可横向移动到其他主机。Kerberoasting 则从 Active Directory 服务票据中提取 Kerberos 哈希,离线破解常用弱密码的服务账户。两种技术组合,能在不加零日漏洞的情况下完成域接管。

典型攻击流程:初始通过钓鱼获得 Meterpreter 反向 Shell → 用 Mimikatz 提取管理员 NTLM 哈希 → 利用 psexec 横向移动到其他主机 → 在域控制器上执行 Invoke‑Kerberoast 获取服务票据哈希 → 使用 hashcat 离线破解 → 用破解出的服务账户密码提升到 Domain Admin → 最后提取 NTDS.dit 并制作 Golden Ticket 持久化。

常见错误与对策:仅用 PtH 可能被 Restricted Admin Mode 或 Credential Guard 拦截,应配合 Kerberoasting 作为备份;无筛选的 Kerberoasting 会产生大量无用票据增加暴露风险,应借助 BloodHound 锁定关键服务账户;忽略离线破解会直接触发 IDS,应导出哈希并利用 GPU 加速的 hashcat 离线处理;攻击后未清理 Mimikatz DLL 和服务票据会留下痕迹,应执行 sekurlsa::close 并删除临时文件。


防御建议:为服务账户强制复杂密码或托管服务账户(MSA),在 Windows 主机上启用 Credential Guard,禁用 Restricted Admin Mode,监控 powershell.exe -enc 等可疑进程以及异常的 Kerberos 票据请求,并定期进行包含 PtH 和 Kerberoasting 的红队演练。

GitHub

#开发者 #工具 #红队 #渗透测试 #ActiveDirectory #密码哈希 #Kerberos #Mimikatz #hashcat #BloodHound
@DevToolboxHub
GitLost漏洞利用AI代理泄露私有数据

安全研究公司Noma Security发现一种名为GitLost的间接提示注入漏洞,专门针对GitHub新推出的Agentic Workflows功能。攻击者将隐蔽指令嵌入公开的GitHub Issue中,当AI代理处理这些Issue时,会被诱导执行恶意操作,从而绕过安全防护,将私有仓库的机密数据泄露到公开评论中。该漏洞展示了AI Agent在自动化工作流中面临的新型安全风险——恶意构造的公开内容可直接操纵代理行为。

#开发者 #工具 #GitLost #提示注入 #GitHub #AgenticWorkflows #安全漏洞 #AI安全
@DevToolboxHub
API 速率限制坑:3 周调试经验谈

一位开发者分享构建多平台广告报告管道的教训。从 Google Ads 和 Meta 拉取数据时,两个平台限流策略不同:Google 按开发者 token 配额,Meta 按广告账户滚动使用评分。起初每小时轮询 3 个账户没问题,增加到 12 个后 Meta 开始间歇性返回 429。花了 3 周排查代码,最终发现是累计调用触发了应用级速率限制,而非单个账户。

生产级报告管道真正需要的架构要素:

1. 使用任务队列(如 BullMQ 或 Sidekiq)并内置重试与退避策略,而非简单 cron 作业。

2. 单独监控 OAuth 令牌过期,避免静默过期导致数据缺失。

3. 构建数据规范化层,将不同平台的 cost、spend 等字段统一映射到内部 schema。

4. 采用指数退避的重试逻辑,固定间隔重试只会加剧限流。

5. 增加 OAuth 令牌失败的专项告警,这是最常见的数据缺失原因。


最终作者将报告工作流迁移到专用平台 RaiseReturn,它已处理好上述多平台适配与限流问题。建议评估维护成本,必要时采用成熟方案而非自建。

#开发者 #工具 #API #速率限制 #GoogleAds #Meta #报告管道 #开发经验
@DevToolboxHub
NB2Lite:为 Codex 添加有状态图像编辑能力

大多数图像生成工具是无状态的:每次修改都要重述整个场景。Google 的 gemini-3.1-flash-lite-image(NB2Lite)通过 Interactions API 实现有状态编辑——模型在服务器端保持视觉上下文,只需描述变更即可迭代。nb2lite-skill-codex 将该能力封装成 MCP 服务器(nb2lite-agent)和 Codex 技能(nb2lite-image),让 Codex 代理能自然地进行图像生成和连续编辑。

它暴露四个工具:generate_image(文本→图像,返回路径+交互ID)、edit_image(基于上一个ID做状态化编辑)、edit_local_image(上传本地图片并编辑)、get_help(检查配置)。支持多轮编辑时保持角色、风格、光照和像素连续性,无需重新描述整个场景。宽高比在生成时选定(1:1、16:9、9:16、4:3、3:4),后续编辑继承同一比例;思考级别可选 low(快速草稿)或 high(复杂渲染)。

安装需要 Python 3.10+、Codex 和 Gemini API Key。提供多种方式:

通过插件市场安装(最简):
codex plugin marketplace add xbill9/nb2lite-skill-codex
然后在 Codex 的插件目录安装 NB2Lite Image,启动前设置 GEMINI_API_KEY 环境变量。

或克隆仓库后运行 ./init.sh 一键安装;也支持项目级、用户级或 Docker 部署。详细步骤见仓库 README。


更多用法与示例可直接查看仓库。

GitHub

#开发者 #工具 #NB2Lite #Codex #Gemini #MCP #图像生成 #InteractionsAPI #FastMCP
@DevToolboxHub
从 REPL 到 Swarm:用角色轮换扩展 AI 辅助开发

单个 LLM 的 REPL 交互能快速解决孤立问题,但真正的团队级 AI 开发需要从“单人驾驶舱”转向多智能体协同。通过动态切换系统提示词,同一个模型可以依次扮演规划者、实现者和审查者,形成类似人类团队的反馈循环,大幅提升代码质量与交付效率。

具体做法:对任何任务,从同一 LLM 实例化三个角色——规划者负责将需求分解为可执行阶段、提前标注安全/性能风险;实现者严格按规划生成代码,不添加未请求功能;审查者从正确性、安全、性能、可维护性等角度给出带严重等级的修复建议。例如一个 OAuth2 登录任务,规划者先产出分阶段架构(密码哈希、令牌发行、限流、注销),实现者据此生成代码,审查者则可能指出时序攻击漏洞或硬编码密钥。
实践中,这可以通过一个简单状态机实现:在 IDE 扩展或 CLI 中执行 /plan 切换到规划模式,/execute 将规划传递给实现者,/critique 启动审查。整个流程可审计、可复现、可在团队内标准化。
某 5 人后端团队采用此方法后,初始代码评审意见减少 40%,架构决策时间降低 60%,特性交付速度提升 35%——主要因为修订轮次和调试次数锐减。
团队部署时需集中管理提示词(放入版本库)、将角色轮换集成到 CI/CD 流程(如每次 PR 自动触发审查),并做好上下文窗口管理以维持长任务质量。


这种结构化轮换让 AI 从个人辅助工具变成团队中 24/7 的标准化成员。

#开发者 #工具 #AI #LLM #PromptEngineering #RoleRotation #Swarm #CICD
@DevToolboxHub
切换LLM提供商后,隐藏的兼容性故障

请求成功,响应是合法JSON,SDK没抛异常——但应用还是崩了。漏洞出现在我将一个LLM应用切换到另一个提供商的OpenAI兼容端点之后。集成看起来太简单:修改base URL,替换API key,保留请求体,直接上线。这个流程对最简单的提示有效,但并不意味着两个提供商会表现一致。故障不在HTTP协议层,而在于我的应用悄悄围绕某个提供商的特定行为建立起来的假设。

兼容的请求不等于兼容的行为

当一个API自称OpenAI兼容时,通常意味着服务器会接受相同的请求结构:
{"model":"some-model","messages":[{"role":"user","content":"Summarize this support ticket."}]}

这允许复用客户端和认证模式,但生产环境依赖的不只是服务器是否接受请求,还包括:
- content是字符串、数组、空值还是null
- tool-call参数的序列化方式
- finish_reason可能的取值
- usage字段是否总是返回
- 流式完成的信号方式
- 结构化输出约束是否强制
- 错误、超时和不支持参数的报告方式

两个接受相同请求的提供商,返回的响应在语法上合法,但行为可能截然不同。

解析器中隐藏的假设

我最初的响应处理器隐含假设:
const text = response.choices[0].message.content.trim();

这个逻辑一直工作,直到所选模型返回了一个工具调用。此时message.content为null,实际输出在message.tool_calls里。API没有失败,是解析器出了问题。

修复方法:先判断是否存在tool_calls数组且长度大于0,再判断content是否为字符串且非空,否则抛出异常。

工具调用是易碎的边界

工具调用至少引发三个兼容性问题:
1. 参数是否为合法JSON?外层响应是JSON,但嵌套的arguments字符串可能不是。不要直接传递给工具函数,必须先解析并捕获异常。
2. 参数是否满足业务约束?合法JSON不等于合法操作,需要校验字段类型、枚举值等。
3. 如何判断生成已完成?一些集成假设特定的finish_reason一定伴随工具调用,这个假设应该逐个提供商测试。

现在我把tool_calls的存在/有效性和finish_reason视为两个独立信号;如果它们不一致,记录响应并停止任何有副作用的执行。

测试提供商的真实行为,而不仅仅是可用性

普通的健康检查只问“端点能否返回响应”,这对切换提供商来说太弱了。兼容性检查应该问:“这个提供商是否保留了我的应用所依赖的行为?”

提供了一个Node.js测试脚本(需要Node 18+,无外部依赖):
- 测试文本响应:发送固定回复指令,检查返回是否包含预期字符串。
- 测试工具调用:强制调用create_ticket工具,检查工具调用结构、参数JSON合法性及业务校验。

分别针对当前提供商和候选提供商运行脚本,比较观察结果,而不仅仅是PASS/FAIL。不同的contentType、缺少usage信息、意外的finish_reason或工具调用形状变化,可能无害,也可能暴露应用其他部分的假设。

切换前的测试清单

对于纯文本应用:正常文本响应、故意无效请求、超时/取消、接近输出token限制的响应。
对于智能体或工作流:强制工具调用、多工具可用、格式错误或不完整的工具参数、工具结果返回给模型、流式工具调用、不可重复执行的操作。
对于结构化数据:使用应用实际使用的schema测试,而非玩具对象。

在边界处归一化

一旦知道哪些差异是故意的,就在应用看到它们之前进行归一化:
- 检查choices[0].message是否存在
- 规范化为统一的内部契约:tool_calls数组、文本内容、invalid状态
- 应用其余部分消费这个内部契约,而不是直接依赖每个提供商的响应细节

提供商切换就是一次依赖升级

表面看只是配置变更:-LLM_BASE_URL=... +LLM_BASE_URL=...,但操作上应视为一次重大依赖升级。兼容的端点背后,边界行为(流式、工具调用、结构化输出、token限制、取消、错误语义、用量报告)可能不同。共享接口应该让切换可测试,而不是不可见。

现在,在生产环境修改base URL之前,我都会用相同的测试套件同时运行当前提供商和候选提供商。请求被接受只是第一个测试,不是兼容性的定义。


这段经历来自TokenBay的工程师,相关文章及测试脚本已发布在Dev.to上。

#开发者 #工具 #LLM #OpenAIAPI #兼容性 #Nodejs #TokenBay #AIGateway
@DevToolboxHub
一键复制HTML按钮样式展示页

设计网站时,反复修改CSS和刷新页面来比较按钮样式非常耗时。一个基于浏览器的按钮展示工具可直接解决这个痛点——打开页面即可浏览多种按钮设计,包括浅色、纯色、深色、渐变、轮廓、圆角药丸形、带图标等。所有按钮都是实际交互元素,可直接在浏览器中对比悬停、聚焦和按下状态。

核心功能是点击任意按钮即可复制其最小HTML+CSS示例,无需拷贝整个页面。工具还提供快速复制面板,方便比较多个设计;复制后可作为独立HTML文件使用,适合原型、静态网站、落地页测试或颜色搭配灵感。这不是完整UI框架,而是实用按钮集合,重点在于复制即用的工作流。
@DevToolboxHub