LangChain & LLM Patterns
Chains, RAG, agents, memory, tools, prompt templates, tracing.
aillmlangchainpython
# LangChain & LLM Patterns
## Core abstractions
- **Model**: LLM or ChatModel (OpenAI, Anthropic, Ollama).
- **Prompt Template**: parameterized prompts.
- **Chain (LCEL)**: pipe `|` syntax for composing steps.
- **Retriever**: fetch relevant docs from vector store.
- **Agent**: LLM decides which tools to call.
- **Memory**: persist conversation history.
## Basic chain (LCEL)
```python
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
chain = (
ChatPromptTemplate.from_messages([
("system", "You are a helpful assistant."),
("user", "{question}"),
])
| ChatOpenAI(model="gpt-4o-mini")
| StrOutputParser()
)
answer = chain.invoke({"question": "What is RAG?"})
```
## RAG (Retrieval-Augmented Generation)
```python
from langchain_openai import OpenAIEmbeddings
from langchain_chroma import Chroma
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_core.runnables import RunnablePassthrough
chunks = RecursiveCharacterTextSplitter(chunk_size=1000).split_documents(docs)
vectorstore = Chroma.from_documents(chunks, OpenAIEmbeddings())
retriever = vectorstore.as_retriever(search_kwargs={"k": 4})
rag_chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt | model | StrOutputParser()
)
```
## Tools & Agents
```python
from langchain_core.tools import tool
from langchain.agents import create_tool_calling_agent, AgentExecutor
@tool
def search(query: str) -> str:
"""Search the web."""
return web_search(query)
agent = create_tool_calling_agent(model, [search], prompt)
executor = AgentExecutor(agent=agent, tools=[search])
executor.invoke({"input": "Weather in Beijing?"})
```
## Memory
```python
from langchain_core.runnables.history import RunnableWithMessageHistory
chain_with_memory = RunnableWithMessageHistory(
chain,
get_session_history=lambda sid: InMemoryChatMessageHistory(),
input_messages_key="question",
history_messages_key="history",
)
```
## Tracing (LangSmith)
Set `LANGCHAIN_TRACING_V2=true` + `LANGCHAIN_API_KEY`. All runs traced automatically.API: /api/skills/langchain-llm