Back to home

wangzhuo-coding

geo-content-optimizer

GEO生成式引擎优化智能体 — 7类关键词+七层架构+EE-A-T权威框架+8维度降痕改写

Stars
4
Language
Python
Created
Jul 16, 2026
Updated
Aug 12, 2026

Introduction

GEO Content Optimizer

Python 3.12+ License: MIT CI

English | 中文

输入企业文献资料 → 自动产出适配豆包/Kimi/DeepSeek/通义千问/GPT 等大模型向量库收录的高质量原创文章,并消除 AI 生成痕迹。

GEO(Generative Engine Optimization,生成式引擎优化)内容优化智能体 —— 跨平台、无平台依赖。区别于传统 SEO 面向搜索引擎爬虫,GEO 面向的是 AI 摘要器和答案引擎:让大模型"读得懂、愿意引、能溯源"。


功能特色

核心能力

能力说明
📄 多格式文献解析支持 PDF / Word / Excel / PPT / TXT,一键提取纯文本
🔑 7类关键词挖掘核心搜索词、长尾场景词、地域实体词、人群标签词、问题描述词、品牌专属词、场景触发词,结构化输出强制(Pydantic schema),按优先级公式排序
✍️ 七层架构内容生成EE-A-T 权威性框架 + ACES 结论前置范式 + 三段式 Hook 开篇 + 语义实体密度网络
🧹 8维度 AI 降痕句子结构/段落节奏/用词习惯/情感浓度/例证来源/完美度/个性化/关键词密度,3 级别分级处理
🛡️ Stage 5 质量守门极限词 lint、品牌溯源密度、结构完整性、反幻觉守门(数值溯源核验)、可选 LLM-as-Judge 评分
📏 字数自动校准LLM 不会数数——程序侧实测字数,偏离「≥1800字/约1500字/不超过2000字」要求时定向扩写/压缩,最多 2 轮收敛到 ±10% 容差带
🌐 联网检索补充Tavily / Bing RSS / DuckDuckGo 三引擎自动切换,中国可用
📝 Word 文档导出Markdown → 格式化 Word(.docx),支持标题/表格/列表/代码块
🧩 MCP 协议集成一行配置接入 Claude Desktop / Claude Code / WorkBuddy 等 AI 工具
📦 智能分块长文本自动分块(≤60000字符/块,重叠500字符),分块结果合并后再进入下游

5种使用方式

CLI 交互模式  →  终端对话,适合快速试用
命令行直接处理  →  --file/--text 参数,适合批量脚本
Streamlit Web UI  →  浏览器操作,适合非技术用户
HTTP API  →  FastAPI 服务,适合集成到现有系统
MCP Server  →  接入 Claude 等 AI 工具,对话式调用

架构

输入文献 → [Stage 0 联网检索(可选)] → [Stage 1 清洗切片] → [Stage 2 关键词提取] → [Stage 3 内容生成] → [Stage 4 降痕改写] → [Stage 5 质量守门] → 成品文章 + Word文档
阶段功能核心方法
Stage 0联网检索(可选)自动提取关键概念,三引擎搜索并行补充资料,丰富文献素材
Stage 1文献清洗与切片过滤噪声、语义分块(段落/句子边界)、提取品牌信息;长文本自动分块并行处理
Stage 2关键词提取7类关键词(结构化输出强制)+ 优先级公式(搜索量×相关性×竞争强度)三级排序
Stage 3内容生成EE-A-T 权威性框架 + ACES 结论前置 + 七层写作架构 + 语义实体密度 + FAQ/可引用事实块
Stage 4降痕改写8维度 AI 去痕 + 3级别分级(轻度/中度/深度)+ 自检清单
Stage 5质量守门极限词 lint + 品牌溯源密度 + 结构完整性 + 反幻觉守门 + 可选 LLM-as-Judge 评分(评分默认仅供参考、不阻断输出;传 strict=True 时低于达标线会在结果顶部显式标注「❌ 未达发布线」)

快速开始

1. 安装

# 克隆仓库
git clone https://github.com/wangzhuo-coding/geo-content-optimizer.git
cd geo-content-optimizer

# 创建虚拟环境
python -m venv .venv
source .venv/bin/activate  # Linux/macOS
# .venv\Scripts\activate    # Windows

# 安装核心依赖
pip install -e .

可选功能(按需安装):

pip install -e ".[mcp]"       # MCP Server(接入Claude等AI工具)
pip install -e ".[webui]"     # Streamlit Web UI
pip install -e ".[postgres]"  # PostgreSQL 持久化
pip install -e ".[s3]"        # S3 文件存储
pip install -e ".[all]"       # 全部可选功能

