> ## Documentation Index
> Fetch the complete documentation index at: https://agno-v2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Chunking

> Split documents into smaller pieces for effective vector search.

Chunking divides content into smaller pieces before embedding and storing in a vector database. The strategy you choose affects search quality and retrieval accuracy.

```python theme={null}
from agno.knowledge.chunking.semantic import SemanticChunking
from agno.knowledge.reader.pdf_reader import PDFReader

reader = PDFReader(
    chunking_strategy=SemanticChunking(),
)
```

## Why Chunking Matters

Consider processing a recipe book with different strategies:

| Strategy | Result |
| - | - |
| Fixed Size (5000 chars) | May split recipes mid-instruction |
| Semantic | Keeps complete recipes together based on meaning |
| Document | Splits at paragraph and section boundaries |

The right strategy returns complete, relevant results. The wrong one returns fragments.

## Available Strategies

> **[Fixed Size](https://agno-v2.mintlify.site/knowledge/concepts/chunking/fixed-size-chunking.md)**
>
> Split into uniform chunks by character count

> **[Semantic](https://agno-v2.mintlify.site/knowledge/concepts/chunking/semantic-chunking.md)**
>
> Split at natural breakpoints based on meaning

> **[Recursive](https://agno-v2.mintlify.site/knowledge/concepts/chunking/recursive-chunking.md)**
>
> Split using multiple separators hierarchically

> **[Document](https://agno-v2.mintlify.site/knowledge/concepts/chunking/document-chunking.md)**
>
> Preserve document structure (paragraphs, sections)

> **[Markdown](https://agno-v2.mintlify.site/knowledge/concepts/chunking/markdown-chunking.md)**
>
> Split by heading structure

> **[CSV Row](https://agno-v2.mintlify.site/knowledge/concepts/chunking/csv-row-chunking.md)**
>
> Each row becomes a chunk

> **[Agentic](https://agno-v2.mintlify.site/knowledge/concepts/chunking/agentic-chunking.md)**
>
> AI determines optimal boundaries

> **[Code](https://agno-v2.mintlify.site/knowledge/concepts/chunking/code-chunking.md)**
>
> Split at function and class boundaries using AST analysis

> **[Custom](https://agno-v2.mintlify.site/knowledge/concepts/chunking/custom-chunking.md)**
>
> Build your own strategy

## Using with Readers

Pass a chunking strategy to any reader:

```python theme={null}
from agno.knowledge.knowledge import Knowledge
from agno.knowledge.chunking.fixed import FixedSizeChunking
from agno.knowledge.reader.pdf_reader import PDFReader
from agno.vectordb.pgvector import PgVector

reader = PDFReader(
    chunking_strategy=FixedSizeChunking(chunk_size=3000),
)

knowledge = Knowledge(
    vector_db=PgVector(table_name="docs", db_url=db_url),
)

knowledge.insert(path="documents/", reader=reader)
```

## Choosing a Strategy

| Content Type | Recommended Strategy | Why |
| - | - | - |
| General text | Semantic | Maintains meaning and context |
| Structured docs | Document | Preserves sections and hierarchy |
| Markdown files | Markdown | Respects heading structure |
| CSV/tabular data | CSV Row | Each row is a logical unit |
| Source code | Code | Splits at function and class boundaries |
| Mixed content | Recursive | Handles multiple separator types |
| Need consistency | Fixed Size | Predictable chunk dimensions |

Each reader has a sensible default, but you can override it based on your content and retrieval needs.

## Configuration

Most strategies accept configuration options:

```python theme={null}
# Fixed size with overlap
FixedSizeChunking(
    chunk_size=5000,       # Characters per chunk
    overlap=200,           # Overlap between chunks
)

# Semantic with threshold
SemanticChunking(
    similarity_threshold=0.7,  # Higher = more splits
)

# Recursive with smaller chunks
RecursiveChunking(
    chunk_size=4000,
    overlap=100,
)
```

## Chunk Size Guidelines

| Chunk Size | Trade-off |
| - | - |
| Small (1000-3000 chars) | More precise retrieval, may lose context |
| Default (5000 chars) | Balanced precision and context |
| Large (8000+ chars) | More context, less targeted results |

Smaller chunks work better for specific questions. Larger chunks work better when context matters.

## Next Steps

> **[Semantic Chunking](https://agno-v2.mintlify.site/knowledge/concepts/chunking/semantic-chunking.md)**
>
> Split content by meaning

> **[Fixed Size Chunking](https://agno-v2.mintlify.site/knowledge/concepts/chunking/fixed-size-chunking.md)**
>
> Uniform chunk sizes

> **[Readers](https://agno-v2.mintlify.site/knowledge/concepts/readers/overview.md)**
>
> Configure readers with chunking

> **[Search & Retrieval](https://agno-v2.mintlify.site/knowledge/concepts/search-and-retrieval/overview.md)**
>
> How chunking affects search


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.