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

推荐订阅源

Security Archives - TechRepublic
Security Archives - TechRepublic
T
The Exploit Database - CXSecurity.com
P
Proofpoint News Feed
Scott Helme
Scott Helme
NISL@THU
NISL@THU
Cisco Talos Blog
Cisco Talos Blog
C
Cybersecurity and Infrastructure Security Agency CISA
AWS News Blog
AWS News Blog
V
Vulnerabilities – Threatpost
J
Java Code Geeks
U
Unit 42
The GitHub Blog
The GitHub Blog
H
Help Net Security
T
Tenable Blog
aimingoo的专栏
aimingoo的专栏
Jina AI
Jina AI
Spread Privacy
Spread Privacy
Apple Machine Learning Research
Apple Machine Learning Research
人人都是产品经理
人人都是产品经理
L
Lohrmann on Cybersecurity
T
Threatpost
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Engineering at Meta
Engineering at Meta
A
About on SuperTechFans
I
InfoQ
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog
L
LINUX DO - 最新话题
K
Kaspersky official blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Threat Research - Cisco Blogs
C
Check Point Blog
T
The Blog of Author Tim Ferriss
有赞技术团队
有赞技术团队
宝玉的分享
宝玉的分享
Help Net Security
Help Net Security
Google DeepMind News
Google DeepMind News
A
Arctic Wolf
Y
Y Combinator Blog
N
News | PayPal Newsroom
M
MIT News - Artificial intelligence
Latest news
Latest news
H
Hacker News: Front Page
Blog — PlanetScale
Blog — PlanetScale
腾讯CDC
I
Intezer
爱范儿
爱范儿
F
Fortinet All Blogs
P
Palo Alto Networks Blog
C
CERT Recently Published Vulnerability Notes

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
Show HN: Needle distilled Gemini tool calling en 26M parámetros — lectura técnica sin hype
Juan Torchia · 2026-05-17 · via DEV Community

Show HN: Needle distilled Gemini tool calling en 26M parámetros — lectura técnica sin hype

Estaba revisando mi pipeline de Ollama cuando apareció el post en HN: Needle, un modelo de 26M de parámetros destilado desde Gemini específicamente para tool calling. Mi primera reacción fue escéptica. 26M suena a juguete. Después leí con más calma y entendí que el punto interesante no es el tamaño: es el problema que están atacando.

Acá va mi lectura técnica, sin euforia y sin descarte fácil.


El problema real detrás de Needle y la destilación de Gemini para tool calling

Mi tesis es esta: el cuello de botella en sistemas con herramientas externas no es el razonamiento general del LLM, sino la parsabilidad del output. Si el modelo produce JSON mal formado, llama funciones con argumentos incorrectos o alucina nombres de tools que no existen, el sistema entero se rompe — no importa qué tan "inteligente" sea el modelo en otras tareas.

Esto lo experimenté directamente mientras armaba loops de agentes con Claude Code. La parte más frágil nunca fue el razonamiento; fue la confiabilidad del contrato de datos. Me acordé de cuando me resistí a TypeScript durante años pensando que los tipos eran burocracia. Después entendí que muchas fallas evitables empiezan como contratos de datos mal expresados. Con tool calling pasa exactamente lo mismo: un modelo puede ser brillante en prosa y pésimo para respetar un esquema JSON estricto bajo presión de latencia.

Needle ataca ese punto específico: toma el comportamiento de tool calling de Gemini — que es consistente y bien estructurado — y lo destila en un modelo pequeño y especializado. La hipótesis es que para esta tarea concreta, 26M entrenados con el comportamiento correcto pueden superar a modelos gigantes generalistas que no fueron ajustados para respetar esquemas de función con precisión.

¿Es verdad? En benchmarks propios, según el repositorio del proyecto, sí. En producción real propia, no lo sé todavía — y esa diferencia importa.


Qué es la destilación de conocimiento y por qué importa aquí

