RunnablePassthrough & RunnableParallel (Lanțuri RAG) în LangChain & LangGraph

Piesele de legătură din arhitectura LCEL: permit executarea în paralel a mai multor ramuri și transmiterea întrebării originale neschimbate către șablonul de prompt.

Sintaxă & invocare Python
from langchain_core.runnables import RunnablePassthrough

rag_chain = (
    {'context': retriever, 'intrebare': RunnablePassthrough()}
    | prompt
    | llm
    | StrOutputParser()
)

Descriere & Utilizare

Într-un flux RAG, șablonul ChatPromptTemplate are nevoie de două variabile simultan: {context} (fragmentele găsite de retriever) și {intrebare} (întrebarea exactă pe care a pus-o utilizatorul).

Când scrii un dicționar literal într-un lanț LCEL, LangChain îl convertește automat într-un RunnableParallel care execută toate cheile în același timp.

Clasa RunnablePassthrough() acționează ca un fir direct de cupru: preia intrarea utilizatorului și o pasează neschimbată în cheia 'intrebare', în timp ce cheia 'context' trimite aceeași intrare către retriever pentru a extrage documentele.

Cum să o reții ușor

💡 Ca un distribuitor hidraulic în formă de Y: apa care intră pe conductă se bifurcă simultan în două direcții – o ramură trece prin filtrul de cafea (Retriever), iar cealaltă merge direct în ceașcă (Passthrough), întâlnindu-se la final.

Opțiuni și parametri tehnici

  • Dicționarul din stânga operatorului | este împachetat automat în RunnableParallel.
  • Ambele ramuri sunt executate concurent în thread-uri sau task-uri asincrone.
  • Dicționarul rezultat {'context': [...], 'intrebare': '...'} alimentează direct ChatPromptTemplate.

Exemple practice și cazuri de utilizare

  • Formatare curată a documentelor în RAG: {'context': retriever | (lambda docs: '\n\n'.join(d.page_content for d in docs)), 'intrebare': RunnablePassthrough()}
  • Adăugare cheie suplimentară fără a pierde intrarea: RunnablePassthrough.assign(lungime=lambda x: len(x['text']))

Sfaturi de configurare & capcane

Combină retriever cu o funcție scurtă de formatare (retriever | format_docs) pentru a trimite în prompt doar textul concatenat al documentelor, nu reprezentarea tehnică a obiectelor Python Document(...).

Comenzi și ghiduri înrudite