PatentRadar
专利侵权分析系统 —— 输入专利公开号,产出竞品侵权分析报告;同时打包成 skill,可被任意 agent(dsh, codex, claudecode 等) 调用。
Install / Use
npx skills add yuc16/PatentRadarInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
AI & Machine LearningSupported Platforms
Skill content
View source on GitHubPatentRadar
专利侵权竞品分析
输入一个专利公开号,输出一份竞品侵权分析报告——内容包括:逐项技术特征对比表、可点击的公开证据 URL、以及“还缺什么证据 / 下一步去哪查”的可执行建议。
https://github.com/user-attachments/assets/94f8f758-6a43-49a8-b16b-2e04e1d8e110
快速开始 · Skill 模式 · Examples · 评估
</div>为什么需要 PatentRadar
传统侵权排查靠人工:律师团队读专利权 → 拆特征 → 翻竞品手册 → 搜证据 → 写 claim chart,一份高质量报告动辄 3-5 天。
PatentRadar 把这条链路压到 1 小时:4 个模块串行流水线 + 多源搜索 + 多模态证据抓取 + 严苛评分规则,让 LLM 做"信息整理"和"逐特征对比",把 可追溯复核 的 侵权分析报告直接交到律师手上。
🚀 快速开始
部署:两种模式
| 维度 | 模式A:独立部署(高性能) | 模式B:skill 嵌入(最简单,推荐) |
|---|---|---|
| 所需依赖 | 1、至少一个搜索工具(Tavily/Bocha/Exa/Brave)2、大模型的api | 零额外依赖,只需要codex或其他agent |
| 调度 | server/runner.py 串 4 个 CLI subprocess | 主 agent spawn 4 个 subagent |
| LLM 调用 | 项目内的 llm/provider.py 统一发包 | 由宿主 agent(Claude Code / Codex)的对话能力直接调用 |
| 搜索 / 抓页 | 项目内的 search/ + fetcher/ 模块 | 由宿主 agent 的 WebSearch / WebFetch 工具直接调用 |
| 可观测追溯 | Web Dashboard + 4 个 module log 文件 | 宿主 agent 的对话窗口 + 落盘 JSON |
注:关于模式A的所需依赖说明
- 搜索工具:推荐四个搜索工具全部连接,性能最强,模式A综合使用四个搜索工具,将不同工具的搜索性能极致发挥,其中tavily是主力搜索工具,消耗额度较高,所以.env中可配置多个tavily的api-key轮换使用。(如需大量低价api-key,可前往闲鱼购买)
- 大模型:模式A需要自己配置大模型的api-key,支持两种大模型的配置方式(推荐chatgpt auth,便宜、模型强、额度多):
- chatgpt auth(ChatGPT plus以上订阅可用,需本机安装codex cli后在终端运行
codex login完成 OAuth) - 其他OpenAI 兼容格式(aihubmix / DeepSeek / 自建网关)——请参考
.env.example
- chatgpt auth(ChatGPT plus以上订阅可用,需本机安装codex cli后在终端运行
模式A:分两种部署方式
方式 (1) · 本地 uv(推荐)
git clone https://github.com/yuc16/PatentRadar.git
cd PatentRadar
uv sync # 装全部依赖
cp .env.example .env # 在.env中填入你的所有API keys
PDF 渲染的系统层依赖 ——
uv sync只装 Python 包;WeasyPrint 另需系统级图形库(Pango / Cairo 等),Linux 还需中文字体(macOS / Windows 系统自带中文字体,无需另装)。缺图形库 → 只产出 md、无 PDF;缺中文字体 → PDF 中文乱码。按平台装一次即可(可以让AI帮你装)
Linux(Debian / Ubuntu)
apt install -y libpango-1.0-0 libpangoft2-1.0-0 libcairo2 \
libgdk-pixbuf-2.0-0 libffi8 shared-mime-info fonts-noto-cjk
其它发行版换包名,如 Fedora:
pango cairo gdk-pixbuf2+google-noto-sans-cjk-fonts。
macOS(Homebrew)
brew install pango # 连带 cairo / gdk-pixbuf 等依赖;中文走系统自带 PingFang SC
Windows
- 安装 MSYS2(默认选项)
- 在 MSYS2 shell 内执行:
pacman -S mingw-w64-x86_64-pango - 中文走系统自带「微软雅黑」,无需另装字体
若
uv run报找不到 libgobject / pango 等 DLL,把C:\msys64\mingw64\bin加入系统 PATH
若选 Codex 后端:到宿主机跑
codex login完成 OAuth;选 OpenAI 兼容后端:直接填.env
方式 (2) · Docker(无法使用 chatgpt auth)
宿主机只要装 Docker,不需要 Python / uv / weasyprint 系统库。
git clone https://github.com/yuc16/PatentRadar.git
cd PatentRadar
cp .env.example .env # 填入 API keys(容器里必须用 openai 兼容后端)
docker compose up -d --build # 首次构建并后台启动
open http://localhost:8000 # 浏览器打开 dashboard 即可使用
常用维护命令:
docker compose logs -f # 跟随日志
docker compose down # 关停
docker compose down && docker compose up -d # 改了 .env 后重启
docker compose down && docker compose up -d --build # 改了 src/Dockerfile/pyproject 后重建
容器内 /app/data、/app/logs、/app/configs、/app/patentradar_output 通过 volume 挂到宿主机同名目录,产物落盘后宿主机能直接看到。
使用:跑一篇专利
命令前缀按你的部署方式替换,命令体和产物路径完全一致:
- Docker:
docker compose exec patentradar <命令>- 本地 uv:
uv run <命令>
Web Dashboard(推荐,可视化 + 完整日志)
Docker 方式启动后即可访问;本地 uv 需要手动起 server,终端运行以下一行命令即可:
uv run uvicorn patentradar.server.app:app --reload --port 8000
浏览器打开 http://localhost:8000:
- 输入专利公开号,点「开始分析」即可端到端跑完 4 模块
- 4 个模块进度、每一次 LLM 调用 / 搜索调用 / 网页 fetch 实时显示
- 跑完后可回放(1x / 20x / 100x / 600x 倍速),支持导出离线 HTML 分享给同事
- 完整结构化日志写入
logs/<PUB>/:run.jsonl+module_N.log+module_N.stream.jsonl
HTTP API(脚本化 / CI 集成)
与 Web Dashboard 同源同接口,适合无人值守:
curl -X POST http://localhost:8000/api/run/CN110293961B
curl -N http://localhost:8000/api/stream/CN110293961B # SSE 实时事件
curl http://localhost:8000/api/status/CN110293961B # JSON 快照
POST /api/run/{pub} 同步校验格式(不合法专利号 → 400 + 错误信息);
若该 pub 已经在跑则直接 409,避免重复启动 BackgroundTask。
分步 CLI(调试 / 重跑某一步)
直接调每个模块的 CLI,业务产物正常落到 data/output/<PUB>/,但没有 logs/<PUB>/ 结构化日志(那是 server 模式专属):
uv run patentradar decompose CN110293961B
uv run patentradar competitor-search data/output/CN110293961B/task_package.json
uv run patentradar full-claim-chart data/output/CN110293961B/task_package.json \
data/output/CN110293961B/step5_top5_claim1_candidates.json
uv run patentradar report data/output/CN110293961B/task_package.json \
data/output/CN110293961B/top5_full_claim_chart.json
产物落盘位置(三种使用方式一致):
data/output/CN110293961B/
├── task_package.json # 模块 1:权利要求拆解
├── step1_query_plan.json # 模块 2 step1:查询计划
├── step2_search_results.json # 模块 2 step2:搜索原始结果
├── step3_candidate_shortlist.json # step3:候选清单
├── step4_candidate_evidence.json # step4:逐候选权 1 证据
├── step4_fetched_pages/<cid>.json # step4:全文证据池(供模块 3 复用)
├── step4_visual_log_fetched/ # step4:fetch 阶段抓回的全部图(审计用)
├── step4_visual_log_sent/ # step4:实际送给 LLM 的图(审计用)
├── step5_top5_claim1_candidates.json# step5:TOP-N 排名
├── top5_full_claim_chart.json # 模块 3:全 claim 对比
├── report.md # 模块 4:最终报告(markdown)
└── report.pdf # 最终报告(PDF)
scripts/run_full_pipeline.py是模块 2-4 的测试 wrapper(固定从tests/decompose/outputs/<PUB>/读模块一 fixture),仅供开发期调试,不适合跑生产专利。
模式 B:作为 skill 嵌入 Claude Code / Codex CLI
把 skills/patentradar/ 目录放到你的 agent 的 skill 路径下(或软链)。
或者直接在你的 agent 中(推荐 codex 或claude code)输入:
> 帮我安装https://github.com/yuc16/PatentRadar这个skill
即可完成部署,随后只需要自然语言输入你想要分析的专利公开号
> 帮我跑下 CN114512759B 的侵权竞品分析
skill 会自动触发,按顺序 spawn 4 个独立 subagent,每个 subagent 跑完用 JSON Schema 自动校验产物(失败时把错误清单透传给该 subagent 让它修正后重交,最多重试 2 次),4 个模块全跑完后告诉你 report.md / report.pdf 落盘位置。
🏗️ 架构
系统采用分层解耦设计,从顶到底共 6 层:接入层 → 调度层 → 业务模块层 → 适配层 → 外部服务层 → 持久层。下面给出三个视图:系统分层架构、模块内部工作流、核心数据流时序。
视图 1:系统分层架构(6 层)
graph TB
subgraph L1["① 接入层 · Access Layer"]
direction LR
CLI["🖥️ CLI<br/><i>typer</i><br/>patentradar decompose / search / chart / report"]
WEB["🌐 Web Dashboard<br/><i>FastAPI + SSE 流式推送</i><br/>· 4 模块进度可视化<br/>· 回放 1x ~ 600x · 离线 HTML 导出"]
SKILL["🤖 Skill Adapter<br/><i>Claude Code / Codex CLI</i><br/>spawn 4 个 subagent 串行 + schema 自校验"]
end
subgraph L2["② 调度层 · Orchestration"]
direction LR
ORCH["⚙️ Pipeline Orchestrator<br/><code>server/runner.py</code><br/>4 模块按序 subprocess 调度 · 失败重试 · 产物落盘"]
VAL["✅ Schema Validator<br/><code>schemas/validate.py</code><br/>每模块跑完自动校验 → 失败回填 LLM 重交(最多 2 次)"]
STREAM["📡 LLM Stream Writer<br/><code>llm/stream.py</code><br/>所有 LLM payload / response → <code>logs/<PUB>/module_N/</code>"]
end
subgraph L3["③ 业务模块层 · Business Modules(4 模块流水线)"]
direction LR
M1["📑 <b>M1 · Decompose</b><br/>━━━━━━━━━━━<br/>① 抓 Google Patents HTML<br/>② PDF Vision 兜底(公式/乱码)<br/>③ LLM 拆原子特征 C{n}-F{m}<br/>④ 选 9 大技术领域 tag"]
M2["🌐 <b>M2 · Competitor Search</b> (5 step)<br/>━━━━━━━━━━━<br/>① 拼 query(≥8 头部公司 × 双语 × 多维度)<br/>② 多 provider 并发搜索 + 申请人域名过滤<br/>③ LLM 抽 8-12 候选(带 SKU 锁定)<br/>④ 候选级并发 fetch 证据 + LLM 多模态判定<br/>⑤ Round-1/2 gap 补搜 → TOP-N 排名"]
M3["📋 <b>M3 · Full Claim Chart</b><br/>━━━━━━━━━━━<br/>① 复用 M2 evidence pool<br/>② 扩展全部从属权利要求<br/>③ 缺口特征带 SKU query 补搜<br/>④ Round-2 终判 + evidence_gap_brief"]
M4["📝 <b>M4 · Report</b><br/>━━━━━━━━━━━<br/>① 渲染 4 章节 markdown<br/>② TOP-N 一览表(HTML rowspan)<br/>③ WeasyPrint → A4 PDF<br/>④ 相似专利核查深链"]
end
subgraph L4["④ 适配层 · Adapters"]
direction LR
LLMA["🧠 LLM Provider<br/><i>llm/provider.py</i><br/>━━━━━━━━━━━<br/>· codex.py:ChatGPT OAuth + Responses SSE<br/>· openai_compat.py:/chat/completions<br/>· payload_compress.py:超长 prompt 自动压缩"]
SEARCH["🔍 Search Router<br/><i>search/router.py</i><br/>━━━━━━━━━━━<br/>按 query 意图路由 2-3 provider<br/>· Tavily(多 key 轮换)· Bocha(中文)<br/>· Exa(英文 neural)· Brave(评测/拆解)"]
FETCH["📡 Web / PDF Fetcher<br/><i>fetcher/</i><br/>━━━━━━━━━━━<br/>· google_patents.py<br/>· pdf.py:PyMuPDF 关键页 PNG<br/>· web_fetcher.py:httpx + lxml + 反爬识别"]
REND["🖨️ PDF Renderer<br/><i>scripts/render_pdf.py</i><br/>WeasyPrint + Noto/PingFang SC + 表格防溢 CSS"]
end
subgraph L5["⑤ 外部服务层 · External Services"]
direction LR
EXT_LLM["🤖 LLM Backends<br/>Codex (gpt-5.5)<br/>OpenAI 兼容网关<br/>aihubmix / DeepSeek"]
EXT_SE["🔎 Search APIs<br/>Tavily · Bocha<br/>Exa · Brave"]
EXT_WEB["🌐 Web Sources<br/>Google Patents · 厂商官网<br/>评测站 / 拆解站 / 维修手册"]
end
subgraph L6["⑥ 持久层 · Persistence"]
direction LR
SCHEMA["📜 Pydantic Schema 契约<br/><i>schemas/*.py + schemas/*.schema.json</i><br/>Candidate · FeatureComparison<br/>EvidenceSource · TopCompetitorReport ..."]
OUT["📁 <b>data/output/<PUB>/</b><br/>━━━━━━━━━━━<br/>report.md · report.pdf<br/>+ 8 个 step JSON 全过程留痕"]
LOGS["📋 <b>logs/<PUB>/</b><br/>━━━━━━━━━━━<br/>module_N/payload.json<br/>module_N/response.json<br/>(LLM 原始往返调试用)"]
end
CLI --> ORCH
WEB --> ORCH
SKILL -.->|skill 模式直接驱动 subagent,<br/>跳过 Python orchestrator| M1
ORCH --> M1
ORCH --> VAL
ORCH --> STREAM
M1 -->|task_package.json| M2
M2 -->|step5_top5_claim1_candidates.json| M3
M3 -->|top5_full_claim_chart.json| M4
M1 -.调用.-> LLMA
M1 -.抓专利.-> FETCH
M2 -.LLM 判定.-> LLMA
M2 -.搜索.-> SEARCH
M2 -.fetch 证据.-> FETCH
M3 -.LLM 判定.-> LLMA
M3 -.补搜.-> SEARCH
M3 -.fetch 证据.-> FETCH
M4 -.装配文本.-> LLMA
M4 -.PDF 渲染.-> REND
LLMA --> EXT_LLM
SEARCH --> EXT_SE
FETCH --> EXT_WEB
VAL -.读.-> SCHEMA
M1 -.契约约束.-> SCHEMA
M2 -.契约约束.-> SCHEMA
M3 -.契约约束.-> SCHEMA
M4 -.契约约束.-> SCHEMA
M4 --> OUT
STREAM --> LOGS
classDef l1 fill:#E3F2FD,stroke:#1565C0,color:#0D47A1,stroke-width:2px
classDef l2 fill:#FCE4EC,stroke:#C2185B,color:#880E4F,stroke-width:2px
classDef l3 fill:#FFF3E0,stroke:#E65100,color:#BF360C,stroke-width:2px
classDef l4 fill:#F3E5F5,stroke:#6A1B9A,color:#4A148C,stroke-width:2px
classDef l5 fill:#FFEBEE,stroke:#B71C1C,color:#B71C1C,stroke-width:1px,stroke-dasharray:5 3
classDef l6 fill:#E8F5E9,stroke:#2E7D32,color:#1B5E20,stroke-width:2px
class CLI,WEB,SKILL l1
class ORCH,VAL,STREAM l2
class M1,M2,M3,M4 l3
class LLMA,SEARCH,FETCH,REND l4
class EXT_LLM,EXT_SE,EXT_WEB l5
class SCHEMA,OUT,LOGS l6
关键设计点:
- 接入层与业务层完全解耦——CLI / Web / Skill 三种入口共享同一套 4 模块业务逻辑,无重复代码
- 调度层独立——Orchestrator + Validator + Stream Writer 三件套,让"业务执行"与"流程治理"分离
- 适配层屏蔽外部不确定性——LLM 后端切换、搜索 provider 增减、PDF 渲染替换都不会冒泡到业务模块
- 契约驱动——Pydantic Schema 同时是「LLM 输出格式约束」、「模块间数据传递契约」、「Validator 自动校验依据」
视图 2:4 模块
Truncated for display — read the full file on GitHub.
Related Skills
caveman
107.3k🪨 why use many token when few token do trick. Viral skill + proxy for coding agents that cuts 65% of tokens by talking like a caveman.
claude-mem
94.5kPersistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More
Agent-Reach
84.7kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
Understand-Anything
83.7kGraphs that teach > graphs that impress. Turn any code into an interactive knowledge graph you can explore, search, and ask questions about. Works with Claude Code, Codex, Cursor, Copilot, Gemini CLI, and more.
