====== Pinecone Vector database ====== <= [[start|Terug naar start]]\\ <- -- [[projecten|Terug naar A3Dbot Start]]\\ [[https://app.pinecone.io/|Pinecone]] is een vector database die speciaal is ontworpen voor machine learning toepassingen. In de wereld van machine learning worden vector databases gebruikt om grote hoeveelheden high-dimensional data efficiƫnt op te slaan en te doorzoeken. Met Pinecone kunnen ontwikkelaars en data scientists gemakkelijker werken aan de bouw van schaalbare en betrouwbare machine learning systemen. Het biedt een infrastructuur voor het opslaan en opvragen van vector representaties van data, wat cruciaal is voor vele machine learning tasks. Door de inzet van Pinecone kunnen bedrijven sneller en met minder moeite waardevolle inzichten verkrijgen uit hun data, en zo betere producten en diensten ontwikkelen. **[[https://docs.pinecone.io/docs/new-api|Pinecone neiuwe API]]** ---- [[https://app.pinecone.io/|Pinecone Home]]\\ [[https://docs.pinecone.io/docs/quickstart|Pinecone Quickstart]]\\ **[[https://www.youtube.com/watch?v=iQnMADoFaWQ&t=548s|YouTube: Langchain + ChatGPT + Pinecone: A Question Answering Streamlit App]]**\\ [[https://python.langchain.com/docs/integrations/retrievers/self_query/pinecone|https://python.langchain.com/docs/integrations/retrievers/self_query/pinecone]] ---- ===== Gebruikte instellingen ===== -> dimentions = 1536\\ -> metric = "cosine"\\ -> Model: OpenAI/text-embedding-ada-002 //(instellen bij "set=up by Model)//" **[[https://python.langchain.com/docs/integrations/vectorstores/pinecone|Pinecone en LangChain Docs]]** ---- ===== Data Opdelen in Chunks ===== **[[https://www.youtube.com/watch?v=n0uPzvGTFI0|Opdelen van tekst in Chunks : LangChain: How to Properly Split your Chunks]] :!:**\\ [[https://medium.com/@plbiojout/knowledge-based-agent-deployment-with-langchain-pinecone-and-phospho-bf8dffd1026d|Knowledge-Based Agent Deployment with Langchain, Pinecone and Phospho]] ==== Opdelen van .txt bestanden ==== Ik heb tekstbestanden gegenereerd met blokken tekst gescheiden door een dubbele line break\\ Deze tekst blokken moeten als documenten naar een Pinecone database\\ bestanden worden opgesplitst in //(ongelijk qua aantal leestekens)// documenten\\ Ik gebruik de volgende code: import os import pinecone from langchain.vectorstores import Pinecone from langchain.embeddings.openai import OpenAIEmbeddings from langchain.chains import RetrievalQA from langchain.chat_models import ChatOpenAI from langchain.prompts import PromptTemplate class Document: def __init__(self, text, metadata=None): # doc_part = Document("Dit is een voorbeeld.", metadata={"auteur": "Jan Jansen", "datum": "2024-02-10"}) self.page_content = text self.metadata = metadata if metadata is not None else {} class A3DEmbedding: def __init__(self, a3dcon, a3dmod): self.a3dcon = a3dcon self.a3dmod = a3dmod # MAIN ======================================================================= # START EMBEDDINGS ============================ def start_embeddings(self): doc_db = self.embedding_db() print(doc_db) self.a3dcon.embeddings_done("> Embeddings loaded in Pinecone index") # WORKERS =================================================================== # Embeddings ======================================= # Embeddings naar Pinecone index / database def embedding_db(self): embeddings = OpenAIEmbeddings() pinecone.init( api_key = self.a3dmod.pinecone_api_key, environment = self.a3dmod.pinecone_environment ) docs_split = self.load_embeddings_from_dir() doc_db = Pinecone.from_documents( docs_split, embeddings, index_name=self.a3dmod.pinecone_index_name ) return doc_db # Load embeddings content (from .txt files) from directory def load_embeddings_from_dir(self): directory = './a3d/files/txt/' documents = [] # Deze lijst zal instances van de Document klasse bevatten # Loop door alle bestanden in de directory for filename in os.listdir(directory): if filename.endswith('.txt'): file_path = os.path.join(directory, filename) with open(file_path, 'r', encoding='utf-8') as file: content = file.read() # Splits het document op basis van '\n\n' parts = content.split('\n\n') for part in parts: documents.append(Document(part)) print(f"Aantal gesplitste documenten: {len(documents)}") return documents ---- ===== Pinecone en Langchain v0.1.0 ===== [[https://www.reddit.com/r/LangChain/comments/199mklo/langchain_011_is_not_working_with_pineconeclient/?rdt=45329|Langchain 0.1.1 is not working with pinecone-client 3.0.0]]