Librairie
Du Python pur, zéro dépendance obligatoire. Tu l'importes et tu composes.
circuit neuronal / model-agnostic
On n'alourdit pas le cerveau par force brute. On l'entoure de circuits structurés et vérifiables, et on redit chaque résultat dans la voix de ton modèle.
pip install cybnodes// c'est quoi
pip install cybnodes, puis import cybnodes. Pas une app, pas un service à héberger : une brique que tu branches autour de ton propre modèle. Un LLM est génial pour parler, mauvais pour garantir. CybNodes met devant lui des réseaux qui répondent de façon exacte et vérifiable.
Du Python pur, zéro dépendance obligatoire. Tu l'importes et tu composes.
Tu apportes ton LLM (ollama, API, local…). CybNodes apporte les circuits.
Chaque réseau renvoie une réponse traçable : calcul exact, nœud de graphe, source web.
// pourquoi
Corriger un fait ne demande plus de ré-entraîner : tu édites un fichier.
| Sans CybNodes | Avec CybNodes |
|---|---|
| "47 × 38 ?" → le LLM tente, parfois faux | calcul exact (AST sûr), toujours juste |
| "c'est quoi X ?" → le LLM hallucine | réponse depuis ton graphe de connaissances |
| "quoi de neuf sur Y ?" → données périmées | recherche web, avec la source citée |
| corriger un fait → ré-entraîner | éditer un fichier, zéro entraînement |
// 60 secondes
pip install cybnodes
# ou depuis les sources :
git clone https://github.com/Alex-Lou/cybnodes.git
cd cybnodes && pip install -e .
# 1. Tu apportes TON modèle, n'importe quel callable
from cybnodes import CybNodes, Persona
from cybnodes.networks import CalculNetwork, SavoirNetwork
def my_llm(question, context):
return call_my_model(question, context) # -> str
# 2. Tu l'entoures de réseaux
cyb = CybNodes(
conductor=my_llm,
networks=[CalculNetwork(), SavoirNetwork(graph_path="graph.json")],
persona=Persona(name="Aria", templates={"calcul": ["{value} ✦"]}),
)
# 3. Tu demandes
cyb.ask("47 x 38 ?") # -> exact, jamais faux
cyb.ask("what is a cat?") # -> depuis ton graphe, voix d'Aria
cyb.ask("write a haiku") # -> aucun réseau -> ton modèle répond
// architecture
// les réseaux livrés
Arithmétique sûre par AST (zéro eval). Symboles et mots ("fois", "puissance"…). Le LLM ne se trompe plus jamais sur un calcul.
Répond depuis un graphe de triplets sujet-relation-objet. Tu corriges une connaissance en éditant le graphe, sans ré-entraîner.
Actualité via l'API Brave Search, avec la source citée. Honnête : "j'ai cherché et…". Se tait proprement sans clé.
// extensible
Hérite de Network, renvoie un Result quand tu sais, sinon None, et la main passe.
from cybnodes import Network, Result
class WeatherNetwork(Network):
name = "weather"
def match(self, question):
if "weather" not in question.lower():
return None # pas mon rayon -> je rends la main
data = weather_api(...) # un résultat VÉRIFIABLE
return Result(kind="weather", text=f"{data}°", source="weather-api")
cyb.add_network(WeatherNetwork()) # branché. C'est tout.
tu veux qu'un LLM réponde de façon exacte, vérifiable ou à jour sur certains sujets, tout en gardant sa voix, sans ré-entraîner.
c'est du pur génératif libre (écriture, brainstorming). Là, ton modèle seul suffit, CybNodes lui laisse simplement la main.