Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Kaluste-kuvailija

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.

Toiminta

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.

Toimintaperiaate

  1. HTTP-pyyntö: Sovellus vastaanottaa HTTP POST -pyynnön, joka sisältää tuotekuvauksen, yksilöllisen ID:n ja webhook-URL:n.
  2. Käsittely: Tuotekuvaus lähetetään GPT-4-malleille kahden eri käsittelijän kautta, jotka luovat yksityiskohtaiset tuotekuvaukset.
  3. Webhook-ilmoitus: Generoitu tuotekuvaus lähetetään annettuun webhook-URL:ään.
  4. Tietokantaan tallennus: Tulokset tallennetaan MongoDB-tietokantaan, jaoteltuna validoituihin ja ei-validoituihin tietoihin.
  5. Tietojen haku: Käyttäjät voivat hakea tallennettuja tuotekuvauksia yksilöllisen ID:n avulla HTTP GET -pyynnöllä.

Hakeminen ID:n perusteella

/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.

Käyttö

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>

Vastaus:

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
  }
}

Kehitys

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

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

dbModels-hakemisto sisältää MongoDB-mallit, joita käytetään tietojen tallentamiseen tietokantaan. Mallit määrittelevät, millaisia dokumentteja voidaan tallentaa tietokantaan.

Koodin toiminta

aiRoute.ts

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:

  1. Promptin luominen: Rakentaa promptin käyttäen ChatPromptTemplate- ja muita malleja.
  2. Mallin kutsuminen: Käyttää ChatOpenAI:tä kutsuakseen GPT-4-mallia rakennetulla promptilla.
  3. Validointi: Validoi generoitu vastaus ProductObjectSchema-skeeman mukaisesti.
  4. Webhook-ilmoitus: Lähettää validoidun vastauksen annettuun webhook-URL:ään.
  5. Vastauksen palautus: Palauttaa vastauksen metatietoineen.

ProductObjectSchema

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.

Ympäristömuuttujat

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).

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages