참고소스 수정본

This commit is contained in:
LASTA_DEV01\lasta
2026-05-12 19:40:31 +09:00
parent 0f34a451fc
commit 2e9204243d
8708 changed files with 3259488 additions and 869 deletions

View File

@@ -0,0 +1,65 @@
"""End to end example of building a RAG pipeline backed by a Neo4j database.
Requires OPENAI_API_KEY to be in the env var.
This example illustrates:
- VectorCypherRetriever with a custom formatter function to extract relevant
context from neo4j result
- Logging configuration
"""
import logging
import neo4j
from neo4j_graphrag.embeddings.openai import OpenAIEmbeddings
from neo4j_graphrag.generation import GraphRAG
from neo4j_graphrag.llm import OpenAILLM
from neo4j_graphrag.retrievers import VectorCypherRetriever
from neo4j_graphrag.types import RetrieverResultItem
# Define database credentials
URI = "neo4j+s://demo.neo4jlabs.com"
AUTH = ("recommendations", "recommendations")
DATABASE = "recommendations"
INDEX = "moviePlotsEmbedding"
# setup logger config
logger = logging.getLogger("neo4j_graphrag")
logging.basicConfig(format="%(asctime)s - %(message)s")
logger.setLevel(logging.DEBUG)
def formatter(record: neo4j.Record) -> RetrieverResultItem:
return RetrieverResultItem(content=f"{record.get('title')}: {record.get('plot')}")
driver = neo4j.GraphDatabase.driver(
URI,
auth=AUTH,
)
embedder = OpenAIEmbeddings()
retriever = VectorCypherRetriever(
driver,
index_name=INDEX,
retrieval_query="with node, score return node.title as title, node.plot as plot",
result_formatter=formatter,
embedder=embedder,
neo4j_database=DATABASE,
)
llm = OpenAILLM(model_name="gpt-5", model_params={"temperature": 0})
rag = GraphRAG(retriever=retriever, llm=llm)
result = rag.search(
"Tell me more about Avatar movies",
return_context=True,
# optional
response_fallback="I can't answer this question without context",
)
print(result.answer)
# print(result.retriever_result)
driver.close()

View File

@@ -0,0 +1,85 @@
"""End to end example of building a RAG pipeline backed by a Neo4j database,
simulating a chat with message history feature.
Requires OPENAI_API_KEY to be in the env var.
"""
import neo4j
from neo4j_graphrag.embeddings.openai import OpenAIEmbeddings
from neo4j_graphrag.generation import GraphRAG
from neo4j_graphrag.llm import OpenAILLM
from neo4j_graphrag.retrievers import VectorCypherRetriever
# Define database credentials
URI = "neo4j+s://demo.neo4jlabs.com"
AUTH = ("recommendations", "recommendations")
DATABASE = "recommendations"
INDEX = "moviePlotsEmbedding"
driver = neo4j.GraphDatabase.driver(
URI,
auth=AUTH,
)
embedder = OpenAIEmbeddings()
retriever = VectorCypherRetriever(
driver,
index_name=INDEX,
retrieval_query="""
WITH node as movie, score
CALL(movie) {
MATCH (movie)<-[:ACTED_IN]-(p:Person)
RETURN collect(p.name) as actors
}
CALL(movie) {
MATCH (movie)<-[:DIRECTED]-(p:Person)
RETURN collect(p.name) as directors
}
RETURN movie.title as title, movie.plot as plot, movie.year as year, actors, directors
""",
embedder=embedder,
neo4j_database=DATABASE,
)
llm = OpenAILLM(model_name="gpt-5", model_params={"temperature": 0})
rag = GraphRAG(
retriever=retriever,
llm=llm,
)
questions = [
"Who starred in the Apollo 13 movies?",
"Who was its director?",
"In which year was this movie released?",
]
history: list[dict[str, str]] = []
for question in questions:
result = rag.search(
question,
return_context=False,
message_history=history, # type: ignore
)
answer = result.answer
print("#" * 50, question)
print(answer)
print("#" * 50)
history.append(
{
"role": "user",
"content": question,
}
)
history.append(
{
"role": "assistant",
"content": answer,
}
)
driver.close()

View File

@@ -0,0 +1,87 @@
"""End to end example of building a RAG pipeline backed by a Neo4j database,
simulating a chat with message history which is also stored in Neo4j.
Requires OPENAI_API_KEY to be in the env var.
"""
import neo4j
from neo4j_graphrag.embeddings.openai import OpenAIEmbeddings
from neo4j_graphrag.generation import GraphRAG
from neo4j_graphrag.llm import OpenAILLM
from neo4j_graphrag.message_history import Neo4jMessageHistory
from neo4j_graphrag.retrievers import VectorCypherRetriever
# Define database credentials
URI = "neo4j+s://demo.neo4jlabs.com"
AUTH = ("recommendations", "recommendations")
DATABASE = "recommendations"
INDEX = "moviePlotsEmbedding"
driver = neo4j.GraphDatabase.driver(
URI,
auth=AUTH,
)
embedder = OpenAIEmbeddings()
retriever = VectorCypherRetriever(
driver,
index_name=INDEX,
retrieval_query="""
WITH node as movie, score
CALL(movie) {
MATCH (movie)<-[:ACTED_IN]-(p:Person)
RETURN collect(p.name) as actors
}
CALL(movie) {
MATCH (movie)<-[:DIRECTED]-(p:Person)
RETURN collect(p.name) as directors
}
RETURN movie.title as title, movie.plot as plot, movie.year as year, actors, directors
""",
embedder=embedder,
neo4j_database=DATABASE,
)
llm = OpenAILLM(model_name="gpt-5", model_params={"temperature": 0})
rag = GraphRAG(
retriever=retriever,
llm=llm,
)
history = Neo4jMessageHistory(session_id="123", driver=driver, window=10)
questions = [
"Who starred in the Apollo 13 movies?",
"Who was its director?",
"In which year was this movie released?",
]
for question in questions:
result = rag.search(
question,
return_context=False,
message_history=history,
)
answer = result.answer
print("#" * 50, question)
print(answer)
print("#" * 50)
history.add_message(
{
"role": "user",
"content": question,
}
)
history.add_message(
{
"role": "assistant",
"content": answer,
}
)
driver.close()