Introduzione

La generazione di recupero (RAG) (RAG) si è rapidamente evoluta in una delle architetture di maggior impatto per l’iniezione di conoscenze fattuali e consapevoli del contesto in grandi modelli linguistici (LLM). Combinando il recupero neurale su basi di conoscenza personalizzata con inferenza generativa, Rag Systems Bypass LLM Hallucination e portano intelligenza specifica del dominio a chatbot, copiloti e agenti di automazione.

Ma come qualsiasi modello emergente, il divario tra una configurazione di Rag e un’implementazione di livello di produzione è ampio. Non si tratta solo di bullonare su un DB vettoriale. Si tratta di progettare lo strato di recupero, gestire il ciclo di vita vettoriale, garantire l’accesso multi-tenant, ottimizzare la latenza e orchestrare il flusso complessivo tra retriever e generatore. È qui che la scelta degli strumenti e dell’architettura diventa critica.

Mentre i negozi di vettoriali come FAISS, Pinecone e Weavita dominano la discussione, Redis-tradizionalmente noto per la memorizzazione nella cache in memoria e i dati in tempo reale-è diventato una potenza sottovalutata nei sistemi RAG a bassa latenza. Redis ora supporta l’indicizzazione vettoriale basata su HNSW, il filtro dei metadati ibridi e l’integrazione nativa con Langchain, rendendola una scelta ad alte prestazioni e a frizione zero per i sistemi consapevole dell’incorporamento.

Questo articolo scompone come architelare una pipeline RAG di livello di produzione utilizzando Langchain come strato di orchestrazione
E Redis come database vettoriale. L’attenzione è rivolta alle distribuzioni del mondo reale: budget di latenza, strategie di chunking vettoriale, memoria di sessione, filtro, messa a punto di precisione per la precisione.

Alla fine, capirai come costruire un sistema RAG strettamente integrato che:

  • Funziona veloce, anche sotto carico
  • Gestisce incorporare l’ingestione e l’invalidazione in modo intelligente
  • Supporta recuperi multiutente, filtrati con metadati
  • Gioca bene con API del mondo reale, UI e confini di servizio

Nessun esempi di giocattoli. Nessuna astrazione a mano ondata. Solo architettura pronta per la produzione per i team che costruiscono software nativo LLM.

Requisiti di sistema

Prima di progettare qualsiasi sistema REG di livello di produzione, è essenziale definire chiaramente i requisiti, non solo funzionali, ma anche non funzionali. Questi requisiti guidano le decisioni di progettazione chiave: come vengono archiviati e interrogati i vettori, come è strutturato lo strato di orchestrazione, che tipo di osservabilità è necessario e fino a che punto il sistema deve scalare.

Requisiti funzionali

  • Incorporamento di archiviazione: Memorizza blocchi di testo (ad es. Docs, FAQ, trascrizioni) come incorporamenti vettoriali, insieme a metadati come ID inquilini, tipo di sorgente e timestamp.
  • Recupero semantico: Esegui la ricerca vettoriale più vicina (Ann) più vicina (ANN) di un determinato incorporamento di query.
  • Filtro dei metadati: Applicare i filtri (ad es. Ambito inquilino, tag, tipo DOC) durante il recupero dei vettori per isolare i sottoinsiemi pertinenti.
  • Aumento rapido: Inietta il contesto recuperato in un modello prompt per l’inferenza LLM usando Langchain.
  • Supporto multi-tenant: Supportare più inquilini isolati in una configurazione sicura a bassa latenza.
  • Ingestione vettoriale dal vivo: Accetta aggiornamenti in tempo reale (ad es. Nuovi PDF, WebHooks) per creare incorporati e indicizzarli senza tempi di inattività.
  • Memoria della sessione (facoltativo): Schema e richiama la cronologia delle conversazioni degli utenti attraverso le sessioni per supportare la finestra di dialogo contestuale.

Requisiti non funzionali

  • Latenza bassa: La generazione di recupero di vettoriale + LLM dovrebbe completare entro 150-200 ms end-to-end per UX sub-secondario.
  • Scalabilità: Gestire almeno 1 m di incorporamenti per inquilino con la possibilità di crescere in orizzontale usando il cluster Redis.
  • Osservabilità: Abilita registri tracciabili per query vettoriali, latenza LLM e debug della struttura rapida.
  • Sicurezza: Applicare un rigoroso controllo dell’accesso per inquilino, tasti API per gli endpoint di inferenza e controlli di autorizzazione a livello di incorporamento.
  • Affidabilità: Non garantire alcuna perdita di vettori al riavvio o alla distribuzione; Supportare Redis Persistence (AOF o RDB) per il recupero dell’incidente.
  • Estensibilità: Collegare più retriever, i referenziatori e le strategie rapide senza riscrivere l’orchestrazione di base.
  • Distribuzione: Deve supportare sia Redis gestito (ad es. Elasticache con estensioni vettoriali) sia lo stack Redis autosufficiente.

Vincoli e ipotesi

  • Si presume Redis Stack 7.2+ con il supporto di ricerca vettoriale (HNSW).
  • Langchain fungerà da livello di orchestrazione tra retriever, modello prompt e endpoint LLM (ad es. Openi, azzurro aperto, ecc.).
  • Gli incorporamenti sono generati usando un modello coerente (ad esempio, `text-ebbedding-3-small` o` all-minilm-l6-v2`). Gli incorporamenti del modello misto sono fuori portata.
  • Il sistema è progettato per contenuti in lingua inglese; Ricerca multilingue non considerata in questo articolo.

Usa caso / scenario

Per fondare questa architettura in qualcosa di tangibile, considera il seguente contesto aziendale: un’azienda Enterprise SaaS sta costruendo un assistente di supporto AI rivolto ai clienti che risponde a domande basate su documentazione interna, guide di prodotto, Changelogs e materiale di onboarding specifico per i clienti. L’assistente deve servire più inquilini aziendali, ciascuno con la propria base di conoscenza privata.

Contesto aziendale

Ogni inquilino (cliente) carica il proprio contenuto: PDF, Guide di Markdown, Note di rilascio, ecc. Attraverso una dashboard di amministrazione. Questo contenuto viene analizzato, tagliato e incorporato utilizzando un modello di incorporamento coerente, quindi immagazzinato in un indice vettoriale con scarto inquilini alimentato da Redis. Quando gli utenti di quell’inquilino fanno una domanda, il sistema recupera il contesto pertinente utilizzando la somiglianza vettoriale + il filtro dei metadati e crea una risposta usando un LLM, con il contesto recuperato iniettato tramite i template prompt di Langchain.

