Pinecone और OpenAI के साथ RAG चैटबॉट

Pinecone के साथ AI Applications बनाना

James Chapman

Curriculum Manager, DataCamp

Retrieval Augmented Generation (RAG)

  1. उपयोगकर्ता क्वेरी एम्बेड करें
  2. समान डॉक्यूमेंट्स रिट्रीव करें
  3. डॉक्यूमेंट्स prompt में जोड़ें

retrieval augmented generation

Pinecone के साथ AI Applications बनाना

Pinecone और OpenAI को इनिशियलाइज़ करें

from openai import OpenAI
from pinecone import Pinecone
import pandas as pd
from uuid import uuid4


client = OpenAI(api_key="OPENAI_API_KEY") pc = Pinecone(api_key="PINECONE_API_KEY")
index = pc.Index("semantic-search-datacamp")
Pinecone के साथ AI Applications बनाना

YouTube ट्रांसक्रिप्ट्स

youtube_df = pd.read_csv('youtube_rag_data.csv')
| id | blob | channel_id | end | published | start | text | title | url |
|----|------|------------|-----|-----------|-------|------|-------|-----|
|int | dict | str        | int | datetime  | int   | str  | str   | str |
Pinecone के साथ AI Applications बनाना

डॉक्यूमेंट्स इनजेस्ट करना

batch_limit = 100


for batch in np.array_split(youtube_df, len(youtube_df) / batch_limit):
metadatas = [{"text_id": row['id'], "text": row['text'], "title": row['title'], "url": row['url'], "published": row['published']} for _, row in batch.iterrows()]
texts = batch['text'].tolist()
ids = [str(uuid4()) for _ in range(len(texts))]
response = client.embeddings.create(input=texts, model="text-embedding-3-small") embeds = [np.array(x.embedding) for x in response.data]
index.upsert(vectors=zip(ids, embeds, metadatas), namespace='youtube_rag_dataset')
Pinecone के साथ AI Applications बनाना

रिट्रीवल फंक्शन

def retrieve(query, top_k, namespace, emb_model):

query_response = client.embeddings.create(input=query, model=emb_model) query_emb = query_response.data[0].embedding
retrieved_docs = [] sources = [] docs = index.query(vector=query_emb, top_k=top_k, namespace='youtube_rag_dataset', include_metadata=True)
for doc in docs['matches']: retrieved_docs.append(doc['metadata']['text']) sources.append((doc['metadata']['title'], doc['metadata']['url']))
return retrieved_docs, sources
Pinecone के साथ AI Applications बनाना

रिट्रीवल आउटपुट

query = "How to build next-level Q&A with OpenAI"
documents, sources = retrieve(query, top_k=3, namespace='youtube_rag_dataset',
                              emb_model="text-embedding-3-small")
Document: To use for Open Domain Question Answering. We're going to start...
Source: How to build a Q&A AI in Python [...], https://youtu.be/w1dMEWm7jBc

Document: Over here we have Google and we can ask Google questions...
Source: How to build next-level Q&A with OpenAI, https://youtu.be/coaaSxys5so

Document: We need vector database to enhance the quality of Q&A systems...
Source: How to Build Custom Q&A Transfo [...], https://youtu.be/ZIRmXKHp0-c
Pinecone के साथ AI Applications बनाना

कॉन्टेक्स्ट के साथ प्रॉम्प्ट बिल्डर फंक्शन

def prompt_with_context_builder(query, docs):
    delim = '\n\n---\n\n'
    prompt_start = 'Answer the question based on the context below.\n\nContext:\n'
    prompt_end = f'\n\nQuestion: {query}\nAnswer:'

    prompt = prompt_start + delim.join(docs) + prompt_end
    return prompt
Pinecone के साथ AI Applications बनाना

कॉन्टेक्स्ट प्रॉम्प्ट का आउटपुट

query = "How to build next-level Q&A with OpenAI"
context_prompt = prompt_with_context_builder(query, documents)

The output of the prompt_with_context_builder function

Pinecone के साथ AI Applications बनाना

प्रश्न-उत्तर फंक्शन

def question_answering(prompt, sources, chat_model):

sys_prompt = "You are a helpful assistant that always answers questions."
res = client.chat.completions.create( model=chat_model, messages=[{"role": "system", "content": sys_prompt}, {"role": "user", "content": prompt} ], temperature=0)
answer = res.choices[0].message.content.strip() answer += "\n\nSources:" for source in sources: answer += "\n" + source[0] + ": " + source[1] return answer
Pinecone के साथ AI Applications बनाना

प्रश्न-उत्तर आउटपुट

query = "How to build next-level Q&A with OpenAI"
answer = question_answering(prompt_with_context, sources,
                            chat_model='gpt-4o-mini')

The output of the question_answering function

Pinecone के साथ AI Applications बनाना

सब कुछ साथ में जोड़ना

query = "How to build next-level Q&A with OpenAI"
documents, sources = retrieve(query, top_k=3, 
                              namespace='youtube_rag_dataset', 
                              emb_model="text-embedding-3-small")
prompt_with_context = prompt_with_context_builder(query, documents)
answer = question_answering(prompt_with_context, sources,
                            chat_model='gpt-4o-mini')
Pinecone के साथ AI Applications बनाना

अभ्यास करते हैं!

Pinecone के साथ AI Applications बनाना

Preparing Video For Download...