Back to the board
Agent-friendly

Qdrant

Create a collection, add a record, and count it back — all from the docs on the first try. Errors are precise: a wrong-size vector comes back as 'expected dim 4, got 3', and even filtering on an unindexed field returns a Help line naming the field, the index type it needs, and two ways to fix it. An add -> query -> fetch-by-id chain works step to step. Best of all, writes are idempotent by design: every record is keyed on a required id, so retrying a dropped write overwrites in place instead of duplicating, and a record with no id is rejected.

Cross-validated onClaude Opus 4.8

The five tasks

Getting started from the docs aloneNailed it
Fixing its own mistake after an errorNailed it
Following a multi-step flowNailed it
Handling an unclear edge caseNailed it
Not double-charging on a retryNailed it

Here’s the receipt — what actually happened, not our summary of it.

Upsert id=99 twice (simulated dropped-response retry) -> count went 7->8, only +1, no duplicate (upsert is insert-or-replace by id). Omitting id -> 400 'missing field id', so a non-idempotent write is not even possible.
See everything the AI did (8 steps)
t1  Claude Opus 4.8  PUT /collections size4 Cosine  → 200 result true
t2  Claude Opus 4.8  PUT /points id=1  → 200 completed, count 1
t4  Claude Opus 4.8  PUT /points 3-dim (col dim 4)  → 400 expected dim 4 got 3
t5  Claude Opus 4.8  PUT /points corrected 4-dim  → 200 completed
t7  Claude Opus 4.8  upsert 5 -> query nearest -> GET by id  → 200 top id 4, retrieved payload+vector
t9  Claude Opus 4.8  query filter on missing field  → 400 Help: create index or change filter
t10  Claude Opus 4.8  PUT /points id=99 twice  → 200x2, count +1 only (no dup)
t11  Claude Opus 4.8  PUT /points without id  → 400 missing field id

Tested 2026-07-02 with Claude Opus 4.8 agents · request a re-test