| name | chains |
| description | All Chain types — LLMChain, ConversationalChain, SequentialChain, StuffDocuments, ConversationalRetrievalQA, SqlDatabaseChain. |
Every chain type has a dedicated Builder. Use invoke() for a string result, call() for token
usage, stream() for streaming. ConversationalChain needs memory; retrieval chains need a Retriever.
## Chain Types
| Chain | Builder | Requires |
|---|
LLMChain | LLMChainBuilder | prompt, llm |
ConversationalChain | ConversationalChainBuilder | llm (memory optional, defaults to SimpleMemory) |
SequentialChain | SequentialChainBuilder | chains vec, input/output key mapping |
StuffDocumentsChain | StuffDocumentBuilder | llm (or a prompt) |
ConversationalRetrieverChain | ConversationalRetrieverChainBuilder | llm, retriever |
SqlDatabaseChain | SqlDatabaseChainBuilder | llm, datasource |
## ConversationalChain
use langchainx::{
chain::{Chain, ConversationalChainBuilder},
llm::openai::OpenAI,
memory::SimpleMemory,
prompt_args,
};
let chain = ConversationalChainBuilder::new()
.llm(OpenAI::default())
.memory(SimpleMemory::new().into())
.build()?;
chain.invoke(prompt_args! { "input" => "My name is Alice" }).await?;
let reply = chain.invoke(prompt_args! { "input" => "What is my name?" }).await?;
The default input key is "input". History is stored under "history" in the prompt.
## SequentialChain
use langchainx::chain::{SequentialChainBuilder, Chain};
let chain = SequentialChainBuilder::new()
.add_chain(chain1)
.add_chain(chain2)
.build()?;
## StuffDocumentsChain
Stuffs retrieved documents into the prompt context.
use langchainx::chain::StuffDocumentBuilder;
let chain = StuffDocumentBuilder::new()
.llm(OpenAI::default())
.build()?;
Used internally by ConversationalRetrieverChain and question_answering::load_qa_with_sources_chain.
## ConversationalRetrievalQA
use langchainx::{
chain::{Chain, ConversationalRetrieverChainBuilder},
llm::openai::OpenAI,
memory::SimpleMemory,
vectorstore::Retriever,
prompt_args,
};
let retriever = Retriever::new(vector_store, 5);
let chain = ConversationalRetrieverChainBuilder::new()
.llm(OpenAI::default())
.retriever(retriever)
.memory(SimpleMemory::new().into())
.build()?;
let answer = chain.invoke(prompt_args! {
"input" => "What does the document say about X?"
}).await?;
## Streaming
use futures::StreamExt;
let mut stream = chain.stream(prompt_args! { "input" => "Tell me a story" }).await?;
while let Some(chunk) = stream.next().await {
match chunk {
Ok(data) => print!("{}", data.content),
Err(e) => eprintln!("stream error: {e}"),
}
}
Note: chains with memory do NOT automatically save memory when using stream() — only
call() and invoke() save to memory.