top of page

特許分類を検索するためのAPI

LLMへのアプローチの変化

  • LLMを活用するための取り組みは、大きく3段階で変化してきています。

    • プロンプトエンジニアリングは、LLMへの指示をどのように書くかを工夫する段階です。出力品質がプロンプトの書き方に大きく依存することが分かり、多くの知見が蓄積されました。

    • コンテキストエンジニアリングは、LLMに渡す情報(コンテキスト)の設計に焦点を当てます。RAGに代表されるように、適切な情報をどう取得・整形してLLMに渡すかが重要になってきました。

    • そして近年注目されているのがハーネスエンジニアリングです。LLM自体の性能に頼るのではなく、LLMを取り囲むシステム全体、複数のAPIコール、外部データソースへのアクセス、結果の統合と後処理を設計することで、単体のLLMでは達成できないタスクを実現する考え方です。


  • 今回公開した特許分類APIは、このハーネスエンジニアリングの一環として位置付けられます。特許調査を支援するLLMシステムのコンポーネントとして、特許分類体系の意味検索・コード解決・検索式生成を担うAPIを公開しました。



特許分類APIの概要

  • IPC(国際特許分類)、CPC(協力特許分類)、FI(ファイルインデックス)、Fターム(ファイリングターム)の4つの分類体系を対象としています。各分類記号とその定義テキストをPineconeにインデックスし、ハイブリッド検索(密ベクトル+疎ベクトル)で意味的に近い分類を探すことができます。

  • ベースURLはCloud Runのサービスエンドポイントとなります。以下に各エンドポイントを説明します。




データについて

インデックスに格納されている分類データは2026年4月時点で取得したものです。各分類体系のデータソースは以下の通りです。

分類体系

データソース

IPC(国際特許分類)

WIPO IPC MasterFiles(edition 20260101)

CPC(協力特許分類)

FI(ファイルインデックス)

Fターム


  • IPCの日本語タイトルは特許庁公開の IPC_Ver*-?section.xls/xlsx を使用しています。データの最新性については各機関の公式サイトをご確認ください。



エンドポイント一覧


GET /health

ヘルスチェック用のエンドポイントです。

GET /health

レスポンス:

{"status": "ok"}

POST /search

自然言語クエリで特許分類を意味検索します。

POST /search
Content-Type: application/json

リクエストボディの主要フィールド:

フィールド

必須

説明

query

string

検索クエリ(日本語・英語可)

namespaces

array

?

検索対象(ipc / cpc / fi / fterm)。既定は ["ipc", "cpc", "fi"]

top_k

integer

?

各パターンから取得する最大件数

alpha

number

?

dense/sparseの重み(0.0=疎のみ, 1.0=密のみ)

translate_query_to_english

boolean

?

クエリを英訳してから検索するか

openai_api_key

string

?

未指定時は環境変数 OPENAI_API_KEY を使用

concept_ladder_min_patterns

integer

?

生成する概念パターンの最小数

concept_ladder_max_patterns

integer

?

生成する概念パターンの最大数

concept_ladder_model

string

?

パターン生成に使うLLMモデル名

api_key

string

?

未指定時は環境変数 PINECONE_API_KEY を使用

index_name

string

?