Windows 用户:直接运行 setup.bat 一键安装。中国网络建议使用镜像源: pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple

2. 配置 API Key

cp .env.example .env  # Windows: copy .env.example .env

编辑 .env 文件,填入你的 LLM API Key:

OPENAI_API_KEY=sk-xxx               # 你的 API Key(必填)
OPENAI_BASE_URL=https://api.openai.com/v1   # API 地址
OPENAI_MODEL_NAME=gpt-4o            # 模型名称

兼容的 API 供应商:

供应商Base URL模型示例
OpenAIhttps://api.openai.com/v1gpt-4o
DeepSeekhttps://api.deepseek.comdeepseek-chat
豆包(字节跳动)https://ark.cn-beijing.volces.com/api/v3doubao-seed-2-0-pro
通义千问https://dashscope.aliyuncs.com/compatible-mode/v1qwen-max
Kimi(月之暗面)https://api.moonshot.cn/v1moonshot-v1-8k

3. 运行

方式一:CLI 交互模式

python -m src          # 最简单
python src/cli.py      # 等效
run.bat                # Windows 一键启动

方式二:命令行直接处理

# 输入文本,自动保存到 output/ 目录
python src/cli.py --text "你的文献内容..."

# 处理文件 + 品牌信息
python src/cli.py --file document.pdf --brand "品牌名, 官网地址"

# 启用联网检索 + 导出 Word 文档
python src/cli.py --file doc.pdf --search --docx

# 全功能:文件 + 品牌 + 联网检索 + Word导出
python src/cli.py --file doc.pdf --brand "华为, https://www.huawei.com" --search --docx
参数说明
--text "内容"直接输入文本
--file 路径输入文件(PDF/Word/Excel/PPT/TXT)
--brand "信息"品牌补充信息
--search启用联网检索(增加1-2分钟)
--docx导出 Word 文档(.docx)
--output 路径指定 Markdown 输出路径
--verbose显示详细日志

方式三:Web UI

pip install -e ".[webui]"
streamlit run src/web_ui.py

浏览器打开后可上传文件、粘贴文本、勾选联网检索和 Word 导出,实时查看处理进度。

方式四:HTTP API 服务

python -m uvicorn src.main:app --host 127.0.0.1 --port 5000
接口方法说明
/runPOST同步执行 Agent
/stream_runPOSTSSE 流式执行
/cancel/{run_id}POST取消任务
/v1/chat/completionsPOSTOpenAI 兼容接口
/healthGET健康检查
/graph_parameterGETAgent 图参数

Swagger 文档:启动后访问 http://127.0.0.1:5000/docs

调用示例:

curl -X POST http://127.0.0.1:5000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"messages": [{"role": "user", "content": "请优化这篇文献内容..."}]}'

方式五:MCP Server(接入 Claude 等 AI 工具)

pip install -e ".[mcp]"

# stdio 模式(Claude Desktop / Claude Code / WorkBuddy)
python src/mcp_server.py

# SSE HTTP 模式(Web 客户端)
python src/mcp_server.py --transport sse --port 5001

配置 Claude Desktop%APPDATA%\Claude\claude_desktop_config.json):

重要:不要在 MCP 配置中写 env 字段传 API Key!Claude Code 的 env 会覆盖整个环境变量(包括 Windows 必需的 PATH),导致 Python 找不到系统 DLL 而启动失败(错误码 -32000)。API Key 请在项目 .env 文件中配置,MCP Server 启动时自动读取。

{
  "mcpServers": {
    "geo-content-optimizer": {
      "command": "python",
      "args": ["src/mcp_server.py"],
      "cwd": "/path/to/geo-content-optimizer"
    }
  }
}

配置 WorkBuddy~/.workbuddy/mcp.json):

{
  "mcpServers": {
    "geo-content-optimizer": {
      "command": "/path/to/geo-content-optimizer/.venv/Scripts/python.exe",
      "args": ["src/mcp_server.py"],
      "cwd": "/path/to/geo-content-optimizer"
    }
  }
}

MCP 工具列表:

工具参数说明
parse_documentfile_path: str解析 PDF / Word(.docx) / TXT / CSV / Excel(.xlsx) / PPT(.pptx) 文件(旧版 .doc/.xls/.ppt 不保证支持)
run_geo_pipelinecleaned_text, brand_info="", enable_search=false, user_requirements="", output_docx=""执行4阶段 GEO 流水线
web_searchquery: str, max_results=5联网搜索
search_and_enrichtext: str, brand_info="", max_queries=3提取概念+搜索+合并

配置完成后,在 Claude/WorkBuddy 中直接对话即可调用:

用户: 请帮我优化这篇华为云的产品白皮书
Claude: → 调用 parse_document 解析文件
        → 调用 run_geo_pipeline 执行4阶段流水线
        → 返回成品文章

