# Build an Agent for your Developer Docs

Normally AI Agents are considered as some bots that can do stuff and a bit intelligent. But in practice, most useful developer agents are super-focused specialized agents with private and highly curated knowledge. For example: the official docs of a programming language or maybe a protocol/company’s internal API reference. 

Gaia provides the three pieces which lets anyone to create such a specialist agent without much complexity. A pluggable knowledge base where you can drop chunks, a RAG-aware chat stack that speaks the OPENAI style v1/chat/completions and modular system prompts.

---

## **A Vyper Smart Contract Language Documentation Agent**

Let’s go ahead and create an agent for **Vyper smart-contract language** (a Python-flavored alternative to Solidity).  Everything you see here—directory layout, embedding commands, node config flags—translates 1-to-1 to any other doc set: Rust book chapters, Django REST API docs, an RFC archive or just any docs.

Make sure you’ve your docker running and Qdrant vector database installed by running `docker pull qdrant/qdrant`

### **Prerequisites: Tooling You Install Once**

---

**WasmEdge Runtime** – Gaia’s embedding utility ships as a lightweight WebAssembly module; WasmEdge is the execution engine that runs it natively on Linux/macOS/Windows:

```
curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install_v2.sh | bash -s
```

*Why Wasm?* Because you get a build artifact (a single .wasm file) that never needs pip install. Security teams love the deterministic binary; DevOps loves the zero-dependency story.

**Embedding Model Weights** – The model that produces your 768-dimensional sentence vectors lives on Hugging Face:

```
curl -LO https://huggingface.co/gaianet/Nomic-embed-text-v1.5-Embedding-GGUF/resolve/main/nomic-embed-text-v1.5.f16.gguf
```

These weights are in the **GGUF** format, the modern successor to GGML, which streams efficiently from disk and supports quantized variants for CPU-only boxes.

Let’s create two folders as `qdrant_storage` and `qdrant_snapshots` . We’ll find our snapshotted knowledge base inside `qdrant_snapshots`.

```
mkdir qdrant_storage
mkdir qdrant_snapshots

nohup docker run -d -p 6333:6333 -p 6334:6334 \
    -v $(pwd)/qdrant_storage:/qdrant/storage:z \
    -v $(pwd)/qdrant_snapshots:/qdrant/snapshots:z \
    qdrant/qdrant
```

A couple of best-practice notes:

- Map 6333 (REST/JSON) and 6334 (gRPC) if you think you’ll ever script bulk uploads or run benchmarks with the Rust/Go Qdrant clients.
- Persisting qdrant_storage on a mounted volume means your vectors survive a container restart *and* can be tar-gz’d for snapshots later.

### **Create the Collection**

We start fresh because the default Gaia sample collection uses a different dimension size.

Let’s remove if we’ve any data:

```jsx