Caso d’uso mirato: assistente di supporto basato sull’intelligenza artificiale

  • Ingresso: L’utente finale presenta una domanda in linguaggio naturale tramite chat web.
  • Recupero vettoriale: Il sistema utilizza l’incorporamento delle query per trovare i top-K simili pezzi per quell’inquilino.
  • Assemblaggio rapido: I blocchi + i blocchi recuperati + vengono utilizzati per assemblare un prompt.
  • Generazione LLM: Il prompt viene inviato a un endpoint LLM (ad es. OpenAI o Azure OpenAI).
  • Risposta: La risposta finale viene restituita all’utente in meno di ~ 1 secondo.

Modelli di utilizzo previsti

  • Ogni inquilino carica tra 100-10.000 documenti, con conseguenti pezzi vettoriali ~ 50k -1m per inquilino.
  • Il rapporto lettura-write è elevato-~ 90% di recupero, ingestione/aggiornamento del 10%.
  • Gli inquilini si aspettano la privacy e l’isolamento: nessuna perdita tra tenant.
  • L’API LLM è protetta da utilizzo: le istruzioni devono rimanere compatte e pertinenti al contesto.
  • Alcuni inquilini hanno contenuti dinamici (ad esempio, i team di prodotti che caricano le note di rilascio settimanali).

Attori coinvolti

  • Amministratori degli inquilini: Carica, gestisci ed elimina i documenti.
  • Utenti finali: Fare domande tramite l’assistente; Aspettatevi risposte accurate e veloci.
  • Servizi di sistema: Servizio di incorporamento, indicizzatore vettoriale, retriever, interfaccia LLM.

Questo scenario ci offre uno sfondo pulito per esplorare l’isolamento vettoriale multi-tenant, la memoria della sessione, il filtro ibrido, l’integrazione dei flussi di lavoro di aggiornamento e le strategie di distribuzione dei cluster Redis.

Hai bisogno di aiuto per costruire un sistema di stracci multi-tenant come questo?

Progettare un assistente di intelligenza artificiale che sia veloce, consapevole del contesto e isolato degli inquilini non è solo un problema di codifica: è una sfida dell’architettura del sistema.

Se stai costruendo qualcosa di simile e hai bisogno di aiuto per progettare il livello di orchestrazione della strategia del negozio vettoriale o i modelli di integrazione LLM, contattaci. Aiutiamo i team di ingegneria a spedire i sistemi di REG in tempo reale in scala.

Connettiamoci!

Architettura di alto livello

Ad alto livello, l’architettura del sistema di questa pipeline RAG ruota attorno a quattro livelli principali: ingestione del contenuto, conservazione vettoriale e recupero (Redis), orchestrazione (Langchain) e generazione di risposta (LLM). Ogni strato deve essere modulare, osservabile e apolide-con Redis che funge da spina dorsale a bassa latenza critica per la ricerca di somiglianza vettoriale.

️Componenti del sistema centrale

  • Document Ingestion Service: Anali di contenuto caricato (PDF, Markdown, HTML), lo fece in blocchi semantici, genera incastri e archivia sia i vettori che i metadati in Redis.
  • Redis Vector Index: Memorizza vettori specifici degli inquilini utilizzando l’indice HNSW con funzionalità di filtraggio dei metadati. Ogni incorporamento è indicizzato con una chiave Redis univoca ammessa dall’inquilino.
  • Retriever (Langchain): Esegue l’incorporamento delle query, emette la ricerca vettoriale a Redis, i risultati dei filtri utilizzando metadati (ad esempio, inquilino, tipo DOC) e classifica blocchi di contesto.
  • Prompt Builder (Langchain): Utilizza modelli di prompt per assemblare un prompt finale con contesto e query iniettati.
  • Interfaccia LLM: Si collega ad OpenAI (o equivalente), invia prompt, riceve una risposta generata.
  • Livello di risposta: Formati e restituisce l’output finale all’utente tramite API o UI di chat.

Panoramica del flusso di dati

  1. Documi caricamenti utente tramite il portale di amministrazione.
  2. Il servizio di ingestione del documento divide il contenuto in blocchi, calcola gli incorporamenti vettoriali utilizzando un modello predefinito (ad es. Openi, cohere o modello di incorporamento locale).
  3. Ogni pezzo è conservato in Redis con:
    • Un incorporamento vettoriale
    • ID inquilini, ID DOC, tag, timestamp (come campi metadati)
    • Una chiave Redis unica (ad es., Tenant: {Tenant_id}: vector: {uuid})
  4. L’utente finale presenta una domanda tramite chat o API.
  5. Il retriever di Langchain genera un incorporamento di query, invia una ricerca vettoriale a Redis con filtri di metadati.
  6. I risultati top-K sono classificati (opzionali) e passati a un modello di prompt per assemblare la query finale.
  7. Il prompt viene inviato all’LLM; La risposta viene trasmessa in streaming o restituita al client.

Diagramma dei componenti

Di seguito è riportato un layout visivo basato sul testo dell’interazione dei componenti:

User
 │
 ▼
Chat UI / API Layer
 │
 ▼
LangChain Orchestrator
 ├────────────► LLM API (e.g., OpenAI / Azure / Claude)
 │
 ▼
Redis Vector DB (HNSW Index)
 │
 ▼
Top-K Vectors + Metadata
 │
 ▼
Prompt Builder (LangChain Template Engine)
 │
 ▼
Final Prompt → LLM
 │
 ▼
Generated Response
 │
 ▼
Response Formatter
 │
 ▼
User Output

Ogni componente è stato senza stato e scalabile orizzontalmente. Redis si trova al centro come motore di ricerca vettoriale ad alte prestazioni sia come negozio di valore chiave, dando questo sistema sia la velocità di recupero che la precisione dei metadati. Successivamente, approfondiremo il modo in cui Redis è strutturato a livello di database, come vengono indicizzati i vettori e quali compromessi da tenere d’occhio quando si incorporano su vasta scala.

Progettazione del database

Al centro di questo sistema RAG è Redis, non come un negozio di valore chiave generico, ma come motore semantico a conoscenza del vettore, consapevole degli inquilini. Progettare correttamente lo schema Redis è fondamentale per le prestazioni di recupero, l’isolamento degli inquilini e l’indicizzazione efficiente.

