Maîtriser le SDK Python Yevi : Pipeline RAG & Custom Providers
Le SDK Python de Yevi Core v1.0 (Licence MIT) est conçu selon des principes de découplage strict. Le pipeline RAG ne dépend d’aucun fournisseur d’inférence propriétaire : tout backend LLM s’intègre via l’interface abstraite LLMProvider.
Ce module apprend aux développeurs à utiliser le SDK Python et à écrire leur propre fournisseur LLM personnalisé.
1. Exemple d’Ingestion & Requête RAG avec le SDK Python
Section intitulée « 1. Exemple d’Ingestion & Requête RAG avec le SDK Python »from pathlib import Pathfrom core.index.store import VectorStorefrom core.ingest.loader import load_and_chunk_corpusfrom core.privacy.anonymize import Anonymizerfrom core.rag.pipeline import RagPipelinefrom ops.serve.llm_provider import DummyProvider
# 1. Chargement et découpage du corpuschunks = load_and_chunk_corpus(Path("data/corpus_demo"))
# 2. Stockage dans ChromaDB + BM25store = VectorStore()store.add_chunks([ { "chunk_id": c.chunk_id, "doc_id": c.doc_id, "chunk_index": c.chunk_index, "text": c.text, "source_path": c.source_path, } for c in chunks])
# 3. Anonymisation PII de la questionanonymizer = Anonymizer()anon_res = anonymizer.anonymize("Contrat signé avec Me votrenom")
# 4. Inférence RAG avec fournisseur Dummy / Ollamapipeline = RagPipeline(store=store, llm=DummyProvider(), top_k=4)rag_ans = pipeline.answer(anon_res.anonymized_text, domain="legal")
# 5. Restitution du texte avec démasquage PIIfinal_text = anonymizer.restore(rag_ans.answer, anon_res.mapping)print("Réponse finale démasquée :", final_text)2. Écrire un LLMProvider Personnalisé (ex. vLLM / TextGen API)
Section intitulée « 2. Écrire un LLMProvider Personnalisé (ex. vLLM / TextGen API) »Pour connecter un serveur d’inférence spécifique (ex. vLLM ou serveur HTTP interne), dérivez la classe LLMProvider :
import requestsfrom ops.serve.llm_provider import LLMProvider
class CustomVLLMProvider(LLMProvider): def __init__(self, endpoint_url: str = "http://localhost:8000/v1/completions"): self.endpoint_url = endpoint_url
def generate(self, prompt: str, *, max_tokens: int = 512, temperature: float = 0.1) -> str: payload = { "prompt": prompt, "max_tokens": max_tokens, "temperature": temperature, } response = requests.post(self.endpoint_url, json=payload, timeout=30) response.raise_for_status() return response.json()["choices"][0]["text"]
def is_available(self) -> bool: try: res = requests.get(self.endpoint_url.replace("/completions", "/models"), timeout=3) return res.status_code == 200 except Exception: return False🛠️ Passer à l’Action
Section intitulée « 🛠️ Passer à l’Action »Audit gratuit
Réservez votre audit de souveraineté
30 minutes pour évaluer votre exposition aux fuites de données vers des API externes.
Réserver mon audit gratuit