惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Troy Hunt's Blog
Scott Helme
Scott Helme
T
Threat Research - Cisco Blogs
T
Tenable Blog
L
LINUX DO - 热门话题
V
Visual Studio Blog
I
Intezer
Blog — PlanetScale
Blog — PlanetScale
Cisco Talos Blog
Cisco Talos Blog
A
Arctic Wolf
C
Cyber Attacks, Cyber Crime and Cyber Security
F
Fortinet All Blogs
aimingoo的专栏
aimingoo的专栏
Know Your Adversary
Know Your Adversary
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
N
Netflix TechBlog - Medium
SecWiki News
SecWiki News
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
Project Zero
Project Zero
W
WeLiveSecurity
Microsoft Azure Blog
Microsoft Azure Blog
A
About on SuperTechFans
Recorded Future
Recorded Future
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Vercel News
Vercel News
S
Securelist
Spread Privacy
Spread Privacy
L
LangChain Blog
云风的 BLOG
云风的 BLOG
G
Google Developers Blog
MongoDB | Blog
MongoDB | Blog
Google DeepMind News
Google DeepMind News
Recent Commits to openclaw:main
Recent Commits to openclaw:main
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CERT Recently Published Vulnerability Notes
罗磊的独立博客
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
The Last Watchdog
The Last Watchdog
Attack and Defense Labs
Attack and Defense Labs
博客园 - 司徒正美
Help Net Security
Help Net Security
L
Lohrmann on Cybersecurity
人人都是产品经理
人人都是产品经理
Forbes - Security
Forbes - Security
Hacker News - Newest:
Hacker News - Newest: "LLM"
PCI Perspectives
PCI Perspectives
博客园 - 【当耐特】
T
Tor Project blog

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
AI 3D tools need product evals, not benchmark faith
Saqueib Ansa · 2026-05-27 · via DEV Community

If you are building AI-generated 3D tooling, treat public benchmarks as lead signals, not product truth. A model can score well on an OpenSCAD-style benchmark and still be dangerous inside your app, because your product is not grading text against a reference file. It is asking users to trust generated geometry, measurements, layout intent, and downstream editability.

That changes the bar completely. The real question is not "which model topped the benchmark?" It is "what errors can this model make inside my workflow, and how cheaply can I catch them before the user pays for them?"

For CAD-like tools, room planners, parametric builders, scene generators, and layout systems, that question matters more than leaderboard position. Benchmarks are still useful. They help you narrow candidates and avoid obvious dead ends. But if you ship based on benchmark scores alone, you are outsourcing product judgment to someone else’s task design.

Benchmarks are useful, but only as a filter

A benchmark usually tells you something real. It can reveal whether a model follows structured prompts, emits syntactically valid code, and handles a certain family of geometry tasks better than its peers. That is valuable.

What it does not tell you is whether the model is good at your failure boundary.

A benchmark can reward the wrong thing for a production tool:

  • exact string or AST similarity instead of geometric intent
  • simple object generation instead of edit-safe output
  • valid code generation instead of stable dimensions
  • one-shot task success instead of repairability after failure
  • average score instead of worst-case damage

That last point matters most. In 3D tooling, the average result is often less important than the ugly 5 percent. If the model occasionally creates self-intersecting meshes, non-manifold solids, overlapping walls, impossible clearances, or silently wrong measurements, the benchmark score stops being comforting.

A practical rule: use public benchmarks to choose what to test, not what to trust.

If a model performs well on an OpenSCAD benchmark, that is a reason to include it in your eval set. It is not a reason to expose generated geometry directly to paying users.

Your evals should mirror the product contract

Most teams make the same mistake here. They evaluate the model at the prompt layer, but their product risk lives at the artifact layer.

If your product accepts a natural-language request like "make a 4x6 meter room with a centered 900mm door and a 1.2 meter window on the east wall," your eval should not stop at "did the model produce plausible code?" It should verify whether the generated result satisfies the actual contract:

  • are the dimensions correct within tolerance?
  • are named constraints respected?
  • is the output editable?
  • does regeneration preserve intent?
  • can downstream tools ingest it cleanly?

That means your eval dataset needs to be product-specific.

Build tasks around user intent, not benchmark trivia

A good internal eval set usually includes 30 to 100 tasks before you scale further. The point is not dataset size. The point is coverage of the decisions your product actually makes.