️Obiettivi di progettazione chiave

  • Abilita la ricerca vettoriale ad alta velocità con indicizzazione HNSW
  • Supportare il filtro dei metadati (ad es. ID inquilini, tipo Doc, tag)
  • Mantenere l’isolamento degli inquilini all’interno di una distribuzione di Redis condivisa
  • Consenti ingestione e renità vettoriali efficienti

Schema di archiviazione vettoriale

Ogni pezzo di un documento è archiviato come un incorporamento vettoriale insieme ai metadati e al testo originale. Redis lo immagazzina come a Hash JSON Struttura (a seconda che Redisjson sia abilitato) ed è indicizzata tramite Redisearch utilizzando i campi vettoriali.

Key:
  tenant:{tenant_id}:chunk:{uuid}

Fields:
  content:     "actual chunked text"
  embedding:   [FLOAT VECTOR]   # dense float array, e.g., 1536-dim
  doc_id:      "source-document-id"
  tags:        "onboarding,setup"
  created_at:  timestamp (UNIX epoch)

Tutti gli incorporati sono indicizzati usando una redisearch

Ft.create 
comando con uno schema che include:

FT.CREATE rag_index ON JSON PREFIX 1 "tenant:{tenant_id}:" 
SCHEMA 
  $.embedding   VECTOR HNSW 6 TYPE FLOAT32 DIM 1536 DISTANCE_METRIC COSINE 
  $.content     TEXT 
  $.tags        TAG 
  $.doc_id      TAG
  $.created_at  NUMERIC

Esempio di documento Redis JSON

Se si utilizza Redisjson, un blocco vettoriale indicizzato sembra questo:

{
  "content": "After installation, click on 'Settings' to begin configuration.",
  "embedding": [0.015, -0.234, ..., 0.097],
  "doc_id": "doc_20240521_userguide",
  "tags": "setup,config",
  "created_at": 1716271292
}

Strategia multi-tenancy

Per evitare problemi di rumori e garantire una rigida separazione dei dati, i vettori di ciascun inquilino vengono espulsi utilizzando i prefissi chiave:

Inquilino: Acme: Chunk: Uuid1 Tenant: Globex: Chunk: Uuid2

Best practice: utilizzare un singolo Redis logical DB per l’archiviazione multi-tenant condivisa, ma separare i dati tramite prefissi chiave e filtri degli inquilini nelle query Redisearch. Facoltativamente, utilizzare Redis ACLS per imporre il controllo di accesso a livello di comando o chiave.

Partizionamento indice (opzionale)

Per gli inquilini più grandi, è possibile utilizzare una configurazione del cluster Redis ridotto:

  • Shard di inquilino (partizionamento orizzontale)
  • O incorporando ID (distribuzione uniforme)

Langchain gestisce questo pozzo tramite il pool di connessioni e il design del retriever modulare, ma dovrai orchestrare la creazione dell’indice e la sincronizzazione dello schema attraverso i frammenti.

♻️ Considerazioni sul ciclo di vita vettoriale

I vettori dovrebbero essere immutabili una volta inseriti, ma gli aggiornamenti possono essere gestiti da:

  • Eliminazione della vecchia chiave di blocco
  • Inserimento di un nuovo pezzo con contenuti aggiornati e incorporamento

Utilizzare TTLS (se applicabile) per spianare automaticamente vettori obsoleti o un lavoro di pulizia programmato per eliminare il contenuto stantio in base ai timermati dei metadati.

Questo schema consente a Redis di funzionare non solo come cache, ma come back-end di recupero consapevole di vettoriali a pieno titolo con tempi di query di millisecondi. Con l’indicizzazione HNSW, il filtraggio dei metadati e la progettazione della chiave in tenant, Redis è più che pronta per i carichi di lavoro semantici in produzione.

Design dettagliato dei componenti

Questa sezione suddivide i meccanici interni del sistema RAG per componente – dall’ingestione al recupero in generazione. Ogni parte deve operare in modo indipendente, seguire contratti chiari ed evitare lo stato nascosto. Redis e Langchain siedono al cuore di questa interazione, orchestrando il flusso di dati e il calcolo con un accoppiamento minimo.

Livello di dati: memoria vettoriale e gestione dell’incorporamento

Responsabilità: Chunking, incorporare la generazione, Redis I/O, applicazione dello schema.

  • Utilizza la frase-scissione o la scissione del testo ricorsivo (tramite Langchain) per interrompere i documenti in blocchi token ~ 200-300.
  • Gli incorporamenti vengono calcolati utilizzando un modello coerente (ad es. Text-Embedding-3-SmallAll-Minilm-L6-V2).
  • Ogni pezzo è memorizzato in Redis usando lo schema definito in precedenza: vettore HNSW, campi di metadati, JSON o formato hash.
  • Il chunk ID viene generato usando UUID o Hash di contenuto per evitare i duplicati.
  • Il servizio di ingestione vettoriale gestisce i tentativi, la risoluzione dei conflitti e il vettoriale.
 Example Ingestion Payload

POST /embed
{
  "tenant_id": "acme",
  "doc_id": "userguide-v2",
  "text": "After installation, click on Settings to configure."
}

1. Livello dell’applicazione: Orchestrazione di Langchain

Responsabilità: Incorporamento, recupero, filtraggio, reranning (opzionale), iniezione pronta.

  • La domanda dall’utente viene passata a Langchain Retrievalqa Conversazionaleretrievalchain.
  • L’incorporamento delle query viene generato al volo e inviato a Redis con i filtri tag inquilini.
  • Redis restituisce le partite vettoriali top-K con i loro pezzi e metadati di testo associati.
  • Il modello di recupero opzionale (ad es. BGE-Rerker o Cohere Re-rank) può ordinare blocchi per rilevanza prima di chiedere.
  • Il sistema di modelli di Langchain inietta blocchi e query in una struttura di prompt di sistema/utente predefinita.
 Prompt Template (LangChain)

System: You are a support assistant for ACME Corp. Use only the context provided.

Context:
{context}

User: {question}

2. Livello di integrazione: Redis VectorStore

Langchain Integration usa: RedisvectorStore da Langchain_community.vectorStores

 LangChain Redis VectorStore Setup

from langchain_community.vectorstores import Redis
from langchain.embeddings import OpenAIEmbeddings

embedding = OpenAIEmbeddings()

