LLM Agent Guides: LangChain, LangGraph & AI Tooling

Guides for developers building LLM agents and the tooling around them — LangChain and LangGraph, vector stores such as ChromaDB, and AI coding assistants.

Each guide starts from a concrete symptom or error, cites the official documentation and the GitHub issues where the problem was actually reported, and says which parts are confirmed and which are one user’s report.

Overview

This collection of troubleshooting guides tackles common technical failures encountered when building applications with AI agent frameworks and tooling. Across ecosystems like LangGraph, LangChain, ChromaDB, CrewAI, and Cursor, these articles examine the specific mechanisms behind runtime errors, infinite execution loops, state corruption, concurrency bottlenecks, and resource spikes. What connects them is a focus on resolving configuration conflicts and framework-level constraints, whether dealing with silent deserialization failures, coordinate dimension mismatches, or uncontrolled background scans.

To choose where to begin, diagnose your system based on its immediate symptoms. If you face graph execution halting on step limits or concurrent state update conflicts, start with the LangGraph guides addressing recursion errors, annotated reducers, or checkpointer serialization. If your vector storage fails on write contention or mismatched embedding vectors, review the ChromaDB articles on database locks and dimension errors. Readers encountering parsing collisions in legacy ReAct agents, missing API keys in CrewAI memory settings, or heavy CPU freezes during Cursor codebase indexing should target those dedicated workflow investigations.

Practical guides

  • Troubleshooting CrewAI ValidationError: Please Provide an OpenAI API Key — Enabling memory=True on a Crew triggers a Pydantic ValidationError when an OpenAI API key is absent because CrewAI’s embedder parameter defaults to {“provider”: “openai”}. Issue #2943 was reported on crewAI 0.121.0 and has since been closed as completed, with a linked commit titled “Fix ValidationError when using memory=True without OpenAI API key”. The sources do not say whether newer releases…
  • Troubleshooting ChromaDB InvalidDimensionException: Resolving the 1536 vs 384 Dimension Mismatch — ChromaDB raises an InvalidDimensionException when a collection defaults to a 384-dimensional embedder at creation but receives 1536-dimensional query vectors from models like OpenAI. ChromaDB collections enforce a strict, immutable coordinate space that cannot be modified in place once initialized. To prevent dimension mismatches, developers must explicitly configure the desired embedding…
  • Troubleshooting LangGraph InvalidUpdateError: Resolving Concurrent State Updates with Annotated Reducers — LangGraph raises InvalidUpdateError when multiple concurrent nodes write to the same state key in a single step without an aggregation rule. To intentionally combine concurrent updates, define the state key using typing.Annotated and a reducer function such as operator.add. Unintentional collisions can be prevented by assigning dedicated state keys to parallel branches or routing them into…
  • Troubleshooting LangChain OutputParserException: Both Final Answer and Parse-able Action Produced — The OutputParserException fires when a ReAct-style agent’s output matches both the action pattern (Action:/Action Input:) and the final-answer prefix (Final Answer:) in the same turn, so ReActSingleInputOutputParser cannot tell whether to dispatch a tool call or end the run. handle_parsing_errors=True catches the exception and, by default, feeds back a fixed placeholder message (“Invalid or…
  • Resolving Pydantic State Deserialization Failures in LangGraph Checkpointers — Pydantic state deserialization problems in LangGraph checkpointers come from four distinct mechanisms with different symptoms: msgpack allowlist restrictions under strict mode, classes that cannot be re-imported (dynamic or local scope), schema drift between old checkpoints and newer models, and non-serializable attributes that actually fail when the checkpoint is written. The usual symptom is…
  • Resolving SQLite Database Lock Errors in ChromaDB During Concurrent Writes — SQLite enforces a global write lock in Embedded ChromaDB, which causes SQLITE_BUSY database lock errors during concurrent write operations and read-to-write lock upgrades. Standard write contention can be mitigated by keeping insert batch sizes between 50 and 250 records and raising SQLite’s own PRAGMA busy_timeout to at least 5 seconds — this is a general SQLite setting, not a parameter ChromaDB…
  • Fixing High CPU Spikes and Freezes During Large Codebase Indexing in Cursor — High CPU spikes during Cursor codebase indexing are usually not an embedding-generation cost — they mostly come from background rg (ripgrep) processes scanning large binary/artifact-heavy workspaces with wide-scope flags. Developers can shrink that scan scope by excluding heavy files with .cursorignore, .cursorindexingignore, and a global ignore list, disabling symlink traversal, and keeping the…
  • Fixing LangGraph GraphRecursionError and LangChain Agent Infinite Loops — GraphRecursionError: Recursion limit of N reached without hitting a stop condition means a custom LangGraph run executed N super-steps without any node routing to END. N is whatever recursion_limit is set to for that run. The familiar 25 is the LangGraph JS default and was the LangGraph Python default before v1.0.6. Current LangGraph Python defaults much higher (the docs say 1000; the source…

Other topics