Poistimme luonnollisen kielen kulujäsentäjän
Sääntöpohjainen jäsentäjämme kesti viikon, neljä tavallista lausetta ohjasi rahat väärälle henkilölle, ja yksi kieltäytymissääntö korvasi koko suojauspinon.
Poistimme jäsentäjän, jonka olimme juuri saaneet valmiiksi. Dimesumin ensimmäinen yritys luonnollisen kielen kulujen jäsentämiseen oli sääntömoottori, ja neljä tavallista lausetta jäähdytti sen: dinner 12-08 400 luettiin €12:na, ravioli 600 lisäsi jakoon Ravindra-nimisen jäsenen, kirana 500 veloitti Kiran-nimistä jäsentä, ja refund -483.50 muuttui €483.50:n veloitukseksi.
Lauseen ymmärtäminen on mallin tehtävä eikä minkään muun. Sääntömoottorin korvasi yksi taso nimeltä amount_only: yksittäinen numero, joka palautetaan vain kun teksti sisältää täsmälleen yhden yksiselitteisen rahaehdokkaan, eikä koskaan väitettä ihmisistä. Kaksi ehdokasta tarkoittaa, ettei summaa anneta. Yksi sääntö korvasi kasvavan kasan suojauksia.
Neljä lausetta lopetti sääntöjäsentäjän
Poistettu jäsentäjä kattoi koko entiteettijoukon, jonka tekoälysuunnitteludokumenttimme määrittää: jäsen- ja lempinimivastaavuudet, poissulkusanaston, maksajan päättelyn, kategoriasanaston ja kenttäkohtaisesti viritetyt luottamusarvot. Jokaisella alla olevalla neljällä virheellä oli ilmeinen korjaus. Jokainen korjaus oli uusi suojaus omine sokeine pisteineen.
| Mitä käyttäjä kirjoitti | Mitä jäsentäjä teki | Miksi näin kävi |
|---|---|---|
dinner 12-08 400 | Luki summaksi €12 | Lukija näkee päivämäärän ja loppusumman. Säännöllinen lauseke näkee kolme numeroa ja ottaa ensimmäisen. |
ravioli 600 | Lisäsi jakoon Ravindra-nimisen jäsenen | Sumea lempinimivastaavuus pisteytti ruokalajin ihmistä vasten. |
kirana 500 | Veloitti Kiran-nimistä jäsentä | Sama vastaaja, tällä kertaa kaupan nimellä. |
refund -483.50 | Kirjasi €483.50:n veloituksen | Numerot säilyivät mutta etumerkki ei, joten raha osoitti vastakkaiseen suuntaan. |
Kaksi neljästä on yksi ja sama vika eri vaatteissa. Sumea vastaavuus ei osaa erottaa ruokalajia ihmisestä eikä kauppaa ihmisestä, koska merkkitasolla ravioli ja Ravindra todella näyttävät samanlaisilta. Vaadi pidempää etuliitevastaavuutta ja rikot tapauksen ravi, joka on juuri se tapaus, jota varten vastaaja on olemassa.
Jokainen lisäämäsi suojaus paljastaa kaksi uutta muotoilua
Sääntöjäsentäjä epäonnistuu yhdessä tietyssä muodossa: se vastaa itsevarmasti ja väärin. Tyhjä kenttä maksaa käyttäjälle yhden napautuksen. Väärä jako maksaa luottamuksen tilikirjaan, ja rahanjaon seurantasovelluksessa tilikirja on tuote. Yllä olevat neljä riviä eivät ole vähällä vältettyjä virheitä, ne ovat rahavirheitä.
Oikea argumentti on juoksumatto, ei mikään yksittäinen vika. Lisää päivämääräsuojaus ja tilausnumerotapaus saapuu. Lisää tilausnumerosuojaus ja paljaat numerot saapuvat, sitten määrät, sitten pöytänumerot. Suojauslista kasvaa eikä koskaan suppene, koska luonnollisella kielellä ei ole äärellistä joukkoa lueteltavia muotoiluja.
Luonnollisen kielen syöttö on tekoälyominaisuus, eikä mikään Dimesumin koodivarastossa hahmontunnista sitä. Päätös tehtiin 2026-08-20, kirjattiin ylös neljän virheen kanssa, jottei kukaan rakenna suojauksia uudelleen vahingossa.
Mitä toimitettiin on yksi numero ja kieltäytyminen
amount_only on tekoälysuunnitteludokumenttimme heikennetty taso kirjaimellisesti toteutettuna. Tuo taso kuuluu "tavallinen lomake asiakaspään summan säännöllisen lausekkeen esitäytöllä", joten taso palauttaa summan eikä mitään muuta: ei kuvausta, ei kategoriaa, ei maksajia, ei osallistujia, ei poissulkuja. Se ei maksa mitään eikä kutsu ketään, minkä vuoksi testit ja CI ajetaan sillä.
Monitulkintaisuus on kieltäytyminen, ei tasapelin ratkaisu
Koko sääntö sijaitsee yhdessä funktiossa, extract_amount_minor. Luku palautuu vain kun teksti sisältää täsmälleen yhden ehdokkaan sille, joten order 90210 dinner 400 ja flat 402 rent 15000 palauttavat tyhjän sen sijaan että valitsisivat voittajan. Valuuttamerkitty luku lasketaan yksiselitteiseksi jopa paljaiden numeroiden vieressä, minkä vuoksi split 3 ways €1,200 lukee yhä €1,200.
Negatiivinen luku ei ole lainkaan summa, ei sen itseisarvo. -500, minus 200 ja kirjanpitäjän (500) palautuvat kaikki tyhjinä, koska kenttä on veloitus ja numeroiden säilyttäminen etumerkin pudottaen ohjaa rahan tekstille vastakkaiseen suuntaan. Sulkeet lasketaan vain kun ne sulkeutuvat itse luvun ympärille, joten (500 each) pysyy sulkulauseena.
Valuutta ratkaisee laskutoimituksen
Pienimmät yksiköt ovat ainoa muoto, jossa raha esiintyy Dimesumissa, joten taso muuntaa ISO 4217 -eksponenttitaulukolla eikä kovakoodatulla kertomisella sadalla. Japanin jenillä ei ole alayksikköä lainkaan, ja ×100 paisuttaa ¥1,200:n kuitin satakertaiseksi. Valuutan pienintä yksikköä hienompi luku hylätään eikä pyöristetä, koska jonkun kirjoittaman summan pyöristäminen on sellaisen keksimistä.
Intialaiset numerosanat ovat osa luvun kirjoittamista, eivät osa lauseen ymmärtämistä. 1.2k, 2 lakh ja 500/- ratkeavat kaikki, kuten 1,200. Kaikki tilikirjan enimmäissumman ylittävä palautuu tyhjänä, joten väärin kirjoitettu luku tyhjentää yhden kentän sen sijaan että ylivuotaisi kokonaisluvun myöhemmin ketjussa.
| Kenttä | Sääntöjäsentäjä (poistettu) | amount_only (käytössä) | Mallitaso (kytketty, avaimeton) |
|---|---|---|---|
| Summa | Arvattu useasta numerosta | Yksi yksiselitteinen luku, muuten tyhjä | Luettu kontekstissa |
| Kuvaus, kategoria | Sanastovastaavuus | Aina null | Poimittu lauseesta |
| Osallistujat, poissulut | Sumea nimivastaavuus | Aina tyhjä | Ratkaistu todellisiksi jäsentunnisteiksi |
| Maksaja | Päätelty muotoilusta | Aina tyhjä | Nimetty, null-arvon sallivalla summalla |
| Kokonaisluottamus | Viritetty kentittäin | Kiinteä 0.3 | Jäsennyskohtainen |
| Ilmoitettu kehote | Ei ollut olemassa | Null, kehotetta ei luettu | Kehotteen tunniste ja versio |
Käytössä oleva taso ei koskaan ylitä 0.6:n käyttökelpoisuusrajaa
Jäsennyssopimuksemme hylkää jäsennyksen, jonka kokonaisluottamus on alle 0.6, ja pudottaa käyttäjän tavalliseen lomakkeeseen. amount_only ilmoittaa 0.3 jokaisessa vastauksessa, ja vakio on rakenteellinen eikä viritetty. Yksittäinen summa ei ole jäsennys, joten taso asettuu puoleen rajasta löysipä se mitä tahansa. Yksi vakio jokaiselle vastaukselle pitää sen siellä: tapauskohtainen pistemäärä on pistemäärä, jota joku lopulta nostaa ylöspäin.
Taso ei myöskään ilmoita kehotetta lainkaan. Sekä prompt_id että prompt_version palautuvat null-arvoina, koska taso ei lukenut kehotetta. Sellaisen nimeäminen kohdistaisi jokaisen arviointituloksen kehoteversioon, jota taso ei koskaan nähnyt, ja arviointikehys on ainoa väline, joka saa nostaa tason yhden napautuksen ehdotukseksi, 95 %:n tarkkuudella summassa ja osallistujissa yhdessä.
Kaksi muuta tasoa on määritelty eikä kumpikaan ole käytössä. cheap-fast-tasolla on Groq-sovitin mallille openai/gpt-oss-120b eikä avainta; keskitasolla ei ole sovitinta. Kumman tahansa valitseminen epäonnistuu käynnistyksessä eikä käyttäjän ensimmäisessä pyynnössä, koska LLM laskuttaa kutsukohtaisesti ja laskutettavan riippuvuuden on epäonnistuttava suljettuna.
Mikään ei kirjaudu automaattisesti, joten tyhjä maksaa yhden napautuksen
Tyhjä kenttä maksaa niin vähän vain siksi, ettei mikään kirjaus Dimesumissa voi kirjoittaa rahaa. Kirjaus luo ehdotuksen, ihminen vahvistaa sen, ja vahvistus on se, mikä luo kulun. Brief-päätös D5 määrää säännön, ja .go-arch-lint.yml pakottaa sen: sisäänsyöttökontekstilta evätään kaikki riippuvuus kuluun tai tilikirjaan, joten kirjaus ei voi kirjata päiväkirjaa edes vahingossa. CI hylkää tuonnin, minkä varmistimme lisäämällä yhden.
Kirjaus säilyttää raakatekstin teki jäsentäjä mitä tahansa, ja nimeää mitkä kentät ovat ratkaisematta. Asiakas korostaa nuo tyhjät kentät sen sijaan että näyttäisi keksityn luonnoksen, mikä on ero jäsentäjän, joka ei sano mitään, ja jäsentäjän, joka arvaa, välillä. Vahvistus johtaa kulutunnisteensa ehdotustunnisteesta, joten kaksoisnapautus toistaa sen sijaan että veloittaisi kahdesti.
Sääntö, jonka kannattaa varastaa
Laske suojauksesi, älä virheitäsi. Suojauslista, joka kasvaa joka viikko, kertoo sinulle että tehtävä on ymmärtäminen, ja ymmärtäminen kuuluu mallille. Seuraava vaiheemme on ajaa kultainen joukko tiedostossa contracts/parse_expense/eval/ todellista mallitasoa vasten, koska mistään tässä ei tule yhden napautuksen ehdotusta ilman tuota tuomiota.
Usein kysytyt kysymykset
Miksi Dimesum poisti sääntöpohjaisen kulujäsentäjänsä?
Dimesum poisti sen, koska neljä tavallista lausetta tuotti rahavirheitä ja jokainen lisätty suojaus paljasti kaksi uutta muotoilua. dinner 12-08 400 luettiin €12:na, ravioli 600 lisäsi Ravindra-nimisen jäsenen, kirana 500 veloitti Kiran-nimistä jäsentä, ja refund -483.50 muuttui €483.50:n veloitukseksi. Lauseen ymmärtäminen on mallin tehtävä.
Mitä amount_only-taso oikeasti palauttaa?
amount_only-taso palauttaa yhden numeron eikä mitään muuta. Se vastaa summalla vain, kun teksti sisältää täsmälleen yhden yksiselitteisen rahaehdokkaan, eikä se koskaan nimeä osallistujaa, maksajaa, kuvausta tai kategoriaa. Kaksi ehdokasta tarkoittaa, ettei summaa anneta lainkaan. Kaikki muu jäsennyssopimuksessa odottaa mallitasoa.
Miksi amount_only ilmoittaa 0.3 luottamuksen oikean pistemäärän sijaan?
0.3 on rakenteellinen, ei viritetty. Jäsennyssopimuksemme hylkää jäsennyksen alle 0.6:n ja pudottaa käyttäjän tavalliseen lomakkeeseen, ja yksittäinen summa ei ole jäsennys, joten taso asettuu puoleen tuosta rajasta löysipä se mitä tahansa. Yksi kiinteä vakio jokaiselle vastaukselle estää tapauskohtaisen pistemäärän myöhemmän nostamisen.
Voiko luonnollisen kielen kirjaus kirjoittaa tilikirjaan ilman ihmistä?
Ei. Kirjaus luo ehdotuksen ja ihminen vahvistaa sen, Brief-päätöksen D5 mukaisesti. Sääntö on pakotettu tiedostossa .go-arch-lint.yml, joka estää sisäänsyöttökontekstilta kaiken riippuvuuden kuluun tai tilikirjaan, joten CI hylkää tuonnin, jos kirjaus koskaan yrittää päiväkirjaan. Vahvistaminen on se, mikä luo kulun.
Mitä luonnollisen kielen kulujen jäsentämiselle tapahtuu, kun mallitasoa ei ole saatavilla?
Dimesum putoaa tasolle amount_only ja näyttää tyhjät kentät. cheap-fast-taso on kytketty Groqin openai/gpt-oss-120b-malliin ja toimitetaan ilman avainta, eikä keskitasolla ole sovitinta, joten kumman tahansa valitseminen epäonnistuu käynnistyksessä eikä käyttäjän ensimmäisessä pyynnössä. Kirjaus säilyttää raakatekstin joka tapauksessa.
Suositut artikkelit
- Lisäävä kirjanpito pitää jaetut saldot täsmällisinä7 min lukuaika
- Miksi jaetun kulun muokkaus vaatii jaon toistamisen6 min lukuaika
- Kuusi rahavirhettä monivaluuttaisessa kulujen jaossa7 min lukuaika
- Näin tasaat ryhmän kulut harvemmilla siirroilla4 min lukuaika
- Eritellyn laskun jakaminen reilusti7 min lukuaika