mirror of
https://github.com/hwchase17/langchain.git
synced 2025-09-05 13:06:03 +00:00
51
templates/neo4j-advanced-rag/neo4j_advanced_rag/chain.py
Normal file
51
templates/neo4j-advanced-rag/neo4j_advanced_rag/chain.py
Normal file
@@ -0,0 +1,51 @@
|
||||
from operator import itemgetter
|
||||
|
||||
from langchain.chat_models import ChatOpenAI
|
||||
from langchain.prompts import ChatPromptTemplate
|
||||
from langchain.pydantic_v1 import BaseModel
|
||||
from langchain.schema.output_parser import StrOutputParser
|
||||
from langchain.schema.runnable import ConfigurableField, RunnableParallel
|
||||
|
||||
from neo4j_advanced_rag.retrievers import (
|
||||
hypothetic_question_vectorstore,
|
||||
parent_vectorstore,
|
||||
summary_vectorstore,
|
||||
typical_rag,
|
||||
)
|
||||
|
||||
template = """Answer the question based only on the following context:
|
||||
{context}
|
||||
|
||||
Question: {question}
|
||||
"""
|
||||
prompt = ChatPromptTemplate.from_template(template)
|
||||
|
||||
model = ChatOpenAI()
|
||||
|
||||
retriever = typical_rag.as_retriever().configurable_alternatives(
|
||||
ConfigurableField(id="strategy"),
|
||||
default_key="typical_rag",
|
||||
parent_strategy=parent_vectorstore.as_retriever(),
|
||||
hypothetical_questions=hypothetic_question_vectorstore.as_retriever(),
|
||||
summary_strategy=summary_vectorstore.as_retriever(),
|
||||
)
|
||||
|
||||
chain = (
|
||||
RunnableParallel(
|
||||
{
|
||||
"context": itemgetter("question") | retriever,
|
||||
"question": itemgetter("question"),
|
||||
}
|
||||
)
|
||||
| prompt
|
||||
| model
|
||||
| StrOutputParser()
|
||||
)
|
||||
|
||||
|
||||
# Add typing for input
|
||||
class Question(BaseModel):
|
||||
question: str
|
||||
|
||||
|
||||
chain = chain.with_types(input_type=Question)
|
Reference in New Issue
Block a user