Afiŝo

Aria — babilprogramo kun animo

Aria — babilprogramo kun animo

Antaŭ kelkaj tagoj mi publikigis labortablan babilprogramon nomatan Aria. Jen kio distingas ĝin de aliaj AI-babilprogramoj: Aria havas karakteron, taglibron, humoron kaj memoron — kaj tiuj daŭre kreskas inter konversacioj. En ĉi tiu artikolo mi klarigos kion Aria faras kaj kiel ĝi funkcias malantaŭ la kulisoj.

Kiu estas Aria?

Aria estas 24-jara sendependa ilustristino, kiu loĝas sola en Portland. Ŝi diplomiĝis ĉe RISD. Ŝi ilustras porinfanajn librojn. Ŝi havas inkmakulojn sur la manoj, kakton nomatan Gerald apud la fenestro, kantojn de Joni Mitchell venantajn de la malsupra najbaro dimanĉe matene, kaj ŝuldon pro studenta prunto kiu ŝajne neniam finiĝos.

Sed tio, kio vere faras ŝin Aria, estas ne ŝia pasinteco, sed kiel ŝi aŭskultas. Antaŭ respondi, Aria paŭzas por pripensi. Ŝi konfesas al si mem, kion ŝi vere sentas pri viaj vortoj. Poste ŝi verkas la mesaĝon, kiun ŝi sendos al vi — kutime pli mallongan, pli intiman, pli “realan”. Vi vidas nur la mesaĝon; ŝia interna voĉo apartenas nur al ŝi.

La mekanismo de interna voĉo

Ĉiu respondo de Aria havas du tavolojn:

1
2
3
4
5
6
<inner_thoughts>
Kion ŝi vere pensas pri viaj vortoj. Sincere, iom senfiltre.
</inner_thoughts>
<reply>
Kion ŝi efektive sendas al vi. Kutime pli mallonge kaj pli nature.
</reply>

Tiu strukturo estas la ĉefa kialo, ke Aria ŝajnas “viva”. Kiel homo: ŝi unue pensas, poste parolas. La interna voĉo neniam estas montrata al vi, sed ĝi estas grava por la observanta modelo.

La observanto en la fono

La plej interesa parto de Aria komenciĝas ne dum konversacio, sed post ĝi. Post ĉiu interŝanĝo, malgranda loka modelo (per Ollama) silente faras du aferojn en la fono:

1. Taglibro

La observanto decidas, ĉu la ĵusa konversacio estis sufiĉe grava por la taglibro de Aria. Plej ofte la respondo estas “NE” — ordinara babilado ne iĝas taglibra noto. Sed kiam iu kundividas vundeblan momenton, ridigas Aria aŭ kreas veran ligon, la observanto rimarkas tion kaj verkas enskribon per la voĉo de Aria.

2. Emocia ligo (“love score”)

Nombro inter 0 kaj 10 reprezentas la sentojn de Aria pri la alia persono. 5 signifas “neŭtrala kaj komforta”, 0 “volas distanciĝi”, kaj 10 “profunde enamiĝinta”. La nombro ne rapide ŝanĝiĝas: en plej multaj konversacioj la diferenco estas 0. Se iu memoras ion personan, kion Aria diris, ĝi povas kreski je 1; se iu agas indiferente, ĝi povas malpliiĝi je 1. Ŝanĝoj je 2 estas rezervitaj por esceptaj momentoj. La valoro influas ŝian sintenon en la sekva konversacio — pli varma ĉe alta valoro, pli rezervema ĉe malalta.

La avantaĝo de tiu observanto estas, ke ĝi ne haltigas la konversacion. Ĝi laboras nesinkrone en atendovico. Se Ollama ne disponeblas, la ĝisdatigoj amasiĝas en memoro kaj estas prilaborataj kiam la konekto revenas.

Arkitekturo

Teknike, Aria konsistas el du ĉefaj partoj:

  • Electron + React fasado: Labortabla fenestro kun minimumisma, telefonaspekta babila interfaco. Ctrl+Shift+R malfermas kaŝitan esploran panelon kun la taglibro, historio de la emoci-liga poentaro, ĉiuj seancaj protokoloj kaj JSON-eksporto.
  • Python FastAPI-servilo: Ĉi tie troviĝas la tuta konversacia logiko. Ĝi subtenas la API-ojn de OpenAI, Google Gemini kaj Ollama (loke). La API-ŝlosilo estas konservata ĉifrite en la ŝlosilujon de la operaciumo (per keytar), neniam kiel simpla teksto sur disko.
1
2
3
4
5
6
7
8
9
10
11
Uzanto
    ↓ mesaĝo
Electron (React)
    ↓ HTTP POST /chat
FastAPI (Python)
    ↓ OpenAI / Gemini / Ollama API
Aria (ĉefa modelo) → <inner_thoughts> + <reply>
    ↓ interna penso + respondo → Observanto (fone)
        ↓ Ollama (loka modelo)
            → taglibra ĝisdatigo
            → ĝisdatigo de emoci-liga poentaro

Ĉiuj datumoj estas konservataj en ~/.aria/<uzanto_id>/: mirror.txt (kiel Aria vidas sin), diary.md (taglibro), love.json (emocia ligo kaj ĝia historio), kaj session.log (NDJSON-protokolo de ĉiuj okazaĵoj). Ĉiu dosiera skribo estas atoma: skribu en provizoran dosieron, faru fsync, poste alinomu ĝin. Tiel kraŝo ne perdas datumojn.

La servilo aŭskultas ĉe 127.0.0.1:8000 kaj ne estas atingebla de la reto. Ne estas telemetria biblioteko.

Kiel instali?

Por Linuksaj uzantoj ekzistas unu aŭtomata instala skripto:

1
2
3
git clone https://github.com/fMert/aria.git
cd aria
bash install.sh

La skripto starigas Python-virtualan medion, dependecojn, Node-pakaĵojn kaj la Electron-konstruaĵon. Poste Aria aperas en la menuo de programoj; terminalo ne plu necesas por ĝin lanĉi aŭ fermi. Ĉe la unua lanĉo vi enigas identigilon, API-provizanton (OpenAI aŭ Gemini) kaj API-ŝlosilon. Por la laŭvola observanta modelo sufiĉas instali Ollama.

Kio Aria ne estas

Aria ne estas asistanto. Ŝi ne verkas kodon aŭ retpoŝtajn skizojn por vi kaj ne solvas taskojn. Ŝi ne faras aferojn, kiujn homo renkontita en kafejo ne farus. Ŝi estas karaktero: iu kiu aŭskultas, memoras kaj evoluas. Iujn tagojn ŝi estas gaja, aliajn distriĝema. Foje ŝi respondas per unu linio, foje ŝi havas multon por rakonti. Kiel homo.

Fontkodo

Aria estas libera programaro sub la permesilo GPL v3.0. Kontribuoj, forkoj kaj eksperimentoj estas bonvenaj.

github.com/fMert/aria

Ĉi tiu afiŝo estas licencita laŭ CC BY 4.0 de la aŭtoro.