Personal-Graph ist eine Python-Bibliothek zum Erstellen, Verwalten und Abfragen von Wissensgrafiken. Ziel ist es, Arbeits- und Langzeitgedächtnisherausforderungen in KI-Systemen, insbesondere in Großsprachmodellen (LLMs), zu lösen.
Installieren Sie den persönlichen Graf mit 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." )In diesem Beispiel geben wir Informationen über Alice und Bob in das Wissensgraphen ein. Wir verwenden dann die Suchmethode, um relevante Informationen basierend auf den angegebenen Abfragen abzurufen. Die abgerufenen Informationen können als Teil des Arbeitsspeichers der KI verwendet werden, um Fragen zu beantworten und einen Kontext für weitere Interaktionen bereitzustellen.
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 )In diesem Beispiel speichern wir Informationen zu Gesprächen mit dem Benutzer, einschließlich Datum, Thema und Tiefenbewertung. Die Tiefenbewertung stellt dar, wie aussagekräftig das Gespräch war.
Wenn der Benutzer nach der tiefsten Konversation fragt, suchen wir nach der Suchmethode nach der Konversation mit der höchsten Tiefenbewertung. Wir sortieren die Ergebnisse nach der Tiefenbewertung in absteigender Reihenfolge und beschränken die Ausgabe auf ein Gespräch.
Wenn ein Gespräch gefunden wird, antwortet die KI mit dem Datum und dem Thema des tiefsten Gesprächs. Wenn keine Gespräche vorhanden sind, informiert die KI dem Benutzer, dass er nicht über genügend Informationen verfügt.
Dieses Beispiel zeigt, wie persönlich Graph verwendet werden kann, um Langzeitgedächtnis über Benutzerinteraktionen zu erstellen und spezifische Informationen basierend auf Kriterien wie Gesprächstiefe abzurufen.
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 )Das Folgende ist nur eine Skizze des geplanten Flusses. Wip.
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 )Dieses Video beschreibt die persönliche Diagrammbibliothek am besten. [! Persönliche Grafik]
Weitere Informationen und API-Dokumentationen finden Sie in der Dokumentation des Personal-Graph.
Beiträge sind willkommen! Fühlen Sie sich frei, Probleme für Fehler und Funktionsanfragen zu erstellen.
Personal-Graph wird unter der MIT-Lizenz veröffentlicht.
Fragen, Feedback oder Vorschläge? Erreichen Sie [email protected] oder eröffnen Sie ein Problem auf GitHub.