Agent d'IA

Un operador, no un xatbot

Panell de l'agent Repetició

Crea una descripció amb sentit en anglès per al producte “DRILL001”

Fet

-> GetProductBasic(main_id="DRILL001") -> 1 match

-> GetProductExtra(product_id=4182, tabs=["CORE", "TECH"]) -> 38 values

La fitxa ja conté tot el que cal per redactar el paràgraf: 18 V sense escombretes, portabroques metàl·lic de 13 mm, 60 Nm, dues velocitats, 1,7 kg amb la bateria de 2,0 Ah. Les altres descripcions marquen el to:

Brushless power in a drill you can hold all day. 60 Nm through a two-speed gearbox and a 13 mm metal chuck, so masonry, timber and steel are the same job with a different bit.

Cap afirmació que no sigui a la fitxa. description_en és buit, així que això és un emplenament, no una sobreescriptura.

Escriure això a description_en de DRILL001?

Escriure-ho Editar-ho primer

resposta de l'usuari

-> UpdateProducts(ids=[4182], changes={"description_en": "…"}) -> 1 updated, 0 errors

Escrit, i consta a l'historial del producte com una edició de l'agent.

11s · 6,4k entrada / 512 sortida · 3 rondes · 3 eines

Panell de l'agent Repetició

Llegeix tot el catàleg i proposa un arbre de categories. No creïs res encara.

Esperant resposta

-> GetDashboardStats() -> 4,812 products · 148 fields · 0 categories

-> GetListProducts(offset=0, limit=200) -> 200 rows (× 25 pages)

El catàleg s'organitza al voltant de sis famílies, i product_group més voltage determinen el tercer nivell. 41 nodes, tres nivells de profunditat:

Eines elèctriques / Trepants / Sense fil   1.204
Eines elèctriques / Trepants / Amb cable     318
Eines elèctriques / Serres / Circulars       402
Eines elèctriques / Esmoladores              611
Eines manuals / Claus                        488

En 1.204 productes no hi ha cap dada que permeti distingir Sense fil d'Amb cable. Els deixaria a Trepants abans que endevinar-ho.

Crear les 41 categories i assignar els 3.608 productes sense ambigüitat?

Crear l'arbre Mostrar abans les assignacions

En curs · 1m 12s · 61k entrada / 3,4k sortida · 7 rondes · 27 eines

Panell de l'agent Repetició

Tots els productes del proveïdor NORTHFIELD passen a la pestanya POWER, el parell en Nm, i afegeix el prefix NF- a l'identificador principal

Fet

-> GetListProducts(filter={"supplier": "NORTHFIELD"}) -> 412 rows

-> GetFields(codes=["torque", "main_id"]) -> 2 definitions

412 productes. torque és un camp NUMBER i 388 estan en lb-ft, així que aquests valors es multipliquen per 1,3558 i es canvia la unitat; 24 ja marquen Nm. Tres identificadors principals ja comencen per NF-.

Aplicar a 412 productes — pestanya POWER, parell → Nm (388 convertits), identificador principal amb prefix NF- (409)?

Aplicar Cancel·lar

resposta de l'usuari

-> UpdateProducts(ids=[…412 ids…], changes={"tab": "POWER", "torque": …, "main_id": …}) -> 412 updated, 0 errors

412 en un sol lot, una sola entrada al registre d'auditoria. Si la conversió era errònia, es desfà una vegada, no quatre-centes.

24s · 18,2k entrada / 940 sortida · 4 rondes · 3 eines

Panell de l'agent Repetició

Importa supplier-q3.xlsx

Fet

-> RunListSheets(file="supplier-q3.xlsx") -> 4 sheets

Quin full conté els productes?

Products · 1.914 files Preus Legende Changelog

resposta de l'usuari

-> RunAnalyzeImport(file_id=1207, sheet="Products") -> shape=one_x_row

Un producte per fila. 41 columnes corresponen a camps existents, 9 són dimensions, 5 són noms de fitxer d'imatge i 6 són noves — aquestes van a una pestanya IMPORT.

Simulació: 1.742 actualitzacions, 172 productes nous, 6 camps nous. Importar-ho?

Importar Canviar el mapatge

resposta de l'usuari

-> RunImport(mapping_id=88, file_id=1207) -> 172 new · 1,742 updated · 0 errors

El mapatge queda lligat a la suma de verificació d'aquest fitxer, de manera que el llibre del trimestre vinent es comprova, no es dona per bo.

2m 40s · 88k entrada / 5,1k sortida · 9 rondes · 6 eines

Panell de l'agent Repetició

