Ostatnio aktywny 3 days ago

Script RAG en ~45 lineas: extrae contexto de un grafo SQLite con sqlite-utils y lo emite como JSONL para un LLM

atareao's Avatar atareao zrewidował ten Gist 3 days ago. Przejdź do rewizji

1 file changed, 45 insertions

rag-demo.py(stworzono plik)

@@ -0,0 +1,45 @@
1 + #!/usr/bin/env python3
2 + """
3 + rag-demo.py — Conecta tu grafo de conocimiento en SQLite con un LLM.
4 +
5 + Extrae nodos y sus relaciones del grafo y los emite como JSONL, listo
6 + para encadenar con `llm` o con cualquier cliente que lea por stdin.
7 +
8 + Uso:
9 + ./rag-demo.py | llm "resume las herramientas del proyecto"
10 + ./rag-demo.py --tipo tool --limite 50
11 + """
12 + import argparse
13 + import json
14 +
15 + from sqlite_utils import Database
16 +
17 + DB = "demo.db"
18 +
19 +
20 + def extraer(db, tipo, limite):
21 + """Devuelve las filas del grafo como un iterador de diccionarios."""
22 + sql = """
23 + select n.key, n.label, n.type, e.kind as relacion
24 + from nodes n
25 + left join edges e on n.key = e.source
26 + where (:tipo is null or n.type = :tipo)
27 + order by n.type, n.label
28 + limit :limite
29 + """
30 + return db.query(sql, {"tipo": tipo, "limite": limite})
31 +
32 +
33 + def main():
34 + parser = argparse.ArgumentParser(description="Contexto del grafo para un LLM")
35 + parser.add_argument("--tipo", help="Filtra por tipo de nodo (tool, concept, file...)")
36 + parser.add_argument("--limite", type=int, default=30, help="Número de nodos a extraer")
37 + args = parser.parse_args()
38 +
39 + db = Database(DB)
40 + for fila in extraer(db, args.tipo, args.limite):
41 + print(json.dumps(fila, ensure_ascii=False))
42 +
43 +
44 + if __name__ == "__main__":
45 + main()
Nowsze Starsze