For a room-layout tool, that might include:

  • simple rectangular rooms with strict dimensions
  • openings with exact offsets from corners
  • furniture placement with clearance rules
  • invalid requests the system should refuse or repair
  • near-duplicate prompts with slightly different constraints
  • iterative edits like "same layout, but move the sofa 400mm away from the wall"

For a parametric CAD assistant, include:

  • parts with exact measurements
  • tolerance-sensitive cutouts
  • repeated features and symmetry
  • feature edits after initial generation
  • prompts that mix hard constraints with soft aesthetic intent

The key is that each case should have a machine-checkable success condition where possible.

{
  "id": "room-door-window-01",
  "prompt": "Create a 4m x 6m room with a 900mm centered door on the south wall and a 1200mm window on the east wall, 1m from the northeast corner.",
  "checks": {
    "room_width_mm": 4000,
    "room_length_mm": 6000,
    "door_width_mm": 900,
    "door_centered_on_wall": true,
    "window_width_mm": 1200,
    "window_offset_from_ne_corner_mm": 1000,
    "no_opening_overlap": true,
    "manifold_geometry": true
  },
  "severity_if_wrong": "high"
}

Enter fullscreen mode Exit fullscreen mode

That structure is already more useful than a generic prompt-response benchmark, because it tells you what failure means in your product.

Score by business damage, not only pass rate

Not all errors are equal. A mislabeled material is annoying. A wrong cutout dimension can ruin fabrication. A sofa overlapping a wall is ugly. A staircase with impossible rise/run values is unsafe.

So weight your evals accordingly.

A good scoring model usually separates:

  • hard failures: constraint violations, invalid geometry, import failure
  • soft failures: ugly layout, awkward spacing, poor style match
  • recoverable failures: user can fix in one edit
  • toxic failures: result looks valid but encodes wrong measurements

That last category is where benchmark worship really breaks down. A fluent-looking result that is dimensionally wrong is much worse than an obvious failure, because users trust it longer.

Geometry failure modes matter more than model polish

In 3D generation, pretty demos hide the expensive bugs. You should assume the model can produce syntactically valid output that is still operationally broken.

That is why your evals need geometry-aware checks, not just text-level scoring.

The failure classes worth catching early

For CAD-like and layout tools, these are usually the ones that matter:

  • dimensional drift: the part or room is close, but not correct
  • topological invalidity: self-intersections, open shells, non-manifold edges
  • constraint breakage: features overlap or violate placement rules
  • frame-of-reference mistakes: wrong axis, mirrored placement, swapped width/depth
  • edit instability: a small prompt change causes a full structural collapse
  • unit confusion: mm vs cm vs meters, or implicit unit shifts during refinement
  • downstream incompatibility: exports that render but fail in slicers, CAD importers, or scene pipelines

You do not need a perfect automated judge for all of these on day one. But you do need to stop pretending that valid text output is a sufficient proxy.

Add deterministic validators around the model

The most practical architecture is usually LLM plus verifier, not LLM alone.

If the model emits OpenSCAD, CAD parameters, or scene JSON, run deterministic checks after generation and before surfacing the result. Use the model for synthesis; use code for trust.

from dataclasses import dataclass

@dataclass
class EvalResult:
    passed: bool
    errors: list[str]
    score: float


def validate_room(spec, artifact) -> EvalResult:
    errors = []

    if artifact.room.width_mm != spec["room_width_mm"]:
        errors.append("room width mismatch")

    if artifact.room.length_mm != spec["room_length_mm"]:
        errors.append("room length mismatch")

    if not artifact.geometry.is_manifold():
        errors.append("non-manifold geometry")

    if artifact.openings.overlap():
        errors.append("opening overlap")

    if artifact.units != "mm":
        errors.append("unexpected units")

    hard_fail = any(msg in errors for msg in [
        "room width mismatch",
        "room length mismatch",
        "non-manifold geometry",
    ])

    return EvalResult(
        passed=not hard_fail,
        errors=errors,
        score=max(0, 1 - 0.25 * len(errors)),
    )

Enter fullscreen mode Exit fullscreen mode

This is unglamorous, and that is exactly the point. If your product depends on geometry being right, you need boring validators in front of user trust.

