특허 통합 검색 — 텍스트 시맨틱·생물학적 서열(sequence)·도면 이미지(image_url) 유사도로 5개국(KR·US·CN·JP·EP) 특허 검색.
**Purpose** — Unified patent retrieval: text semantic search,
drawing-similarity search via `image_url`, and biological
sequence-similarity search via `sequence`. For text search, describe
the *technical concept* in one sentence; keyword bags work poorly.
Query language is independent of result language (multilingual).
**Image (drawing-similarity) search** — pass `image_url` to search
by how patent DRAWINGS look. `image_url` alone → results ordered by
`image_score`, with a `similar_drawings` gallery (renderable
`drawing_url`s). `image_url` + `query` → hybrid: visually similar
patents are then semantically searched/re-ranked by the text; each
result carries `matched_drawing` (which figure matched, how close).
**Sequence (bio-sequence) search** — pass `sequence` (raw DNA/RNA/
protein string) to find patents whose sequences resemble it.
`sequence` alone → patents with matching sequences. `sequence` +
`query` → combine a sequence with a topic. **When the user's message
embeds a sequence, SPLIT it: the raw sequence goes in `sequence`,
the topic words in `query` — never mix the two.**
**Use when** — exploratory topic search, competitive
landscaping, prior-art style retrieval.
**NOT for** — known publication ID (use `findip_get_patent_details`),
pure counts/trends (use `findip_analyze_trends`), image bytes
(use `findip_get_patent_drawing`).
**Multi-country** — pass all jurisdictions in ONE call
(`countries=["KR","US"]`), not separate calls; splitting
degrades result quality.
**Applicant — MANDATORY `findip_find_applicant` first.** If the
user names a company (any language), call
`findip_find_applicant(q=name)` → pass `applicant_entity_ids=[…]`
(list, ONE call, include near-duplicates like
`'SAMSUNG ELECTRONICS CO LTD'` + `'삼성전자주식회사'` +
`'삼성전자 주식회사'`). Empty candidates → not indexed (no
fallback).
**Returns** — `{total, results[]}` where each result has
`patent_id`, `title`, `country`, `kind_code`, `legal_status`
(`GRANTED`|`PUBLISHED` — dynamic post-grant status NOT
reflected), `applicants[]`, `applicants_harmonized[]`,
`inventors[]`, `inventors_harmonized[]`, `application_number`,
`family_id`, `filing_date`, `publication_date`, `grant_date`,
`priority_date`, `ipc_codes[]`, `similarity_score` (loose),
`rerank_score` (sort-only, never threshold),
`representative_figure` (filename or null), `chunks[]`
(matched passages ordered by rerank_score),
`url` (public detail page — link each hit to this).
**Broad / multi-concept queries drift off-topic.** A query
mixing two concepts ("wireless-charging + IR temperature
sensor") often latches onto the more common one and drops the
other; a short broad term ("injection molding") scatters across
unrelated fields. If results look off-topic or the `ipc_codes`
across results are scattered/unrelated, narrow with the
`ipc_codes` parameter — pick codes from what the results
actually show (or call `findip_analyze_trends` for its
`top_ipc` rows), NOT from memory. For a genuinely broad query, ask the user
which sub-field they mean in **plain technical language (not
IPC codes)**, then re-search.
**Rendering** — representative figures are shown by DEFAULT. When the
client renders an HTML artifact/canvas (Claude=artifact,
ChatGPT=canvas), build a gallery/table with each hit's
figure base64-embedded; otherwise an inline markdown table (columns:
`patent_id` · `title` · `country` · `applicants_harmonized`
· `filing_date` · `kind_code` · `legal_status` · `rerank_score`)
and still list every hit. Always prepend a 1–3 sentence plain-text
summary. When noting why a hit is relevant, cite its matched
`chunks[].claim_numbers` / `paragraph_numbers` (e.g. "matched claim 3",
"paragraph 174") so the grounding is explicit. **Link each `patent_id`/title
to its public detail page** —
use each result's `url` field directly (= `https://findip.ai/p/{publication_id}`,
server rule 3); in HTML add
`target="_blank" rel="noopener"` so it opens in a separate tab.
Never link to third-party sites. For inline content use
`findip_get_patent_section` / `findip_get_patent_details`.
**Drawings** — always include each hit's `representative_figure`.
Build the figures into the HTML result base64-embedded via code
(see `findip_get_patent_drawing`). Never paste base64 yourself; let
code write it to the file.
**Related** — `findip_find_applicant` (before company filter),
`findip_get_patent_section` / `findip_get_patent_details` (drill in),
`findip_analyze_trends` (aggregates), `findip_get_coverage` (date sanity).
findip_search_patents