Kaluste-kuvailija on tekoälyavusteinen API-rajapintasovellus, joka auttaa verkkokaupan tuotekuvausten luomisessa ja validoinnissa. Sovellus käyttää useita tekoälymalleja, kuten OpenAI:n GPT-3 ja Claude, tuotekuvausten generointiin.
Sovellus toimii osoitteessa: https://kierkeapi-nodetesti.rahtiapp.fi/
Sovelluksessa on kolme pääreittiä:
/airoute: Luo uuden tuotekuvauksen. Kuvauksen generointiin käytetään tekoälymalleja./dbroute/fetch: Hakee tallennettuja tuotekuvauksia tietokannasta./dbroute/fetchnonvalid: Hakee tallennettuja epävalideja tuotekuvauksia tietokannasta.
- HTTP-pyyntö: Sovellus vastaanottaa HTTP POST -pyynnön, joka sisältää tuotekuvauksen, yksilöllisen ID:n ja webhook-URL:n.
- Käsittely: Tuotekuvaus lähetetään GPT-4-malleille kahden eri käsittelijän kautta, jotka luovat yksityiskohtaiset tuotekuvaukset.
- Webhook-ilmoitus: Generoitu tuotekuvaus lähetetään annettuun webhook-URL:ään.
- Tietokantaan tallennus: Tulokset tallennetaan MongoDB-tietokantaan, jaoteltuna validoituihin ja ei-validoituihin tietoihin.
- Tietojen haku: Käyttäjät voivat hakea tallennettuja tuotekuvauksia yksilöllisen ID:n avulla HTTP GET -pyynnöllä.
/airoute/find/:id on reitti, jolla voit hakea tallennettuja tuotetietoja tietokannasta niiden yksilöllisen tunnisteen (ID) avulla. Tämä mahdollistaa tietyn tuotekuvauksen nopean haun ja tarkastelun.
Voit hakea tuotekuvausta sen ID:n perusteella lähettämällä GET-pyynnön seuraavaan osoitteeseen:
Korvaa :id tuotekuvauksen yksilöllisellä tunnisteella, jonka haluat hakea. Esimerkki pyynnöstä käyttäen cURL:
curl -X GET 'https://kierkeapi-nodetesti.rahtiapp.fi/airoute/find/<TÄHÄN_TUOTEKUVAUKSEN_ID>' \
-H 'Authorization: Basic <BASE64-KOODATTU_KÄYTTÄJÄTUNNUS: SALASANA>Onnistunut pyyntö palauttaa HTTP 200 -vastauskoodin ja JSON-muotoisen esityksen tuotekuvauksesta. Jos tuotekuvausta ei löydy annetulla ID:llä, palautetaan HTTP 404 -vastauskoodi ja virheilmoitus.
Esim GET https://kierkeapi-nodetesti.rahtiapp.fi/airoute/find/123456789
{
"_id": "660179e54f520db603a213b9",
"forwardedId": "123456789",
"properties": {
"type": "Sähköpöytä",
"details": "Puinen säädettävä sähköpöytä",
"defects": "Vähäisiä käytön jälkiä. Ruuvi kiinnitys on yhdessä kohtaa tullut osin läpi pöydän pinnasta.",
"notes": "Toimii ainoastaan sivupöytä kytkettynä. Sähköpöytään kuuluu sivupöytä ja työkalu teline.",
"manufacturer": "Isku",
"model": "",
"dimensions": {
"length": "240 cm",
"width": "160 cm",
"height": "Säädettävissä"
},
"color": "",
"price": 145,
"condition": "Hyvä",
"someDesc": "",
"aiPhoto": ""
},
"metadata": {
"timestampFI": "25.03.2024 klo 15.19 UTC+2",
"started_at": "2024-03-25T13:19:16.097Z",
"completed_at": "2024-03-25T13:19:20.238Z",
"model": "gpt-3.5-turbo-0613",
"tokens": {
"prompt_tokens": 395,
"completion_tokens": 222,
"total_tokens": 617
},
"elapsedTime": "4.14",
"validationPassed": true,
"validationErrors": null
}
}Sovellus sisältää kevyen autorisoinnin HTTP Basic Authin kautta. Tämä tarkoittaa, että API-kutsuja tehdessäsi sinun tulee sisällyttää Authorization-otsake, joka sisältää käyttäjätunnuksesi ja salasanasi Base64-koodattuna.
Projekti on kirjoitettu TypeScriptillä ja se käyttää Node.js:ää ja Express.js:ää palvelimen luomiseen. Projekti sisältää myös Dockerfile-tiedoston, joten voit luoda Docker-kontin sovellukselle.
services-hakemisto sisältää koodin, joka hoitaa tekoälymallien kanssa kommunikoinnin. Tämä sisältää mm. pyynnöt OpenAI:n GPT-3 ja Claude malleille.
dbModels-hakemisto sisältää MongoDB-mallit, joita käytetään tietojen tallentamiseen tietokantaan. Mallit määrittelevät, millaisia dokumentteja voidaan tallentaa tietokantaan.
Tämä tiedosto määrittelee palvelun pääreitit:
- POST /airoute: Käsittelee saapuvat tuotekuvaukset, aloittaa tuotekuvauksen generoinnin kahden käsittelijän (generateLangchainResponse ja generateGptResponseWithoutSchema) avulla ja tallentaa tulokset MongoDB:hen.
- GET /airoute/find/:id: Hakee tuotekuvauksen MongoDB:stä yksilöllisen ID:n perusteella.
generateLangchainResponse.ts / generateGptResponseWithoutSchema.ts
Nämä funktiot generoi tuotekuvauksen käyttäen LangChain-kirjastoa ja GPT-4o mallia. Vaiheet ovat:
- Promptin luominen: Rakentaa promptin käyttäen ChatPromptTemplate- ja muita malleja.
- Mallin kutsuminen: Käyttää ChatOpenAI:tä kutsuakseen GPT-4-mallia rakennetulla promptilla.
- Validointi: Validoi generoitu vastaus ProductObjectSchema-skeeman mukaisesti.
- Webhook-ilmoitus: Lähettää validoidun vastauksen annettuun webhook-URL:ään.
- Vastauksen palautus: Palauttaa vastauksen metatietoineen.
ProductObjectSchema on skeema, joka määrittelee tuotteen tärkeimmät tiedot ja ominaisuudet. Se on rakennettu käyttäen zod-kirjastoa, joka on TypeScript-yhteensopiva validointi- ja parsintakirjasto.
Tässä on skeeman määritelmä:
export const ProductObjectSchema = z.object({
properties: z
.object({
type: z.string().describe("Tuotteen luokitus, kuten 'huonekalu', 'elektroniikka', tai 'vaate' jne."),
details: z.string().optional().describe("Keskeiset ominaisuudet ja toiminnot tuotteesta. Ei sisällä tietoja, jotka on mainittu muissa kentissä, kuten materiaalit, viat tai mitat."),
material: z.string().optional().describe("Tuotteessa käytetyt materiaalit, pilkulla erotettuna."),
defects: z.string().optional().describe("Mahdolliset viat tai puutteet tuotteessa. Mainitse kaikki havaitut viat."),
notes: z.string().optional().describe("Lisätiedot, kuten tuotteen alkuperä, huoltotiedot tai muut erityispiirteet, jotka voivat vaikuttaa tuotteen arvoon tai ostajan päätökseen."),
manufacturer: z.string().optional().describe("Tuotteen valmistajan nimi"),
model: z.string().optional().describe("Tuotteen mallinimi tai -numero"),
dimensions: z
.object({
length: z.string().optional().describe("Tuotteen pituus"),
width: z.string().optional().describe("Tuotteen leveys"),
height: z.string().optional().describe("Tuotteen korkeus"),
})
.describe("Tuotteen fyysiset ulkomitat. Jätä tyhjäksi, jos mitat eivät ole sovellettavissa."),
color: z.string().optional().describe("Tuotteen pääväri tai värit, jos useita."),
price: z.number().optional().describe("Ehdotettu myyntihinta."),
condition: z
.enum([
"Ei kuntoluokitusta",
"Tyydyttävä",
"Hyvä",
"Lähes käyttämätön",
"Täysin uusi",
])
.optional()
.describe("Tuotteen kunto. Valitse lähin vastaavuus annetuista vaihtoehdoista."),
someDesc: z
.string()
.optional()
.describe("Markkinointiteksti, joka on suunniteltu houkuttelemaan ostajia sosiaalisessa mediassa."),
aiPhoto: z.string().optional().describe("Linkki tuotteen kuvaan tai kuvien galleriaan."),
})
.describe("Yksityiskohtainen objekti, joka kapseloi kaikki tuotteen tärkeimmät tiedot ja ominaisuudet."),
});Jokainen kenttä skeemassa on joko pakollinen tai valinnainen. Jokaisella kentällä on myös kuvaus, joka selittää, mitä tietoa kenttä edustaa.
Projekti käyttää ympäristömuuttujia API-avainten ja muiden konfiguraatiotietojen tallentamiseen. Nämä on määritelty .env-tiedostossa. Muista asettaa omat arvosi näille muuttujille ennen sovelluksen käynnistämistä.
OPENAI_API_KEY: Avain OpenAI GPT-3 palveluun.ANTHROPIC_API_KEY: Avain OpenAI Claude-3 palveluun.GOOGLE_GENERATIVE_AI_API_KEY: Avain Google Generative AI -palveluun.MONGO_ATLAS_URI: MongoDB Atlas -tietokannan URI.HTTP_BASIC_AUTH_USERNAME: Perusautentikointiin käytettävä käyttäjätunnus.HTTP_BASIC_AUTH_PASSWORD: Perusautentikointiin käytettävä salasana.WEBHOOK_ACCESS_TOKEN: Webhook-pyyntöjen todentamiseen käytettävä salainen avain.PORT: Palvelimen porttinumero (valinnainen).