ClinicalTrials.gov 治験情報を自然言語で取得するAIワークフロー Part1
| 目次 |
ワークフローの全体イメージ
| 検索 | 結果 | UI | ||
|---|---|---|---|---|
| Part 1 | ⾃然⾔語からAPI検索を実施して要約 | 単語での検索 | 要約 | Slack |
| Part 2 | ⾃然⾔語からAPI検索を⾏い、⽣成AIが要約まで実施 | ⽂章での検索 | 要約 | Slack |
| Part 3 | 検索結果の⼀覧からcsvファイルと要約を⽣成する | ⽂章での検索 | 要約 + csvファイル | Slack |
Part1. 打ち込んだ症例に関連する治験情報10件分を要約して返す

◆⼊⼒と回答のゴールイメージ
Part1で目指すゴールは「単語で検索」して「単語に紐づく症例の論文を検索する」までです。
文章での検索や論文リスト(csv)の作成はPart2以降で解説します。
| Slack上での質問 | 得られる回答のイメージ |
|---|---|
| @ボットのメンション diabetes | ご質問ありがとうございます。「糖尿病」に関連するClinicalTrials.govに登録されている臨床試験について、取得したデータに基づいてご説明いたします。提供されたデータによると、糖尿病に関連する様々な側⾯(診断、治療、合併症など)を対象とした複数の試験が実施されていることがわかります。これらには、観察研究と介⼊研究の両⽅が含まれており、中には既に完了したものや、これから参加者募集を開始する予定の試験もあります。 以下に、抽出された疾患名や条件をもとに、具体的な試験内容を要約してご紹介します。 ### 1. 糖尿病性⼼⾎管合併症に関する研究 Diabetic Cardiovascular Complications: Multi-Omics Analysis (ID: NCT06824233) 概要: 糖尿病患者における⼼⾎管合併症について、マルチオミクス解析を⽤いて研究する観察研究です。糖尿病が⼼⾎管系に与える影響を多⾓的に解析することを⽬指しています。 ステータス: 2025年3⽉1⽇から募集開始予定 (NOT_YET_RECRUITING)です。 詳細: https://clinicaltrials.gov/study/NCT06824233 Genetic Markers of Coronary Heart Disease in Type 2 …(中略) ### まとめ 現在、ClinicalTrials.govには、糖尿病の診断、様々な合併症(⼼⾎管疾患、⾜潰瘍、網膜症、神経障害など)の治療法開発、特定の糖尿病タイプ(1型、2型、前糖尿病)への介⼊、および⾎糖モニタリング技術の評価など、多岐にわたる研究が登録されています。ほとんどの試験は既に完了していますが、「Diabetic Cardiovascular Complications: Multi-Omics Analysis (ID: NCT06824233)」は2025年3⽉から募集開始予定です。 これらの情報が、糖尿病に関する臨床試験の理解の⼀助となれば幸いです。 |
<ワークフローの流れ>
- Slack Trigger: Slackへのメンションをトリガーにワークフローを開始。
- HTTP Request: Slackから受け取った疾患名でClinicalTrials.gov APIを検索。
- Code in JavaScript: 取得した臨床試験データを整形し、AI向けに要約。
- Message a model: Geminiモデルが要約されたデータとユーザーの質問に基づき回答を⽣成。
- Send a message: ⽣成された回答をSlackに返信。
1. Slack Triggerノードでワークフロー起動


このノードは、ワークフローの起点となる部分です。
| 設定項⽬ | 値 | 役割 |
|---|---|---|
| Trigger On | Bot / App Mention | Slack上でこのn8nボットにメンションがあったときにワークフローを起動します。 |
| Watch Whole Workspace | true(スライダーを緑にしておく) | このスイッチをONにしておくことで、どのSlackチャンネルでボットをメンションしてもn8nのワークフローが動く様になります。 |
- 役割: Slack上にインストールされたn8nボットアカウントに対してメンションを⾏うことで、ワークフローを起動します。
- 期待するメッセージ形式:
@ボットのアカウント名 diabetes
- 注意点:
- メンションの後、必ず改⾏を⼊れてから検索したい疾患名(条件)を⼊⼒してください。
- ClinicalTrials.govの検索条件となるため、症例‧条件は英語で⼊⼒する必要があります。
- Part2以降は、日本語で検索可能となります。
2. HTTP RequestノードでAPIを検索