vectorstore = Redis(
    redis_url="redis://localhost:6379",
    index_name="rag_index",
    embedding=embedding,
    index_schema=your_schema
)

  • Le chiamate di ricerca vengono instradate tramite somiglianza_search con i filtri di metadati applicati (ad es. ID inquilino, tag).
  • I parametri HNSW possono essere sintonizzati (EF_Construction, M, ecc.) Per il saldo di richiamo/latenza di indicizzazione e query-time.

3. Layer UI (opzionale): chatbot o interfaccia API

Responsabilità: Gestire le risposte di input di chat, stato di sessione e stream LLM all’utente.

  • L’interfaccia utente di chat invia query utente all’API backend con intestazioni di autori e contesto degli inquilini.
  • API Layer invoca Langchain e i flussi hanno generato risposta al frontend tramite WebSocket o SSE.
  • La memoria di sessione (cronologia della conversazione) può essere gestita utilizzando i tasti Redis TTL o gli involucri di memoria Langchain.
️ Redis Key for Session Memory

Key:
  tenant:acme:session:user123:messages

Value:
  List of (question, answer) pairs
  TTL = 30 minutes

Ogni livello è modulare e collegabile: gli incorporamenti possono provenire da OpenII o Huggingface, Vector Store può essere Redis o Pinecone e l’LLM può essere aperto o un modello locale. Langchain agisce come lo strato di colla flessibile che si innesca tutto insieme.

Stai costruendo uno straccio Langchain a base di Redis?

L’integrazione della ricerca di Redis Vector con Langchain Sblocca velocità di recupero sub-100MS, orchestrazione di prompt dinamici e supporto multi-tenant senza soluzione di continuità, ma richiede anche un controllo stretto schema, incorporando la gestione del ciclo di vita e la logica di filtraggio intelligente.

Se hai intenzione di costruire qualcosa di simile o in difficoltà per rendere pronto la produzione di Rag Stack, contattaci. Possiamo aiutare l’architetto, sintonizzare e distribuire i sistemi di Rag Redis-Native che si comportano su vasta scala.

Parliamo

Considerazioni sulla scalabilità

Il ridimensionamento di un sistema REG non è solo quello di spingere più vettori in Redis o di girare più istanze API. Si tratta di capire come ogni sottosistema si comporta sotto carico: latenza di recupero vettoriale, sovraccarico di assemblaggio rapido, limiti di throughput LLM – e progettazione attorno a loro. Redis, essendo in memoria e singolo per core, ha proprietà di ridimensionamento uniche che influenzano le scelte architettoniche.

Ridimensionamento di Ricerca vettoriale Redis

Modalità cluster Redis:

  • Il ridimensionamento orizzontale si ottiene dai tasti di frammento su più nodi.
  • Ogni shard gestisce il proprio indice vettoriale, con le query di routing langchain o logica personalizzata al frammento corretto.
  • Usa il prefisso chiave coerente (inquilino: acme: chunk: {uuid}) per frammento di inquilino e preservare l’isolamento.

Scambio:

Redisearch non supporta l’indicizzazione distribuita tra i frammenti. Ogni frammento deve essere interrogato in modo indipendente.

Option 1:
  Assign tenants to specific Redis shards
  (static partitioning)

Option 2:
  Replicate vector schema across shards
  and route queries based on tenant ID

⚙️ Ridimensionamento degli orchestratori Langchain

  • Orchestrazione di apolidi significa che è possibile ridimensionare i servizi basati su Langchain orizzontalmente utilizzando contenitori, Serverless (ad esempio, Lambda) o baccelli K8S.
  • Incorporare la logica e gli interruttori di circuiti per le chiamate LLM esterne.
  • Cache istruzioni precedenti e pezzi recuperati per le domande frequenti per ridurre l’incorporamento + latenza di recupero.
Scenario:

50 concurrent users  
× 4 questions per minute per user  
= 200 queries per minute (QPM)

→ LangChain workers: 4–6 containers  
→ Use autoscaler for load adaptation

Pianificazione del throughput dell’API LLM

  • L’uso di LLM è spesso il collo di bottiglia, non la ricerca vettoriale.
  • Richieste batch quando possibile (soprattutto se si sta rivelando).
  • Utilizzare la limitazione della tariffa consapevole del contesto per mantenere l’utilizzo all’interno della quota (Openi, Azure OpenAI, ecc.).
  • Le risposte in streaming invece di aspettare il completamento completo.

Best practice: Le richieste preliminari se superano i limiti del modello. Utilizzare una finestra scorrevole per mantenere il contesto recente ed evitare le dimensioni prompt in fuga.

⚡ strati di memorizzazione nella cache

  • Risultati del vettore Top-K della cache per query ripetute o simili incorporamenti.
  • Usa Redis stesso o uno strato secondario come FASTAPI + LRU ,Operatori cloudflare Edge Kv.
  • Cache Risposte complete Se il prompt è deterministico e non sensibile al tempo.

️Benchmark di prestazioni da monitorare

  • Ricerca vettoriale Redis: Tempo di recupero P99 <50ms per la ricerca tra i 10 (con HNSW sintonizzato)
  • Assemblaggio rapido: Tempo di modello <5ms se strutturato in modo pulito
  • Risposta di LLM: Latenza di streaming <300 ms per il primo token, <800 ms in totale (tipico per GPT-4-Turbo)

Per ridimensionare efficacemente, Redis dovrebbe essere frastagliato dall’inquilino, con indici isolati mantenuti per frammento per evitare interferenze incrociate. L’orchestrazione di Langchain dovrebbe rimanere apolide e correre dietro un bilanciamento del carico per un facile ridimensionamento orizzontale. La memorizzazione nella cache, sia negli strati di recupero vettoriale che di risposta finale, aiuta a ridurre al minimo il lavoro di incorporamento e di recupero ridondanti. Infine, sono essenziali un’attenta gestione delle quote e un controllo delle dimensioni rapide, poiché l’LLM è in genere il componente più lento e costoso del sistema.

Architettura di sicurezza

Quando si costruiscono sistemi di rag che servono più inquilini o espongono le capacità di intelligenza artificiale agli utenti esterni, la sicurezza non può essere imbullonata in seguito, deve essere incorporata nella progettazione. Ciò include la protezione dei dati degli utenti, la protezione dell’accesso vettoriale, la gestione dei segreti e il controllo di come vengono costruiti e inviati i prompt a LLM. Redis, Langchain e l’interfaccia LLM introducono tutte considerazioni di sicurezza uniche che devono essere gestite in modo proattivo.

