Integrating with LangChain
1. Installing LangChain Integration
| Package | Purpose |
|---|---|
| langchain-pinecone | PineconeVectorStore |
| langchain-openai | OpenAI embeddings/LLM |
2. Creating PineconeVectorStore
Example: Vector Store
from langchain_pinecone import PineconeVectorStore
from langchain_openai import OpenAIEmbeddings
emb = OpenAIEmbeddings(model="text-embedding-3-small")
vs = PineconeVectorStore(
index_name="docs", embedding=emb, namespace="kb",
)
3. Adding Documents
Example: Add Documents
from langchain_core.documents import Document
docs = [Document(page_content=t, metadata={"source": s})
for t, s in pairs]
vs.add_documents(docs)
4. Performing Similarity Search
Example: Search
docs = vs.similarity_search("how does retrieval work?", k=5)
for d in docs:
print(d.metadata, d.page_content[:120])
5. Using MMR Search
Example: MMR for Diversity
docs = vs.max_marginal_relevance_search(
"vector dbs", k=5, fetch_k=20, lambda_mult=0.5,
)
| Param | Effect |
|---|---|
k | Final result count |
fetch_k | Initial candidate pool |
lambda_mult | 0=max diversity, 1=max similarity |
6. Filtering with Metadata
Example: Filtered Search
docs = vs.similarity_search(
query, k=5,
filter={"source": {"$eq": "wiki"}, "language": "en"},
)
7. Implementing RAG Pipeline
Example: LCEL Chain
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")
retriever = vs.as_retriever(search_kwargs={"k": 5})
prompt = ChatPromptTemplate.from_template(
"Answer based on context.\n\n{context}\n\nQ: {question}")
chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt | llm
)
print(chain.invoke("What is RAG?").content)
8. Using as Retriever
| Mode | Method |
|---|---|
| Similarity | as_retriever(search_type="similarity") |
| MMR | search_type="mmr" |
| Threshold | search_type="similarity_score_threshold" |
9. Customizing Embedding Function
Example: HF Embeddings
from langchain_huggingface import HuggingFaceEmbeddings
emb = HuggingFaceEmbeddings(model_name="BAAI/bge-large-en-v1.5")
vs = PineconeVectorStore(index_name="docs", embedding=emb)
10. Optimizing Retrieval Performance
| Tip | Effect |
|---|---|
| Pre-init store once | Avoid per-request setup |
Batch add_documents | Internally batched, control via batch_size |
| Namespace per tenant | Smaller search space |