Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Azure Database for PostgreSQL kan naadloos worden geïntegreerd met toonaangevende indelingspakketten voor grote taalmodellen (LLM), zoals LangChain. Met deze integratie kunnen ontwikkelaars geavanceerde AI-mogelijkheden in hun toepassingen gebruiken. LangChain kan het beheer en het gebruik van LLM's, het insluiten van modellen en databases stroomlijnen, zodat generatieve AI-toepassingen gemakkelijker kunnen worden ontwikkeld.
In dit artikel leest u hoe u de geïntegreerde vectordatabase in Azure Database for PostgreSQL gebruikt voor het opslaan en beheren van documenten in verzamelingen met LangChain. U ziet ook hoe u indexen maakt en vectorzoekquery's uitvoert met behulp van algoritmen voor dichtstbijzijnde buren, zoals cosinusafstand, L2-afstand (Euclidische afstand) en binnenste product om documenten dicht bij de queryvectoren te vinden.
Vectorondersteuning
U kunt Azure Database for PostgreSQL gebruiken om miljoenen vector-insluitingen efficiënt op te slaan en op te vragen in PostgreSQL. De service kan u helpen bij het schalen van uw AI-gebruiksvoorbeelden van proof-of-concept tot productie. Het biedt deze voordelen:
- Biedt een vertrouwde SQL-interface voor het uitvoeren van query's op vector-insluitingen en relationele gegevens.
-
pgvectorVerbeteren met een snellere en nauwkeurigere gelijkeniszoekopdracht over meer dan 100 miljoen vectoren met behulp van het DiskANN-indexeringsalgoritme. - Vereenvoudigt bewerkingen door relationele metagegevens, vector-insluitingen en tijdreeksgegevens te integreren in één database.
- Maakt gebruik van de kracht van het robuuste PostgreSQL-ecosysteem en het Azure-cloudplatform voor hoogwaardige functies, waaronder replicatie en hoge beschikbaarheid.
Authenticatie
Azure Database for PostgreSQL ondersteunt verificatie op basis van wachtwoorden en Microsoft Entra (voorheen Azure Active Directory).
Met Microsoft Entra-verificatie kunt u Microsoft Entra ID gebruiken om te verifiëren bij uw PostgreSQL-server. Microsoft Entra ID elimineert de noodzaak om afzonderlijke gebruikersnamen en wachtwoorden voor uw databasegebruikers te beheren. Hiermee kunt u dezelfde beveiligingsmechanismen gebruiken die u voor andere Azure-services gebruikt.
In dit artikel kunt u beide verificatiemethoden gebruiken.
Configuratie
Azure Database for PostgreSQL maakt gebruik van de opensource-ondersteuning voor LangChain Postgres om verbinding te maken met Azure Database for PostgreSQL. Download eerst het partnerpakket:
%pip install -qU langchain-azure-postgresql
%pip install -qU langchain-openai
%pip install -qU azure-identity
Pgvector inschakelen in Azure Database for PostgreSQL
Zie Pgvector inschakelen en gebruiken in Azure Database for PostgreSQL.
Inloggegevens instellen
U moet uw Azure Database for PostgreSQL-verbindingsgegevens ophalen en toevoegen als omgevingsvariabelen.
Stel de USE_ENTRA_AUTH vlag in op True als u Microsoft Entra-verificatie wilt gebruiken. Als u Microsoft Entra-verificatie gebruikt, moet u de enige host- en databasenamen opgeven. Als u wachtwoordverificatie gebruikt, moet u ook de gebruikersnaam en het wachtwoord instellen.
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-insluitingen instellen
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",
)
Initialisatie
Microsoft Entra-verificatie gebruiken
In de volgende secties ziet u hoe u LangChain instelt voor het gebruik van Microsoft Entra-verificatie. De klasse AzurePGConnectionPool in het Pakket LangChain Azure Postgres haalt tokens op voor de Azure Database for PostgreSQL-service met behulp van DefaultAzureCredential de azure.identity bibliotheek.
De verbinding kan worden doorgegeven aan de connection parameter van het AzurePGVectorStore LangChain-vectorarchief.
Aanmelden bij Azure
Als u zich wilt aanmelden bij Azure, moet u ervoor zorgen dat de Azure CLI is geïnstalleerd. Voer de volgende opdracht uit in uw terminal:
az login
Nadat u zich hebt aangemeld, wordt met de volgende code het token opgehaald:
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"]
)
)
Wachtwoordverificatie gebruiken
Als u geen Microsoft Entra-verificatie gebruikt, staat de BasicAuth klasse het gebruik van gebruikersnaam en wachtwoord toe:
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"],
)
)
)
Het vectorarchief maken
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,
)
Beheer van de vectoropslag
Items toevoegen aan het vectorarchief
Als u documenten per id toevoegt, worden alle bestaande documenten overschreven die overeenkomen met die id.
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
Items in het vectorarchief bijwerken
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)
Items uit het vectorarchief bekijken
vector_store.get_by_ids([str(uuids[-1])])
Items verwijderen uit het vectorarchief
vector_store.delete(ids=[uuids[-1]])
Queries naar de vectorwinkel
Nadat u uw vectorwinkel hebt gemaakt en de relevante documenten hebt toegevoegd, kunt u een query uitvoeren op de vectorwinkel in uw chain of agent.
Ondersteuning voor filteren
Het vectorarchief ondersteunt een set filters die kunnen worden toegepast op de metagegevensvelden van de documenten via de FilterCondition, OrFilteren AndFilter in het LangChain Azure PostgreSQL-pakket :
| Operateur | Betekenis/categorie |
|---|---|
= |
Gelijkheid (==) |
!= |
Ongelijkheid (!=) |
< |
Kleiner dan (<) |
<= |
Kleiner dan of gelijk aan (<=) |
> |
Groter dan (>) |
>= |
Groter dan of gelijk aan (>=) |
in |
Speciaal behandeld (in) |
not in |
Speciale casus (niet in) |
is null |
Speciaal hoofdlettergebruik (is null) |
is not null |
Speciaal gecased (is niet null) |
between |
Speciaal geval behandeld (tussen) |
not between |
Speciaal gecased (niet tussen) |
like |
Tekst (zoals) |
ilike |
Tekst (hoofdletterongevoelig) |
AND |
Logisch (en) |
OR |
Logisch (of) |
Directe query
U kunt als volgt een eenvoudige overeenkomstenzoekopdracht uitvoeren:
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'}]
Als u een woordenlijst met meerdere velden opgeeft, maar geen operatoren, wordt het hoogste niveau geïnterpreteerd als een logisch AND filter:
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'}]
Als u een overeenkomstenzoekopdracht wilt uitvoeren en de bijbehorende scores wilt ontvangen, kunt u het volgende uitvoeren:
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'}]
Als u het maximum aantal marginale relevantiezoekopdrachten in uw vectorarchief wilt gebruiken:
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'}]
Raadpleeg de PGVector voor een volledige lijst met zoekopdrachten die u kunt uitvoeren in een vectorarchief.
Transformatie naar een retriever
U kunt het vectorarchief ook omzetten in een retriever voor eenvoudiger gebruik in uw ketens:
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')]
Verwante inhoud
- Naslaginformatie over LangChain AzurePGVectorStore
- Azure Database for PostgreSQL - integraties voor AI-toepassingen
- AI-agents in Azure Database for PostgreSQL
- Vector embeddings genereren met Azure OpenAI in Azure Database for PostgreSQL
- Generatieve AI met Azure Database for PostgreSQL
- Pgvector inschakelen en gebruiken in Azure Database for PostgreSQL