用户特殊要求与双闸门(可选)

run_geo_pipeline 支持 user_requirements 参数(内容方向/目标人群/字数/风格/关键词/平台等)。传入后:

  • 写作(Stage 3/4)按三层优先级裁定用户要求:合规/事实/黑帽红线(Tier 0)拒绝并给合规替代;GEO 底线(Tier 1,EE-A-T/ACES/语义实体密度)尽量双赢、二选一保 GEO;其他要求(Tier 2)在约束内最大化满足
  • 评分(Stage 5)增独立第二轴"用户要求满足度"(0-100%),与 100 分 GEO 基线构成双闸门:GEO 达标 且 满足度≥80% 才可发布;合规冲突的要求被拒绝+给替代,不计入满足度(默认仅作评分卡建议、不阻断输出;run_geo_pipeline(strict=True) 时低于达标线会在结果顶部显式标注未达发布线)

不传 user_requirements 则行为不变(第二轴不激活),与生态中 geo-writer/geo-scorer 技能的机制一致。

字数自动校准(R3)

LLM 对"字数"没有稳定感知——同一个「≥1800字」要求可能产出 1200~4700 字。因此流水线不信任模型的字数自评,改为程序侧闭环校准:

  1. user_requirements 解析长度目标:≥1800字(下限)/ 不超过2500字(上限)/ 约1500字(贴近)/ 1800-2500字(区间);
  2. Stage 4 降痕改写后,程序用 len(text) 实测字数;
  3. 偏离容差带(默认 ±10%,PIPELINE_LENGTH_TOLERANCE)时,定向执行「扩写/压缩」修正,最多 PIPELINE_MAX_LENGTH_ATTEMPTS(默认 2)轮,收敛即停;
  4. 修正仍未落带时如实告警并接受残余偏差,不会死循环。

无字数要求时该流程完全跳过,行为与旧版一致。

运行时长提示

单次运行 = 5 阶段串行 LLM + 可选 LLM 评分 + 可选联网检索。追求更快时可按需开关:

  • PIPELINE_QUALITY_JUDGE=false:跳过 LLM 评分(只跑确定性 lint,省一次 LLM 往返);
  • PIPELINE_SEARCH_MAX_QUERIES=1:联网检索只提取 1 个关键词(默认 3);
  • PIPELINE_MAX_LENGTH_ATTEMPTS=1:字数校准最多修正 1 轮(默认 2)。

结构化输出降级说明

若日志出现 with_structured_output failed ... response_format type is unavailable now:说明当前模型/接口不支持原生 JSON-Schema 结构化输出。流水线会自动降级为「自由文本 + Pydantic 修复解析」(功能可用,但 Stage1/2 的 schema 强制力下降)。建议改用支持 response_format=json_schema 的模型或 OpenAI 兼容接口。

环境变量

