Vektoritietokannat: Pinecone, Weaviate ja pgvector · Oppitunti

Nimiavaruuksien hallinta

Ymmärtäkää, miten data osioidaan yhdessä Pinecone-indeksissä nimiavaruuksien avulla paremman järjestelmällisyyden saavuttamiseksi.

Oppitunti 2/412 vaihetta

Nimiavaruuksien hallinta on ilmainen Vektoritietokannat: Pinecone, Weaviate ja pgvector-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Vektoritietokannat: Pinecone, Weaviate ja pgvector-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Vektoritietokannat: Pinecone, Weaviate ja pgvector-kurssilla on yhteensä 4 oppituntia.

Mitä Pineconen namespace-nimialueet ovat?

Tervetuloa hallitsemaan Pineconen namespace-nimialueita! Namespace on kuin looginen osio yksittäisen Pinecone-indeksin sisällä.

Ajattele sitä pääkansion sisällä olevana kansiona. Sen avulla voit jakaa tietosi osiin ilman, että sinun tarvitsee luoda kokonaan erillisiä indeksejä.

Miksi namespace-nimialueita käytetään?

Namespace-nimialueet ovat erittäin hyödyllisiä vektoritietojen järjestämisessä etenkin monimutkaisissa sovelluksissa:

  • Monivuokraus: eri käyttäjien tai asiakkaiden tietojen eristäminen yhden indeksin sisällä.
  • A/B-testaus: upotusten eri versioiden tallentaminen kokeita varten.
  • Tietojen eristäminen: erillisten aineistojen pitäminen erillään samalla indeksin infrastruktuurilla.
  • Luokittelu: vektorien ryhmittely aiheen, lähteen tai tyypin mukaan.

Oletusnamespace

Jokaisella Pinecone-indeksillä on oletusnamespace. Jos et määritä namespacea erikseen upsert- tai kyselytoiminnon yhteydessä, toiminto kohdistuu tähän oletusnamespaceen.

Se esitetään usein tyhjänä merkkijonona "" tai jättämällä namespace-parametri yksinkertaisesti pois.

Namespace-nimialueiden valmistelu

Varmista ennen namespace-nimialueiden käyttöä, että Pinecone-asiakas on alustettu. Oletamme, että API-avaimesi ja ympäristösi on määritetty, yleensä ympäristömuuttujien avulla.

Tässä on esittelyä varten tarkoitettu perusmääritys:

from pinecone import Pinecone
import os

def main():
    # Replace with your actual API key and environment from environment variables
    api_key = os.environ.get("PINECONE_API_KEY", "YOUR_API_KEY")
    environment = os.environ.get("PINECONE_ENVIRONMENT", "YOUR_ENVIRONMENT")

    if api_key == "YOUR_API_KEY" or environment == "YOUR_ENVIRONMENT":
        print("Please set PINECONE_API_KEY and PINECONE_ENVIRONMENT env vars.")
        return

    pc = Pinecone(api_key=api_key, environment=environment)
    print("Pinecone client initialized.")

if __name__ == "__main__":
    main()

Tietojen upsertointi namespace-nimialueeseen

Voit lisätä vektoreita tiettyyn namespace-nimialueeseen lisäämällä namespace-parametrin kutsuun index.upsert().

Tässä esimerkissä muutama vektori upsertoidaan namespace-nimialueeseen nimeltä "product-recommendations".

from pinecone import Pinecone, Index
import os

def main():
    api_key = os.environ.get("PINECONE_API_KEY", "YOUR_API_KEY")
    environment = os.environ.get("PINECONE_ENVIRONMENT", "YOUR_ENVIRONMENT")

    if api_key == "YOUR_API_KEY" or environment == "YOUR_ENVIRONMENT":
        print("Please set PINECONE_API_KEY and PINECONE_ENVIRONMENT env vars.")
        return

    pc = Pinecone(api_key=api_key, environment=environment)
    index_name = "my-product-index" # Ensure this index exists

    if index_name not in pc.list_indexes():
        print(f"Index '{index_name}' does not exist. Please create it first.")
        return

    index = pc.Index(index_name)

    vectors_to_upsert = [
        {"id": "item-1", "values": [0.1, 0.2, 0.3]}, # 3 dimensions for example
        {"id": "item-2", "values": [0.4, 0.5, 0.6]}
    ]

    # Upsert into a specific namespace
    index.upsert(vectors=vectors_to_upsert, namespace="product-recommendations")
    print("Vectors upserted into 'product-recommendations' namespace.")

