kb-bench

FastGPT 4.15.8

A knowledge-base-first platform with a visual workflow builder, deployed and measured against the same corpus as every other platform here.

In one paragraph

Deployed from its published image, FastGPT runs 13 containers and held 3,227 MB at peak during ingestion. It retained 97% of the facts planted in the corpus and answered 41% of the retrieval questions correctly.

Measured

MeasurementResultHow
Time to first served request 239 s Includes image pull, from a clean host
Containers 13 Running after the stack settles
Idle memory 1,691.5 MB Sum across containers, 60s after ready
Peak memory during ingestion 3,227 MB Sampled every 5s across the whole corpus
Documents ingested 8/11 Failures counted, not excluded
Chunks stored 340 Across the whole corpus
Parsing fidelity 97% Planted facts found in stored chunks
Retrieval accuracy 41% Answer present in top-5 context, 29 questions
Retrieval latency 19,312.2 / 23,253.5 ms p50 / p95, CPU embedding
Licence FastGPT Open Source License Prohibits offering it as a service

What it does well

Where it falls short

Choose it when

Choose something else when

Deployment notes

The stack is larger than its reputation suggests: thirteen containers including two separate Postgres instances, MongoDB, Redis and MinIO. Container count and memory tell opposite stories here — it runs the most containers of any platform measured and holds the least memory of the three purpose-built ones.

The first-start failure is worth calling out because it costs time in a way that is hard to diagnose. FE_DOMAIN and the sandbox proxy URL both ship as empty strings with a comment saying they must be filled in; leaving them produces a crash loop whose error names the variable but not the file, and the comment explaining it is in Chinese in the file served from the repository’s global directory.

Getting a machine credential

Three calls, none of which need a browser: a pre-login request returns a single-use anti-replay code, the login itself expects the password already SHA-256 hashed by the caller, and a third call mints an API key. The documented ROOT_KEY is not accepted by the dataset routes despite reaching them.