一、GEO 简介:从 SEO 到生成式引擎优化

传统 SEO 面向传统搜索引擎(检索关键词匹配、网页摘要),而GEO Generative Engine Optimization,生成式引擎优化,目标是让 LLM、AI 问答引擎、生成式搜索在回答用户提问时,优先引用、提取、推荐我方内容。

GEO 核心思路:对知识库原文做结构化改造、元数据增强、提示词适配、引用标记,提升内容在大模型 RAG、AI 摘要、引用生成任务中的召回与引用概率。

  • SEO:给爬虫看;
  • GEO:给大模型的上下文窗口、检索器、引用生成模块看。

开源 GEO 项目优势:私有化部署、数据不出内网、可二次修改优化策略、不受第三方 SaaS 接口限制,企业合规场景首选方案。 主流开源 GEO 项目:AutoGEO(CMU)、focusgeo-skills、egeo、OpenClaw GEO Skill,本文以轻量版 GEO 优化源码为例演示编译部署。

二、开源 GEO 项目架构拆解

整套 GEO 优化流水线分为 4 大模块:

  1. 文档 ingestion 文档摄入模块:抓取 / 导入原始文档、网页、PDF,清洗 HTML 标签、去噪、分片;
  2. GEO 内容优化内核(核心源码):LLM 改写、结构化注入、Schema/llms.txt 生成、E-E-A-T 信息增强;
  3. 检索评估模块:调用多 AI 引擎测试优化前后的引用率、召回分数;
  4. API 服务层:FastAPI 封装,对外暴露批量优化接口,支持容器化部署。

核心优化逻辑:

  • 插入显式证据块、FAQ 结构化段落;
  • 增加可被 LLM 识别的引用标记;
  • 生成llms.txt、JSON-LD 元数据;
  • 按 GEO 评分做内容排序与过滤,剔除低质量片段。

关键区别:GEO 不是简单 “写 AI 友好文案”,而是通过源码控制内容结构、证据密度、元信息,系统性提升生成引擎引用概率。

三、源码获取与本地开发环境搭建

3.1 前置依赖

  • Python >=3.10
  • git、poetry / pip
  • LLM 接口:OpenAI 兼容 API(本地 Ollama / 通义千问 / LLaMA 均可)
  • 向量库(可选):Milvus / Chroma,用于评估检索召回效果
# 拉取开源仓库(示例,替换为目标GEO开源仓库地址)
git clone https://github.com/cxcscmu/AutoGEO.git geo-optimizer
cd geo-optimizer

# 创建虚拟环境
python -m venv venv
source venv/bin/activate # linux/mac
# venv\Scripts\activate # windows

# 安装依赖
pip install -r requirements.txt

3.2 核心源码:GEO 优化主逻辑(简化版)

geo_core.py,项目核心模块,输入原始文本,输出 GEO 增强后的内容:

# geo_core.py
import os
from openai import OpenAI

client = OpenAI(
    base_url=os.getenv("LLM_BASE_URL"),
    api_key=os.getenv("LLM_API_KEY")
)

GEO_PROMPT_TPL = """
你是GEO内容优化器。目标:优化文本,使其更容易被生成式AI引擎引用。
规则:
1. 保留全部原始事实,禁止编造信息;
2. 增加结构化FAQ、明确数据证据;
3. 增加可被大模型识别的引用标识;
4. 输出JSON结构:original_text、geo_optimized_text、geo_score(0~100)
原始文本:
{raw_content}
"""

def geo_optimize(raw_content:str) -> dict:
    resp = client.chat.completions.create(
        model=os.getenv("LLM_MODEL"),
        messages=[
            {"role":"user", "content":GEO_PROMPT_TPL.format(raw_content=raw_content)}
        ],
        temperature=0.2
    )
    return resp.choices[0].message.content

if __name__ == "__main__":
    test_text = "Geo优化可以提升AI搜索中内容引用概率。"
    result = geo_optimize(test_text)
    print(result)

3.3 API 封装:FastAPI 对外提供服务

main.py

from fastapi import FastAPI
from pydantic import BaseModel
from geo_core import geo_optimize

app = FastAPI(title="Open-GEO Optimizer API")

class GeoReq(BaseModel):
    content: str

@app.post("/api/geo/optimize")
async def geo_api(req: GeoReq):
    return {"data": geo_optimize(req.content)}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run("main:app", host="0.0.0.0", port=8000)

本地启动测试:

# 设置环境变量
export LLM_BASE_URL="http://localhost:11434/v1"
export LLM_API_KEY="ollama"
export LLM_MODEL="llama3"

python main.py

访问 http://127.0.0.1:8000/docs 打开 Swagger 接口文档,测试内容优化接口。

四、容器化原码部署:Docker & Docker Compose

Dockerfile

FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python","main.py"]

docker-compose.yml,一键编排 GEO 服务 + 本地 Ollama(可选)

version: "3.8"
services:
  geo-optimizer:
    build: .
    ports:
      - "8000:8000"
    environment:
      LLM_BASE_URL: http://ollama:11434/v1
      LLM_API_KEY: ollama
      LLM_MODEL: llama3
    depends_on:
      - ollama
  ollama:
    image: ollama/ollama
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama
volumes:
  ollama_data:
# 构建镜像并启动
docker-compose up -d
# 查看日志
docker-compose logs -f geo-optimizer

生产部署建议:K8s 部署、配置健康检查、接口限流,将优化任务放入消息队列(RabbitMQ/RocketMQ),避免批量任务压垮 LLM 接口。

五、源码层面 GEO 性能优化策略

5.1 推理成本优化

  1. 缓存优化:对重复文档、相同片段缓存 GEO 优化结果,避免重复调用 LLM;源码增加 Redis 缓存层,对 md5 (content) 做 key;
  2. 动态分片:根据文档长度动态调整 chunk 大小,长文档自动分段并行优化;
  3. Prompt 裁剪:精简 GEO 提示词模板,去掉冗余描述,降低 token 消耗;
  4. 模型降级:评估任务使用小模型,正式内容优化使用高质量大模型,分级策略。

5.2 GEO 效果调优(业务指标)

GEO 的核心指标不是文本通顺度,而是引用率。源码中增加评估模块:

  • 同一问题,分别输入原文、GEO 优化后文本,送入 RAG 检索 + LLM 生成;
  • 统计 LLM 回答是否引用目标内容;
  • 计算 GEO 提升率,作为反馈信号迭代 prompt 模板。
# 评估伪代码
def evaluate_geo_effect(question, origin_text, geo_text):
    res_origin = llm_retrieval(question, [origin_text])
    res_geo = llm_retrieval(question, [geo_text])
    metric = {
        "origin_cite": res_origin.has_cite,
        "geo_cite": res_geo.has_cite
    }
    return metric

5.3 常见坑与源码修复

  1. LLM 编造事实:在 prompt 增加严格约束,源码增加事实校验子模块,检测幻觉;
  2. 超长文档 OOM:流式读取 + 异步分片处理,增加长度阈值拦截;
  3. 批量并发接口超时:引入异步任务队列,同步接口改为任务提交 + 轮询查询结果;
  4. 元数据生成失败:增加 JSON-LD、llms.txt 的容错降级逻辑,解析失败返回基础版本。

六、开源二次开发与贡献规范

  1. 分支管理:main 分支稳定版本,dev 分支开发新 GEO 策略;
  2. 单元测试:增加测试用例,校验输出 JSON 格式、事实一致性;
  3. 可配置化:将 prompt 模板、评分阈值、chunk 大小全部放到配置文件,避免硬编码;
  4. 开源协议:注意项目 LICENSE,MIT 协议可商用二次开发;GPL 协议修改源码后必须开源。

推荐二次开发方向:

  • 增加 PDF/Word 原生解析;
  • 接入向量库做 GEO 评估;
  • 增加 Web 管理后台,可视化 GEO 评分与引用测试结果;
  • 增加 RL 微调模块,使用强化学习自动优化 GEO prompt(参考 AutoGEO)。

七、生产落地边界与结论

GEO 不是万能魔法,它的本质是对齐大模型的检索与引用机制。开源源码私有化部署适合:企业知识库、产品文档、行业白皮书,需要可控、合规、大规模持续优化内容场景。

落地建议

  1. 先小批量 A/B 测试,对比优化前后 AI 引擎引用率;
  2. 不要为了 GEO 堆砌无效证据,原始事实准确性永远第一位;
  3. 源码部署优先容器化,做好监控:token 消耗、接口延迟、GEO 评分分布;
  4. 持续迭代:大模型版本会持续变化,GEO 策略需要随 LLM 行为迭代更新。

一句话总结:GEO 优化工程 = 内容结构化增强 + LLM prompt 策略 + 自动化评估闭环;开源项目给了基础骨架,源码二次开发与私有化部署,才是企业落地核心。

Logo

更多推荐