Construeix el mapatge d'exportació per a la plantilla de Grainger. Les seves notes són al canal.

Fet

-> ListChannels() -> 6 channels

-> GetChannelHelperJson(channel_id=49) -> 74 column notes

-> GetExportDslReference()

74 columnes. 58 poden sortir directament d'un camp. 11 necessiten una transformació — el seu Pack Qty vol un enter on aquí es guarda un text, i Long Description està limitat a 4.000 caràcters. 3 són condicionals: Hazmat Code només s'envia si un_number té valor. 2 no les puc obtenir de cap manera: UNSPSC i Country of Origin no existeixen a l'esquema.

-> SaveExportMapping(channel_id=49, columns=74, unsourced=2)

-> RunExport(channel_id=49, preview=true) -> 50 rows

La previsualització és a la pàgina de Canals. Les dues columnes sense origen s'exporten buides fins que existeixin els camps — n'hi ha prou amb dir-ho i els crearé i tornaré a aquest mapatge.

1m 05s · 44k entrada / 7,8k sortida · 6 rondes · 5 eines

Panell de l'agent Repetició

La completesa de CORE és del 71%. Revisa els productes i completa els camps que puguis amb les dades disponibles.

Fet

-> GetProductCompleteness(tab="CORE") -> 1,383 products below 100%

-> GetListProducts(filter={"missing": "CORE"}, limit=200) -> 200 rows (× 7 pages)

Són tres camps, no mil productes: falta weight a 1.190, country_of_origin a 612 i hs_code a 415. Per a aquesta demo, 508 tenen valors de país i codi HS confirmats a les dades d'origen — no deduïts només de brand i factory, i sense inventar res. El pes és als PDF del proveïdor: una altra feina.

Escriure country_of_origin i hs_code als 508 casos que confirmen les dades d'origen?

Escriure'ls Mostrar-ne vint abans

resposta de l'usuari

-> UpdateProducts(ids=[…508 ids…], changes={"country_of_origin": …, "hs_code": …}) -> 508 updated, 0 errors

Completesa de CORE 71% → 88%. Els 875 restants són a core-gaps.csv, agrupats segons el que hi falta. Res ho confirma per a aquests, així que m'he aturat.

3m 18s · 121k entrada / 4,2k sortida · 11 rondes · 10 eines

Panell de l'agent Repetició
Dictat, acabat amb “go”

Passa tot el que hi ha a la categoria Discontinued a inactiu… go

Fet

-> GetListCategories(cat_name="Discontinued") -> 1 match(es)

-> GetListProducts(cat_id=77) -> 306 rows

L'ordre acabava amb “go”, així que no he esperat que ningú premés enviar. Tot i així, l'escriptura s'ha aturat aquí: canviar 306 productes de cop té prou abast per demanar confirmació, tant si la instrucció s'ha escrit com si s'ha dictat.

Posar 306 productes en estat inactiu?

Sí No

resposta de l'usuari

-> UpdateProducts(ids=[…306 ids…], changes={"status": "inactive"}) -> 306 updated, 0 errors

306 productes inactius. Continuen a totes les exportacions que demanen files inactives i desapareixen de les que no.

19s · 9,7k entrada / 380 sortida · 3 rondes · 3 eines

Panell de l'agent Repetició

Cada dia feiner a les 9:00 dona'm una llista dels productes creats des de l'última llista.

Fet

Això és una feina periòdica, no una pregunta, així que la deso com a flux de treball en comptes de respondre-la un sol cop. Hi ha dues coses que la frase no resol: les 9:00 de quin fus horari i on ha d'arribar la llista.

Dl.–Dv. a les 09:00 Europe/Madrid — on s'ha de lliurar la llista?

Al panell de l'agent També per correu

resposta de l'usuari

-> SaveWorkflow(name="New products since last run", cron="0 9 * * 1-5", tz="Europe/Madrid") -> workflow #12 armed

-> RunWorkflow(id=12, preview=true) -> GetListProducts(filter={"created_since": "last_run"}) -> 14 rows

DRILL-8842   Cargolador d'impacte 18V  17:41  importació
NF-2201      Esmoladora angular 125 mm 17:52  importació
HT-0916      Clau anglesa 250 mm       09:04  a mà
…i 11 més

L'execució de dilluns cobreix divendres, dissabte i diumenge — una planificació en dies feiners que saltés els productes del cap de setmana no els reportaria mai.

Aquest llegeix i informa; no escriu res. Un flux de treball que sí que escrigués s'aturaria a la mateixa confirmació que qualsevol altra execució i esperaria una resposta, i per això cap flux no pot canviar el catàleg d'amagat a les nou del matí.