Slackから受け取った疾患名を使い、「ClinicalTrials.gov」のAPIを呼び出し、臨床試験データを取得します。
| 設定項⽬ | 値 | 役割 |
|---|---|---|
| URL | https://clinicaltrials.gov/api/v2/studies | ClinicalTrials.govのAPIエンドポイントです。 |
| Send Query | true | クエリパラメータを付けてリクエストを送信します。 |
| Query Parameters | 2つのパラメータを設定 | – |
◆クエリパラメータの詳細
| Name | Value | 役割 |
|---|---|---|
| query.cond | ={{$json.text.split(‘\n’)[1] }} | 検索条件となる疾患名(Conditions)を指定します。Slack Triggerノードから渡されたメッセージ( $json.text )を改⾏⽂字( \n )で分 割し、2番⽬の要素(インデックス [1] 、つまり改⾏以降の⽂字)を抽出して検索クエリとします。 |
| pageSize | 10 | 取得する試験結果の数を10件に制限します。 |
- 役割: Slackで⼊⼒された疾患名(例: diabetes )をAPIの検索クエリに変換し、最新の臨床試験データをJSON形式で取得します。
- ポイント: ここで、前述のSlackメッセージ形式の注意点(改⾏と2⾏⽬に条件)が活かされています。
3. Code in JavaScriptノードでデータを整形

以下はコードブロックにてJavascriptを使っていますが、ワークフローの稼働を優先したい方はコードをそのままコピー&ペーストしてください。

HTTP Requestノードで取得した⽣データを、AIが処理しやすいように、また最終的な回答に含めるために必要な情報だけを抽出‧整形します。
const studies = $input.all()[0].json.studies;
const textSummary = studies.map(study ⇒ {
const idMod = study.protocolSection.identificationModule;
const status = study.protocolSection.statusModule;
const condMod = study.protocolSection.conditionsModule;
const design = study.protocolSection.designModule;
return `
▼ ${idMod.briefTitle}
ID: ${idMod.nctId}
Status: ${status.overallStatus} / Type: ${design.studyType} / Phase: ${(design.phases || []).join('|')}
Conditions: ${(condMod.conditions || []).join('|')}
Enrollment: ${design.enrollmentInfo.count}
Dates: ${status.startDateStruct.date} 〜 ${status.completionDateStruct.date}
URL: https://clinicaltrials.gov/study/${idMod.nctId}
`.trim();
}).join('\n\n');
return [{json: {summary: textSummary}}];
- 役割: APIから返された複数の試験データ( studies )をループ処理し、各試験のタイトル、ID、ステータス、フェーズ、条件、登録者数、期間、URLなどの主要情報を抽出し、読みやすいテキスト形式に結合します。
- 出⼒形式:
▼ [試験のタイトル]
ID: [NCT ID]
Status: [全体ステータス] / Type: [研究タイプ] / Phase: [フェーズ]
Conditions: [条件1|条件2…]
Enrollment: [登録者数]
Dates: [開始日] 〜 [完了予定日]
URL: https://clinicaltrials.gov/study/[NCT ID]
… (次の試験データへ続く)
- 格納先: 整形されたテキストは、 summary というキーを持つJSONオブジェクトとして次のノードに渡されます。
4. Message a modelノードでAIが回答を⽣成


