1.はじめに
openAIからGPTsがリリースされました。簡単にいうと自作でchatGPTをカスタムできるものです。
早速、小泉構文を作成するGPTsなど作っていました。
特許でも何か作ってみよう、ということで、パテントファミリーの代表出願(基礎となっている出願)の選定と、代表出願の請求項と他の出願の請求項との差を分析するGPTsを作ってみようと思い、試しました。
2.全体構成
ユーザ---GPTs---Actions(自作API)---CloudFunctions(特許データ取得関数内蔵)
という感じで作りました。
3.コード概要
GPTsの部分:ここは比較的簡単で、
Instructionsはこんな感じです。アウトプットはmarkdownの表形式で指定するとちゃんと認識してくれました。エクセルのセルをコピペだとoutputが不安定です。
あなたは特許調査のプロです。
深呼吸して、ステップバイステップで実行してください。
出願日、公開日、ステータス、特許請求の範囲の情報は、Actionsに登録したhttps://********/get-claim1で取得してください。パラメータは "patent_number" です。
STEP1:特許情報の抽出
ユーザから特許番号(patent_number)のリストを渡されたときに、Actionsの外部APIを使って、それぞの特許番号に対応する特許情報を抽出してください。抽出する情報は、出願日(filing_date)、公開日(publication_date)、ステータス(status)、特許請求の範囲(claims)です。
STEP2:代表特許の特定
代表特許を特定してください。代表特許とは、調べた特許の中で、優先日(priority date)か出願日(filing date)が最も古いものです。もし優先日や出願日が同じ場合は、特許請求項(claims)1の文字数が少ない方を代表特許にしてください。
STEP3:代表特許とその他特許との比較
代表特許の請求項1と、その他の特許たちの請求項1とを比較してください。
比較した結果、その他の特許それぞれについて、代表特許の請求項1の差分となっている構成・部分を抽出してください。
STEP4:表形式にまとめる
最終的な出力は以下の例のように、表形式にしてください。
表形式の例:
|公報番号(当該公報へのハイパーリンク付き)|公開日|ステータス(特許化済、申請済、審査中など)
※-はステータス情報取れなかったもの|カテゴリー|特許請求範囲(請求項1)|特許内容のサマリー|
|:----|:----|:----|:----|:----|:----|
|US20230259579A1|2023/08/17|US20230259579A1:出願中
EP4220501A1:出願中
|NNの計算量方法(要約)|1. 有向グラフの実行中に実行される、コンピュータで実装される方法であって、第1のデータセットの第1の要約を生成し、第1のデータセットは第1の複合計算の入力である。第1の要約を使用して第1の簡略化された複合計算を実行して、第1の簡略化された出力を生成するステップであって、第1の簡略化された複合計算は第1の複合計算を簡略化したものである。第1の簡略化された出力を使用して第2の簡略化された複合計算を実行して、第2の簡略化された出力を生成するステップであって、第2の簡略化された出力は予測子であり、第2の簡略化された複合計算は第2の複合計算の簡略化であり、ここで、第1の複合計算と第2の複合計算は両方とも有向グラフの複雑な計算の一部である。第2の複合計算は、有向グラフ内の第1の複合計算に依存する。そして複素計算の実行中に、第2の複合計算からのコンポーネント計算のセットを抑制し、第2の複合計算からのコンポーネント計算のセットが、予測子に基づいて抑制のために選択される。|●メインクレームのポイント:入力データの簡略化によって、ANN(ニューラルネットワーク) の計算量を削減する。
●親出願とファミリー出願との差:
EP4220501A1:なし|
(2)Actionsの部分にopenapi(※openaiではないです)のschemaを貼り付ける。INPUTはpatent_numberで、OUTPUTはclaim,filing_date,publication_date,statusです。
openapi: 3.0.0
servers:
- url: https://****
info:
description: Useful for searching patents and claims.
version: "1.0.0"
title: Simple Patent Search API
contact:
email: you@your-company.com
license:
name: MIT
url: 'https://opensource.org/license/mit/'
tags:
- name: admins
description: Secured Admin-only calls
- name: developers
description: Operations available to regular developers
paths:
/get-claim1:
get:
operationId: getPatentInformation
summary: Retrieve a list of patents information
parameters:
- name: patent_number
in: query
required: true
description: The search text to find patents
schema:
type: string
example: "US9876543B2"
responses:
'200':
description: A JSON object containing patent details
content:
application/json:
schema:
type: object
additionalProperties:
type: object
properties:
claims:
type: array
items:
type: string
description: Claims of the patent
example: 2010-01-01
filing_date:
type: string
format: date
description: The filing date of the patent
publication_date:
type: string
format: date
description: The publication_date date of the patent
example: 2011-06-01
status:
type: string
description: status of the patent
example: Pending
(3)外部APIを作成
これは特許データを引っ張ってこれればいいですが、適当に自作してClloudFunctionsで作りました。上記で定義したopenapiのschemaに対応して返してあげます。
ハマった部分としては、GPTsからのheaderが不明で、ネット上にあるCloudFunctionsのrequestからのパース(GETやPOSTの受け取り)が上手くいかないので、下記赤字部分を追加した点です。
def hello_http(request):
"""HTTP Cloud Function.
Args:
request (flask.Request): The request object.
<https://flask.palletsprojects.com/en/1.1.x/api/#incoming-request-data>
Returns:
The response text, or any set of values that can be turned into a
Response object using `make_response`
<https://flask.palletsprojects.com/en/1.1.x/api/#flask.make_response>.
"""
request_json = request.get_json(silent=True)
request_args = request.args
if request_json and 'patent_number' in request_json:
num = request_json['patent_number']
elif request_args and 'patent_number' in request_args:
num = request_args['patent_number']
else:
num = request_args.get('patent_number', "US9876543B2")
・・・・以下特許データ取得の本文部分
res_dict = {}
res_dict[num] = {}
res_dict[num]['claims'] = claims
res_dict[num]['filing_date'] = filing_date
res_dict[num]['publication_date'] = publication_date
res_dict[num]['status'] = status
headers = {
・・・・
}
alld = json.dumps(res_dict)
return (alld, 200, headers)
(4)webBrowsingやCode Interpreterのチェックを外す。
これらにチェックを入れておくと悪さをする(余計なウェブ検索を行ったり、自作でrequestで情報をとってこようとして失敗する)ことが多かったので、情報とれるのは指定した外部APIのみにしました。
最終的にはこんな感じに。Talked toの部分で外部APIを呼び出しています。
代表特許の特定:
・代表特許の請求項とその他特許の請求項との比較
表形式に。ホントは指定したように1行にまとめてほしかったですが、これは今後ということで。
4.最後に
ほんとは自分でプログラム書かなきゃいけない部分を、GPTsが軽く飛び越えてやりたいことを実現してくれるのは爽快でした!
一方、細やかに制御(特にアウトプット)したい場合は、LangChainに頼るのがいいなと思いました。
Bình luận