Skip to content

El agente busca en internet (web_search + web_fetch de Anthropic) - #145

Merged
ErickUser1 merged 3 commits into
mainfrom
feat/internet
Oct 19, 2026
Merged

ErickUser1 merged 3 commits into
mainfrom
feat/internet

Conversation

@ErickUser1

@ErickUser1 ErickUser1 commented Oct 19, 2026 •

Copy link
Copy Markdown
Owner

Qué cambia

Hasta ahora el agente solo llegaba a internet con curl desde bash. No podía buscar, y las páginas con JavaScript o con bloqueos le salían mal. Ahora usa las dos herramientas de Anthropic que corren de su lado, web_search y web_fetch. Solo aplica con el proveedor Anthropic.

Herramientas

  • Topes: 5 búsquedas y 5 lecturas por llamada, y max_content_tokens de 20k por página. Cada búsqueda cuesta US$0.01; leer una página no se cobra aparte, solo sus tokens.
  • Versiones por modelo: _20260318 con filtrado dinámico y response_inclusion: "excluded" en 4.6 y posteriores. Haiku 4.5 y los nombres de modelo que no reconoce usan las básicas.

Historial

  • Bloques crudos: un ContentBlock nuevo, crudo, guarda los bloques de Anthropic tal como llegan y los regresa idénticos, porque la API valida su encrypted_content.
  • Lo que se guarda entre turnos: las búsquedas se quedan completas, como pide la doc de context editing. El historial se guarda entero, y si hiciera falta recortarlo lo hace la API de su lado con context_management. Solo se quita una búsqueda que se quedó sin correr, porque esa daría 400 en el siguiente mensaje.

Loop

  • Pausas: pause_turn se retoma sin un mensaje nuevo del usuario, hasta 3 veces.
  • Búsqueda y tool nuestra en el mismo paso: el mensaje de resultados solo lleva tool_result, y las capturas se mandan con los resultados siguientes.

Sala

  • Muestra "Buscando en internet “…”" y "Leyendo sitio".
  • Con el filtrado, la búsqueda llega dentro de un bloque de código; de ahí se saca con busquedasEn para mostrarla.

Pruebas

  • npm run typecheck, npm run build y todas las demos del CI pasan.
  • demo:internet: nueva en el CI, 39 checks, sin red ni key.
  • npm run probar:internet contra la API real, en el VPS. Pasó dos veces sin un solo 400:
    • busca, escribe datos.txt con la fuente del INEGI y sigue en un segundo turno;
    • la búsqueda costó unos 1,500 tokens, casi todos leídos del caché;
    • en la corrida con la versión que quitaba las búsquedas al guardar, el agente dijo en el segundo turno "no busqué, lo saqué de memoria". Por eso ahora se guardan completas.

🤖 Generated with Claude Code

https://claude.ai/code/session_01HJ5oT2Xm3VZMvbPAcgKbz4

Hasta ahora solo llegaba a internet con curl desde bash: no podía buscar, y
las páginas con JavaScript o bloqueos le salían mal. Ahora tiene las dos
herramientas que corren del lado de Anthropic, con topes de 5 por llamada y
20k tokens por página leída.

- Los bloques de esas herramientas se guardan crudos y vuelven idénticos
  (traen encrypted_content; si cambian es un 400).
- pause_turn se retoma sin mensaje nuevo, pegado al mismo mensaje, hasta 3.
- Si busca junto con una tool nuestra, el mensaje de resultados solo lleva
  tool_result: las capturas esperan al siguiente.
- Lo guardado entre turnos ya no carga las búsquedas.
- La Sala muestra "Buscando en internet …" y "Leyendo sitio".
- Filtrado dinámico (_20260318) en 4.6 en adelante; básicas en Haiku 4.5.
- demo:internet (35 checks) en el CI y probar:internet contra la API real.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HJ5oT2Xm3VZMvbPAcgKbz4
…a de que buscó

La prueba real contra la API sacó dos cosas:

- Sonnet 5.5 no llama web_search directo: lo llama desde el código del
  filtrado (code_execution), y la llamada de adentro no viene en la
  respuesta. La Sala no iba a enseñar nada. Ahora se saca la búsqueda y la
  URL del código (busquedasEn).
- Al guardar se quitaban las búsquedas completas, y en el turno siguiente el
  agente dijo que "no buscó, lo escribió de memoria" sobre un dato que sí
  sacó del INEGI. Ahora queda una nota corta con lo que buscó y leyó.

demo:internet sube a 40 checks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HJ5oT2Xm3VZMvbPAcgKbz4
La doc de Anthropic (context editing) dice que el historial se guarda
completo y que recortar lo hace la API de su lado con context_management,
no el cliente. Lo habíamos hecho al revés: quitar las búsquedas al guardar y
dejar una nota. En la prueba real el agente contestó en el turno siguiente
que "no hizo la búsqueda, lo sacó de memoria" sobre un dato que sí sacó del
INEGI, con nota y todo.

Ahora solo se quita una búsqueda que se quedó sin correr (un turno cerrado a
media pausa), que sí daría un 400. Con el filtrado una búsqueda deja unos
1,500 tokens, leídos del caché.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HJ5oT2Xm3VZMvbPAcgKbz4
@ErickUser1
ErickUser1 merged commit bde5747 into main Oct 19, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants