AI Skill Library

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