if __name__ == "__main__":
    main()

Tietyn namespace-nimialueen kysely

Kun haluat hakea vektoreita tietystä namespace-nimialueesta, määritä namespace-parametri myös kutsussa index.query().

Näin varmistat, että haku rajoittuu indeksin kyseiseen osioon.

from pinecone import Pinecone, Index
import os

def main():
    api_key = os.environ.get("PINECONE_API_KEY", "YOUR_API_KEY")
    environment = os.environ.get("PINECONE_ENVIRONMENT", "YOUR_ENVIRONMENT")

    if api_key == "YOUR_API_KEY" or environment == "YOUR_ENVIRONMENT":
        print("Please set PINECONE_API_KEY and PINECONE_ENVIRONMENT env vars.")
        return

    pc = Pinecone(api_key=api_key, environment=environment)
    index_name = "my-product-index"

    if index_name not in pc.list_indexes():
        print(f"Index '{index_name}' does not exist. Please create it first.")
        return

    index = pc.Index(index_name)

    query_vector = [0.15, 0.25, 0.35] # Example query vector

    # Query within the 'product-recommendations' namespace
    results = index.query(
        vector=query_vector,
        top_k=2,
        namespace="product-recommendations",
        include_values=False
    )
    print("Query results from 'product-recommendations' namespace:")
    for match in results.matches:
        print(f"ID: {match.id}, Score: {match.score}")

if __name__ == "__main__":
    main()

Kyselyn laajuuden ymmärtäminen

On tärkeää muistaa, että Pineconen kyselyt kohdistuvat oletusarvoisesti tiettyyn namespace-nimialueeseen. Jos teet kyselyn määrittämättä namespacea, haku kohdistuu vain oletusnamespaceen.

Kaikista namespace-nimialueista ei voi tehdä kyselyä yhdellä API-kutsulla. Jos haluat yhdistää tulokset, sinun on tehtävä kysely jokaiseen namespaceen erikseen.

Indeksin namespace-nimialueiden luetteleminen

Näet indeksissä tällä hetkellä olevat namespace-nimialueet ja niiden tilastot käyttämällä metodia index.describe_index_stats().

Se palauttaa yhteenvedon, joka sisältää namespace-nimialueiden kuvauksen ja vektorien määrät.

from pinecone import Pinecone, Index
import os

def main():
    api_key = os.environ.get("PINECONE_API_KEY", "YOUR_API_KEY")
    environment = os.environ.get("PINECONE_ENVIRONMENT", "YOUR_ENVIRONMENT")

    if api_key == "YOUR_API_KEY" or environment == "YOUR_ENVIRONMENT":
        print("Please set PINECONE_API_KEY and PINECONE_ENVIRONMENT env vars.")
        return

    pc = Pinecone(api_key=api_key, environment=environment)
    index_name = "my-product-index"

    if index_name not in pc.list_indexes():
        print(f"Index '{index_name}' does not exist. Please create it first.")
        return

    index = pc.Index(index_name)

    # Get index statistics
    index_stats = index.describe_index_stats()

    print("Namespaces in index:")
    for ns, stats in index_stats.namespaces.items():
        print(f"- Namespace: '{ns}', Vector Count: {stats.vector_count}")

if __name__ == "__main__":
    main()

Vektorien poistaminen namespace-nimialueesta

Voit poistaa tiettyjä vektoreita namespace-nimialueesta antamalla niiden tunnisteet ja namespace-parametrin metodille index.delete().

Tässä esimerkissä poistetaan tietty kohde namespace-nimialueesta "product-recommendations".

from pinecone import Pinecone, Index
import os

def main():
    api_key = os.environ.get("PINECONE_API_KEY", "YOUR_API_KEY")
    environment = os.environ.get("PINECONE_ENVIRONMENT", "YOUR_ENVIRONMENT")

    if api_key == "YOUR_API_KEY" or environment == "YOUR_ENVIRONMENT":
        print("Please set PINECONE_API_KEY and PINECONE_ENVIRONMENT env vars.")
        return

    pc = Pinecone(api_key=api_key, environment=environment)
    index_name = "my-product-index"

    if index_name not in pc.list_indexes():
        print(f"Index '{index_name}' does not exist. Please create it first.")
        return

    index = pc.Index(index_name)

    # Delete a specific vector by ID within a namespace
    index.delete(ids=["item-1"], namespace="product-recommendations")
    print("Vector 'item-1' deleted from 'product-recommendations' namespace.")

