SkillAgentSearch skills...

PatentRadar

专利侵权分析系统 —— 输入专利公开号,产出竞品侵权分析报告;同时打包成 skill,可被任意 agent(dsh, codex, claudecode 等) 调用。

Install / Use

npx skills add yuc16/PatentRadar

Installs into whichever agent you are using.

About this skill
📄

SKILL.md

Installable skill definition

Quality Score

85/100

Supported Platforms

Claude Code
OpenAI Codex
<div align="center">

PatentRadar

专利侵权竞品分析

输入一个专利公开号,输出一份竞品侵权分析报告——内容包括:逐项技术特征对比表、可点击的公开证据 URL、以及“还缺什么证据 / 下一步去哪查”的可执行建议。

uv LLM Skill License

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

模式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

  1. 安装 MSYS2(默认选项)
  2. 在 MSYS2 shell 内执行:pacman -S mingw-w64-x86_64-pango
  3. 中文走系统自带「微软雅黑」,无需另装字体

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 挂到宿主机同名目录,产物落盘后宿主机能直接看到。

使用:跑一篇专利

命令前缀按你的部署方式替换,命令体和产物路径完全一致:

  • Dockerdocker compose exec patentradar <命令>
  • 本地 uvuv 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/&lt;PUB&gt;/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/&lt;PUB&gt;/</b><br/>━━━━━━━━━━━<br/>report.md · report.pdf<br/>+ 8 个 step JSON 全过程留痕"]
        LOGS["📋  <b>logs/&lt;PUB&gt;/</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

View on GitHub
GitHub Stars64
CategoryAI
Updated24d ago
Forks11

Languages

Python

Security Score

83/100

Audited on Aug 29, 2026

1 medium1 low