变量必填默认值说明
OPENAI_API_KEYLLM API Key
OPENAI_BASE_URLhttps://api.openai.com/v1API 地址
OPENAI_MODEL_NAMEgpt-4o模型名称
AGENT_TEMPERATURE0.7Agent 温度
AGENT_MAX_TOKENS32768Agent 最大 tokens
PIPELINE_MAX_CHUNK_CHARS60000单块最大字符数(语义分块)
PIPELINE_LLM_MAX_RETRIES3LLM 重试次数(仅瞬时网络/限流错误)
PIPELINE_LLM_TIMEOUT600Pipeline LLM 调用超时秒数
PIPELINE_LLM_MODEL空(同 OPENAI_MODEL_NAME)Pipeline 专用模型
PIPELINE_MAX_CONCURRENCY4分块处理 / 联网检索并行并发度
PIPELINE_MAX_INPUT_CHARS200000流水线输入文本上限(字符),超过自动截断并告警;0 关闭(token 成本控制)
PIPELINE_STAGE3_MAX_SLICES0Stage 3 提示词最多嵌入的切片数(top-K 截断,降 token 成本);0 不限制
PIPELINE_LENGTH_TOLERANCE0.10字数校准容差(±10%)。在 user_requirements 中检测到字数要求(如「≥1800字」「约1500字」)时,流水线程序侧测字数并定向扩写/压缩直到落带
PIPELINE_MAX_LENGTH_ATTEMPTS2字数校准最大修正轮数(模型不会数数,靠程序测量+定向修正收敛;超限后接受残余偏差并告警)
PIPELINE_QUALITY_JUDGEtrue是否启用 Stage 5 LLM 评分(关闭则只跑确定性 lint,零 token 成本、运行更快)
PIPELINE_QUALITY_THRESHOLD80GEO 基线达标线(默认 80,对齐项目硬要求 GEO≥80 才可发布;接入 judge prompt,并作为双闸门的 GEO 门)
PIPELINE_SEARCH_MAX_QUERIES3联网检索每个文本提取的查询数(调小可缩短联网阶段耗时)
PIPELINE_GATE_HARD_DATAfalse可选闸门:素材显著数字(≥1000)未出现在正文时拦截"硬数据模糊化"(默认关,避免误报)
PIPELINE_TEMPERATURE_GEN / PIPELINE_TEMPERATURE_REWRITE0.8 / 0.4Stage3 生成 / Stage4 改写的温度(设 0 可近似复现,便于调试)
PIPELINE_REQUIREMENT_SATISFACTION_THRESHOLD80用户要求满足度达标线(双闸门第二轴门,仅当传入 user_requirements 时启用)
GEO_API_KEYHTTP 写接口鉴权(配置后需 Authorization: Bearer;默认服务仅绑定 127.0.0.1,未配置 key 时启动会打印安全警告)
TAVILY_API_KEY-Tavily 搜索 Key(不配则用免费引擎)
PGDATABASE_URLPostgreSQL 连接(配置后持久化)
S3_*S3 存储配置
HTTP_PORT5000HTTP 服务端口
HTTP_HOST127.0.0.1HTTP 服务绑定地址(默认仅本机;需对外暴露时改 0.0.0.0 并设置 GEO_API_KEY
MCP_SSE_HOST127.0.0.1MCP SSE 服务绑定地址(默认仅本机)
HTTP_RATE_LIMIT_PER_MINUTE60每客户端 IP 每分钟最大请求数(写接口限流;0 关闭)
MCP_SSE_PORT5001MCP SSE 模式端口

开发与质量门禁

安装开发依赖后即可使用工具链:pip install -e ".[dev]"

工具命令作用
pytest + pytest-covpytest全量测试 + 覆盖率报告(当前 --cov-fail-under=65 防回归门槛;ECC 目标 80%,缺口为 web_ui 回调 / main.py HTTP 边角,属后续回归计划)
ruffruff check src tests代码规范(lint + import 排序)
banditbandit -r src -ll安全静态扫描(仅中高危)

以上三步已接入 GitHub Actions CI(.github/workflows/ci.yml),push / PR 时自动执行。


项目结构

geo-content-optimizer/
├── config/
│   └── agent_llm_config.json      # Agent System Prompt + 模型配置
├── scripts/                        # 运行脚本 (Linux/macOS)
├── src/
│   ├── __main__.py                 # python -m src 入口
│   ├── main.py                     # FastAPI HTTP 服务
│   ├── cli.py                      # CLI 交互模式
│   ├── mcp_server.py               # MCP Server(接入Claude等AI工具)
│   ├── web_ui.py                   # Streamlit Web UI
│   ├── agents/
│   │   └── agent.py                # Agent 构建(LangGraph)+ AgentState
│   ├── tools/
│   │   ├── geo_pipeline.py         # 核心:4阶段流水线 + 智能分块 + Word导出
│   │   └── web_search.py           # 联网检索(Tavily/Bing/DuckDuckGo)
│   ├── utils/
│   │   ├── file/
│   │   │   └── file.py             # 文件解析(PDF/Word/Excel/PPT/TXT)
│   │   └── docx_export.py          # Markdown → Word 文档转换
│   └── storage/
│       ├── memory/                 # 内存持久化(默认)
│       ├── database/               # PostgreSQL(可选)
│       └── s3/                     # S3 存储(可选)
├── run.bat                         # Windows 一键启动
├── setup.bat                       # Windows 一键安装
├── .env.example                    # 环境变量模板
├── pyproject.toml                  # 依赖配置
├── LICENSE                         # MIT License
└── README.md

技术栈

层级技术
Agent 框架LangChain + LangGraph (create_react_agent)
LLM 调用ChatOpenAI(兼容所有 OpenAI API)
Web APIFastAPI + Uvicorn
Web UIStreamlit(可选)
MCP 协议FastMCP(接入 Claude 等 AI 工具)
CLIargparse + asyncio
重试机制tenacity(指数退避 + JSON 自修复)
持久化PostgreSQL(可选)+ S3(可选)

Contributing

欢迎贡献!

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/amazing-feature)
  3. 提交修改 (git commit -m 'Add amazing feature')
  4. 推送分支 (git push origin feature/amazing-feature)
  5. 创建 Pull Request

开发环境设置:

python -m venv .venv
pip install -e ".[all]"
pip install pytest pytest-asyncio

Changelog

查看 CHANGELOG.md 了解完整版本变更记录。

License

MIT License — 自由使用、修改和分发。