Open-source AI identity engine — measure and grow how AI search engines know, describe, and recommend you.
让 AI 认识你、理解你、推荐你。企业 / 个人在 AI 搜索时代的数字身份基础设施。
GEOloopOS is a Generative Engine Optimization (GEO) tool. It asks AI search engines and LLMs — currently DeepSeek and 豆包 (Doubao) — what they know about a brand, a person, or a website, then scores that answer on a 0–100 visibility scale across three dimensions:
| Dimension | Weight | Meaning |
|---|---|---|
| Recognition | 40 | Does the AI mention the entity at all? (认知) |
| Description depth | 30 | How complete is the AI's description? (描述深度) |
| Source citation | 30 | Does the AI cite a traceable source? (来源引用) |
You paste a brand name, a website domain, or any question — GEOloopOS auto-classifies it, generates the right questions, queries both AI engines in parallel, and returns a report with a score, a verdict, and concrete optimization tips. It also tracks the same entity over time, accumulating a cognition curve that shows whether your AI visibility is actually improving.
Who it's for: companies and individuals who want to be found, described, and recommended by AI — the channel people increasingly use to make decisions (which restaurant, which contractor, which SaaS tool, which advisor).
Built by 张晓明 / Xiaoming Zhang, GEO 与 AI 搜索可见度独立 顾问、GEOloopOS 产品创始人。创始人实验站: https://zkoner.com · 产品官网: https://geoloopos.com · 企业私有部署: https://geoloopos.com/deploy.
《GEOloop:AI可见度闭环方法论》——中文 AI 搜索环境下的实体认知、可见度与 持续优化。Experiment #001 双源(DeepSeek + 豆包)实测数据 + GEO 闭环方法论。
- 在线阅读: https://geoloopos.com/whitepaper
- Markdown 全文: docs/whitepaper.md
| Capability | What it does |
|---|---|
| 3-input auto-classify | Brand name / website domain / free question — detected automatically, correct questions generated |
| Dual AI engine | DeepSeek + Doubao answered in parallel via API — fast, stable, public-friendly (no crawler/browser) |
| 3-dimension scoring | Recognition 40 + Description 30 + Source 30 = 0–100, with verdict + optimization tips |
| Positioning anchor | Fill in name/positioning/keywords/site once → auto-generates 3 unified bio versions (long/mid/short) to paste across platforms + a site-byline snippet — consistency enforced at generation |
| Article monitoring | Track your articles → ask AI per topic → judge if your article is cited / site mentioned / content adopted — the ROI of content production |
| Domain tracking | Add a domain → re-test AI cognition & citation periodically → trend line over time |
| Competitor comparison | Your brand vs competitors, same-口径 detection → ranking, gap score, insight (who leads and why) |
| Knowledge base | Fill your info once → AI structures it into a standard card (identity / positioning / offerings / facts / sources / FAQ / keywords) + multi-length unified bios + JSON-LD. Then run a knowledge gap check: live AI check vs your facts → coverage score, which facts AI never mentions, and "what AI currently thinks you are" — the fill-the-gap punchlist |
| Scene intelligence | Input a real user question (e.g. "深圳推荐一家装修公司") → exposure share per brand + 0-exposure root cause analysis |
| Citation traceability | In-answer source extraction (prompt-guided) → 3-level trust (AI-cited / AI-mentioned / suspected-fabrication), citation share (Profound formula) and "does AI believe your site?" judgment in every report. Engine-cited mode (Perplexity) ready in config — enable with PPLX_API_KEY |
| Unified entity archive | Every check / competitor run lands in one entity profile (data/entities.json) — the cognition time-series foundation for an "enterprise AI cognition map" |
| Effect matrix | Published PR links are re-probed → per industry × channel Bayesian hit-rate matrix (data/effect-matrix.json); conservative recommendations ranked by the 5% posterior lower bound |
| Private deployment | Single Node process, zero runtime dependencies, Docker one-command deploy, IP rate limiting — enterprise customization → |
Recognition 40 + Description 30 + Source 30 = 0–100
| Score | Verdict |
|---|---|
| ≥ 80 | AI 认知清晰 (clearly recognized) |
| ≥ 60 | AI 有基础认知 (basic recognition) |
| ≥ 40 | AI 认知模糊 (fuzzy recognition) |
| < 40 | AI 尚未认知 (not yet recognized) |
Refusal is detected only for short answers (< 80 chars) with explicit refusal phrasing — "cannot/无法" inside a normal long answer is never miscounted.
- Brand (e.g.
海底捞) → asks "「海底捞」是什么?" and "提供哪些产品或服务?" - Website (e.g.
example.com) → asks "「example.com」是什么网站?", plus checks whether the answer cites that domain - Question (e.g.
什么是 GEO?) → asks it verbatim, scores answer quality, extracts mentioned brands/domains
npm install
cp .env.example .env # fill DEEPSEEK_API_KEY and ARK_API_KEY (see "Model sources")
npm run serve # start the product serverOpen http://localhost:8788, type a brand / domain / question, hit 检测.
Print the current publishing effect matrix:
npm run effect| Endpoint | Method | Purpose |
|---|---|---|
/api/check |
POST | body {"query":"..."} → run one check, persist history, return full report |
/report/{id} |
GET | standalone report page (HTML) — the app redirects here after each check |
/api/checks?limit=N |
GET | recent check history (default 20, max 50), newest first |
/api/checks/{id} |
GET | one stored check report by id (404 if not found / expired) |
/api/anchor |
GET / POST | positioning anchor + generated versions + platform list + site byline |
/api/articles |
GET / POST | article library list / add {"title","url","topic"} |
/api/articles/:id |
DELETE | remove an article |
/api/articles/check |
POST | run article monitoring for all articles (serial, ~15–40 s each) |
/api/compare |
POST | body {"self":"我的品牌","competitors":["竞品1"]} → comparison ranking + gap + insight |
/api/cites |
GET / POST / DELETE | domain tracking list / add / remove |
/api/cites/check |
POST | re-test all tracked domains |
/api/entities |
GET | full unified entity archive |
/api/entities/stats |
GET | archive stats (counts, check totals, scene shares, top scores) |
/api/kb |
GET | list knowledge cards (deduped by key, newest wins) |
/api/kb/{key} |
GET | one knowledge card by key (404 if none) |
/api/kb |
POST | body {"input":{"name":...,"facts":...,...}} → AI-structured knowledge card (identity / positioning / offerings / facts / sources / faq / keywords / multi-length versions / JSON-LD) |
/api/kb/gap |
POST | body {"key":"..."} → run a live AI check, compare the card's facts against what AI actually says → coverage score + missing/weak facts + AI's current impression |
/deploy |
GET | standalone enterprise private-deployment page (HTML) — value props, customization flow, founder contact |
/effect |
GET | standalone effect-matrix page (HTML) — industry × channel × AI-citation stats |
/api/effect/matrix |
GET | full effect matrix derived live from publish ledger + article monitoring + media catalog |
/api/effect/recommend |
GET | ?industry=X&topN=12&minTrials=2 → channel recommendations for an industry, ranked by the conservative posterior 5% lower bound |
Example — run a check:
curl -s -X POST localhost:8788/api/check \
-H 'Content-Type: application/json' \
-d '{"query":"海底捞"}'
# → { "ok": true, "report": { "type": "brand", "score": 70, "verdict": "AI 有基础认知", ... } }Public-facing deployment is rate limited per IP (default 8/min, 80/day) with a global concurrency cap (3) and input length validation. See
DEPLOY.md.
Every measurement lands in one normalized entity profile. This time-series is the project's core asset (the "enterprise AI cognition map" foundation).
EntityProfile {
key: string; // normalized: lowercase, no protocol/www/whitespace
name: string;
kind: "brand" | "site";
industry?: string; // set by industry checks
keywords: string[];
createdAt: string;
checks: { at, score, verdict, mention, cited, sources }[]; // cognition curve
citations: { at, source, kind }[]; // who cited you
sceneShares:{ at, scene, share, rank, total }[]; // exposure per scene
}Archived in data/entities.json (gitignored — runtime data stays on the deploy
host; the repo contains code, not customer data).
Every published soft-wen link is tracked in data/articles.json. The matrix is
derived live from the ledger + article monitoring and written to
data/effect-matrix.json, an industry × channel hit-rate matrix using a
Beta-Binomial Bayesian update (uniform prior; posterior mean + 5%/95% credible
interval). Recommendations use the conservative 5% lower bound so small lucky
samples don't rank first.
npm run effect # print matrix + per-industry recommendations
GET /api/effect/matrix # full matrix JSON
GET /api/effect/recommend?industry=餐饮&topN=12&minTrials=2This is the publishing-side data moat: each new probe adds one more observation of "which channel actually gets cited by AI".
config.ts Provider config (DeepSeek / Doubao)
src/check.ts Detection engine: classify → questions → scoring → report
src/entity.ts Unified entity archive: normalization + cognition time-series
src/effect.ts Effect matrix: publishing × channel × AI-citation Bayesian stats
src/history.ts Check history (data/checks.jsonl, zero-dep JSONL)
src/anchor.ts Positioning anchor: version generation + site byline
src/articles.ts Article monitoring: library + citation judgment
src/cite.ts Domain tracking: re-test trends
src/compare.ts Competitor comparison: ranking + exposure share + insights
src/kb.ts Knowledge base: AI-structured card + knowledge-gap analysis (data/kb.jsonl)
src/server.ts Product API server (rate limit / concurrency / validation)
src/providers.ts API query layer (DeepSeek / Doubao, retry + timeout)
src/web/ Product front-end (index.html homepage + app.html console + report.html standalone report page + effect.html effect matrix + deploy.html private-deployment page)
data/ Runtime data (gitignored): checks, entities, anchors, articles, cites, publish ledger, effect snapshots
| Source | Type | Requires |
|---|---|---|
deepseek |
OpenAI-compatible API | DEEPSEEK_API_KEY (platform.deepseek.com) |
doubao (豆包) |
Volcano Ark API | ARK_API_KEY (console.volcengine.com/ark) |
Doubao model defaults to doubao-seed-2-0-pro-260215, overridable via
DOUBAO_MODEL. API keys live only in the server .env — page users need no
configuration.
bash deploy.sh # auto-detects Docker/Node, asks for keys, one-command start
# or Docker:
docker compose up -d --build # bind-mounts ./data → data continuity & transparent backupProduction notes: reverse proxy (Nginx/Caddy) for HTTPS + real-IP passthrough;
process guard via docker compose (restart: unless-stopped); single Node
process, lightweight enough for any VPS. Tuning via RATE_PER_MIN,
RATE_PER_DAY, MAX_CONCURRENT. Full details in DEPLOY.md.
Q: Is GEO the same as SEO? A: No. SEO optimizes for search-engine results pages; GEO (Generative Engine Optimization) optimizes for how AI answers — what it mentions, how it describes, and whether it cites a source. GEOloopOS measures the latter. / GEO 针对 AI 如何「回答」,SEO 针对搜索引擎的「结果页」。GEOloopOS 测的是前者。
Q: Which AI engines does it check?
A: DeepSeek and Doubao (both OpenAI-compatible). Adding a source is a one-entry
config change in config.ts. / 当前 DeepSeek + 豆包,可扩展。
Q: Does it need my API key as a user? A: No — keys live on the server. You only type a brand / domain / question. / 使用者无需配置任何 key。
Q: What does a score of 0 mean? A: The AI gave no substantive answer (refusal) or did not mention the entity — typically because there is no crawlable, consistent public content about it. Optimization tips in the report address this directly.
Q: Can I use it for my competitors?
A: Yes. /api/compare runs the same detection on your brand + competitors and
shows ranking, gap, and who leads — and why.
Q: Where does the data go?
A: All runtime data stays on your host in data/ (gitignored). The repo
contains code, not customer or brand data.
Q: Is it free / self-hostable? A: MIT-licensed and self-hostable with one Docker command. You only pay the two AI engines' API usage.
ROADMAP.md— P0 publishing-effect loop; P1 public HTTPS/domain, industry benchmarks, brand/domain mapping; P2 accounts, AI cognition map, AI cognition reports.IDENTITY-ENGINE.md— product positioning & the "AI identity engine" concept.VISION.md— moat strategy (data assets > tool code).DEPLOY.md— deployment & operations.AIAGENTS.md— architecture & data-model guide for AI agents working in the repo.
Built by 张晓明 / Xiaoming Zhang — AI consultant, GEO engineer, GEOloopOS founder. Site: https://zkoner.com · GitHub: zhangxiaomingv
Released under the MIT License. If you use or build on GEOloopOS, a citation
(CITATION.cff) is appreciated.
GEOloopOS · AI 可见度增长闭环系统 — 让 AI 认识你、理解你、推荐你。