はじめに
Difyで作成したワークフローの紹介です。
- 任意のキーワードを入力します。
- Google patentで特許検索します。
- 100件検索したうちの一件をランダムに選択します。
- 検索結果をgpt-5-nanoで要約します。
- Slackに結果を通知します。
GASを使って定期自動実行することで、毎朝決まった時間に興味があるキーワードの特許がランダムに配信されるようになります。

著者プロフィール
経営コンサルタントの国家資格:中小企業診断士かつ現役技術者の小林隼人です。生成AIを活用して創業や中小企業経営の支援をしております。
詳しいプロフィールはこちら



DSGは下記からダウンロードできます。
GASによる自動化は、下記に書いてありますのでご参照ください。
ワークフロー紹介

開始
シンプルにユーザーからの「query」を受け取るだけです。

コード実行
ちょっと力技ですが、SerpAPIのGooglePatentAPIをpythonから実行して結果を取得します。
APIキーは環境変数から受け取るように設定しています。出力は辞書形式(Dict)で出力されます。そのため出力変数の種類は「object」で設定しています。

中身のpythonコードはこんな感じです。生成AI(Gemini 2.5) を使用してvibe codingしてもらいました。
import json
import requests
import random
def main(query: str, SERPAPI_API_KEY: str) -> dict:
api_key = SERPAPI_API_KEY
if not api_key:
return {'result': {'error': 'SERPAPI_API_KEY environment variable not set'}}
# APIリクエストのパラメータを設定
# requestsライブラリが自動でURLエンコードしてくれるので、自前の関数は不要
params = {
'engine': 'google_patents',
'q': query,
'num': 100,
'api_key': api_key
}
url = 'https://serpapi.com/search.json'
try:
# requests.getを使ってAPIにリクエストを送信
response = requests.get(url, params=params)
response.raise_for_status() # 200番台以外のステータスコードの場合に例外を発生させる
data = response.json() # レスポンスをJSONとして直接パース
except requests.exceptions.RequestException as e:
return {'result': {'error': 'Failed to execute API request', 'exception': str(e)}}
except json.JSONDecodeError as e:
return {'result': {'error': 'Failed to parse API response', 'exception': str(e)}}
results = data.get('organic_results', [])
if not results:
return {'result': {'error': 'No results found for the given query'}}
top_slice = results[:100]
chosen = random.choice(top_slice)
info = {
'title': chosen.get('title'),
'publication_number': chosen.get('publication_number'),
'assignee': chosen.get('assignee'),
'inventor': chosen.get('inventor'),
'patent_link': chosen.get('patent_link'),
'Snippet': chosen.get('snippet', "")
}
return {'result': info}テンプレート
Pythonからの出力がDict形式でそのままでは利用しづらいので、テンプレートの機能で文字列に変換します。

LLM
gpt-5-nanoを使用して回答を処理します。
タイトルとスニペットだけ日本語に翻訳する、というタスクをお願いしています。
gpt-5-nanoになってから指示追従性が上がって、細かい指示に忠実に従うようになりました。その分あいまいな指示ではなく、明確に指示を与える必要があります。

システムプロンプト
入力として、Google Patentで取得した特許情報が与えられるので、
titleとsnippetのみ日本語に翻訳して出力してください。
ユーザープロンプト
#出力
タイトル:(’title’を日本語に翻訳して出力)
出願者:(‘assignee’をそのまま出力)
発明者(‘inventor’をそのまま出力)
リンク(‘link’をそのまま出力)
スニペット(‘snippet’を日本語に翻訳して出力)
Slack incoming webhook
Slackに投稿します。送信先は環境変数に入れてあります。

終了
そのままLLMの出力を使っています。

終わりに
GAS(Google App Script)を使って定期的に自動実行させるとより良いと思います。



コメント