Tehty EU:ssa, ja missä datasi on
Missä Nessie on rakennettu, missä datasi sijaitsee ja mitä hallitset, kun ylläpidät sitä itse.
Kuka sen rakentaa ja minkä lain alaisena
Nessien rakentaja on UnlikeOtherAI s.r.o., Tšekissä rekisteröity yhtiö, joka toimii Tšekin lain alaisena.
Tämä sivu kuvaa, miten ohjelmisto on rakennettu ja missä se toimii. Se ei ole vaatimustenmukaisuusilmoitus: Nessiellä ei ole tietoturvasertifiointia, eikä mitään tässä pidä tulkita sellaiseksi. Se, mitä henkilötietoja käsitellään ja millä perusteella, kuuluu tietosuojaselosteeseen, joka on erillinen sivu.
Missä isännöity tuote toimii
Nessie Cloud toimii eurooppalaisten isännöintipalvelujen tarjoajien palvelimilla — Scaleway, Hetzner ja muut. Valitsemme kultakin tarjoajalta parhaan palvelun, joten tuotteen eri osat voivat toimia eri tarjoajilla, kaikki Euroopassa.
Tätä tarkempaa tietoa — tiettyä toimipaikkaa, kaupunkia tai konesalia — ei tässä tarkoituksella kerrota, koska tieto vanhenisi kenenkään huomaamatta.
Omassa ympäristössä valinta on sinun
Se, missä itse isännöity instanssi toimii, on käyttöönoton asetus, ei tuotteen asetus. Yhden koneen vaihtoehto on Docker Compose -pino, jonka sijoitat valitsemallesi koneelle. Hallinnoidun pilven Terraform-puussa alue on syöte, jolla ei ole lainkaan oletusarvoa: mitään siellä ei voi arvata, joten millään ei ole oletusta, ja tietokanta, objektivarastosäiliö (bucket) ja palvelut seuraavat kaikki nimeämääsi aluetta.
Saman kysymyksen kannalta on kaksi rakenteellista seikkaa. Jono ja reaaliaikainen siirtokerros ovat molemmat PostgreSQL:ää — polulla ei ole Redisiä eikä viestinvälittäjää, joten kolmatta järjestelmää ei tarvitse sijoittaa mihinkään. Lisäksi objektivarasto on S3-yhteensopiva eikä sidottu yhteen toimittajaan; esimerkkiasennuksessa MinIO pyörii kontissa yksityisessä verkossa, jolla ei ole omaa sisääntuloa. Jonkin paikan tarvitsevat osat ovat tietokanta, objektivarasto ja kaksi Node-palvelua, ja ne kaikki sijaitsevat siellä, minne ne asetat. Pystytys on kuvattu asennussivulla.
Mitä Nessie säilyttää — ja mitä se tarkoituksella ei säilytä
Identiteettiä ei kopioida
UnlikeOtherAI-kirjautumisessa identiteettipalveluntarjoaja hallinnoi ja tallentaa ihmisten identiteetin — todennustekijät, profiilit, organisaation ja tiimin jäsenyydet sekä kutsut. Nessie on luottava osapuoli, ei toinen identiteettijärjestelmä. Tämä on yhtä lailla tietoratkaisu kuin arkkitehtuuriratkaisu: identiteetti, jota Nessie ei koskaan tallenna, on sellainen, jota se ei voi vuotaa, hukata tai jättää poistamatta.
Taulu users säilyttää todellisuudessa palveluntarjoajan pysyvän käyttäjätunnisteen — avaimen, jonka kautta kaikki muu selvitetään — sähköpostiosoitteen, nimen ja avatarin ei-auktoritatiivisen peilin sekä tuotteen omat kentät (asetukset, pronominit ja istuntojen mitätöintiin käytettävän tunnuksen version). Peili on olemassa vain siksi, että nimi ja kuva voidaan näyttää ilman erillistä pyyntöä jokaiselle riville, ja se synkronoidaan uudelleen palveluntarjoajan varmennetuista väitteistä kirjautumisessa, tiimin vaihdossa ja istunnon uusinnassa. Mikään ei tuota arvoja tyhjästä: henkilö, jota palveluntarjoaja ei ole nimennyt, näkyy sähköpostiosoitteellaan, kunnes nimi on olemassa. Salasanatiiviste on olemassa vain sellaisen asennuksen käynnistysomistajalle, jossa ei ole lainkaan identiteettipalveluntarjoajaa.
Sama pätee rakenteeseen. Yksi palveluntarjoajan organisaatio on yksi Nessien organisaatio, sidottuna palveluntarjoajan organisaatiotunnisteeseen; tiimi, jolla ei ole yhteyttä ylävirtaan, vastaa 404 TEAM_NOT_LINKED eikä palaa paikalliseen arvaukseen, ja reaaliaikainen jäsenluettelon luku menee identiteettipalveluntarjoajalle eikä tallenna mitään.
Kaksi peiliä ei ole vielä poistunut, ja olisi epärehellistä antaa ymmärtää toisin. Organisaatioiden ja tiimien nimet tallennetaan yhä paikallisesti sidontatunnisteiden rinnalle, ja paikalliset jäsenyysrivit valtuuttavat yhä tavalliset pyynnöt synkronointien välillä. Molempien poistaminen on seurannassa oleva, avoin työ repositoriossa, ei jo valmis asia.
Ei mitään kaupallista
Maksuja hallinnoi keskitetty laskutuspalvelu. Nessie ei tallenna maksupalvelun asiakasta, tilausta, laskua, hintaa, hyvityssaldoa, latauskäytäntöä, maksusuostumusta, tiliotetta eikä peruutustilaa, eikä se laske hinnastoja. Se lukee valmiiksi näytettäviä arvoja ja näyttää ne.
Salaisuudet
Salaisuuden tallentaminen edellyttää määritettyä holvia. Tietokantavaraa tai selväkielistä polkua ei tarkoituksella ole: ilman holvia salaisuuden tallennus, kierrätys ja peruutus palauttavat virheen sen sijaan, että ne heikentyisivät johonkin vähemmän turvalliseen. Nessien omat salaisuutta koskevat tietueet eivät sisällä arvoa, salattua tekstiä, avainta eivätkä holvin tunnusta — vain läpinäkymättömän viitteen ja sen metatiedot — ja holvin polut rakennetaan pelkistä rakenteellisista tunnisteista, ei koskaan organisaation, tiimin, projektin tai henkilön nimestä.
Tunnukset, joita Nessien on säilytettävä itse toimiakseen OAuth-asiakkaana — liittimien ja postilaatikoiden tunnukset, webhook-salaisuudet, istunnon uusintamateriaali ja suorittimen sisällöt — suljetaan käyttötarkoitukseen sidottuihin AES-256-GCM-kirjekuoriin versioidun avainrenkaan alla, joka on istuntojen allekirjoitussalaisuudesta erillinen juuri ja jolla on dokumentoitu kierrätysmenettely.
Malleista on myös sääntö: salaisuuden olemassaolo voi olla tiedossa ja sen käyttö voidaan valtuuttaa, mutta salainen aineisto ei saa päätyä mallin kontekstiin, kehotteisiin, työkalun argumentteihin, työkalun tuloksiin, muistiin, upotuksiin, hakuun, lokeihin eikä viesteihin. Agentille voidaan antaa oikeus käyttää salaisuutta. Sille ei voi koskaan antaa oikeutta paljastaa sitä.
Se, ovatko taustalla olevat levyt salattuja, riippuu koneesta, jolla käyttöönotto toimii. Repositorio ei osoita tietokannan ja objektivaraston tallennustilavuuksien tasolla tapahtuvaa salausta, joten tämä sivu ei väitä sitä.
Vuokraajien eristys
Nessie on suunnittelultaan monivuokraajainen: yksi tietokanta, jossa jokainen rivi kuuluu täsmälleen yhdelle organisaatiolle ja jokaisella alataululla on sarake organization_id. Eristys toteutetaan kahdessa paikassa — rajausehdossa, jonka jokainen kysely sisältää, sekä tämän sarakkeen aidoilla vierasavaimilla, jotka lisättiin neljänkymmenenkahden rajoitteen verran sen jälkeen, kun sisäinen auditointi oli todennut sarakkeen olevan olemassa mutta ilman rajoitteita kymmenissä tauluissa.
Vaatimustenmukaisuustestistö pitää tämän invariantin paikallaan HTTP-rajapinnassa. Se kylvää enimmäisoikeuksilla varustetun hyökkääjän — oman organisaationsa täyden omistajan — ja varmistaa, että jokainen toisen organisaation resurssien kanoninen luku vastaa 403, 404 tai tyhjää ja että jokainen kanoninen muutos hylätään toisen organisaation rivin jäädessä koskemattomaksi. Se kattaa kanavat, hyväksynnät, tarkastuslokin, triggerit, agentit ja niiden sidonnat, ajot, projektit, tehtävät, ketjut, yhteydet, työnkulkuasennukset, MCP-instanssit, tietopankin ja hälytykset.
Mekanismista tarkasti: tämä on sovellustason valvontaa ja vierasavaimia, ei PostgreSQL:n rivitason suojausta (row-level security). RLS-sääntöä tai tietokantapuolen takaporttia ei ole, ja vaatimustenmukaisuustestistö ajetaan uskollista muistinvaraista tallennetta vasten eikä oikeaa tietokantaa vasten, joten se osoittaa koodin kirjoittamat rajausehdot eikä sitä SQL:ää, jonka palvelin suorittaa. Repositorio sanoo tämän testistön omassa dokumentaatiossa, ja niin sanoo tämä sivukin.
Tarkastusketju
Jokainen merkittävä toiminto kirjataan: kuka toimi ja missä roolissa — henkilö, agentti, palvelu — mitä hän teki, mille resurssille, missä organisaatiossa, projektissa, tiimissä tai kanavassa, onnistuiko vai evättiinkö se, miksi, sekä pyynnön tunniste, osoite ja käyttäjäagentti, jolla se saapui.
Loki on suunnittelultaan vain lisäävä, eikä siihen voi kirjoittaa ulkopuolelta: POST /api/audit-log ei ole olemassa, ja se on tarkoituksellista. Merkinnät on ketjutettu — jokainen sisältää oman kanonisten kenttiensä SHA-256-tiivisteen sekä saman organisaation edellisen merkinnän tiivisteen — joten muokattu tai poistettu rivi katkaisee ketjun ja on havaittavissa. Organisaation omistaja tai ylläpitäjä voi kulkea tämän ketjun läpi tarvittaessa ja saa tietää, mistä kohtaa se ensin katkesi, jos katkesi.
Kaksi rehellistä varausta. Ketju tekee lokista peukaloinnin paljastavan, ei peukaloinnilta immuunia: sen takana ei ole tietokantatason kirjoitusoikeuksien poistoa eikä kertakirjoitettavaa tallennusta, joten takuu on havaitseminen, ei estäminen. Lisäksi merkintöjä säilytetään oletuksena toistaiseksi — muokattava säilytysaika ja vienti ennen poistoa on suunniteltu, ei rakennettu. Merkinnät eivät myöskään saa sisältää salaisuuksia tai pyyntöjen täysiä sisältöjä, ja kiinteä joukko arkaluonteisia metatietokenttiä peitetään sisääntulossa.
Kustannuskirjanpito
Jokainen mallikutsu kirjataan organisaatiolle sekä käyttäjälle, tiimille, projektille, kanavalle, agentille ja ajolle, josta se tuli, yhdessä kulutettujen tokenien kanssa; palveluntarjoajan ilmoittama kustannus ja Nessien oma arvio säilytetään rinnakkain. Mittari, jota palveluntarjoaja ei ilmoita, tallennetaan nullina eikä arvata. Raportit voi lukea organisaation omistaja tai ylläpitäjä.
Tämä kirjanpito on toiminnallista telemetriaa — mitä organisaatio kulutti ja kenen puolesta. Se ei ole lasku eikä laskutuksen auktoriteetti.
Kolmannet osapuolet isännöityä tuotetta käytettäessä
Isännöity käyttöönotto keskustelee pienen, kiinteän palvelujoukon kanssa. Mallien liikenne ja verkkohaku eivät mene suoraan palveluntarjoajille: molemmat lähtevät yhden UnlikeOtherAI:n ylläpitämän yhdyskäytävän kautta, jonka takana ovat ylävirran malli- ja hakupalveluntarjoajat. Kirjautuminen ja laskutus menevät UnlikeOtherAI:n todentajalle. Salaisuusholvi on isännöity itse sovelluksen rinnalla. Palvelimen luomat videopuhelulinkit käyttävät oletuksena julkista Jitsi-palvelua.
Lähes kaikki muu on pois päältä, kunnes ylläpitäjä määrittää sen, ja ilmoittaa siitä sen sijaan, että epäonnistuisi hiljaa: yhdistetyt Google-, Microsoft- ja Slack-tilit; agentin sähköposti Amazon SES:n kautta, jota käyttöönotto ajaa omalla tilillään ilman välikättä; mobiili- ja selainpush; tutkimus- ja taulun lähdeliittimet; pilviselaimet. Kaksi seikkaa kannattaa mainita, koska ne muuttavat sitä, minne data kulkee:
- Yhdistetyt postilaatikot pysyvät palveluntarjoajallasi. Posti luetaan reaaliaikaisesti palveluntarjoajaltasi IMAP:n ja SMTP:n kautta tai palveluntarjoajan omalla kirjautumisella; Nessie tallentaa suljetun tunnuksen eikä mitään muuta tilistä. Poikkeus on postilaatikko, jonka liität Asiakkaat-osion postilaatikkoon: pyydät silloin, että sen keskustelut säilytetään kunkin asiakkaan yhteydessä, joten ne kopioidaan sisään.
- Sovelluksen äänipuhelut eivät kulje Nessien kautta. API välittää tunnuksen ja asiakas avaa äänivirran itse. Sanelu ja puhelinsoitot ovat eri asia: niiden ääni kulkee Nessien kautta niitä käsitteleville puhe- ja mallipalveluntarjoajille.
Yksi päättelyyn liittyvä seikka noudattaa samaa periaatetta: allekirjoitetut kutsujan identiteettiotsakkeet lähetetään vain määritetylle chat-isännälle, joten upotusten osoittaminen toiseen päätepisteeseen ei koskaan anna kyseiselle päätepisteelle valtuutusväitettä henkilöstä, jonka tekstiä upotetaan.
Isännöity tuote käyttää useita päättelypalveluntarjoajia ja valitsee niiden välillä kustannusten ja laadun mukaan. Organisaatio voi jatkossa valita Adminissa, mitä tarjoajia sen agentit saavat käyttää: vain länsimaisia, vain eurooppalaisia, vain kiinalaisia tai ei mieltymystä — tehokkain tarjoaja kuhunkin työhön. Itse ylläpidetty instanssi valitsee omansa.
Omassa ympäristössä ajaminen muuttaa tämän kaiken
Jokainen yllä mainittu kolmas osapuoli on itse isännöidyssä instanssissa konfiguraatiovalinta. Päättely voidaan osoittaa mihin tahansa OpenAI-yhteensopivaan päätepisteeseen, myös omalla laitteistollasi olevaan. Liittimet ovat pois päältä, ellet kytke niitä päälle. UnlikeOtherAI-kirjautuminen on tuettu polku, ja käyttöönotto ilman lainkaan identiteettipalveluntarjoajaa toimii yhtenä sitomattomana organisaationa, jolla on käynnistysomistaja.
Tämä on koko järjestelyn ydin: ohjelmisto on sama, ja päätökset siitä, missä se toimii ja mihin se pääsee, kuuluvat sille, joka sitä ajaa. Asennussivu kertoo, miten.