Een retrieval-functie bouwen
Een kernstap in de Retrieval Augmented Generation (RAG)-workflow is het ophalen van gegevens uit de database. In deze oefening ontwerp je een aangepaste functie retrieve() die dit cruciale proces uitvoert in de laatste oefening van de cursus.
Deze oefening maakt deel uit van de cursus
Vector-databases voor embeddings met Pinecone
Oefeninstructies
- Initialiseer de Pinecone-client met je API-sleutel (de OpenAI-client is beschikbaar als
client). - Definieer de functie
retrievemet vier parameters:query,top_k,namespaceenemb_model. - Embed de input
querymet het argumentemb_model. - Haal de
top_kvergelijkbare vectoren op ten opzichte vanquery_embmet metadata, waarbij je de meegegevennamespaceals argument specificeert.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# Initialize the Pinecone client
pc = Pinecone(api_key="____")
index = pc.Index('pinecone-datacamp')
# Define a retrieve function that takes four arguments: query, top_k, namespace, and emb_model
def retrieve(query, top_k, namespace, emb_model):
# Encode the input query using OpenAI
query_response = ____(
input=____,
model=____
)
query_emb = query_response.data[0].embedding
# Query the index using the query_emb
docs = index.query(vector=____, top_k=____, namespace=____, include_metadata=True)
retrieved_docs = []
sources = []
for doc in docs['matches']:
retrieved_docs.append(doc['metadata']['text'])
sources.append((doc['metadata']['title'], doc['metadata']['url']))
return retrieved_docs, sources
documents, sources = retrieve(
query="How to build next-level Q&A with OpenAI",
top_k=3,
namespace='youtube_rag_dataset',
emb_model="text-embedding-3-small"
)
print(documents)
print(sources)