Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Gli archivi vettoriali mantengono i dati e i relativi incorporamenti vettoriali in modo che le applicazioni possano trovare record in base alla somiglianza semantica. Nelle applicazioni Agent Framework è possibile usare archivi vettoriali per recuperare i dati di base per la generazione aumentata di recupero o per archiviare le informazioni che un agente può richiamare in un secondo momento.
Le astrazioni dell'archivio vettoriale forniscono operazioni comuni per raccolte e record, mantenendo la logica dell'applicazione separata dall'implementazione dell'archivio vettoriale specifico. È ad esempio possibile iniziare con un'implementazione locale e passare a un servizio gestito con modifiche minime.
Funzionamento delle integrazioni dell'archivio vettoriali
Un flusso di lavoro tipico dell'archivio vettoriale include questi passaggi:
- Definire un modello di dati che identifica la chiave del record, i campi dati e i campi vettoriali.
- Configurare un generatore di incorporamento se l'archivio vettoriale non genera incorporamenti.
- Connettersi a un archivio vettoriale e selezionare o creare una raccolta.
- Genera gli embedding e aggiorna o inserisci i record nella collezione.
- Eseguire ricerche nella raccolta con testo o vettore, a seconda delle funzionalità dell'implementazione.
- Trasmettere i risultati di ricerca rilevanti a un agente come contesto o esporre la ricerca come strumento per l'agente.
supporto per gli archivi vettoriali in .NET
Agent Framework usa le astrazioni autonome dell'ecosistema di intelligenza artificiale .NET:
-
Microsoft.Extensions.VectorDatafornisce API di archiviazione vettoriale, raccolta, record e ricerca comuni. -
Microsoft.Extensions.AIfornisce astrazioni,IEmbeddingGeneratorad esempio per la generazione di incorporamenti indipendentemente da un provider di modelli specifico.
Se un componente di Agent Framework accetta un archivio vettoriale, è possibile fornire un'implementazione compatibile Microsoft.Extensions.VectorData . Ogni implementazione del database viene distribuita separatamente dal pacchetto di astrazioni.
Astrazioni di base
| Astrazione | Finalità |
|---|---|
VectorStore |
Fornisce operazioni tra raccolte e crea istanze di raccolta tipizzata. |
VectorStoreCollection<TKey, TRecord> |
Crea o elimina una raccolta e aggiorna o inserisce, recupera o elimina i relativi record. |
IVectorSearchable<TRecord> |
Cerca i record tramite vettore o testo quando è disponibile un generatore di incorporamento o una capacità di incorporamento lato database. |
Implementazioni dell'archivio vettoriale disponibili
Le implementazioni seguenti usano le astrazioni comuni .NET dell'archivio vettoriale. Esaminare la documentazione di ogni implementazione per le versioni dei pacchetti, i tipi di dati supportati e le limitazioni specifiche del servizio.
| Implementation | Availability | Usa un SDK di database ufficialmente supportato | Gestore o fornitore |
|---|---|---|---|
| Ricerca di intelligenza artificiale di Azure | Disponibile | Sì | Microsoft |
| Azure Cosmos DB per MongoDB vCore | Disponibile | Sì | Microsoft |
| Azure Cosmos DB compatibile con NoSQL | Disponibile | Sì | Microsoft |
| Couchbase | Disponibile | Sì | Couchbase |
| Elasticsearch | Disponibile | Sì | Elastic |
| Chroma | Pianificato | Non applicabile | Non applicabile |
| in-memory | Disponibile | Non applicabile | Microsoft |
| Milvus | Pianificato | Non applicabile | Non applicabile |
| MongoDB | Disponibile | Sì | Microsoft |
| Neon Serverless Postgres | Usare l'implementazione di Postgres | Sì | Microsoft |
| Oracle | Disponibile | Sì | Oracle |
| Pinecone | Disponibile | No | Microsoft |
| Postgres | Disponibile | Sì | Microsoft |
| Qdrant | Disponibile | Sì | Microsoft |
| Redis | Disponibile | Sì | Microsoft |
| SQL Server | Disponibile | Sì | Microsoft |
| SQLite | Disponibile | Sì | Microsoft |
| Volatile in memoria | Obsoleto; utilizzare l'implementazione in memoria | Non applicabile | Microsoft |
| Weaviate | Disponibile | Sì | Microsoft |
Importante
Le implementazioni dell'archivio di vettori provengono da più gestori. Valutare la qualità, le licenze, i criteri di supporto e la compatibilità delle versioni di ogni implementazione prima di usarla. Alcune implementazioni usano SDK di database che il provider di database non supporta ufficialmente.
Get started
- Aggiungi il Pacchetto
Microsoft.Extensions.VectorData.Abstractionse pacchetto per l'implementazione dell'archivio di vettori scelto. - Definire un tipo di record e identificarne la chiave, i dati e le proprietà vettoriali.
- Configurare un'
IEmbeddingGeneratorse l'implementazione richiede embedding generati dall'applicazione. - Creare l'elemento
VectorStoredell'implementazione e quindi ottenere unVectorStoreCollection<TKey, TRecord>tipizzato. - Assicurati che la raccolta esista, esegui l'upsert dei record e chiama
SearchAsynccon testo o un vettore.
Per un'introduzione completa ai modelli di dati, all'inserimento, agli incorporamenti e alla ricerca, vedere Database vettoriali per le app di intelligenza artificiale .NET.
supporto dell'archivio vettoriale Python
Agent Framework offre contratti sperimentali, nativi Python per modelli di archivio vettoriale, operazioni di raccolta, factory di archiviazione, ricerca ibrida di vettori e parole chiave e strumenti di ricerca degli agenti. I contratti fanno parte di agent-framework-core e non richiedono Pydantic, NumPy, pandas o Kernel semantico.
Avvertimento
Le API native Python vector store sono sperimentali. Potrebbero verificarsi modifiche di rilievo limitate prima che diventino stabili.
Astrazioni di base
| Astrazione | Finalità |
|---|---|
VectorStoreField e VectorStoreCollectionDefinition |
Descrivere i campi chiave, dati e vettore, inclusi nomi di archiviazione, indici, dimensioni e funzioni di distanza. |
@vectorstoremodel e register_vectorstoremodel() |
Registrare classi di dati, modelli Pydantic, struct msgspec, classi semplici o tipi di modello di proprietà esterna. |
BaseVectorCollection e SupportsVectorUpsert |
Definire l'upsert batch, ottenere ed eliminare il ciclo di vita della raccolta, la conversione dei record e la generazione facoltativa di incorporamento. |
BaseVectorStore |
Definisce un archivio che elenca le raccolte e crea i client di raccolta tipizzati. |
BaseVectorSearch e SupportsVectorSearch |
Definire la ricerca vettoriale e la ricerca ibrida con parole chiave, il paging, i filtri, le soglie di punteggio e i risultati della ricerca. |
Filter, FilterGroup e Param |
Definire filtri portabili e solo dati, inclusi i parametri di filtro forniti dal modello per gli strumenti di ricerca. |
InMemoryStore e InMemoryCollection |
Fornire le operazioni CRUD locali del processo e la ricerca con scansione lineare per lo sviluppo e i test. |
GenerateVectors |
Determina se gli upsert generano tutti i campi vettoriali, nessuno o solo i campi vettoriali selezionati. |
create_vector_search_tool(), create_upsert_tool(), create_get_tool()e create_delete_tool() |
Esporre le operazioni CRUD di ricerca vettoriale e raccolta come strumenti per le funzioni di Agent Framework. |
VectorStoreHistoryProvider |
Archivia la cronologia delle conversazioni con ambito definito in una raccolta gestita dal provider, con compattazione facoltativa e ricerca nell’intera cronologia. |
VectorCollectionContextProvider |
Aggiunge strumenti CRUD configurabili e di ricerca per una raccolta di proprietà del chiamante. |
L'esempio seguente definisce i record dell'archivio vettoriale annotando i relativi campi chiave, dati e vettore:
# 5. Dataclasses use the default registered codec.
@vectorstoremodel(collection_name="hotels")
@dataclass
class Hotel:
hotel_id: Annotated[str, VectorStoreField("key")]
name: Annotated[str, VectorStoreField("data", is_indexed=True)]
description: Annotated[
str | list[float] | None,
VectorStoreField("vector", dimensions=3, distance_function="cosine_similarity"),
] = None
# 6. Pydantic models provide validation with additional round-trip cost.
@vectorstoremodel(collection_name="products")
class Product(BaseModel):
product_id: Annotated[str, VectorStoreField("key")]
name: Annotated[str, VectorStoreField("data", is_full_text_indexed=True)]
vector: Annotated[list[float] | None, VectorStoreField("vector", dimensions=3)] = None
Usare VectorStoreCollectionDefinition direttamente per i dizionari. Per i tipi di modello di proprietà di un altro pacchetto, usare register_vectorstoremodel() con una definizione esplicita e un codificatore e decodificatore facoltativo. I valori vettoriali simili a matrice vengono serializzati tramite tolist() senza aggiungere una dipendenza NumPy.
Agent Framework include un'implementazione in memoria per lo sviluppo e i test. Archivia i record nel processo corrente e usa un'analisi lineare, quindi usa un connettore di database per i carichi di lavoro di produzione.
L'esempio seguente archivia i vettori pre-calcolati e li cerca con un albero di filtro portabile:
import asyncio
from dataclasses import dataclass
from typing import Annotated
from agent_framework import Filter, FilterGroup, InMemoryCollection, VectorStoreField, vectorstoremodel
@vectorstoremodel(collection_name="hotels")
@dataclass
class Hotel:
hotel_id: Annotated[str, VectorStoreField("key")]
name: Annotated[str, VectorStoreField("data")]
city: Annotated[str, VectorStoreField("data")]
rating: Annotated[float, VectorStoreField("data")]
amenities: Annotated[list[str], VectorStoreField("data")]
vector: Annotated[
list[float] | None,
VectorStoreField("vector", dimensions=2, distance_function="cosine_similarity"),
] = None
async def main() -> None:
"""Store precomputed vectors and search them with direct filters."""
collection: InMemoryCollection[str, Hotel] = InMemoryCollection(Hotel)
await collection.ensure_collection_exists()
# 1. The sample already has vectors, so generation is disabled explicitly.
await collection.upsert(
[
Hotel("hotel-1", "Harbor View", "Lisbon", 4.8, ["wifi", "pool"], [1.0, 0.1]),
Hotel("hotel-2", "Old Town Rooms", "Lisbon", 4.1, ["wifi"], [0.8, 0.2]),
Hotel("hotel-3", "City Center", "Seattle", 4.7, ["wifi", "gym"], [0.1, 1.0]),
],
generate_vectors=False,
)
# 2. Filter values are ordinary data. No Python source is parsed or executed.
search_filter = FilterGroup(
"and",
(
Filter("city", "eq", "Lisbon"),
Filter("rating", "between", (4.5, 5.0)),
Filter("amenities", "contains", "pool"),
),
)
results = await collection.search(
vector=[1.0, 0.0],
filter=search_filter,
top=5,
)
# 3. Search results are consumed asynchronously.
async for result in results:
print(f"{result['record'].name}: {result['score']:.3f}")
Usare Param quando il modello deve fornire un valore di filtro. Il suo tipo Python, la descrizione e i vincoli diventano parte dello schema JSON dello strumento di ricerca:
# 2. Param values become optional model-visible filter arguments.
# When the allowed values are known, use Literal so the tool schema exposes
# them as an enum.
category = Param(
"category",
Literal["Boutique", "Budget", "Extended-Stay", "Luxury", "Resort and Spa", "Suite"],
description="Only return hotels in this category.",
)
min_rating = Param(
"min_rating",
float,
description="The minimum guest rating.",
minimum=0,
maximum=5,
)
tool = create_vector_search_tool(
collection,
description="Search the hotel dataset, optionally filtering by category and minimum rating.",
filter=FilterGroup(
"and",
(
Filter("category", "eq", category),
Filter("rating", "gte", min_rating),
),
),
result_mapper=lambda result: (
f"(hotel_id: {result['record'].hotel_id}) {result['record'].hotel_name} "
f"(rating {result['record'].rating}) - {result['record'].description}. "
f"Address: {result['record'].address.city}, {result['record'].address.country}."
),
)
Usare una raccolta vettoriale con un agente
Usare VectorCollectionContextProvider quando l'applicazione è proprietaria della raccolta e del modello di dati. Il provider aggiunge strumenti CRUD e di ricerca generati. Upsert ed eliminazione richiedono l'approvazione per impostazione predefinita, mentre get e ricerca no.
Passa scope_filter per raggruppare i record per i tool generati, ma non considerare il filtro come un confine di autorizzazione o una garanzia di atomicità del backend. Gli strumenti di ricerca trasmessi tramite additional_search_tools mantengono i propri filtri, quindi applica un filtro equivalente a ogni strumento personalizzato quando si condivide una raccolta.
collection: InMemoryCollection[str, ProjectNote] = InMemoryCollection(
ProjectNote,
embedding_generator=OpenAIEmbeddingClient(
model="text-embedding-3-small",
),
)
await collection.ensure_collection_exists()
# Omitted mapping entries keep their safe defaults. This sample disables
# approval for upsert so the scripted interaction can run unattended;
# delete still requires approval, while get and search remain read-only.
collection_context = VectorCollectionContextProvider(
collection,
# This process-local collection contains records for only this sample.
scope_filter=None,
approval_mode={"upsert": "never_require"},
)
async with Agent(
client=OpenAIChatClient(model="gpt-5.4-nano"),
name="ProjectNotesAssistant",
instructions="Use the collection tools to manage project notes. Do not invent stored notes.",
context_providers=[collection_context],
) as agent:
Archiviare la cronologia delle conversazioni in un archivio vettoriale
Usare VectorStoreHistoryProvider quando il provider deve possedere lo schema di raccolta e caricare e salvare automaticamente i messaggi di Agent Framework. Gli identificatori dell'applicazione, del tenant, dell'agente, dell'origine e della sessione evitano sovrapposizioni accidentali, ma la tua applicazione deve comunque autorizzare gli accessi e usare credenziali dell'archivio o namespace con ambito appropriato.
Quando si configurano gli incorporamenti, specificare un nome di raccolta esplicito e le dimensioni di incorporamento. La compattazione riduce solo la cronologia caricata nel contesto del modello. Se si attiva lo strumento di ricerca, la ricerca viene eseguita nell'intera trascrizione inclusa nell'ambito.
history = VectorStoreHistoryProvider(
InMemoryStore(),
application_id="release-planning",
tenant_id="contoso",
agent_id="release-assistant",
collection_name="release_planning_history_text_embedding_3_small",
contents_format="json",
embedding_generator=OpenAIEmbeddingClient(
model="text-embedding-3-small",
),
embedding_options={
"dimensions": 1536,
"encoding_format": "float",
},
compaction_strategy=SlidingWindowStrategy(
keep_last_groups=2,
preserve_system=True,
),
include_search_tool=True,
)
# 2. Only the compacted projection is loaded into the model context. The
# provider-owned search tool can still retrieve older scoped messages.
async with Agent(
client=OpenAIChatClient(model="gpt-5.4-nano"),
name="ReleaseAssistant",
instructions=(
"Help with release planning. Use the history search tool when an "
"older detail is not present in the loaded conversation."
),
context_providers=[history],
) as agent:
Implementazioni di Native Agent Framework
Le implementazioni seguenti usano i contratti native di Agent Framework. Alcuni sono disponibili anche come connettori Kernel semantico separati, ma le due famiglie di connettori non sono intercambiabili.
| Implementation | Pacchetto e ciclo di vita di Agent Framework | Connettore separato di Kernel semantico | Modalità di ricerca | Limitazioni principali |
|---|---|---|---|---|
| In memoria |
agent-framework-core; Pacchetto rilasciato con API vettoriali sperimentali |
Disponibile | Vettore denso con filtri portatili | Analisi lineare locale del processo per lo sviluppo e i test, non per un database di produzione. |
| Ricerca di intelligenza artificiale di Azure |
agent-framework-azure-ai-search; pacchetto beta con API vettoriali sperimentali |
Disponibile | Vettore denso e ibrido basato su parole chiave | Un campo vettore denso di primo livello per ogni query. Alcune soglie, controlli ibridi del richiamo del testo, un post-filtro rigoroso e le autorizzazioni richiedono un SDK/API di anteprima compatibile e allow_preview=True. |
| Azure Cosmos DB per il NoSQL |
agent-framework-azure-cosmos; pacchetto beta con API vettoriali sperimentali |
Disponibile | Vettore denso con filtri portatili | Le chiavi devono essere archiviate come ide i contenitori usano la chiave di /id partizione. Le parole chiave e la ricerca ibrida non sono supportate e la ricerca euclidea non supporta le soglie di punteggio. |
| Azure DocumentDB |
agent-framework-azure-documentdb; pacchetto alfa |
Non disponibile | Vettore denso con filtri di metadati portabili | Le chiavi devono essere stringhe o numeri interi. Gli ObjectId generati, la ricerca ibrida e full-text e i percorsi di filtro annidati non sono supportati. |
| MongoDB |
agent-framework-mongodb; pacchetto alfa |
Disponibile | Vettore denso approssimativo o esatto con filtri portabili | Richiede PyMongo 4.13.2+ e un'implementazione con MongoDB Vector Search. Le parole chiave e la ricerca ibrida, i percorsi di filtro annidati, la generazione di incorporamento lato provider e la migrazione automatica dello schema non sono supportati. |
| PostgreSQL con pgvector |
agent-framework-postgres; pacchetto alfa |
Disponibile | Vettore denso esatto, HNSW e IVFFlat | Richiede PostgreSQL 13+, pgvector 0.8.0+, uno schema esistente e l'estensione abilitata. La parola chiave e la ricerca ibrida non sono supportate. |
| Qdrant |
agent-framework-qdrant; pacchetto alfa |
Disponibile | Vettore denso con filtri portabili lato server | La modalità server richiede Qdrant 1.16.2+. Le chiavi devono essere numeri interi a 64 bit senza segno o UUID. Le parole chiave e la ricerca ibrida non sono supportate e i filtri non sono disponibili in modalità SDK locale. |
| Redis |
agent-framework-redis; pacchetto beta con API vettoriali sperimentali |
Disponibile | Vettore denso su record HASH o JSON | Richiede Redis 8.0.3+ con Ricerca; Anche i record JSON richiedono RedisJSON. Il cluster Redis, la ricerca di parole chiave e la ricerca ibrida non sono supportati. |
Installare un pacchetto del connettore in versione preliminare per il database in uso:
pip install agent-framework-azure-ai-search --pre
pip install agent-framework-azure-cosmos --pre
pip install agent-framework-azure-documentdb --pre
pip install agent-framework-mongodb --pre
pip install agent-framework-postgres --pre
pip install agent-framework-qdrant --pre
pip install agent-framework-redis --pre
Ogni connettore implementa il modello comune, la raccolta, CRUD, il filtro e i contratti di ricerca. Le funzionalità e le restrizioni specifiche del database sono ancora valide. Per esempi completi, vedere gli esempi di Azure AI Search, MongoDB, Postgres, Qdrant e Redis.
Implementazioni esclusivamente basate su Kernel semantico
Le applicazioni possono continuare a usare direttamente gli archivi vettoriali Python di Kernel semantico. Queste implementazioni usano i contratti di archiviazione vettoriale Kernel semantico separati anziché i contratti di Agent Framework nativi. Le implementazioni seguenti non hanno attualmente un connettore nativo di Agent Framework:
| Implementation | Availability | Usa un SDK di database ufficialmente supportato | Gestore o fornitore |
|---|---|---|---|
| Azure Cosmos DB per MongoDB vCore | Disponibile | Sì | Microsoft Kernel semantico progetto |
| Chroma | Disponibile | Sì | Microsoft Kernel semantico progetto |
| Elasticsearch | Pianificato | Non applicabile | Non applicabile |
| Faiss | Disponibile | Sì | Microsoft Kernel semantico progetto |
| Neon Serverless Postgres | Usare l'implementazione di Postgres | Sì | Microsoft Kernel semantico progetto |
| Oracle | Disponibile | Sì | Oracle |
| Pinecone | Disponibile | Sì | Microsoft Kernel semantico progetto |
| SQL Server | Disponibile | pyodbc |
Microsoft Kernel semantico progetto |
| SQLite | Pianificato | Non applicabile | Microsoft Kernel semantico progetto |
| Weaviate | Disponibile | Sì | Microsoft Kernel semantico progetto |
Importante
Le implementazioni dell'archivio di vettori provengono da più gestori. Valutare la qualità, le licenze, i criteri di supporto e la compatibilità delle versioni di ogni implementazione prima di usarla.
Usare un'implementazione basata esclusivamente su Kernel semantico
- Installare
semantic-kernele le dipendenze richieste dall'implementazione scelta. - Definire un modello con l'elemento
@vectorstoremodelDecorator e identificarne la chiave, i dati e i campi vettoriali. - Crea una raccolta specifica per l'implementazione per quel modello.
- Assicurati che la raccolta esista, quindi aggiorna o inserisci i record.
- Usare le API di ricerca della raccolta per recuperare i record per l'applicazione.
Per l'installazione dell'implementazione e esempi completi, vedere Kernel semantico Vector Stores.
Supporto dell'archivio di vettori Go
L'integrazione con l'archivio vettoriale non è ancora disponibile in Agent Framework for Go. Vedere il repository di Agent Framework Go per lo stato più aggiornato.
Scenari correlati di Agent Framework
- Aggiungere RAG a un agente.
- Aggiungere la memoria della cronologia delle chat semantiche.
- Scegliere un'integrazione del provider di contesto.