if __name__ == "__main__":
    main()

Kokonaisen namespace-nimialueen poistaminen

Voit poistaa kaikki tietyn namespace-nimialueen vektorit ja siten käytännössä poistaa koko namespace-nimialueen käyttämällä index.delete()-metodia, antamalla sille namespace-parametrin ja asettamalla arvoksi delete_all=True.

Ole varovainen: toiminto on peruuttamaton ja poistaa kaikki kyseisen namespace-nimialueen tiedot!

from pinecone import Pinecone, Index
import os

def main():
    api_key = os.environ.get("PINECONE_API_KEY", "YOUR_API_KEY")
    environment = os.environ.get("PINECONE_ENVIRONMENT", "YOUR_ENVIRONMENT")

    if api_key == "YOUR_API_KEY" or environment == "YOUR_ENVIRONMENT":
        print("Please set PINECONE_API_KEY and PINECONE_ENVIRONMENT env vars.")
        return

    pc = Pinecone(api_key=api_key, environment=environment)
    index_name = "my-product-index"

    if index_name not in pc.list_indexes():
        print(f"Index '{index_name}' does not exist. Please create it first.")
        return

    index = pc.Index(index_name)

    # Delete all vectors within a specific namespace
    # This effectively removes the 'test-namespace' and all its contents
    index.delete(namespace="test-namespace", delete_all=True)
    print("All vectors in 'test-namespace' deleted. Namespace effectively removed.")

if __name__ == "__main__":
    main()

Namespace-nimialueita koskeva tietotesti

Sinulla on indeksi nimeltä "my-app-index". Upsertoit vektoreita namespace-nimialueisiin "user-1" ja "user-2". Mitä tapahtuu, jos kutsut tämän jälkeen index.query(vector=my_vec, top_k=5) määrittämättä namespace-parametria?

Kertaus: järjestä tiedot namespace-nimialueilla

Hienoa työtä! Olet tutustunut Pineconen namespace-nimialueiden hyötyihin.

  • Namespace-nimialueet auttavat jakamaan tiedot osiin yhden indeksin sisällä.
  • Ne sopivat erinomaisesti monivuokraukseen ja A/B-testaukseen.
  • Toiminnot (upsert, query, delete) ovat namespace-kohtaisia.
  • Oletusnamespacea käytetään, jos muuta ei määritetä.
  • Voit luetella olemassa olevat namespace-nimialueet ja poistaa kokonaisia namespace-nimialueita.

Namespace-nimialueiden tehokas käyttö pitää vektoritietosi järjestyksessä ja helposti hallittavina!

Aloita maksutta

Opi Vektoritietokannat: Pinecone, Weaviate ja pgvector tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”Nimiavaruuksien hallinta” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Vektoritietokannat: Pinecone, Weaviate ja pgvector-oppimispolun 3 oppituntia, myös oppitunnin “Nimiavaruuksien hallinta”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Vektoritietokannat: Pinecone, Weaviate ja pgvector-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Nimiavaruuksien hallinta”?

Ymmärtäkää, miten data osioidaan yhdessä Pinecone-indeksissä nimiavaruuksien avulla paremman järjestelmällisyyden saavuttamiseksi. Harjoittelet Vektoritietokannat: Pinecone, Weaviate ja pgvector-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Vektoritietokannat: Pinecone, Weaviate ja pgvector-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Vektoritietokannat: Pinecone, Weaviate ja pgvector-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Nimiavaruuksien hallinta”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Vektoritietokannat: Pinecone, Weaviate ja pgvector-oppitunnilla?

Kyllä. Jokainen Vektoritietokannat: Pinecone, Weaviate ja pgvector-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Suodatus metatietojen avulla
  2. Nimiavaruuksien hallinta
  3. Reaaliaikaiset päivitykset ja poistot
  4. Hybridihaku harvoilla ja tiheillä vektoreilla
← Takaisin: Vektoritietokannat: Pinecone, Weaviate ja pgvector