EO(Generative Engine Optimization)优化:开源原码编译、部署与工程调优实战
一、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 大模块:
- 文档 ingestion 文档摄入模块:抓取 / 导入原始文档、网页、PDF,清洗 HTML 标签、去噪、分片;
- GEO 内容优化内核(核心源码):LLM 改写、结构化注入、Schema/llms.txt 生成、E-E-A-T 信息增强;
- 检索评估模块:调用多 AI 引擎测试优化前后的引用率、召回分数;
- 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 推理成本优化
- 缓存优化:对重复文档、相同片段缓存 GEO 优化结果,避免重复调用 LLM;源码增加 Redis 缓存层,对 md5 (content) 做 key;
- 动态分片:根据文档长度动态调整 chunk 大小,长文档自动分段并行优化;
- Prompt 裁剪:精简 GEO 提示词模板,去掉冗余描述,降低 token 消耗;
- 模型降级:评估任务使用小模型,正式内容优化使用高质量大模型,分级策略。
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 常见坑与源码修复
- LLM 编造事实:在 prompt 增加严格约束,源码增加事实校验子模块,检测幻觉;
- 超长文档 OOM:流式读取 + 异步分片处理,增加长度阈值拦截;
- 批量并发接口超时:引入异步任务队列,同步接口改为任务提交 + 轮询查询结果;
- 元数据生成失败:增加 JSON-LD、llms.txt 的容错降级逻辑,解析失败返回基础版本。
六、开源二次开发与贡献规范
- 分支管理:main 分支稳定版本,dev 分支开发新 GEO 策略;
- 单元测试:增加测试用例,校验输出 JSON 格式、事实一致性;
- 可配置化:将 prompt 模板、评分阈值、chunk 大小全部放到配置文件,避免硬编码;
- 开源协议:注意项目 LICENSE,MIT 协议可商用二次开发;GPL 协议修改源码后必须开源。
推荐二次开发方向:
- 增加 PDF/Word 原生解析;
- 接入向量库做 GEO 评估;
- 增加 Web 管理后台,可视化 GEO 评分与引用测试结果;
- 增加 RL 微调模块,使用强化学习自动优化 GEO prompt(参考 AutoGEO)。
七、生产落地边界与结论
GEO 不是万能魔法,它的本质是对齐大模型的检索与引用机制。开源源码私有化部署适合:企业知识库、产品文档、行业白皮书,需要可控、合规、大规模持续优化内容场景。
落地建议
- 先小批量 A/B 测试,对比优化前后 AI 引擎引用率;
- 不要为了 GEO 堆砌无效证据,原始事实准确性永远第一位;
- 源码部署优先容器化,做好监控:token 消耗、接口延迟、GEO 评分分布;
- 持续迭代:大模型版本会持续变化,GEO 策略需要随 LLM 行为迭代更新。
一句话总结:GEO 优化工程 = 内容结构化增强 + LLM prompt 策略 + 自动化评估闭环;开源项目给了基础骨架,源码二次开发与私有化部署,才是企业落地核心。
更多推荐

所有评论(0)