Skip to content
Back to skills

Langchain

ASecurity

Apply when building LangChain pipelines, LCEL chains, agents, or retrieval-augmented generation systems.

  • 20 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added June 1, 2026
ai-agentspythonrustshellsqlreactexpressapisecurity

Works with

  • api

Security analysis

A100/100

Scanned June 1, 2026

npx -y skills add sordi-ai/skill-everything --skill langchain --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Langchain?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Langchain
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/sordi-ai-langchain/badge)](https://www.skillsdirectory.com/skills/sordi-ai-langchain)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: langchain
description: Apply when building LangChain pipelines, LCEL chains, agents, or retrieval-augmented generation systems.
license: MIT
version: 1.0.0
tokens_target: 2200
triggers:
  - langchain
  - lcel chain
  - agent framework
loads_after: [python]
supersedes: []
---

# Sub-Skill: LangChain / Agent Framework Conventions

**Purpose:** Prevent common LangChain mistakes — deprecated chain classes, missing retry/timeout guards, unsafe prompt handling, and unobservable pipelines.

---

## Rules

### Chain Construction

1. **Use LCEL pipe syntax.** Always use the LCEL pipe operator (`|`) to compose runnables instead of deprecated constructor-based chain classes (`LLMChain`, `SequentialChain`, `TransformChain`). Reference: ERR-2026-026
2. **Avoid legacy chain imports.** Never import from `langchain.chains.llm` or `langchain.chains.sequential`; use `langchain_core.runnables` and `langchain_core.prompts` instead.
3. **Prefer RunnablePassthrough for identity steps.** Use `RunnablePassthrough` to thread context through a chain without mutation rather than writing a lambda that returns its input unchanged.
4. **Use RunnableParallel for fan-out.** Prefer `RunnableParallel` over manually calling multiple chains and merging dicts; it expresses intent and enables parallel execution.

### Prompts & Output Parsers

5. **Use typed output parsers.** Always attach an output parser (`PydanticOutputParser`, `JsonOutputParser`, `StrOutputParser`) to chains that produce structured data; never parse raw LLM strings manually downstream.
6. **Inject format instructions via partial.** Use `prompt.partial(format_instructions=parser.get_format_instructions())` to bind parser instructions into the prompt template rather than hard-coding them in the template string.
7. **Separate system and human messages.** Use `ChatPromptTemplate.from_messages([("system", ...), ("human", ...)])` instead of a single `PromptTemplate` for chat models; mixing roles in one string breaks structured output.

### Chat Models vs LLMs

8. **Prefer ChatModel over LLM.** Always use `ChatOpenAI`, `ChatAnthropic`, or equivalent chat-model classes for new code; the base `OpenAI` LLM class is deprecated for most use cases and lacks tool-calling support.
9. **Pin model name explicitly.** Never rely on the default model name in a chat model constructor; always pass `model="gpt-4o"` (or equivalent) so upgrades are intentional.

### Memory & State

10. **Use RunnableWithMessageHistory for stateful chains.** Prefer `RunnableWithMessageHistory` over manual history management or deprecated `ConversationChain`; it integrates cleanly with LCEL and supports async.
11. **Scope memory by session ID.** Always pass a `session_id` key when constructing `RunnableWithMessageHistory` to prevent cross-user memory leakage in multi-tenant services.

### Tools & Agents

12. **Define tools with @tool decorator.** Use the `@tool` decorator (or `StructuredTool.from_function`) with a typed signature and docstring; never pass raw callables to an agent without a schema.
13. **Use create_tool_calling_agent for modern agents.** Prefer `create_tool_calling_agent` + `AgentExecutor` over deprecated `initialize_agent`; it uses native tool-calling APIs and avoids ReAct string parsing.
14. **Cap agent iterations.** Always set `max_iterations` and `max_execution_time` on `AgentExecutor` to prevent runaway loops; default is unbounded.

### Retrieval & Vector Stores

15. **Use retrieval chains via LCEL.** Build RAG pipelines with `retriever | format_docs | prompt | llm | parser` rather than `RetrievalQA.from_chain_type`; the latter is deprecated and hides the retrieval step.
16. **Ensure document loaders are lazy.** Prefer `.lazy_load()` over `.load()` for large corpora to avoid loading all documents into memory at once.

### Reliability & Observability

17. **Wrap LLM calls with retry.** Use `.with_retry(stop_after_attempt=3, wait_exponential_jitter=True)` on any runnable that calls an external API; never let transient rate-limit errors propagate uncaught.
18. **Set request timeout.** Always pass `request_timeout` (or `timeout`) to chat model constructors; omitting it allows indefinitely hanging requests.
19. **Attach callbacks for observability.** Use `callbacks=[LangSmithTracer()]` or equivalent on chains in production; never ship a pipeline with no tracing so failures are diagnosable.
20. **Count tokens before sending.** Before sending large contexts, use `llm.get_num_tokens(text)` or a tiktoken counter to verify the payload fits within the model's context window.

### Security

21. **Sanitize user input before prompt injection.** Never interpolate raw user strings directly into system prompts; use a dedicated input variable in the prompt template and validate/strip control characters before binding.
22. **Disable dangerous tools in untrusted contexts.** Avoid giving agents tools with filesystem or shell access when processing untrusted input; scope tool permissions to the minimum required.

### Caching & Cost

23. **Enable semantic caching in dev.** Use `set_llm_cache(InMemoryCache())` during development and `SQLiteCache` in staging to avoid redundant API calls and reduce cost during iteration.

---

## See also

- `skills/python/SKILL.md`
- `skills/error-log/SKILL.md`

---

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.