La destilación de conocimiento (knowledge distillation) es una técnica donde un modelo grande — el teacher — genera outputs que después se usan para entrenar un modelo pequeño — el student. El student no aprende de datos crudos: aprende a imitar el comportamiento del teacher en las distribuciones que más importan.

# Concepto simplificado del pipeline de destilación para tool calling:
# 1. Teacher (Gemini) genera miles de ejemplos de tool calling correcto
# 2. Student (Needle, 26M) entrena sobre esos ejemplos
# 3. El student aprende la distribución de outputs del teacher, no reglas escritas a mano

Enter fullscreen mode Exit fullscreen mode

Para tool calling, esto tiene sentido particular. No necesitás que el modelo sepa historia universal. Necesitás que cuando le pasés este schema:

// Definición de herramienta — el modelo tiene que respetar esto al 100%
const tools = [
  {
    name: "buscar_producto",
    description: "Busca un producto por ID en el catálogo",
    parameters: {
      type: "object",
      properties: {
        producto_id: { type: "string" },
        incluir_stock: { type: "boolean" }
      },
      required: ["producto_id"]
    }
  }
]

Enter fullscreen mode Exit fullscreen mode

El output sea exactamente:

{
  "name": "buscar_producto",
  "arguments": {
    "producto_id": "SKU-4821",
    "incluir_stock": true
  }
}

Enter fullscreen mode Exit fullscreen mode

Y no alguna variación creativa con claves renombradas, tipos erróneos o campos inventados. En eso los modelos pequeños generalistas fallan bastante. Si Needle lo resuelve de forma confiable, el caso de uso existe.


Cómo probarlo en Ollama: checklist reproducible

Si querés validar si un modelo como Needle tiene lugar en tu stack, el criterio no debería ser un benchmark ajeno. Debería ser tu propio conjunto de herramientas bajo las condiciones reales de tu sistema.

# Paso 1: Instalar Ollama si no lo tenés
curl -fsSL https://ollama.com/install.sh | sh

# Paso 2: Cuando el modelo esté disponible en Ollama registry, pull directo
# (verificar disponibilidad en https://ollama.com/search)
ollama pull needle  # nombre tentativo — verificar el registry oficial

# Paso 3: Preparar un set de pruebas de tool calling propio
# No uses los ejemplos del README del modelo; usá TUS herramientas reales

Enter fullscreen mode Exit fullscreen mode

// prueba-tool-calling.ts
// Criterios de validación que yo usaría para evaluar cualquier modelo pequeño

interface ResultadoPrueba {
  caso: string;
  esperado: object;
  obtenido: string;
  jsonValido: boolean;
  schemaRespetado: boolean;
  latenciaMs: number;
}

async function evaluarModeloToolCalling(
  modelo: string,
  casos: Array<{ prompt: string; schemaEsperado: object }>
): Promise<ResultadoPrueba[]> {
  const resultados: ResultadoPrueba[] = [];

  for (const caso of casos) {
    const inicio = Date.now();

    // Llamada al modelo vía API de Ollama
    const respuesta = await fetch("http://localhost:11434/api/chat", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({
        model: modelo,
        messages: [{ role: "user", content: caso.prompt }],
        // Pasar las herramientas como parte del request
        tools: [caso.schemaEsperado],
        stream: false,
      }),
    });

    const data = await respuesta.json();
    const latencia = Date.now() - inicio;

    // Validar si el JSON es parseable y si respeta el schema
    let jsonValido = false;
    let schemaRespetado = false;
    let obtenido = "";

    try {
      // El tool_call debería estar en message.tool_calls[0]
      const toolCall = data.message?.tool_calls?.[0];
      obtenido = JSON.stringify(toolCall ?? data.message?.content ?? "");
      jsonValido = !!toolCall;
      // Validación básica de schema: las claves required tienen que estar presentes
      if (toolCall?.function?.arguments) {
        const args = toolCall.function.arguments;
        const requiredKeys = Object.keys(caso.schemaEsperado);
        schemaRespetado = requiredKeys.every((k) => k in args);
      }
    } catch {
      obtenido = "parse error";
    }

    resultados.push({
      caso: caso.prompt.slice(0, 50),
      esperado: caso.schemaEsperado,
      obtenido,
      jsonValido,
      schemaRespetado,
      latenciaMs: latencia,
    });
  }

  return resultados;
}