整形された臨床試験データとユーザーの元の質問に基づき、Google Geminiモデルが専⾨家として回答⽂を⽣成します。
| 設定項⽬ | 値 | 役割 |
|---|---|---|
| Model ID | models/gemini-2.5-flash | 使⽤するAIモデルを指定します。 |
| Messages | 2つのプロンプトを設定 | AIへの指⽰と⼊⼒データを渡します。 |
◆ プロンプト(AIへの指⽰とデータ)の詳細
- システムプロンプト (役割と指⽰):
#Role あなたは医療‧臨床試験の専⾨家です。 #Instruction これからユーザーの質問内容とClinicalTrials.gov APIから取得した試験データを渡します。 ユーザーの疑問やニーズに対して、取得したデータを根拠に、分かりやすく丁寧に答えてください。 回答では、抽出された疾患名や条件をもとにClinicalTrials.govの試験内容を要約し、質問に沿って解説してくださ い。 与えられた情報以外の情報は絶対に含めないでください。専⾨家として確実に正しい根拠のある情報のみを提出してください。 仮に、与えられたデータで回答することが困難な場合は、ユーザーに別の質問⽅法を促してください。 ⽂章は必ず⽇本語で⽣成してください。 治験のタイトルなども⽰しながら、どのような治験が存在するかを説明してください。
AIに医療‧臨床試験の専⾨家としての役割を与え、与えられたデータのみに基づき、分かりやすく根拠のある回答を⽣成するように厳しく指⽰しています。
- ユーザープロンプト (⼊⼒データ):
#input_data
$('Code in JavaScript').item.json.summary }}
URLを使って根拠を⽰す場合は以下を⽤いる
(#input_data内に⽰されたnctIdとURL接尾辞のIDが対応しているため、
根拠を⽰す場合は必ずこの対応関係を⽤いる。誤った根拠の提供は決しておこなわない)
#user_query
$('Slack Trigger').item.json.text.split('\n')[1]}}
- #input_data : 前のノードで整形された臨床試験の要約テキストを渡します。
- #user_query : Slack Triggerから受け取った元のメッセージから、ボットのメンション部分
- split(ʼ\nʼ) で改⾏を起点に単語を分割し、2つ⽬の要素を取得
- 役割: AIが専⾨的な知識と具体的なデータ(ClinicalTrials.govの結果)を組み合わせて、ユーザーの質問に対する質の⾼い回答を⽣成します。
5. Send a messageノードでSlackに返信


AIが⽣成した回答を、元のメッセージが投稿されたチャンネルとスレッドに返信します。
| 設定項⽬ | 値 | 役割 |
|---|---|---|
| Send Message To | Channel | 投稿先としてチャンネルを指定します。 |
| Channel By ID | ={{$(‘SlackTrigger’).item.json.channel }} | 元のメッセージが投稿されたチャンネルのIDを取得し、返信先とします。 |
| Message Text | ={{$json.content.parts[0].text }} | AIノード(Message a model)で⽣成された回答テキストを取得します。 |
| Reply To a Message | ={{$(‘Slack Trigger’).item.json.ts }} | まずは、画面下部にあるAdd Optionから「Reply To a Message」を追加します。 その後、一番最初のメッセージのタイムスタンプ( ts )を取得し、スレッドへの返信として投稿します。 |
役割: AIによって⽣成された最終回答を、ユーザーがメンションしたSlackチャンネル内の元のメッセージのスレッドに投稿し、会話を完結させます。
ここまで作成すると、Slackから単語で検索するだけでClinicalTrials.govで治験情報の検索を行う簡単なワークフローが完成します。
Part2では「文章でボットに質問をするだけで、文章からパラメータを抽出して治験情報を検索する」ワークフローについて解説します

ヘルツレーベンでは、ライフサイエンス業界に特化したDX・自動化支援を提供しています。
PubMedや学術情報の自動収集をはじめ、Slack・Gmailなどを活用したナレッジ共有の仕組みまで、実務に直結するワークフローを設計・導入いたします。
提供サービスの例
- 製薬・医療機器業界での提案活動や調査業務の自動化支援
- アカデミアや研究者向けの文献レビュー・情報共有フローの最適化
- 医療従事者のキャリア開発を支援するリスキリングプログラム
👉 ご興味をお持ちの方はぜひお気軽にお問い合わせください。
お問い合わせフォームはこちら

監修者 株式会社ヘルツレーベン代表 木下 渉
株式会社ヘルツレーベン 代表取締役/医療・製薬・医療機器領域に特化したDXコンサルタント/
横浜市立大学大学院 ヘルスデータサイエンス研究科 修了
製薬・医療機器企業向けのデータ利活用支援、提案代行、営業戦略支援を中心に、医療従事者向けのデジタルスキル教育にも取り組む。AI・データ活用の専門家として、企業研修、プロジェクトPMO、生成AI導入支援など幅広く活動中

