Personal-Graph는 지식 그래프를 작성, 관리 및 쿼리하기위한 파이썬 라이브러리입니다. AI 시스템, 특히 LLM (Lange Language Model)의 작업 및 장기 메모리 문제를 해결하는 데 도움이됩니다.
PIP를 사용하여 개인 그래프 설치 :
pip install personal-graph from personal_graph import GraphDB
from personal_graph . text import text_to_graph
from personal_graph . vector_store import VliteVSS
vector_store = VliteVSS ( collection = "memories" )
graph = GraphDB ( vector_store = vector_store )
# Insert information into the graph
g = text_to_graph ( "Alice is Bob's sister. Bob works at Google." )
graph . insert_graph ( g )
# Retrieve relevant information from the graph
query = "Who is Alice?"
results = graph . search ( query )
print ( results )
# Use the retrieved information to answer questions
print ( f"Question: { query } " )
print ( f"Answer: Alice is Bob's sister." )
query = "Where does Bob work?"
results = graph . search ( query )
print ( results )
print ( f"Question: { query } " )
print ( f"Answer: Bob works at Google." )이 예에서는 Alice와 Bob에 대한 정보를 지식 그래프에 삽입합니다. 그런 다음 검색 방법을 사용하여 주어진 쿼리를 기반으로 관련 정보를 검색합니다. 검색된 정보는 AI의 작업 메모리의 일부로 사용하여 질문에 답변하고 추가 상호 작용을위한 맥락을 제공 할 수 있습니다.
from personal_graph import GraphDB
from personal_graph . vector_store import VliteVSS
vector_store = VliteVSS ( collection = "memories" )
graph = GraphDB ( vector_store = vector_store )
# Insert information about conversations with the user over time
graph . insert (
text = "User talked about their childhood dreams and aspirations." ,
attributes = {
"date" : "2023-01-15" ,
"topic" : "childhood dreams" ,
"depth_score" : 3
})
graph . insert (
text = "User discussed their fears and insecurities in their current relationship." ,
attributes = {
"date" : "2023-02-28" ,
"topic" : "relationship fears" ,
"depth_score" : 4
})
graph . insert (
text = "User shared their spiritual beliefs and existential questions." ,
attributes = {
"date" : "2023-03-10" ,
"topic" : "spirituality and existence" ,
"depth_score" : 5
})
graph . insert (
text = "User mentioned their favorite hobbies and weekend activities." ,
attributes = {
"date" : "2023-04-02" ,
"topic" : "hobbies" ,
"depth_score" : 2
})
# User queries about the deepest conversation
query = "What was the deepest conversation we've ever had?"
deepest_conversation = graph . search ( query , sort_by = "depth_score" , descending = True , limit = 1 )이 예에서는 날짜, 주제 및 깊이 점수를 포함하여 사용자와 대화에 대한 정보를 저장합니다. 깊이 점수는 대화가 얼마나 의미가 있는지를 나타냅니다.
사용자가 가장 깊은 대화에 대해 질문하면 검색 방법을 사용하여 가장 높은 깊이 점수로 대화를 검색합니다. 우리는 깊이 점수로 결과를 내림차순 순서로 정렬하고 출력을 하나의 대화로 제한합니다.
대화가 발견되면 AI는 가장 깊은 대화의 날짜와 주제로 응답합니다. 대화가 없으면 AI는 사용자에게 정보가 충분하지 않다고 알려줍니다.
이 예제는 개인 그래프를 사용하여 사용자 상호 작용에 대한 장기 메모리를 구축하고 대화 깊이와 같은 기준에 따라 특정 정보를 검색하는 방법을 보여줍니다.
from personal_graph import GraphDB
from personal_graph . text import text_to_graph
from personal_graph . vector_store import VliteVSS
vector_store = VliteVSS ( collection = "memories" )
graphdb = GraphDB ( vector_store = vector_store )
nl_query = "Increased thirst, weight loss, increased hunger, and frequent urination are all symptoms of diabetes."
kg = text_to_graph ( text = nl_query )
graphdb . insert_graph ( kg )
search_query = "I am losing weight too frequently."
g = text_to_graph ( search_query )
print ( g )
graphdb . insert_graph ( g ) import os
import dspy
from personal_graph import GraphDB , PersonalRM
db = GraphDB () # storage_db is in-memory sqlite, vector_db is in vlite
turbo = dspy . OpenAI ( api_key = os . getenv ( "OPENAI_API_KEY" ))
retriever = PersonalRM ( graph = db , k = 2 )
dspy . settings . configure ( lm = turbo , rm = retriever )
class GenerateAnswer ( dspy . Signature ):
"""Answer questions with short factoid answers."""
context = dspy . InputField ( desc = "may contain relevant facts from user's graph" )
question = dspy . InputField ()
answer = dspy . OutputField (
desc = "a short answer to the question, deduced from the information found in the user's graph"
)
class RAG ( dspy . Module ):
def __init__ ( self , depth = 3 ):
super (). __init__ ()
self . retrieve = dspy . Retrieve ( k = depth )
self . generate_answer = dspy . ChainOfThought ( GenerateAnswer )
def forward ( self , question ):
context = self . retrieve ( question ). passages
prediction = self . generate_answer ( context = context , question = question )
return dspy . Prediction ( context = context , answer = prediction . answer )
rag = RAG ( depth = 2 )
response = rag ( "How is Jack related to James?" )
print ( response . answer ) from personal_graph . graph import GraphDB
from personal_graph . graph_generator import OllamaTextToGraphParser
from personal_graph . database import SQLite
from personal_graph . vector_store import VliteVSS
from personal_graph . clients import OllamaClient , OllamaEmbeddingClient
phi3 = OllamaClient ( model_name = "phi3" )
nomic_embed = OllamaEmbeddingClient ( model_name = "nomic-embed-text" )
storage_db = SQLite ( local_path = "./local.db" )
vector_store = VliteVSS ( collection = "./vectors" )
graph_generator = OllamaTextToGraphParser ( llm_client = phi3 )
print ( graph_generator ) # Should print the InstructorGraphGenerator
with GraphDB (
database = storage_db ,
vector_store = vector_store ,
graph_generator = graph_generator
) as db :
print ( db )다음은 계획된 흐름의 스케치 일뿐입니다. 물티.
graphdb = GraphDB ( storage = db , vector_store = vector_store , graph_generator = graph_generator )
graphdb . load_dataset ( "KarateClub" )
pyg_graph = graphdb . to_pyg ()
updated_graph = model ( pyg_graph ) # Run Neural Network algorithms here using PyG
graphdb . from_pyg ( updated_graph )이 비디오는 개인 그래프 라이브러리를 가장 잘 설명합니다. [! 개인 그래프]
자세한 내용과 API 문서는 개인 그래프 문서를 참조하십시오.
기부금을 환영합니다! 버그 및 기능 요청에 대한 문제를 자유롭게 만들 수 있습니다.
개인 그래프는 MIT 라이센스에 따라 릴리스됩니다.
질문, 피드백 또는 제안? [email protected]로 연락하거나 github에서 문제를여십시오.