Enter fullscreen mode Exit fullscreen mode

Mi criterio mínimo de aceptación para cualquier modelo de tool calling en un sistema real:

Métrica Mínimo aceptable Por qué
JSON válido 99%+ Un parse error en producción rompe el flujo entero
Schema respetado 95%+ Argumentos incorrectos son silenciosamente peligrosos
Latencia p95 < 500ms local Si tarda más que una API externa, perdiste el punto
Hallucination de tool names 0% Un nombre inventado es un error no recuperable

Los límites que el hype no menciona

Hay tres limitaciones que no aparecen en los titulares y que me parecen centrales antes de apostar por un modelo destilado en un sistema real.

Primero, la distribución del teacher define el techo. Si Gemini tiene sesgos en cómo genera tool calls — ciertos patrones de argumentos, ciertas convenciones de nombrado — el student los hereda sin filtro. Esto importa si tu API tiene convenciones que se alejan del estilo de Gemini.

Segundo, la generalización a schemas no vistos es una pregunta abierta. Un modelo destilado puede ser excelente en los patrones que aprendió y frágil frente a schemas complejos con anyOf, $ref anidados o validaciones condicionales. Hay que probarlo explícitamente con los schemas propios, no asumir que el benchmark general aplica.

Tercero, el tamaño de 26M parámetros implica capacidad de contexto limitada. En sistemas donde el prompt incluye muchas herramientas al mismo tiempo — algo común en backends con docenas de endpoints expuestos como tools — la degradación puede ser significativa. Es una hipótesis que hay que validar, no asumir.

Esto no invalida el proyecto. Lo ubica. La misma disciplina que apliqué al revisar problemas de caché en CI con pnpm workspaces aplica acá: primero entender el límite, después decidir si encaja.


Dónde Needle sí tiene sentido y dónde no

Escenarios donde tiene sentido probar Needle:

  • Pipelines de agentes locales donde la latencia de red hacia APIs externas es el cuello de botella
  • Edge devices o entornos con recursos limitados donde un modelo de 26M entra en memoria cómodamente
  • Sistemas con un conjunto acotado y estable de herramientas — no docenas de schemas cambiantes
  • Como fallback local cuando las APIs externas no están disponibles

Escenarios donde probablemente no alcanza:

  • Sistemas donde el razonamiento entre pasos de tool calling es complejo — decidir cuándo llamar qué tool, no solo cómo llamarla
  • APIs con schemas profundamente anidados o polimórficos
  • Flujos donde el contexto conversacional largo importa — el límite de contexto de 26M va a doler
  • Entornos que necesitan garantías de seguridad auditables — un modelo destilado privado es una caja más opaca

La tensión que señaló el post de Spring Boot Actuator en producción aplica de otra manera acá: la comodidad de "funciona en el demo" puede esconder riesgos de superficie que solo aparecen bajo carga o con inputs inesperados.


Lo que esto anticipa para el ecosistema de modelos pequeños

Lo incómodo de Needle no es el modelo en sí. Es lo que confirma: la especialización funcional va a presionar la hegemonía de los modelos grandes generales en tareas estructuradas.

Tool calling, clasificación de intents, extracción de entidades con schema fijo — son tareas donde un modelo destilado bien entrenado puede ganarle a GPT-4 o Claude en costo y latencia sin sacrificar confiabilidad. Eso cambia el cálculo de arquitectura.