1. Autenticazione e autorizzazione

  • Utilizzare l’autenticazione API basata su OAuth 2.0 o JWT per verificare i chiamanti (ad es. App client, Frontends Chat).
  • Includi identificatori degli inquilini nei token di accesso o nelle intestazioni per guidare il filtro a valle e la logica di scomposizione dei tasti.
  • Effettuare RBAC (controllo degli accessi basato sul ruolo) per azioni amministrative come ingestione di documenti, cancellazione e aggiornamento dell’incorporamento.
  • Redis ACLS può limitare i set di comandi e i modelli chiave per servizio o la chiave di integrazione degli inquilini.
Example Redis ACL:

user acme_support on >password 
  ~tenant:acme:* 
  +JSON.GET 
  +FT.SEARCH

2. Protezione dei dati: a riposo e in transito

  • Usa TLS per tutte le comunicazioni tra i fornitori di Langchain, Redis e LLM.
  • Crittografare tutti i documenti caricati a riposo prima dell’incorporamento, specialmente se conservati all’esterno di Redis (ad esempio, in S3).
  • I dati vettoriali in Redis sono archiviati in memoria ma possono essere supportati da istantanee AOF/RDB crittografate se la persistenza è abilitata.
  • Utilizzare Redis Enterprise o Redis Stack in enclave sicure (volumi di disco crittografati a punta di VPC) per carichi di lavoro di produzione.

3. Gestione dei segreti e sicurezza delle API LLM

  • Mai HardCode OpenAI o Azure OpenAI Keys-Usa AWS Secrets Manager, Hashicorp Vault o Cloud Native KMS Integrations.
  • Utilizzo LLM-Limit di velocità per utente o inquilino per prevenire abusi (iniezione rapida, drenaggio delle quote).
  • Contenuto del prompt dei registri con redazione o monitoraggio basato su hash all’utilizzo dell’audit senza perde del contesto sensibile.

4. Sicurezza rapida e isolamento del contesto

  • Applicare sempre i filtri basati su inquilini durante il recupero di vettori: non fidarti mai del frontend per limitare l’accesso.
  • Sfuggire all’input dell’utente durante l’iniezione nei modelli di prompt. Evita la concatenazione diretta pronta senza servizi igienico -sanitari.
  • Utilizzare i guardrail (ad es. Parser di uscita di Langchain, validatori di regex) per limitare le risposte LLM.
  • Tokenizza l’intento dell’utente separatamente dai blocchi di contesto per evitare l’iniezione di prompt accidentali.
Safe Prompting Pattern:

System: You are a support bot for {tenant}. Use only the context below.

Context:
{retrieved_chunks}   <-- system-controlled

User:
{user_input}         <-- sanitized

5. Osservabilità per la sicurezza

  • Tagga tutte le richieste di Redis e LLM con ID richieste per percorsi di audit.
  • Registra metadati come ID utente, ID inquilini, filtri di recupero e dimensioni del prompt LLM (ma redatti il ​​contenuto del prompt completo).
  • Impostare avvisi su:
    • Eccessivi caricamenti di incorporamento
    • Frequenza di ricerca vettoriale elevata per utente
    • Anomalie della quota LLM o completamenti non riusciti

Un sistema RAG sicuro richiede protezioni a strati: endpoint autenticati, accesso ai dati scavati inquilini, canali crittografati, composizione rapida rapida e registrazione continua. L’orchestrazione strutturata di Redis ACLS e Langchain aiuta a far rispettare i confini, ma i controlli operativi come il limite di velocità e l’osservabilità sono ugualmente critici. Non fidarti di nulla per impostazione predefinita, specialmente in ambienti multi-tenant-e progettare ogni query vettoriale e iniezione rapida come se fosse una potenziale superficie di attacco.

Estensibilità e manutenibilità

In uno stack di intelligenza artificiale in rapida evoluzione, costruire un sistema di stracci che è funzionale oggi non è abbastanza, anche domani deve essere estensibile. I team dovrebbero essere in grado di collegare nuovi modelli di incorporamento, fornitori di LLM, strategie di recupero e persino strumenti specifici del dominio senza refactire l’intero stack. Mantenebilità significa anche mantenere il sistema pulito, modulare e sicuro in termini di scala in crescita e complessità del team.

1. Design del componente modulare

  • Mantieni ogni livello – incorporamento, recupero, assemblaggio rapido, inferenza LLM – come modulo separato con interfacce pulite.
  • Gli strati di astrazione di Langchain (ad es. VectorStore,RetrieverPromptTemplate) Consenti uno scambio facile senza modifiche al core.
  • Usa i modelli di fabbrica per iniettare dipendenze come modelli di incorporamento, negozi di vettoriali e LLM in fase di esecuzione.
# Example: Switching Embedding Model

# Current setup using OpenAI
embedding = OpenAIEmbeddings()

# Later swap with HuggingFace model
embedding = HuggingFaceEmbeddings(model_name="all-mpnet-base-v2")

2. Architettura pronta per il plugin

  • Supportare strumenti aggiuntivi (ad es. API di ricerca, agenti RAG, modelli di calo delle funzioni) come plug-in modulari.
  • Esporre un registro dei plug-in o un caricatore guidato da configurazione in modo che il livello di orchestrazione possa comporre dinamicamente le catene.
  • Usa Langchain Attrezzo Abstrazione o catene di router personalizzati alla logica di filiale in base al tipo di input.
Routing Logic Example:

If query contains a code snippet
    → use "Code Explainer"

If query is tabular
    → route to "CSV Agent"

Otherwise
    → default to "Context Retriever + LLM"

3. Versioni di servizio

  • Versione tutte le API e i modelli di prompt esterni (ad es. /v1/chat/v2/query).
  • Traccia le versioni dello schema vettoriale nei metadati per la compatibilità all’indietro (ad es. "Embedding_v": 2).
  • Consenti a più versioni LLM di coesistere dietro un livello di routing o un sistema di flag di funzionalità.

4. Codice mantenibile e pratiche del flusso di lavoro

  • Separare la logica di orchestrazione dalla logica aziendale: mantieni le catene di Langchain dichiarative e pulite.
  • Utilizzare Pydantic o Marshmallow per la convalida dei dati tra servizi e livelli.
  • Seguire le pratiche di codice pulito: responsabilità singola, composizione rispetto all’eredità, senza costanti incorporate.
  • Documenta ogni catena, contratto di input/output e formato prompt: queste sono ora API di base.