12s · 5,8k entrada / 420 sortida · 3 rondes · 3 eines

Panell de l'agent Repetició

Crea un correu per a en Bob amb el full d'especificacions del producte ABC i adjunta-hi tota la documentació.

Fet

-> GetProductBasic(main_id="ABC") -> 1 match

-> GetProductExtra(product_id=915, tabs=["CORE", "TECH"]) -> 44 values

-> GetAssets(product_id=915, roles=["doc"]) -> 3 files (2.7 MB)

El full d'especificacions surt de la pestanya TECH com una taula dins del cos del correu i no com un quart adjunt, perquè és la part que llegirà al mòbil. Els tres documents són la fitxa tècnica, la declaració de conformitat i el manual de manteniment.

-> CreateGmailDraft(to="[email protected]", attachments=3) -> draft created

És un esborrany desat a la bústia, no un missatge enviat. Res d'això no pot fer sortir un correu sense que algú premi enviar.

28s · 14,1k entrada / 1,1k sortida · 4 rondes · 4 eines

Panell de l'agent Repetició

Envia un correu a Marketing amb els productes que no tenen descripció.

Fet

-> GetUsers(group="Marketing") -> 4 users

“Marketing” és un grup de la mateixa llista d'usuaris, així que això va a quatre persones que ja tenen compte en aquest catàleg. Aquesta eina no permet introduir cap adreça externa.

-> GetListProducts(filter={"missing": "description_en"}, limit=500) -> 318 rows

318 productes amb description_en buit. 47 estan descatalogats i ningú no els escriurà cap text, així que es llisten a part en comptes d'inflar la xifra que algú llegeix primer.

Enviar-ho a les 4 persones de Marketing, 271 productes per escriure més 47 descatalogats?

Enviar-ho Mostrar abans el correu

resposta de l'usuari

-> SendUserEmail(group="Marketing", subject="271 products still need a description", attachments=1) -> sent to 4

Enviat, amb la llista de destinataris al registre de l'execució. La setmana vinent la mateixa instrucció és una línia en una planificació en comptes d'una petició.

26s · 12,6k entrada / 780 sortida · 4 rondes · 3 eines

Panell de l'agent Repetició

Executa una ordre per veure aquí l'historial de la conversa.

Selecciona una tasca a l'esquerra per executar-la aquí.

Com pregunta

Quan té dubtes, ho pregunta — dins de l'aplicació

L'agent no endevina quan una decisió necessita una persona. Ho pregunta a la interfície: quin full s'ha de fer servir, quina columna identifica el producte, si dos camps són el mateix o si un canvi ha d'esborrar realment centenars de productes. Amb la resposta, l'execució continua. Així la feina autònoma es manté controlada i revisable.

  • Preguntes, no suposicions

    L'ambigüitat es converteix en una pregunta amb les opcions reals a dins, no en una conjectura enterrada en un registre.

  • Confirmació abans de canvis crítics

    Les operacions destructives i de gran abast s'aturen i esperen una resposta explícita, sempre.

  • Previsualització abans d'aplicar

    Les importacions s'executen com a simulacions, les exportacions es previsualitzen i les edicions per lots llisten què tocarien. Veus l'abast del canvi abans d'aplicar res.

Per què es pot deixar en marxa

Salvaguardes

Escriptures sempre per lots
Les eines d'escriptura reben un conjunt de registres i un conjunt de canvis. No hi ha cap camí en què l'agent vagi retocant un producte rere l'altre durant una hora sense que ningú vigili el total.
Tot queda registrat
Cada execució conserva les seves eines, els arguments i els resultats. Revisar què va fer l'agent dimarts passat és llegir una pàgina, no fer grep en un fitxer de registre.
La procedència es verifica
Un mapatge d'importació queda lligat al fitxer amb què es va construir. L'agent no pot aplicar el mapatge de dimarts al full de càlcul de dijous.
Les mateixes regles que una persona
Les restriccions, els camps obligatoris i els permisos s'apliquen a l'agent igual que a qualsevol editor. No té accés privilegiat ni dreceres per saltar-se les regles.
Proveïdor propi, claus pròpies
Es pot apuntar al proveïdor de models amb qui ja hi ha contracte. El catàleg no depèn que un sol proveïdor estigui disponible o sigui assequible l'any vinent.
Eines amb abast limitat
Pots configurar quines eines utilitza l'agent i desactivar els grups que no necessiti.

La manera més directa d'avaluar-ho

Donar-li una feina real en un catàleg real i mirar després el registre d'auditoria. Ho podem muntar conjuntament.