En mi stack actual con Claude Code para razonamiento complejo y Ollama para tareas locales, hay un hueco exactamente donde Needle apuntaría: el router de herramientas que decide qué función llamar y con qué argumentos, sin necesitar el overhead de un modelo de 70B para eso. No digo que lo vaya a adoptar mañana. Digo que la categoría tiene sentido y que el experimento merece seguimiento.

Al igual que cuando evalué tradeoffs de Jakarta EE vs Spring Boot o comparé gestores de paquetes en monorepos reales, la respuesta honesta no es "adoptalo ya" ni "ignoralo": es "probalo con tus propios criterios antes de comprometerte".


FAQ: Needle, destilación y tool calling en modelos pequeños

¿Qué es exactamente la destilación de modelos en el contexto de LLMs?
Es un proceso donde un modelo grande (teacher) genera un dataset de comportamiento correcto — en este caso, ejemplos de tool calling bien formados — que se usa para entrenar un modelo pequeño (student). El student aprende a imitar la distribución de outputs del teacher en las tareas específicas para las que fue destilado, sin necesitar la arquitectura completa del teacher.

¿26M parámetros es suficiente para tool calling confiable?
Depende del scope. Para un conjunto acotado de herramientas con schemas simples, probablemente sí. Para sistemas con docenas de herramientas complejas, contextos largos o razonamiento multi-paso, es una hipótesis abierta. El benchmark del proyecto es optimista; la validación con schemas propios es obligatoria antes de apostar.

¿Cómo lo pruebo localmente sin comprometer un sistema en producción?
Con Ollama, si el modelo está disponible en el registry, es tan simple como ollama pull [nombre] y después evaluar con un script propio contra los schemas que ya usás. El checklist de validación de este post es un punto de partida. Siempre contra tus herramientas reales, nunca contra los ejemplos del README.

¿Cuál es la diferencia práctica entre Needle y usar function calling de OpenAI o Anthropic?
Latencia, costo y privacidad. Un modelo local no tiene RTT de red, no tiene costo por token y no manda los schemas de tus herramientas a una API externa. La contrapartida es que la confiabilidad depende enteramente de la calidad del entrenamiento del modelo local, sin el respaldo de un proveedor con SLA.

¿Vale la pena para un stack individual o solo para empresas con infraestructura?
Un modelo de 26M entra en una MacBook con 8GB de RAM sin drama. No es infraestructura de empresa. Si ya usás Ollama para otras tareas — como yo — agregar un modelo especializado es operativamente trivial. El costo real es el tiempo de evaluación, no el hardware.

¿Qué pasa si el modelo alucina un nombre de herramienta que no existe en mi sistema?
Es el peor caso y hay que diseñarlo como falla esperada. La capa de routing que consume el output del modelo tiene que validar que el name de la tool call corresponda a una herramienta registrada antes de ejecutar. Si no existe, el error tiene que ser explícito y no silencioso. Esto es diseño defensivo básico, independiente del modelo que uses.


Conclusión: probalo con los ojos abiertos

No voy a decir que Needle es el futuro ni que es ruido. Mi postura es más específica: la destilación funcional de comportamiento de modelos grandes en modelos pequeños especializados es una dirección legítima, y tool calling es un caso de uso donde tiene sentido técnico genuino.

Lo que no compro es el entusiasmo sin fricción. Un modelo de 26M tiene límites reales de contexto, de generalización y de confiabilidad bajo schemas no vistos. Esos límites no aparecen en el post de HN y aparecerán en producción.

Mi recomendación concreta: si tenés un pipeline de agentes con un conjunto estable de herramientas y latencia es un problema, armá un harness de prueba con los schemas propios, correlo contra los criterios de aceptación del post y medí. Si pasa el umbral de 99% de JSON válido y 95% de schema respetado en tus propios casos, tenés algo útil. Si no, sabés exactamente por qué.

Eso es más útil que cualquier benchmark ajeno.

¿Estás usando modelos locales para tool calling? Contame en juanchi.dev qué stack armaste y dónde encontraste los límites.


Este artículo fue publicado originalmente en juanchi.dev