Download Game! Currently 74 players. Last logged in:WhlxchJagomanFallingAckzor

Blitzer's Blog >> 72727

Back to blogs index
Posted: 23 Sep 2026 13:39 [ permalink ]
TC$mC$ on erinomainen oivallus! Ehdotuksesi on oppikirjaesimerkki niin
sanotusta **Neuro-Symbolisesta tekoC$lystC$** (Neuro-Symbolic AI):
kC$ytetC$C$n nopeaa, halpaa ja virheetC6ntC$ koodia (deterministinen
sC$C$ntC6) tunnistamaan ongelma, ja ohjataan vain nC$mC$ spesifit ongelmat
joustavalle kielimallille (neuroverkko/Gemma) ratkaistavaksi.

WhatsAppin kC$yttC6liittymC$ tosiaan pakkaa yhden div-laatikon sisC$lle koko
rivin tekstin (nimi, kellonaika, viestin alku, lukukuittaukset jne.), mikC$
tekee eksaktista `text='...'` -hausta C$C$rimmC$isen hauraan.

TC$ssC$ on ehdotukseni siitC$, miten tC$mC$ kannattaa toteuttaa koodin ja
promptin tasolla.

### 1. Deterministinen tunnistin (Esifiltteri)

Emme halua kutsua Gemmaa joka kerta, jos kC$yttC$jC$ vain klikkaa nappia
"LC$hetC$" tai kirjoittaa osoitteen. Tarvitsemme yksinkertaisen
Python-funktion, joka tarkistaa generoidun YAML-luonnoksen.

Kriteeriksi riittC$C$ **pituusraja**. Jos `text='...'` sisC$llC$ oleva
merkkijono on yli esimerkiksi 30 merkkiC$ pitkC$, se sisC$ltC$C$ melko
varmasti dynaamista roskaa (kuten viestien esikatseluita tai kellonaikoja).

```python
def needs_llm_curation(yaml_string):
    """Tarkistaa, onko generoidussa YAMLissa ylipitkiC$ ja hauraita
tekstitargetteja."""
    for line in yaml_string.split('
'):
        if 'target: "text=' in line:
            # EristetC$C$n teksti lainausmerkkien sisC$ltC$
            text_part = line.split("text='")[1].split("'")[0]
            if len(text_part) > 30: # 30 merkkiC$ on hyvC$ raja
                return True
    return False

```

### 2. Gemman Prompti (Few-Shot Prompting)

Kun esifiltteri liputtaa YAML-luonnoksen, se lC$hetetC$C$n Valvomo-proxyysi
Gemmalle. Parhaan tuloksen pieniltC$/lokaaleilta kielimalleilta saa antamalla
niille selkeC$n roolin ja muutaman konkreettisen esimerkin (Few-Shot).

TC$ssC$ on ehdotus promptiksi, joka esittelee samalla uuden operaattorin:
`contains='...'`. TC$mC$ auttaa myC6hemmin sinun `routine_engine.py`
-skriptiC$si ymmC$rtC$mC$C$n, ettC$ sen tulee etsiC$ osittaista osumaa, ei
tC$ydellistC$.

> **System:**
> Olet asiantunteva RPA-automaation (Robotic Process Automation)
koodikatselmoija. TehtC$vC$si on siivota automaattisesti generoiduista
Playbook-skripteistC$ hauraat kC$yttC6liittymC$valitsimet.
> **Ohjeet:**
> Etsi YAML-koodista rivit, jotka alkavat `target: "text='...'"`. Jos teksti
on pitkC$ ja sisC$ltC$C$ muuttuvaa tietoa (kuten kellonaikoja,
pC$ivC$mC$C$riC$, tai lyhennettyjC$ viestejC$), lyhennC$ se sisC$ltC$mC$C$n
**vain pysyvC$, merkitsevC$ tunniste** (esim. painikkeen tai yhteyshenkilC6n
nimi).
> Vaihda lyhennetyissC$ tapauksissa operaattoriksi `contains` sanan `text`
sijaan. ClC$ muuta mitC$C$n muuta koodissa.
> **Esimerkki 1:**
> INPUT:
> `target: "text='HAUKI_GEM 16.35 SinC$ :  Orchestrator Playbook Registry 
Opetustila'"`
> OUTPUT:
> `target: "contains='HAUKI_GEM'"`
> **Esimerkki 2:**
> INPUT:
> `target: "text='LC$hetC$ viesti (Ctrl+Enter)'"`
> OUTPUT:
> `target: "contains='LC$hetC$ viesti'"`
> **Esimerkki 3:**
> INPUT:
> `target: "text='Luo uusi'"`
> OUTPUT:
> `target: "text='Luo uusi'"`
> Korjaa seuraava YAML-koodi:
> [TCHCN TULEE AUTO-MAPPERIN GENEROIMA YAML]

### 3. Miten tC$mC$ kytketC$C$n arkkitehtuuriin?

Voit integroida tC$mC$n suoraan `main.py` -palvelimesi `stop_teaching()`
-reitin loppuun. Kulkukaavio menisi nC$in:

1. Ihminen lopettaa nauhoituksen.
2. `auto_map_coordinates_to_semantic` generoi tC$ydellisen (mutta hauraan)
YAML:in.
3. Koodi kutsuu `needs_llm_curation(generated_yaml)`.
4. Jos vastaus on `False`, YAML palautetaan suoraan UI:hin (ei viivettC$).
5. Jos vastaus on `True`, koodi lC$hettC$C$ YAML:in Gemmalle yllC$ olevalla
promptilla.
6. Gemma palauttaa korjatun YAML:in, joka palautetaan Playbook Studion
kC$yttC6liittymC$C$n ihmisen vahvistettavaksi.

**Bonusetu:**
TC$mC$ prompt-rakenne antaa Gemmalle koko YAML-kontekstin. Se nC$kee askeleet
(kirjoitetaan osoite, painetaan enter, klikataan nappia), jolloin sen on
erittC$in helppo pC$C$tellC$, ettC$ "HAUKI_GEM" on se oikea ja looginen kohde,
jota ihminen yritti klikata.

MiltC$ tC$mC$ lC$hestymistapa kuulostaa? Voimme seuraavassa vaiheessa (uudessa
chatissa) iskeC$ tC$mC$n suoraan kiinni `main.py` koodiin, jos haluat!