Un sistema REG ben architetto dovrebbe evolversi mentre si spostano modelli, tecniche e requisiti. Utilizzare modelli modulari, definire contratti chiari, versione tutto e preparare il sistema per gestire diversi input e toolchain. È così che eviti il ​​blocco tecnico rimanendo agile e adatto all’aggiornamento.

Stai pensando a lungo termine con sistemi di stracci modulari?

Costruire un sistema REG flessibile e sicuro per l’aggiornamento significa più che far parlare Langchain con Redis-si tratta di progettare per l’ignoto.

Se hai bisogno di aiuto per modulare i tuoi componenti, introducendo il routing dei plug -in o la gestione di versioni di incorporamento/LLM tra gli inquilini, parliamo. Aiutiamo i team a prova futuri i loro sistemi di intelligenza artificiale con architettura pulita ed estensibile che non marcisce sotto pressione.

Parliamo

Ottimizzazione delle prestazioni

L’ottimizzazione delle prestazioni in un sistema RAG non è solo risposte più veloci: si tratta di un controllo più stretto sui costi, una migliore esperienza dell’utente ed evitare colli di bottiglia silenziosi che degradano l’accuratezza o causano timeout. Redis abilita il recupero dei sotto-50ms, ma questa è solo una parte dell’equazione. Dimensione rapida, efficienza di incorporamento, latenza I/O e tempo di risposta LLM necessitano di un’attenzione chirurgica per ottenere comportamenti in tempo reale sotto il carico di produzione.

1. Ottimizzazione della ricerca vettoriale

  • Fine-tune Parametri HNSW:
    • Ef_construction : 100–400 (Controlla la qualità dell’indice)
    • : 16–32 (compromesso: più alto = più accurato, più lento da costruire)
    • Ef_runtime : 50–100 (superiore = richiamo migliore, query più lenta)
  • Potare periodicamente vecchi vettori se non sono più rilevanti: la riduzione della dimensione dell’indice migliora le prestazioni.
  • Utilizzare i filtri dei metadati per ridurre l’ambito di ricerca (ad esempio, per tipo di documento, recency o tag).

2. Strategia di incorporamento

  • Usa blocchi più corti e semanticamente completi (~ 200–300 token). Evita blocchi troppo lunghi: diluiscono la qualità dell’incorporamento.
  • Deduplicare blocchi quasi identici usando somiglianza del coseno o hash per ridurre il rumore durante il recupero.
  • I risultati di incorporamento batch e risultati della cache sono la chiave della versione del modello di hash + contenuto per evitare il calcolo ridondante.

3. Gestione delle dimensioni prompt

  • Limitare l’iniezione di contesto ai blocchi Top-3 o Top-5 a meno che non sia assolutamente necessario.
  • Taglia la formattazione eccessiva o la piastra della caldaia da contenuti recuperati prima di suggerire.
  • Utilizzare i servizi di conteggio dei token per pre-convalidare la dimensione del prompt finale rispetto ai limiti del modello (ad es. Token 8K o 16K).
Prompt Size Rule of Thumb:

- GPT-4-turbo (128k):
    max context ~100,000 tokens

- GPT-3.5-turbo (16k):
    stay under 12,000 tokens in prompt to avoid truncation

4. Maggiore e elaborazione dell’asincronizzazione

  • Cache I recuperi top-k per query frequentemente visti (usa Redis come vettore+metadati LRU cache).
  • Incorporamenti precomputi per ingressi noti come query FAQ, script di onboarding o flussi di lavoro standard.
  • Esegui la ricerca vettoriale e il prompt dell’assemblaggio in modo asincrono dal thread di interazione dell’utente per tagliare la latenza percepita.
  • Usa lo streaming (ad es. Openi’s stream = true) per mostrare risposte parziali come i token arrivano.

5. Monitoraggio delle prestazioni KPI

  • Recupero vettoriale: Latenza p95 <40ms
  • Build prompt LLM: <5ms per il riempimento del modello
  • Prima latenza simbolica: <300 ms per lo streaming aperto
  • Tempo end-to-end: 500-900 ms Target medio

Le prestazioni non riguarda solo la velocità: si tratta di prevedibilità, efficienza e precisione. Sintonizza gli indici di Redis con cura, memorizza la cache di ciò che puoi, tagliare ciò di cui non hai bisogno e flusso di risultati per ridurre il ritardo percepito. Un sistema rapido è uno che è sia reattivo che ripetibile, anche sotto pressione.

Strategia di test

I sistemi REG di livello di produzione richiedono più dei test unitari di base. Poiché sono in parte ML, motore di ricerca in parte e software tradizionale in parte: i test devono estendersi in modo sintattico, precisione semantica, stabilità di integrazione e latenza sotto carico. Una copertura di test efficaci garantisce che la logica di recupero, gli incorporamenti e l’orchestrazione rapida si comportino in modo affidabile anche quando i modelli e le impostazioni vettoriali si evolvono.

1. Test di unità e integrazione

  • Documento di prova Logica di chunking per garantire che i confini semantici siano conservati.
  • Convalida l’incorporamento della forma, del tipo e del determinismo del modello.
  • Assicurarsi che l’I/O Redis funzioni con lo schema corretto (in particolare Vector + Metadata).
  • Prova le catene di Langchain utilizzando i risultati del vettore finto e i suggerimenti simulati per isolare gli errori logici.
  • Includi test negativi – ad es. Input malformato, colpi vettoriali vuoti, lingue non supportate.

2. Test di precisione di recupero

  • Utilizzare un set di dati d’oro di query → mappature previste per inquilino o dominio.
  • Misura la precisione top-K e il richiamo per il recupero vettoriale contro queste verità a terra.
  • Prove di riesamina ogni volta:
    • Incorporare i cambiamenti del modello
    • La configurazione di Chunking viene aggiornata
    • La soglia di somiglianza o i filtri sono regolati
Example:

Query:
  "How do I reset my password?"

Expected Chunk:
  Contains text from "resetting your password" guide

Precision@5:
  1.0 (correct hit at rank 1)

3. Automazione del test CI/CD

  • Esegui test veloci (unità + contratto) su ogni commit.
  • Esegui test di recupero semantico ogni notte o in stadiazione (richiede più tempo a causa dell’incorporamento e della ricerca).
  • Tieni traccia dei conteggi dei token prompt per implementazione per catturare la deriva nell’inflazione rapida.
  • Utilizzare i test istantanei per le coppie di prompt + risposta note se la stabilità dell’uscita è importante.