Official references like OpenSCAD help when your generation target is code-based, because you can often parse, render, and inspect outputs deterministically. That is much safer than evaluating only by screenshot quality.

Ship guarded workflows before you ship direct generation

The fastest way to hurt trust is to present generated geometry as if it were authoritative.

The safer rollout path is staged.

Start with proposal mode, not execution mode

In the first version, the model should propose, not decide.

Good early-product patterns:

  • generate a draft and require explicit user review
  • highlight inferred constraints versus exact constraints
  • show measurements as inspectable overlays
  • label low-confidence outputs and blocked validations
  • offer one-click repair suggestions instead of silent fixes

That product framing matters. Users are much more forgiving of a "generated draft" than a "done model" that later proves wrong.

This is especially important for iterative editing workflows. If a user asks, "make the countertop 300mm deeper but keep the sink centered," they are not asking for a fresh hallucination. They are asking for constraint-preserving transformation. Those are different jobs, and they should have different guardrails.

Treat repair as a first-class capability

A strong 3D tool does not only ask, "can the model generate this?" It asks, "when the model is wrong, can the system recover cheaply?"

That means storing enough structure to support repairs:

  • explicit constraints
  • semantic object labels
  • dimensions as typed fields, not only freeform code
  • provenance for which step created which feature

If you reduce everything to one final text blob, every correction becomes a full regeneration. That is fragile.

A better pattern is intermediate representation first, generated artifact second. Let the model fill a schema, validate the schema, then compile to the final representation.

type LayoutIntent = {
  room: { widthMm: number; lengthMm: number };
  openings: Array<{
    kind: "door" | "window";
    wall: "north" | "south" | "east" | "west";
    widthMm: number;
    offsetMm: number;
  }>;
  furniture: Array<{
    kind: string;
    xMm: number;
    yMm: number;
    rotationDeg: number;
  }>;
};

Enter fullscreen mode Exit fullscreen mode

That schema gives you something you can validate, diff, repair, and version. The generated scene or CAD code becomes a compilation target, not the only source of truth.

Production evals should continue after launch

Offline evals are necessary, but they are not enough. Once real users start pushing the tool, they will discover edge cases your synthetic set missed.

The correct move is to build a feedback loop that turns production failures back into eval cases.

Log failure evidence, not just prompts

When a generation fails, capture more than the prompt:

  • prompt text
  • model version
  • system prompt or planner version
  • intermediate structured intent
  • validator outputs
  • user edits after generation
  • whether the artifact was accepted, repaired, or discarded

That gives you a real source of truth for future evals. Otherwise you end up debugging vibes instead of failures.

A useful internal taxonomy is simple:

  • gen_valid_user_accepted
  • gen_valid_user_repaired
  • gen_invalid_blocked_by_validator
  • gen_invalid_escaped_to_user
  • gen_refused_correctly

Now you can measure whether the system is improving in ways that matter.

Optimize for escape rate, not just benchmark rank

The metric I would care about most is not public benchmark position. It is failure escape rate: how often a materially wrong artifact reaches the user as if it were usable.

That metric aligns with product trust.

If benchmark score improves by 8 percent but escape rate barely moves, you probably improved syntax, not safety. If benchmark score stays flat but invalid geometry reaching users drops sharply, that is real progress.

This is the contrarian part builders need to accept: the best model for your product may not be the benchmark winner. It may be the one that works best with your validators, preserves constraints more reliably, degrades more honestly, or produces artifacts your pipeline can safely repair.

What I would actually do

If I were building an AI-powered 3D or CAD-adjacent tool today, I would use public benchmarks only to shortlist candidate models. Then I would build a product eval set with strict constraint checks, geometry validation, and severity-weighted scoring. I would ship proposal mode first, keep structured intermediate representations, and block any artifact that fails deterministic validation.

I would also assume that some failures will still escape, so I would log enough evidence to turn production mistakes into new eval cases every week.

That is slower than posting a benchmark chart and declaring victory. It is also how you avoid shipping a tool that looks intelligent in demos and becomes expensive in real use.

The practical decision rule is simple: never trust a 3D generation model more than your validators trust the artifact it produced. In this category, benchmarks help you start. They should not decide when you are safe to ship.


Read the full post on QCode: https://qcode.in/how-to-build-ai-generated-3d-tools-without-trusting-benchmarks/