mirror of
https://github.com/hwchase17/langchain
synced 2024-11-18 09:25:54 +00:00
57 lines
1.5 KiB
Python
57 lines
1.5 KiB
Python
import os
|
|
|
|
from langchain.chat_models import ChatOpenAI
|
|
from langchain.embeddings import OpenAIEmbeddings
|
|
from langchain.prompts import ChatPromptTemplate
|
|
from langchain.pydantic_v1 import BaseModel
|
|
from langchain.schema.output_parser import StrOutputParser
|
|
from langchain.schema.runnable import RunnableParallel, RunnablePassthrough
|
|
from langchain.vectorstores import MongoDBAtlasVectorSearch
|
|
from pymongo import MongoClient
|
|
|
|
# Set DB
|
|
if os.environ.get("MONGO_URI", None) is None:
|
|
raise Exception("Missing `MONGO_URI` environment variable.")
|
|
MONGO_URI = os.environ["MONGO_URI"]
|
|
|
|
DB_NAME = "langchain-test-2"
|
|
COLLECTION_NAME = "test"
|
|
ATLAS_VECTOR_SEARCH_INDEX_NAME = "default"
|
|
|
|
client = MongoClient(MONGO_URI)
|
|
db = client[DB_NAME]
|
|
MONGODB_COLLECTION = db[COLLECTION_NAME]
|
|
|
|
# Read from MongoDB Atlas Vector Search
|
|
vectorstore = MongoDBAtlasVectorSearch.from_connection_string(
|
|
MONGO_URI,
|
|
DB_NAME + "." + COLLECTION_NAME,
|
|
OpenAIEmbeddings(disallowed_special=()),
|
|
index_name=ATLAS_VECTOR_SEARCH_INDEX_NAME,
|
|
)
|
|
retriever = vectorstore.as_retriever()
|
|
|
|
# RAG prompt
|
|
template = """Answer the question based only on the following context:
|
|
{context}
|
|
Question: {question}
|
|
"""
|
|
prompt = ChatPromptTemplate.from_template(template)
|
|
|
|
# RAG
|
|
model = ChatOpenAI()
|
|
chain = (
|
|
RunnableParallel({"context": retriever, "question": RunnablePassthrough()})
|
|
| prompt
|
|
| model
|
|
| StrOutputParser()
|
|
)
|
|
|
|
|
|
# Add typing for input
|
|
class Question(BaseModel):
|
|
__root__: str
|
|
|
|
|
|
chain = chain.with_types(input_type=Question)
|