4. Test di carico e resilienza

  • Simula query concorrenti tra gli inquilini per testare il comportamento del cluster Redis.
  • Usa Locust o K6 per testare la latenza a livello di API dall’ingestione alla risposta LLM.
  • Iniettare modalità di guasto sintetico (ad es. Redis Timeouts, LLM REALAYS, Chunk Dropouts) per testare i fallback e la gestione degli errori.
  • L’impatto della traccia sulla latenza della coda (P95/P99), specialmente nei flussi di chat.

5. Monitoraggio delle metriche durante i test

  • Latenza di query vettoriale
  • Tasso di chiamata API LLM e tasso di fallimento
  • Distribuzione della dimensione del token pronta
  • Rapporto di successo/Miss Recupero
  • Brukedown di errore per modulo (Retriever, Embedder, Router, ecc.)

Metti alla prova il tuo sistema RAG come se fosse in parte motore di ricerca e compilatore in parte. Convalida la logica in anticipo, convalida spesso il significato e convalida continuamente le prestazioni. Senza forti test per l’accuratezza del recupero e la correttezza rapida, il sistema può apparire bene nella messa in scena e allucinare in produzione.

DevOps e CI/CD

Spedire un sistema di REG in produzione significa più che distribuire alcuni script Python e un container Redis. Richiede una robusta pipeline CI/CD, automazione delle infrastrutture, gestione del ciclo di vita del modello e meccanismi controllati di lancio. Poiché questi sistemi toccano l’interazione utente in diretta, i documenti e le costose API LLM: l’affidabilità e la ripetibilità non sono negoziabili.

1. Fase della pipeline CI/CD

  • Pre-impegno: Esegui analisi statiche (ad es. ruff,nero, Pyright), test unitari e Linter prompt su ogni impegno per sviluppatori.
  • Costruire: Containerizzare l’app Langchain, l’incorporamento e i servizi di ingestione vettoriali utilizzando build Docker in più stadi.
  • Test: Esegui test di integrazione con Redis In-Memory o Redis Stack Test Container, utilizzando le query Golden + LLMS derisi.
  • Distribuisci: Spingere alla messa in scena o al QA, con tasti Redis + LLM specifici dell’ambiente. Convalida la creazione dello schema vettoriale su avvio.
  • Promuovere: Distribuzione blu-verde o canarino alla produzione con ganci di rollback e osservabilità cotta.

2. Infrastruttura come codice

  • Utilizzo TerraformbirmanoOCDK Per provocare Redis Stack, chiavi/segreti API LLM, modelli di schema vettoriale e strumenti di osservabilità.
  • Definire gli spazi dei nomi per inquilini in Redis durante il provisioning se si utilizza l’isolamento logico.
  • Utilizzare i file di configurazione o Secrets Manager ai riferimenti alle versioni LLM Inject, incorporare nomi di modelli e URI del cluster Redis in fase di esecuzione.

3. Strategia di distribuzione

  • Blu-verde: Eseguire due ambienti identici, cambiare traffico quando la nuova versione passa tutti i controlli di salute.
  • Canarino: Intrappola una piccola percentuale di domande di produzione a una nuova versione, monitorare la qualità della risposta e la latenza.
  • Flag di funzionalità: Utilizzare flag per abilitare nuovi indici vettoriali, modelli di prompt o toolchain per inquilino o org.
Example:

- New reranker model only enabled for tenant=acme via feature flag  
- Toggle back instantly if accuracy drops or latency spikes

4. Segreti e gestione delle credenziali

  • Non iniettare mai chiavi aperte, password Redis o token inquilini al momento di build – tira da Runtime Vault (AWS Secrets Manager, Doppler, ecc.).
  • Ruota le chiavi LLM e i token di auth inquilini utilizzando regolarmente programmi di chiave automatizzati.
  • Audit tutto l’accesso a segreti e API esterne come parte dei controlli post-debound.

CI/CD per i sistemi RAG deve includere la convalida dello schema, l’iniezione segreta, le strategie di distribuzione pronte per il rollback multi-ambiente. Spediscilo come un software, monitoralo come un motore di ricerca e automatizzalo come l’infrastruttura. Qualcosa di meno e stai lanciando i dadi in produzione.

Pronto a rendere operativo il tuo stack di stracci?

La distribuzione di una pipeline RAG di grado di produzione significa trattarlo come un’infrastruttura critica, non un esperimento di intelligenza artificiale.

Se stai cercando di stringere i flussi di lavoro CI/CD, automatizzare il provisioning di Redis e Langchain o implementare le versioni blu-verde e bandiera di funzionalità per i sistemi guidati da LLM, mettiti in contatto. Aiutiamo i team a muoversi rapidamente senza interrompere la produzione.

Connettiamoci!

Monitoraggio e osservabilità

Non puoi ridimensionare o eseguire il debug di ciò che non puoi vedere. Il monitoraggio di un sistema REG significa monitorare tutto, dalla latenza della query di Redis Vector alle anomalie della dimensione prompt LLM, anomalie di recupero del contesto e bruciatura delle quote di utilizzo. Poiché questi sistemi fondono i servizi di apolidi con flussi di dati dinamici, l’osservabilità deve essere cotta in ogni livello, non aggiunto dopo il fatto.

1. Strategia di registrazione

  • Registra ogni richiesta di ricerca vettoriale con:
    • ID inquilino
    • Stringa di query + hash
    • Soglie di distanza vettoriale e filtri utilizzati
    • ID risultato Top-K e punteggi di corrispondenza
  • Log LLM Prompt (con redazione) e le risposte del modello con ID Trace.
  • Utilizzare i formati di registrazione strutturati (JSON) per semplificare l’analisi nei sistemi a valle come ELK, LOKI o DATADOG.

2. Metriche da tracciare

  • Ricerca vettoriale Redis: latenza AVG, p95, rapporto di successo
  • Incorporamento della throughput: # di vettori/sec per lavoro di ingestione
  • Utilizzo di LLM: token in/out, errori, distribuzione delle dimensioni prompt
  • Efficienza della cache rapida: Tasso di hit della cache, conteggio dello sfratto
  • Metriche di sessione: Lunghezza media della sessione, query ripetute, riutilizzo del contesto stantio
Example:

vector.search.p95           = 35ms
llm.prompt.tokens.avg       = 1100
cache.hit_rate.context      = 87%

