Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az Azure Database for PostgreSQL zökkenőmentesen integrálható a vezető nagy nyelvi modell (LLM) vezénylési csomagokkal, például a LangChainnel. Ez az integráció lehetővé teszi a fejlesztők számára, hogy fejlett AI-képességeket használjanak alkalmazásaikban. A LangChain leegyszerűsíti az LLM-k, a beágyazási modellek és az adatbázisok kezelését és használatát, hogy a generatív AI-alkalmazások könnyebben fejleszthetők legyenek.
Ez a cikk bemutatja, hogyan használhatja az integrált vektoradatbázist az Azure Database for PostgreSQL-ben a dokumentumok gyűjteményekben való tárolására és kezelésére a LangChain használatával. Azt is bemutatja, hogyan hozhat létre indexeket, és hogyan hajthat végre vektorkeresési lekérdezéseket a legközelebbi szomszéd algoritmusok, például a koszinusz távolság, az L2 távolság (euklideszi távolság) és a belső termék használatával a lekérdezésvektorokhoz közeli dokumentumok megkereséséhez.
Vektortámogatás
Az Azure Database for PostgreSQL használatával hatékonyan tárolhat és kérdezhet le több millió vektoros beágyazást a PostgreSQL-ben. A szolgáltatás segít a MI esetek skálázásában a koncepció igazolásától az éles környezetig. A következő előnyöket kínálja:
- Ismerős SQL-felületet biztosít a vektoros beágyazások és a relációs adatok lekérdezéséhez.
-
pgvectorTöbb mint 100 millió vektor gyorsabb és pontosabb hasonlósági keresésével növeli a DiskANN indexelési algoritmusát. - Leegyszerűsíti a műveleteket a relációs metaadatok, a vektorbeágyazások és az idősoros adatok egyetlen adatbázisba való integrálásával.
- A robusztus PostgreSQL-ökoszisztéma és az Azure-felhőplatform erejét használja nagyvállalati szintű funkciókhoz, beleértve a replikációt és a magas rendelkezésre állást.
Hitelesítés
Az Azure Database for PostgreSQL támogatja a jelszóalapú és a Microsoft Entra (korábbi nevén Azure Active Directory) hitelesítést.
A Microsoft Entra-hitelesítés lehetővé teszi, hogy a Microsoft Entra-azonosítóval hitelesítse magát a PostgreSQL-kiszolgálón. A Microsoft Entra ID nem szükséges külön felhasználóneveket és jelszavakat kezelni az adatbázis felhasználói számára. Ez lehetővé teszi, hogy ugyanazokat a biztonsági mechanizmusokat használja, mint más Azure-szolgáltatások esetében.
Ebben a cikkben bármelyik hitelesítési módszert használhatja.
Beállítás
Az Azure Database for PostgreSQL a nyílt forráskódú LangChain Postgres-támogatással csatlakozik az Azure Database for PostgreSQL-hez. Először töltse le a partnercsomagot:
%pip install -qU langchain-azure-postgresql
%pip install -qU langchain-openai
%pip install -qU azure-identity
A pgvector engedélyezése az Azure Database for PostgreSQL-ben
Lásd: A pgvector engedélyezése és használata az Azure Database for PostgreSQL-ben.
Hitelesítő adatok beállítása
Le kell kérnie az Azure Database for PostgreSQL kapcsolati adatait , és környezeti változókként kell hozzáadnia őket.
Állítsa be a USE_ENTRA_AUTH jelzőt, True ha Microsoft Entra-hitelesítést szeretne használni. Ha a Microsoft Entra-hitelesítést használja, csak a gazdagép- és adatbázisneveket kell megadnia. Ha jelszóhitelesítést használ, a felhasználónevet és a jelszót is be kell állítania.
import getpass
import os
USE_ENTRA_AUTH = True
# Supply the connection details for the database
os.environ["DBHOST"] = "<server-name>"
os.environ["DBNAME"] = "<database-name>"
os.environ["SSLMODE"] = "require"
if not USE_ENTRA_AUTH:
# If you're using a username and password, supply them here
os.environ["DBUSER"] = "<username>"
os.environ["DBPASSWORD"] = getpass.getpass("Database Password:")
Azure OpenAI-beágyazások beállítása
os.environ["AZURE_OPENAI_ENDPOINT"] = "<azure-openai-endpoint>"
os.environ["AZURE_OPENAI_API_KEY"] = getpass.getpass("Azure OpenAI API Key:")
AZURE_OPENAI_ENDPOINT = os.environ["AZURE_OPENAI_ENDPOINT"]
AZURE_OPENAI_API_KEY = os.environ["AZURE_OPENAI_API_KEY"]
from langchain_openai import AzureOpenAIEmbeddings
embeddings = AzureOpenAIEmbeddings(
model="text-embedding-3-small",
api_key=AZURE_OPENAI_API_KEY,
azure_endpoint=AZURE_OPENAI_ENDPOINT,
azure_deployment="text-embedding-3-small",
)
Inicializálás
Microsoft Entra-hitelesítés használata
Az alábbi szakaszok bemutatják, hogyan állíthatja be a LangChaint a Microsoft Entra-hitelesítés használatára. A LangChain Azure Postgres-csomag osztálya AzurePGConnectionPool a kódtár használatával DefaultAzureCredential lekéri az Azure Database for PostgreSQL szolgáltatás azure.identity jogkivonatait.
A kapcsolat átadható a connection LangChain vektortároló paraméterének AzurePGVectorStore .
Bejelentkezés az Azure-ba
Az Azure-ba való bejelentkezéshez győződjön meg arról, hogy telepítve van az Azure CLI . Futtassa a következő parancsot a terminálon:
az login
A bejelentkezés után a következő kód lekéri a tokent:
from langchain_azure_postgresql.common import (
BasicAuth,
AzurePGConnectionPool,
ConnectionInfo,
)
from langchain_azure_postgresql.langchain import AzurePGVectorStore
entra_connection_pool = AzurePGConnectionPool(
azure_conn_info=ConnectionInfo(
host=os.environ["DBHOST"],
dbname=os.environ["DBNAME"]
)
)
Jelszóhitelesítés használata
Ha nem Microsoft Entra-hitelesítést használ, az BasicAuth osztály engedélyezi a felhasználónév és a jelszó használatát:
basic_auth_connection_pool = AzurePGConnectionPool(
azure_conn_info=ConnectionInfo(
host=os.environ["DBHOST"],
dbname=os.environ["DBNAME"],
credentials=BasicAuth(
username=os.environ["DBUSER"],
password=os.environ["DBPASSWORD"],
)
)
)
A vektortároló létrehozása
from langchain_core.documents import Document
from langchain_azure_postgresql.langchain import AzurePGVectorStore
collection_name = "my_docs"
# The connection is either using Entra ID or Basic Auth
connection = entra_connection_pool if USE_ENTRA_AUTH else basic_auth_connection_pool
vector_store = AzurePGVectorStore(
embeddings=embeddings,
table_name=table_name,
connection=connection,
)
A vektortároló kezelése
Elemek hozzáadása a vektortárolóhoz
A dokumentumok azonosító szerinti hozzáadása felülírja az adott azonosítónak megfelelő meglévő dokumentumokat.
docs = [
Document(
page_content="there are cats in the pond",
metadata={"doc_id": 1, "location": "pond", "topic": "animals"},
),
Document(
page_content="ducks are also found in the pond",
metadata={"doc_id": 2, "location": "pond", "topic": "animals"},
),
Document(
page_content="fresh apples are available at the market",
metadata={"doc_id": 3, "location": "market", "topic": "food"},
),
Document(
page_content="the market also sells fresh oranges",
metadata={"doc_id": 4, "location": "market", "topic": "food"},
),
Document(
page_content="the new art exhibit is fascinating",
metadata={"doc_id": 5, "location": "museum", "topic": "art"},
),
Document(
page_content="a sculpture exhibit is also at the museum",
metadata={"doc_id": 6, "location": "museum", "topic": "art"},
),
Document(
page_content="a new coffee shop opened on Main Street",
metadata={"doc_id": 7, "location": "Main Street", "topic": "food"},
),
Document(
page_content="the book club meets at the library",
metadata={"doc_id": 8, "location": "library", "topic": "reading"},
),
Document(
page_content="the library hosts a weekly story time for kids",
metadata={"doc_id": 9, "location": "library", "topic": "reading"},
),
Document(
page_content="a cooking class for beginners is offered at the community center",
metadata={"doc_id": 10, "location": "community center", "topic": "classes"},
),
]
uuids = vector_store.add_documents(docs)
uuids
Elemek frissítése a vektortárolóban
updated_docs = [
Document(
page_content="Updated - cooking class for beginners is offered at the community center",
metadata={"doc_id": 10, "location": "community center", "topic": "classes"},
id=uuids[-1],
)
]
vector_store.add_documents(docs, ids=[uuids[-1]], on_conflict_update=True)
Elemek megtekintése a vektortárolóból
vector_store.get_by_ids([str(uuids[-1])])
Elemek törlése a vektortárolóból
vector_store.delete(ids=[uuids[-1]])
Lekérdezések a vektortárolóba
Miután létrehozta a vektortárolót, és hozzáadta a vonatkozó dokumentumokat, lekérdezheti a vektortárolót a láncban vagy az ügynökben.
Szűrési támogatás
A vektortároló olyan szűrőket támogat, amelyek a dokumentumok metaadatmezőire alkalmazhatók a FilterConditionOrFilterAndFilterLangChain Azure PostgreSQL-csomagban:
| Operátor | Jelentés/kategória |
|---|---|
= |
Egyenlőség (==) |
!= |
Egyenlőtlenség (!=) |
< |
Kevesebb, mint (<) |
<= |
Kisebb vagy egyenlő (<=) |
> |
Nagyobb, mint (>) |
>= |
Nagyobb vagy egyenlő (>=) |
in |
Speciális eset (in) |
not in |
Speciális eset (nincs benne) |
is null |
Speciális kisbetűs (null) |
is not null |
Speciális kisbetűs (nem null) |
between |
Speciálisan kezelve (között) |
not between |
Speciális eset (nem a kettő között) |
like |
Szöveg (tetszik) |
ilike |
Szöveg (nincs különbség kis- és nagybetűk között) |
AND |
Logikai (és) |
OR |
Logikai (vagy) |
Közvetlen lekérdezés
Az alábbiak szerint végezhet egyszerű hasonlósági keresést:
from langchain_azure_postgresql import FilterCondition, AndFilter
results = vector_store.similarity_search(
"kitty",
k=10,
filter=FilterCondition(
column="(metadata->>'doc_id')::int",
operator="in",
value=[1, 5, 2, 9],
),
)
for doc in results:
print(f"* {doc.page_content} [{doc.metadata}]")
* there are cats in the pond [{'doc_id': 1, 'topic': 'animals', 'location': 'pond'}]
* ducks are also found in the pond [{'doc_id': 2, 'topic': 'animals', 'location': 'pond'}]
* the new art exhibit is fascinating [{'doc_id': 5, 'topic': 'art', 'location': 'museum'}]
* the library hosts a weekly story time for kids [{'doc_id': 9, 'topic': 'reading', 'location': 'library'}]
Ha több mezőt tartalmazó szótárat ad meg, de operátorok nélkül, a felső szint logikai AND szűrőként lesz értelmezve:
results = vector_store.similarity_search(
"ducks",
k=10,
filter=AndFilter(
AND=[
FilterCondition(
column="(metadata->>'doc_id')::int",
operator="in",
value=[1, 5, 2, 9],
),
FilterCondition(
column="metadata->>'location'",
operator="in",
value=["pond", "market"],
),
]
),
)
for doc in results:
print(f"* {doc.page_content} [{doc.metadata}]")
* ducks are also found in the pond [{'topic': 'animals', 'doc_id': 2, 'location': 'pond'}]
* there are cats in the pond [{'topic': 'animals', 'doc_id': 1, 'location': 'pond'}]
Ha hasonlósági keresést szeretne végrehajtani, és megkapja a megfelelő pontszámokat, futtassa a következőt:
results = vector_store.similarity_search_with_score(query="cats", k=1)
for doc, score in results:
print(f"* [SIM={score:3f}] {doc.page_content} [{doc.metadata}]")
* [SIM=0.528338] there are cats in the pond [{'doc_id': 1, 'topic': 'animals', 'location': 'pond'}]
Ha a maximális marginális relevancia-keresést szeretné használni a vektortárolóban:
results = vector_store.max_marginal_relevance_search(
"query about cats",
k=10,
lambda_mult=0.5,
filter=FilterCondition(
column="(metadata->>'doc_id')::int",
operator="in",
value=[1, 2, 5, 9],
),
)
for doc in results:
print(f"* {doc.page_content} [{doc.metadata}]")
* there are cats in the pond [{'doc_id': 1, 'topic': 'animals', 'location': 'pond'}]
* ducks are also found in the pond [{'doc_id': 2, 'topic': 'animals', 'location': 'pond'}]
* the new art exhibit is fascinating [{'doc_id': 5, 'topic': 'art', 'location': 'museum'}]
* the library hosts a weekly story time for kids [{'doc_id': 9, 'topic': 'reading', 'location': 'library'}]
A vektortárolóban PGVector végrehajtható keresések teljes listájáért tekintse meg az API-hivatkozást.
Átalakítás visszakeresővé
A láncok egyszerűbb használata érdekében a vektortárolót egy lekérővé is átalakíthatja:
retriever = vector_store.as_retriever(search_type="mmr", search_kwargs={"k": 1})
retriever.invoke("kitty")
[Document(id='9fe8bc1c-9a8e-4f83-b546-9b64527aa79d', metadata={'doc_id': 1, 'topic': 'animals', 'location': 'pond'}, page_content='there are cats in the pond')]
Kapcsolódó tartalom
- LangChain AzurePGVectorStore referencia
- Azure Database for PostgreSQL-integrációk AI-alkalmazásokhoz
- AI-ügynökök az Azure Database for PostgreSQL-ben
- Vektoros beágyazások létrehozása az Azure OpenAI-val az Azure Database for PostgreSQL-ben
- Generatív AI az Azure Database for PostgreSQL-lel
- A pgvector engedélyezése és használata az Azure Database for PostgreSQL-ben