Pineconeインデックス名(既定: patent-class-hybrid

  • このエンドポイントは 多概念展開(concept ladder)を必ず実行します。内部でLLMがクエリから「上位概念→下位概念」の複数パターンを生成し、各パターンで独立して検索した結果をマージして返します。そのためOpenAI APIキーが必須です。


レスポンス例(抜粋):

{
  "total": 15,
  "results": [
    {
      "namespace": "ipc",
      "score": 0.872,
      "id": "ipc:H04N21/00",
      "symbol": "H04N21/00",
      "def_en": "PICTORIAL COMMUNICATION, e.g. TELEVISION",
      "def_ja": "画像通信、例.テレビジョン"
    }
  ],
  "concept_patterns": [
    {
      "pattern": "動画配信システム",
      "queries": ["ストリーミング配信", "コンテンツ配信ネットワーク"]
    }
  ],
  "per_pattern_hit_counts": [
    {"pattern": "動画配信システム", "count": 8}
  ]
}
  • resultsの各ヒットにはnamespace(分類体系)、score(類似度スコア)、symbol(分類記号)、def_en/def_ja(英日の定義文)が含まれます。またmatched_dimensionsmatched_queriesでどのパターンにマッチしたかを確認できます。



GET /classify/{namespace}/{code}

分類記号1件のメタデータを取得します。ベクトル検索ではなく、PineconeのFetch APIで直接IDを指定して取得します。

GET /classify/{namespace}/{code}
  • namespace: ipc / cpc / fi / fterm

  • code: 分類記号(スラッシュを含むコードも可。例: H04N21/00

クエリパラメータ:

パラメータ

説明

index_name

string

既定: patent-class-hybrid

api_key

string

未指定時は環境変数 PINECONE_API_KEY を使用

リクエスト例:

GET /classify/ipc/H04N21/00

レスポンス例:

{
  "total": 1,
  "results": [
    {
      "namespace": "ipc",
      "symbol": "H04N21/00",
      "def_en": "PICTORIAL COMMUNICATION, e.g. TELEVISION",
      "def_ja": "画像通信、例.テレビジョン"
    }
  ],
  "not_found": []
}

見つからなかったコードはnot_found配列に格納されます。



POST /classify/batch

  • 分類記号を最大200件まとめて取得します。

POST /classify/batch
Content-Type: application/json

リクエストボディ:

フィールド

必須

説明

namespace

string

ipc / cpc / fi / fterm

codes

array

分類記号の配列(1-200件)

index_name

string

?

既定: patent-class-hybrid

api_key

string

?

未指定時は環境変数 PINECONE_API_KEY を使用

リクエスト例:

{
  "namespace": "ipc",
  "codes": ["H04N21/00", "H04L67/00", "G06F16/00"]
}
  • レスポンスはGET /classify/{namespace}/{code}と同形式のClassifyCodeResponseです。見つかった分類はresults、見つからなかったコードはnot_foundに入ります。




POST /llm/patent-search-expression

  • 自然言語の説明から、複数の特許データベース向け検索式をLLMで生成します。

POST /llm/patent-search-expression
Content-Type: application/json

リクエストボディの主要フィールド:

フィールド

必須

説明

user_prompt

string

検索したい内容の自然言語説明

api_key

string

?

OpenAI APIキー。未指定時は環境変数 OPENAI_API_KEY

base_url

string

?

OpenAI互換エンドポイントのベースURL

model

string

?

使用するLLMモデル名

target

string

?

jplatpat_like(既定)または generic_boolean

use_classification_api

boolean

?

Pinecone検索で分類候補をLLMに渡すか(既定: true

use_concept_ladder_for_classification

boolean

?

分類検索に多概念展開を使うか(既定: true

pinecone_api_key

string

?

未指定時は環境変数 PINECONE_API_KEY

classification_namespaces

array

?

分類検索の対象(既定: ["ipc", "cpc", "fi"]

use_classification_api=true(既定)の場合、user_promptと同じ内容でPinecone検索を実行し、ヒットした分類記号をLLMのプロンプトに付加した上で検索式を生成します。分類記号を明示的に指定しなくても、意味的に近い分類が自動的に検索式に反映されます。

レスポンス例:

{
  "expression": "(動画 OR ストリーミング) AND (配信 OR 送信) AND (H04N/21 OR H04L/65)",
  "espacenet_smart": "((video OR streaming) AND (delivery OR transmission)) AND (H04N21 OR H04L65)",
  "wipo_patentscope": "...",
  "google_patents": "...",
  "lens_org": "...",
  "uspto_patentsview": "...",
  "notes": "...",
  "model": "gpt-4o",
  "classification_hits": [...]
}

expressionはJplatPat向け、その他のフィールドは各データベース向けの検索式となります。classification_hitsには内部で使用した分類ヒットが格納されます。


エラーレスポンス

ステータスコード

説明

400

APIキー未設定、空クエリ、パラメータ不正など

502

Pinecone側のエラー

ます。

 
 

最新記事

すべて表示
特許審査における AI の活用

1.はじめに この論文 に掲載されてたもの。特許庁の中の人が書いたものです。 表にしただけですが、クラウドモデルがかなり性能良いというのが見えます。 2.比較表 タスク モデル区分 使用モデル 主な結果・評価 評価方法 機械分類付与タスク エンコーダモデル 特許BERT,...

 
 

所在地 神奈川県横浜市都筑区中川中央1-30-1プレミアヨコハマ3階 49番

代表者 西尾啓

設立年月日 2017/11/1

資本金 100万円

事業内容 知的財産情報の収集加工提供

©2023 by enlighton,inc.

bottom of page