3. Avviso e rilevamento di anomalie

  • Avvisi di grilletto su:
    • Latenza query redis> 100ms (P95)
    • Tasso di errore LLM> 5%
    • Dimensione prompt> Limite del modello (Overflow token)
    • Improvviso calo di precisione di recupero per domande note
  • Utilizzare il rilevamento di anomalie (ad es. Prometheus + Grafana, Datadog Watchdog) per catturare regressioni semantiche nel tempo di risposta di richiamo o prompt.

4. Tracing e propagazione del contesto

  • Utilizzare OpenTeleMetry o Datadog APM per tracciare il ciclo completo della richiesta completa: utente → Retriever → Redis → Prompt → LLM → Risposta.
  • Assegna ID richieste o traccia token per sessione e propaga tra i componenti asincroni.
  • Correlare i tempi di recupero vettoriale con la latenza LLM per l’analisi della causa principale.

L’osservabilità nei sistemi RAG riguarda la visibilità in ogni fase della pipeline di generazione. Quando i picchi di latenza o le cadute di qualità, vorrai risposte rapidamente, non indovina. Metriche, registri e tracce insieme aiutano i problemi di debug, mettono a punto le prestazioni e mantengono sotto controllo i costi LLM.

Compromessi e decisioni di progettazione

Ogni scelta architettonica in un sistema REG ha conseguenze – alcune immediate, altre differite. Dal raccogliere Redis su database vettoriali appositamente costruiti all’integrazione della dimensione del blocco e della strategia di prompt LLM, dei costi di forma, delle prestazioni e dell’agilità a lungo termine. È essenziale capire cosa è stato guadagnato, cosa è stato compromesso e dove è stata intenzionalmente conservata la flessibilità.

1. Redis vs DBS vettoriale specializzato

  • Pro:

    • Velocità in memoria <50ms Ricerca vettoriale
    • Familiarità operativa – Redis è ampiamente adottato
    • Multiuso: memorizzazione nella cache, memoria di sessione, pub/sub insieme alla ricerca vettoriale
  • Contro:

    • Legato alla memoria-Richiede un’impronta di RAM di grandi dimensioni per i vettori> 5 m
    • Opzioni algoritmo ANN limitate (solo HNSW)
    • Nessun punteggio di reranking incorporato o simbolico ibrido+vettoriale

2. Dimensione del blocco vs Fit prompt

  • I blocchi più piccoli (token 200–300) migliorano la rilevanza semantica ma aumentano l’uso di token.
  • I blocchi più grandi riducono le chiamate dell’API di recupero ma rischiano l’iniezione di contesto rumorosa e diluita.
  • Il compromesso deve essere sintonizzato in base al budget rapido medio e al modello di prezzi LLM.

3. Prost statici vs routing prompt dinamico

  • I modelli statici sono più facili da mantenere e testare ma non sono in grado di gestire diversi tipi di intenti.
  • Il routing dinamico consente un miglioramento specifico per le attività (ad es. Spiegare il codice, riassumere la tabella, tradurre), ma aggiunge complessità.
  • Richiede una logica chiara e catene di fallback per evitare “spaghetti rapidi”.

4. Multi-locazione vs isolamento

  • L’isolamento a chiave in Redis è efficiente ma non a prova di proiettile: gli ACL e le convenzioni prefissi devono essere rigorosamente applicati.
  • Il partizionamento logico può scalare a dozzine di inquilini, ma centinaia possono richiedere un cluster Redis con frammenti personalizzati.
  • I casi Redis completamente isolati offrono garanzie più forti ma aumentano i costi e la complessità dell’infra.

5. Alternative respinte

  • FAISS è stato considerato per la ricerca vettoriale locale, ma mancava di filtraggio di metadati e ha richiesto la complessità dell’hosting.
  • Pinecone è stato escluso per motivi di costo e controllo nelle distribuzioni autogestite.
  • È stata testata la memorizzazione di incorporamenti nel PGVector di Postgres: funzionale, ma più lento e più difficile da scalare sotto accesso simultaneo.

L’architettura favorisce la semplicità operativa, la latenza secondaria e l’orchestrazione modulare rispetto alla scalabilità grezza di Ann. Redis lo rende praticabile, purché tu sia a conoscenza dei vincoli di memoria e dei limiti delle dimensioni dell’indice. La scelta della flessibilità a livello di orchestrazione e recupero consente di evolvere il sistema in modo incrementale senza sostituire.

Lezioni dalla costruzione di uno stack di Redis + Langchain

Costruire un sistema di REG pronto per la produzione con Langchain e Redis non è solo possibile: è una scelta pragmatica e performativa per molti scenari del mondo reale. Redis offre ricerca vettoriale a bassa latenza e filtraggio dei metadati nativi, mentre Langchain porta la disciplina di orchestrazione al disordinato mondo di incorporazioni di condutture e ingegneria rapida. Insieme, colpiscono un equilibrio tra velocità, modularità e chiarezza operativa.

Questa architettura è particolarmente adatta per:

  • Piattaforme SaaS multi-tenant che necessitano di un rigoroso isolamento dei dati.
  • Applicazioni a bassa latenza (ad es. Chatbot, copiloti, assistenti incorporati).
  • Team che già usano Redis e vogliono evitare di distribuire un altro DB vettoriale.
  • I casi d’uso in cui sono obbligatori il controllo dei costi LLM e l’applicazione del budget token.

I punti di forza del sistema includono un’iterazione rapida, capacità di scambio modulare (modelli, vettoriali, LLM) e un ciclo operativo stretto tramite astrazioni Redis e Langchain. I punti deboli si presentano su vasta scala: carichi di lavoro pesanti della memoria, crescita dell’indice e opzioni ANN limitate significano che alla fine avrai bisogno di un attento partizionamento o di ripensare parti dello stack.

Ma per la stragrande maggioranza dei team che si spostano dalla prova del concetto di Rag al MVP di produzione-questo stack ti porta lì senza bloccarti o rallentarti.

Costruire qualcosa di simile? Architetto bene.

Sia che tu stia ridimensionando un assistente di intelligenza artificiale per migliaia di utenti aziendali o prototipando un chatbot specifico per verticale, Redis + Langchain è una base rapida ed estensibile, ma preparare la produzione richiede una precisione architettonica.

Se stai pianificando un lancio, lottare con multi-tenancy o semplicemente cercando di ottenere latenza sub-secondo senza perdere il controllo dei costi di LLM, contattaci. Aiutiamo i team a progettare condutture di stracci che si esibiscono, scalano e durano.

Parliamo