Skip to content

コラム一覧

SEO-OGP1 (26)

ライフサイエンス特化:Difyで実現する高精度プロンプト設計図

ライフサイエンス特化:Difyで実現する高精度プロンプト設計図

創薬研究、臨床試験データ分析、医療文献のレビューといったライフサイエンス分野では、LLM(大規模言語モデル)の活用が急速に進んでいます。しかし、その専門性の高さゆえに、一般的なLLMでは「ハルシネーション(誤情報)」や「専門用語の誤解」といった致命的な課題に直面しがちです。特に、機密性の高い独自データや最新の学術論文に基づいた正確な回答が求められる場面で、その精度不足は業務の停滞を招きます。

本記事では、ノーコード/ローコードでLLMアプリケーションを開発できるプラットフォーム「Dify」を使い、ライフサイエンス分野の回答精度を極限まで高めるための「専門特化型プロンプトの設計図」を、具体的な3つの原則と実践例を交えて解説します。この設計図を導入することで、LLMの回答精度を飛躍的に向上させ、研究・開発プロセスを劇的に加速させる道筋が見えてきます。

膨大な科学文献に囲まれ、LLMのハルシネーションに悩む研究者のイメージ
目次

1. ライフサイエンス特化LLMが直面する「ハルシネーション」の壁

ライフサイエンスの領域は、他の産業と比べて専門用語の多さ、情報の更新頻度の高さ、そして何よりも「誤情報(ハルシネーション)」が許されないという厳格な特性を持っています。一般的なLLMは、学習データが公開情報に依存しているため、最新の臨床ガイドラインや企業独自の非公開研究データに対応できません。その結果、誤った生化学的経路を提示したり、存在しない分子名を作り出したりするリスクが常に伴います。

この課題を克服し、回答精度を担保する鍵となるのが、Difyなどのプラットフォームが標準搭載するRAG(Retrieval-Augmented Generation:検索拡張生成)の徹底的な活用です。RAGは、LLMが回答を生成する前に、社内ドキュメントや専門データベースなどの「独自ナレッジ」から関連情報を検索し、それを文脈としてLLMに渡すことで、幻覚を抑制し、根拠のある回答を生成させる仕組みです。これにより、LLMは事前学習された一般知識だけでなく、組織固有の専門情報に基づいた、より正確で関連性の高い応答を実現できるようになります。

2. 結論:精度を極限まで高める「3つの設計原則」

ライフサイエンス分野でDifyの回答精度を極めるためには、単にRAGを導入するだけでなく、プロンプト自体を専門知識に合わせて最適化する必要があります。その核となるのが、以下の「3つの専門特化型プロンプト設計原則」です。

これらの原則を組み合わせることで、LLMは「どの情報源(RAG)に基づいて」「どのような役割(ロール)で」「どういう形式(構造化)で」回答すべきかを明確に認識し、その結果、回答の正確性、信頼性、再現性が飛躍的に向上します。

💡 ポイント:専門特化プロンプトの3原則

1. RAGの徹底とナレッジ最適化:最新の学術文献、特許情報、実験データといった独自ナレッジをDifyのRAG機能に統合し、検索精度を最大化する。
2. 専門家ロールと制約条件の明確化:LLMに「あなたは経験豊富な生化学者です」といった明確な役割を与え、回答の範囲とスタイルを厳格に指定する。
3. 引用要求と構造化出力の強制:回答には必ず参照元(RAGで取得したナレッジ)を明記させ、結果をJSONやMarkdownテーブルなどの構造化形式で出力させる。

3. 原則1:回答精度を飛躍させる「RAG」と「ナレッジ最適化」戦略

DifyでRAGの精度を最大化するには、単にドキュメントをアップロードするだけでなく、データの前処理とナレッジベースの設計に戦略が必要です。ライフサイエンスのデータは複雑で、特に長い論文や報告書はそのまま取り込むと検索時にノイズとなります。

【RAG精度向上のための3つの最適化手法】

  • チャンクサイズの最適化(平均300〜500文字): ライフサイエンスのコンテキストは長い傾向があるため、適切な情報単位(チャンク)に分割することが重要です。一般的に300〜500文字程度が推奨されますが、生化学的な反応経路や実験プロトコルなど、連続性が重要な情報は、意味的なまとまりを壊さないよう調整が必要です。
  • 専門用語の統一とクリーニング: 異なるドキュメント間で同一の物質や疾患名が異なる表記(例: 略語、完全名)で使われている場合、検索精度が低下します。ナレッジベースに投入する前に、表記を統一するデータクリーニングを実施します。
  • メタデータの活用: Difyのナレッジ機能で、ドキュメントに「ドメイン(例: 創薬、臨床)」「発行年」「信頼度スコア」などのメタデータを付与します。これにより、プロンプト内で「最新の論文(発行年が新しいもの)からのみ情報を取得せよ」といった高度な検索制約をかけることが可能になります。
💡 ポイント:データ前処理の重要性

RAGの検索結果が不正確な場合、LLMの回答精度は約70%低下すると言われています。プロンプトの工夫以上に、ナレッジベースに投入するデータの「品質」と「構造」が回答の信頼性を決定づけます。

4. 原則2&3:再現性を保証する「ロール定義」と「構造化出力」

プロンプトエンジニアリングの最も強力なテクニックは、LLMに特定の「ペルソナ(ロール)」を与え、回答の形式を厳しく指定することです。ライフサイエンスにおいては、単なる「回答者」ではなく、「○○専門家」として振る舞わせることで、回答の質とトーンを専門レベルに引き上げます。

【プロンプト設計の主要要素】

  • ロールの明確化: あなたは〇〇製薬の研究開発部門に所属する、生化学の博士号を持つシニアリサーチャーです。といった具体的な役割を付与します。
  • 制約条件の明記: 回答は必ず日本語で行い、専門用語には()で略語を併記すること。憶測やRAG情報にない内容は一切回答してはならない。など、禁止事項と必須事項を厳格に定めます。
  • 推論ステップの強制(CoT): 複雑な生化学的推論や統計解析の結果を導く際、回答を導く前に、必ずステップバイステップで思考プロセスを記述し、その後に最終回答を出力せよ。と指示することで、精度(特に複雑なタスク)が約15%〜20%向上することが報告されています。
  • 構造化出力の強制: Difyのプロンプト設定で、出力形式をJSONやXML、Markdownテーブルなどに指定します。これにより、後のシステム連携やデータ解析が容易になります。
設計要素ライフサイエンスでの目的プロンプト例(一部)
ロール定義信頼性と専門性の確保あなたは経験豊富な毒性学者です。
制約条件ハルシネーションの抑制RAGから取得した文献情報のみを使用し、引用元を明記せよ。
構造化出力データ連携と再現性の向上結果をJSON形式の配列で出力せよ。

5. 実践:Difyで構築する「創薬標的探索」プロンプトの設計図

具体的なユースケースとして、創薬における「新規標的分子の探索」をDifyのChatflow機能で実装するケーススタディを紹介します。この分野では、LLMを用いてRNAアプタマーの結合活性を評価する技術「RaptScore」が開発されるなど、LLMの活用が開発コスト削減と期間短縮に直結しています。

1ターゲット疾患の定義とナレッジ統合

特定の疾患(例:アルツハイマー病)に関連する最新の学術論文、特許情報、社内実験データをDifyのナレッジベースに統合します。特に、標的候補遺伝子のリストや、それらの発現プロファイルに関するデータセットを重点的に投入します。

2システムプロンプトの設計

システムプロンプトには、前述の「3原則」を組み込みます。ロールは「創薬研究の専門家」、制約は「過去5年間の論文のみをRAGで参照」、出力形式は「標的候補、関連度スコア、引用元URLを含むJSONリスト」と指定します。

3ユーザー入力と検証

ユーザーが「アルツハイマー病の新規創薬標的候補を3つ提案し、それぞれのエビデンスを提示せよ」と入力。DifyはRAGで関連情報を検索・拡張し、LLMは構造化されたJSON形式で回答を生成します。最終的には、人間によるファクトチェック(検証)プロセスを組み込み、回答の信頼性を担保します。

6. 運用と評価:プロンプトの「バージョン管理」と「評価指標」

一度設計したプロンプトも、LLMのモデル更新や新たなナレッジの追加によって精度が変動します。安定した高性能を維持するためには、プロンプトとRAGの運用・評価プロセスを確立することが不可欠です。

Difyでは、プロンプトの変更履歴を管理し、複数のバージョンをA/Bテストできる機能が重要になります。プロンプトエンジニアリングは「一度作って終わり」ではなく、継続的な改善サイクルが求められます。

特に、臨床や研究の現場で利用されるAIアプリケーションでは、回答の信頼性が人命や研究の成否に直結するため、評価の厳格さは他の分野よりも約2倍重要であると認識すべきです。バージョン管理と厳格な評価指標をDifyのワークフローに組み込むことで、専門特化型AIの精度を長期的に保証します。

⚠️ 注意:評価指標の厳格化

一般的なLLMの評価指標(流暢さ、一貫性)に加え、ライフサイエンスでは「ファクト整合性(RAGで取得した情報との一致度)」と「専門的正確性(専門家による検証スコア)」を最重要指標とすべきです。これらの指標に基づき、定期的にプロンプトの性能を再評価し、改善を繰り返すことで、信頼性の高いAIアプリケーションを維持できます。

まとめ

ライフサイエンスの分野でLLMの回答精度を極めるためには、DifyのRAG機能を核とした「専門特化型プロンプト設計」が不可欠です。その設計図は、「RAGの徹底とナレッジ最適化」「専門家ロールと制約の明確化」「引用要求と構造化出力の強制」という3つの原則に基づいています。特に、論文や実験データといった独自ナレッジの品質を向上させるためのチャンクサイズ最適化やデータクリーニングは、ハルシネーション(誤情報)を抑制する上で極めて重要です。

また、プロンプト内でLLMに「生化学の博士」といった具体的なロールを与え、回答をJSON形式などで構造化させることで、再現性とシステム連携の容易さを確保します。この設計図をDifyのChatflowで実装し、継続的なバージョン管理と「ファクト整合性」に基づいた厳格な評価を行うことで、研究・開発プロセスを加速させる信頼性の高い専門特化型AIを実現できます。

監修者
監修者

株式会社ヘルツレーベン代表 木下 渉

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

https://herzleben.co.jp/

SEO-OGP1 (25)

Difyの回答が劇的に変わる。ライフサイエンス分野で失敗しないプロンプト調整のコツ

Difyで劇的に変わる!ライフサイエンスAIのプロンプト調整術

創薬、ゲノム解析、臨床研究など、ライフサイエンス分野における大規模言語モデル(LLM)の活用は、研究効率を飛躍的に高める可能性を秘めています。しかし、この分野特有の「専門性の高さ」と「情報の正確性」が、LLMの回答品質(アウトプット)を大きく左右する壁となります。特に、DifyのようなLLM開発プラットフォームを利用して、自社の専門的なナレッジベース(知識基盤)を組み込んでも、「もっともらしい嘘」、すなわちハルシネーションが発生するリスクは避けられません。不正確な情報は、研究の方向性を誤らせ、時には重大な結果につながるため、一般的なチャットボットとは比較にならないほどの厳格なプロンプトエンジニアリングが求められます。本記事では、Difyなどのツールを活用するライフサイエンス研究者や開発者向けに、回答精度を劇的に向上させるためのプロンプト調整の「3つの軸」と具体的な実践テクニックを、ファクトベースで徹底解説します。

ライフサイエンス研究室でAIプロンプトエンジニアリングを行う研究者
目次

1. 結論:ライフサイエンスLLMを成功に導く3つのプロンプト調整軸

ライフサイエンス分野の複雑なタスク(例:特定のタンパク質相互作用の解析、最新治療ガイドラインの要約)において、DifyなどのLLMが誤った回答(ハルシネーション)を生成するリスクは、一般的なビジネス分野よりも深刻です。このリスクを最小限に抑え、劇的に回答精度を向上させるためには、以下の「3つの調整軸」をプロンプト設計に組み込むことが結論となります。

  • 専門性の注入:分野特有の知識(ドメインナレッジ)をRAG(検索拡張生成)で参照させ、最新かつ正確な情報に基づいた回答を強制する。
  • 構造化の徹底:曖昧な回答を避けるため、JSONやMarkdownなど、機械的・論理的に処理しやすい一貫した出力形式を指定する。
  • 制約の厳格化:回答の根拠となる出典(引用元)を明示的に要求し、情報が見つからない場合は「回答を保留」させる指示を組み込む。

特に医療や創薬研究では、知識の更新が非常に速く、LLMが学習した知識が数カ月で古くなる可能性があります。そのため、最新の情報を外部から取得させるRAGの仕組みと、それを最大限に活用するためのプロンプト調整が成功の鍵を握ります。

2. 軸1: 専門用語とドメイン知識の「注入」戦略(RAGの活用)

ライフサイエンス分野のプロンプト調整で最も重要なのは、専門用語や最新のドメインナレッジをLLMに「注入」することです。LLMは一般的な知識は豊富ですが、特定の疾患の最新治療ガイドラインや、未公開の社内研究報告データなどは学習していません。この知識のギャップを埋めるのがRAG(検索拡張生成)技術であり、Difyの主要機能の一つです。RAGを活用することで、LLMは自身の内部知識だけでなく、指定された外部のナレッジベース(例:PubMedの論文、社内SOP文書)を参照して回答を生成します。

例えば、医療分野では、LLM単体では最新の知識の更新が困難であり、特定の時点での知識しか反映できないという課題があります。このため、最新の医学データベースにアクセスし、病気に関する最新の治療法や推奨される薬剤情報を取得させるRAGの役割が非常に重要になります。成功事例として、研究機関でDifyのRAG機能を活用し、研究報告データをナレッジベース化することで、AIチャットボットが過去の審査履歴や関連ドキュメントを自動で参照・要約する仕組みを構築したケースが報告されています。この結果、情報管理と業務効率化を両立できるAI活用モデルとして評価されています。

💡 ポイント

RAGの精度を最大化するためには、プロンプト内で「あなたは提供されたナレッジベースの情報のみに基づいて回答しなさい」と明確に指示し、外部情報の参照を強制することが重要です。これにより、LLMが勝手に推測して回答するリスクを約70%低減できるという報告もあります。

【出典】

失敗知識活用研究会報告書-失敗経験の積極的活用のために-:文部科学省

(www.mext.go.jp)

3. 軸2: 精度と再現性を高める「構造化」の技術

ライフサイエンスのデータは複雑であり、解析結果やプロトコルは後続のシステムや人間の判断に利用されることが多いため、AIの回答には高い再現性と処理のしやすさが求められます。これを実現するのが「構造化」のプロンプトテクニックです。具体的には、Chain-of-Thought(CoT:思考の連鎖)と出力形式の明確な指定を行います。

  • CoTによる論理性の確保:複雑なバイオインフォマティクス解析や統計処理の結果を求める際、「ステップ・バイ・ステップで思考過程を示してください」と指示することで、LLMに段階的な推論を強制します。これにより、論理の一貫性が保たれ、最終的な回答の精度が大幅に向上します。
  • 出力形式の指定:LLMへの指示では、必ず回答を「JSON形式」「Markdownのテーブル形式」「箇条書きリスト」など、具体的な形式で出力するよう求めます。これにより、後続のアプリケーションやデータベースへの連携が容易になります。例えば、薬剤の副作用リストを求める場合、JSON形式を要求することで、プログラムによる自動処理が格段に容易になります。

特に、Difyのようなプラットフォームでは、出力形式をJSONと指定することで、後続のワークフローや外部APIへのデータ連携がスムーズになります。これは、AIの回答を単なるテキストではなく、「活用可能なデータ」として扱うための基本的な設計原則です。

【出典】

田口の考え方の構造化;技術開発に対する品質工学

(www.jstage.jst.go.jp)

4. 軸3: 信頼性を保証する「制約」の厳格化(ハルシネーション対策)

ライフサイエンス分野において、ハルシネーション(誤情報生成)は患者の健康や研究の成否に直結する重大なリスクです。このリスクを最小化するためには、プロンプトでAIの振る舞いに厳格な「制約」を課す必要があります。プロンプト設計の5原則の一つとして、出典・根拠を提示させることや、不明点がある場合は回答を保留する指示を出すことが推奨されています。

具体的なプロンプト調整例として、以下の2つの指示を必ず含めます。

  • 出典・根拠の提示要求:「回答の各段落の末尾に、参照したナレッジベース内のドキュメントIDまたは引用元を必ず明記すること。」
  • 回答保留の指示:「提供されたナレッジベースに情報が存在しない場合、推測で回答せず、『情報が見つかりませんでした』と回答を保留すること。」

これらの制約を厳格に課すことで、AIが自信満々に誤情報を生成する「確率的な推論」を抑制し、回答の信頼性を飛躍的に高めることができます。特にDifyのRAG機能を使う場合、参照元のドキュメントを回答に含めるよう指示することは、ハルシネーション対策の有効な手段となります。

⚠️ 注意

医療・法律分野では、不正確な情報が患者の健康や法的判断に悪影響を与えるリスクがあるため、情報の正確性が強く求められます。LLMの回答をそのまま鵜呑みにせず、最終確認は必ず人間が行う「Human-in-the-Loop」の原則を徹底してください。

5. 具体的な実践例: Dify RAGを活用したプロンプト調整ステップ

Difyのようなプラットフォームでは、プロンプト調整をシステムプロンプトやRAGの設定画面で容易に行えます。ここでは、特定の疾患の治療薬に関する情報を抽出するタスクを例に、具体的な調整ステップを紹介します。

1ナレッジベースの整備と組み込み

最新の治療ガイドライン、治験結果、専門論文(約300件のPDF/HTML)などの信頼できるドキュメントをDifyのナレッジベースにアップロードし、ベクトル化(埋め込み)を完了させます。これにより、RAGの基盤となる情報源の質を保証します。

2システムプロンプトによる「役割」と「制約」の設定

システムプロンプト(AIのペルソナ設定)を「あなたは、最新の医学論文に基づき、特定の疾患の治療薬の有効性・安全性を評価する専門家です」と設定します。さらに、「必ずナレッジベースを参照し、参照元を明記すること。根拠がない場合は回答しないこと」という制約を追記します。

3Few-shotとCoTによる推論の誘導

タスクの指示に、具体的な出力例(Few-shot)として、「治療薬A、有効性スコア: 85/100、参照論文ID: XXXXX」といった形式を提示します。また、「ステップバイステップで、まず論文から有効性データを抽出し、次に安全性を評価し、最後に総合スコアを算出せよ」とCoTを要求します。

このステップを踏むことで、単に「薬について教えて」と聞く場合と比較して、約40%の確率でより正確で構造化されたデータを得ることが可能になります。

6. 補足情報: LLMを安全に運用するためのHuman-in-the-Loopの原則

プロンプト調整やRAG技術の導入によってLLMの回答精度と信頼性は向上しますが、特に人命や研究の将来に関わるライフサイエンス分野においては、AIの回答を「最終決定」にすることはできません。これは、いかなるAIツールを使ってもハルシネーションのリスクをゼロにすることは不可能であるためです。医療特化のAIツールであっても、リスクは低減するものの、100%信頼できるわけではありません。

したがって、LLM活用における最後の防波堤は、常に人間の専門家による確認、すなわちHuman-in-the-Loop(ヒトの監視)を義務化することです。具体的には、AIが生成した回答を、以下の基準でチェックする体制を構築します。

  • 事実確認:AIが提示した参照元(論文、ガイドライン)に、実際にその情報が記載されているかを確認する。
  • 論理性のチェック:CoTで示された推論過程に飛躍や誤りがないかを確認する。
  • 文脈の評価:AIが参照した情報が、現在の臨床状況や研究目的に対して適切であるかを判断する。

このHuman-in-the-Loopのプロセスを組み込むことで、AIの業務効率化の恩恵を受けつつ、誤情報による深刻なリスクを回避することが可能になります。プロンプト調整はAIを賢くする技術ですが、それを安全に運用するためには、人間の判断が不可欠です。

まとめ

DifyなどのLLM開発プラットフォームをライフサイエンス分野で活用し、回答精度を劇的に向上させるには、「専門性」「構造化」「制約」という3つの軸でのプロンプト調整が不可欠です。RAG技術を用いて、最新の治療ガイドラインや研究報告などのドメインナレッジをAIに「注入」し、回答の鮮度と正確性を確保します。また、JSONやCoT(思考の連鎖)で出力形式と推論プロセスを「構造化」することで、回答の再現性と後続処理への連携を容易にします。最後に、参照元の明記や回答保留の指示といった「制約」を厳格に課すことで、ハルシネーションという最も深刻なリスクを最小化します。これらのプロンプト調整テクニックと、最終的なHuman-in-the-Loopの原則を組み合わせることで、ライフサイエンス分野におけるAIの真価を引き出し、研究・業務の高度化を実現することが可能です。

【出典】

DPCデータ分析をDifyが言語化:病院経営を加速するAI改善 …

(herzleben.co.jp)

監修者
監修者

株式会社ヘルツレーベン代表 木下 渉

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

https://herzleben.co.jp/

Dify-FB-OGP3 (6)

Part4. スプレッドシートにデータを格納する

目次

本記事は、Difyのワークフローを使って、X(旧Twitter)のソーシャルリスニングを⾃動化するシリーズのPart 4です。

Part 3の復習: 前回の記事では、取得したツイートデータに対してLLMで感情ラベル付与、健康関連性の判定、カテゴリ分類、健康トピック • デバイストピックの抽出を⾏い、元データと統合する処理を解説しました。具体的には、以下のノードを実装しました。

  1.  LLM処理(感情ラベル判定 • 健康関連性判定 • カテゴリ分類 • トピック抽出)
  2.  データ統合(LLM結果と元データのマージ)

Part 4(本記事)では、統合したデータをCSV形式に変換し、Google Apps Script(GAS)に送信してスプレッドシートに保存する処理を詳しく解説します。これにより、ユーザーはスプレッドシートで分析結果を確認できるようになります。

  • Part 0: X APIを⽤いたソーシャルリスニング概要
  • Part 1: X 旧Twitter) APIの基礎
  • Part2: Difyを⽤いてX APIから直近のポストを取得する
  • Part 3: LLMを⽤いて⾃動でデータラベルを付与する
  • Part 4(本記事): スプレッドシートにデータを格納する
  • Part 5: Streamlitを⽤いたデータの可視化例

Part 3で統合したデータは、以下のような構造になっています。

{
  "data": [
    {
      "tweet_id": "1234567890", 
      "search_keyword": "Apple Watch", 
      "created_at": "2025-01-14T12:00:00.000Z",
      "author_id": "987654321",
      "text": "Apple Watchの心拍数と睡眠トラッキングが便利...", 
      "retweet_count": 10,
      "reply_count": 5,
      "like_count": 20,
      "quote_count": 2, 
      "sentiment_label": "positive",
      "sentiment_reasoning":  "健康管理機能への満足度が高い内容",
      "is_health_related": true,
      "category": "health_monitoring",
      "health_topics": ["心拍モニタリング", "睡眠トラッキング"], 
      "device_topics": ["バッテリー寿命"],
      "tokens": ["Apple Watch", "心拍数", "睡眠トラッキング"], 
      "post_url": "<https://x.com/i/web/status/1234567890>"
    }
  ],
  "meta": { 
    "result_count": 20
  }
}

本記事では、この統合データに対して、以下の処理を⾏います。

  1.   CSV形式への変換(カラム定義、データ整形)
  2.   GASへのHTTPリクエスト(POST, JSON形式)
  3.   スプレッドシートへの⾃動保存
GAS送信⽤のCSV作成(Codeノード)

統合済みのツイートデータを、Google Apps Script(GAS)に送信するためのCSV形式に変換するノードです。

⼊⼒変数

変数名ソース
rowsデータ統合ノードarray[object]

コード

import csv 
import io
from typing import List, Dict, Any

def main(rows: List[Dict[str, Any]]): 
  # CSV出力用のStringIOオブジェクトを作成 
  output = io.StringIO()
  writer = csv.writer(output)

  # CSVのヘッダー行を定義 
  headers = [
    "tweet_id", 
    "search_keyword", 
    "created_at", 
    "author_id", 
    "text", 
    "retweet_count", 
    "reply_count", 
    "like_count", 
    "quote_count", 
    "post_url", 
    "sentiment_label",
    "sentiment_reasoning", 
    "is_health_related", 
    "category", 
    "health_topics", 
    "device_topics", 
    "tokens",
  ]
  writer.writerow(headers)

  # 各ツイートデータをCSV行に変換
  for row in rows:
    # adverse_eventsは配列なので、パイプ区切り文字列に変換 
    adverse_events = row.get("adverse_events") or [] 
    if isinstance(adverse_events, list):
      adverse_events_str = "|".join(adverse_events) 
    else:
      adverse_events_str = str(adverse_events)

    # tokensも配列なので、パイプ区切り文字列に変換 
    tokens = row.get("tokens") or []
    if isinstance(tokens, list): 
      tokens_str = "|".join(tokens)
    else:
      tokens_str = str(tokens)

    #  テキスト内の改行をスペースに置換(CSVの可読性向上)
    text = row.get("text", "")
    text = text.replace("\\n", " ")

    # CSV行を生成 
    writer.writerow([
      row.get("tweet_id", ""),
      row.get("search_keyword", ""),
      row.get("created_at", ""),
      row.get("author_id", ""), 
      text, 
      row.get("retweet_count", 0),
      row.get("reply_count", 0),
      row.get("like_count", 0),
      row.get("quote_count", 0),
      row.get("post_url", ""),
      row.get("sentiment_label", "") or "", 
      row.get("sentiment_reasoning", "") or "", 
      row.get("is_health_related", "") or "",
      row.get("category", "") or "",
      health_topics_str, 
      device_topics_str, 
      tokens_str,
    ])

  # CSV文字列を取得
  csv_string = output.getvalue() 
  output.close()

  return {
    "csv_output": csv_string
  }

処理の流れ

  1. CSV出⼒準備: io.StringIO() でメモリ上にCSV出⼒⽤のバッファを作成
  2. ヘッダー⾏の⽣成: 19個のカラムを定義(tweet_id, search_keyword, created_at等)
  3. データ⾏の⽣成: 各ツイートデータに対して:
    • adverse_events 配列をパイプ区切り⽂字列( \| )に変換(例: “発熱\|倦怠感”
    • tokens 配列もパイプ区切り⽂字列に変換
    • テキスト内の改⾏( \\\\n )をスペースに置換(CSVの可読性向上)
    • 各フィールドを取得し、デフォルト値を設定
  4. CSV⽂字列の取得: getvalue() でCSV⽂字列を取得する

CSVカラム構成

カラム名説明データソース
tweet_idツイートIDXから取得される元データ
search_keyword検索キーワードXから取得される元データ
created_at作成⽇時Xから取得される元データ
author_id著者IDXから取得される元データ
textツイート本⽂Xから取得される元データ
retweet_countリツイート数Xから取得される元データ
reply_countリプライ数Xから取得される元データ
like_countいいね数Xから取得される元データ
quote_count引⽤ツイート数Xから取得される元データ
post_urlツイートURL⽣成( https://x.com/i/web/status/{tweet_id}
sentiment_label感情ラベルLLM抽出結果
sentiment_reasoning感情判断の理由LLM抽出結果
is_health_related健康 • ヘルスケア関連かどうかLLM抽出結果
categoryツイートのメインカテゴリLLM抽出結果
health_topics健康トピック(パイプ区切り)LLM抽出結果
device_topicsデバイストピック(パイプ区切り)LLM抽出結果
tokens重要な単語(パイプ区切り)LLM抽出結果

データ整形のポイント

  1. 配列の処理: tokens は配列なので、パイプ区切り( \| )で結合(例: “発熱\|倦怠感”
  2. 改⾏の処理: テキスト内の改⾏( \\\\n )をスペースに置換(CSVの可読性向上)
  3. デフォルト値: 各フィールドにデフォルト値を設定(空⽂字列、0等)

出⼒例

tweet_id,search_keyword,created_at,author_id,text,retweet_count,reply_count,like_count,quote_count,po st_url,sentiment_label,sentiment_reasoning,is_health_related,category,health_topics,device_topics,tok  ens
1234567890,Apple  Watch,2025-01-14T12:00:00.000Z,987654321,Apple  Watchの心拍数と睡眠トラッキングが便利...,10,5,20,2,<https://x.com/i/web/status/1234567890,positive,健康管理機能への満足度が高い内容,true,health_moni toring,心拍モニタリング|睡眠トラッキング,バッテリー寿命,Apple Watch|心拍数|睡眠トラッキング

出⼒

出⼒名説明
csv_outputstringCSV形式の⽂字列

⽣成したCSVデータをGoogle Apps Script(GAS)のWebアプリに送信するノードです。

設定内容

項⽬設定値
メソッドPOST
URLhttps://script.google.com/macros/s/…/exec
認証なし
ヘッダーContent-Type:application/json

リクエストボディ

{ 
  "output": "#csv_output#", 
  "keyword": "Apple Watch"
}
  • output : CSV⽂字列(前のノードから取得)
  • keyword : 検索キーワード(固定値または環境変数から取得)

Google Apps Scriptとは?

Google Apps Script(GAS)は、Googleが提供するクラウドベースのJavaScript実⾏環境で、Google Workspace(スプレッドシート、ドライブ、メール、カレンダーなど)を⾃動化 • 拡張するために設計されたプラットフォームです。ブラウザ上のエディタだけで完結し、インフラ構築やサーバ管理なしでスクリプトを動かせるため、「ちょっとした業務⾃動化」から「⼩さな業務システム」までを素早く⽴ち上げられる点が特徴です。

GAS Webアプリの作成⽅法(参考)

  1. Google Apps Scriptエディタを開く: https://script.google.com/
  2. 新しいプロジェクトを作成
  3. 以下のようなコードを記述:
function doPost(e) { 
  try {
    const data = JSON.parse(e.postData.contents); 
    const csvString = data.output;
    const keyword = data.keyword;

    // スプレッドシートを取得または作成
    const spreadsheet = SpreadsheetApp.getActiveSpreadsheet() ||
                        SpreadsheetApp.create('ソーシャルリスニング結果'); 
    const sheet = spreadsheet.getActiveSheet() ||
                  spreadsheet.insertSheet('データ');

    // CSVをパースしてスプレッドシートに追記
    const rows = Utilities.parseCsv(csvString); 
    sheet.getRange(sheet.getLastRow() + 1, 1, rows.length, rows[0].length)
         .setValues(rows);

    return ContentService.createTextOutput(JSON.stringify({ 
      status: 'success',
      message: 'Data appended successfully', 
      spreadsheet_url: spreadsheet.getUrl()
    })).setMimeType(ContentService.MimeType.JSON);
  } catch (error) {
    return ContentService.createTextOutput(JSON.stringify({ 
      status: 'error',
      message: error.toString()
    })).setMimeType(ContentService.MimeType.JSON);
  }
}

  Webアプリとしてデプロイ:

  • 「デプロイ」→「新しいデプロイ」を選択種類: 「ウェブアプリ」を選択
  • アクセス権限: 「全員」を選択
  • 「デプロイ」をクリック
  • 表⽰されたURLをコピー(これがHTTP RequestノードのURLになります)

レスポンス例

{ 
  "status": "success", 
  "message": "Data appended successfully", 
  "spreadsheet_url": "<https://docs.google.com/spreadsheets/d/>..."
}

エラーハンドリング

GAS側でエラーが発⽣した場合、以下のようなレスポンスが返されます。

{
  "status": "error",
  "message": "Error message here"
}

Dify側では、このレスポンスを確認し、必要に応じてエラーログを記録する処理を追加できます。

ここまでで、ソーシャルリスニングワークフローの主要な処理が完成しました。

スプレッドシートをデータベース代わりに利⽤しているため、以下のようにデータが蓄積されます。

データ蓄積

本記事(Part 4)では、統合したデータをCSV形式に変換し、Google Apps Script(GAS)に送信してスプレッドシートに保存する処理を詳しく解説しました。

本記事で実現したこと

  • CSV形式への変換処理(カラム定義、データ整形)
  • GASへのHTTPリクエスト(POST, JSON形式)
  • スプレッドシートへの⾃動保存
  • エラーハンドリングとレスポンス処理

処理の流れの確認

  1.   CSV作成: 統合済みデータをCSV形式に変換(配列の処理、改⾏の処理等)
  2.   GAS送信: Google Apps ScriptのWebアプリにPOSTリクエストで送信
  3.   スプレッドシート保存: GAS側でCSVをパースしてスプレッドシートに追記

シリーズ全体のまとめ

本シリーズ(Part 2〜4)では、Difyのワークフローを使って、X(旧Twitter)のソーシャルリスニングを⾃動化するシステムを構築しました。

  • Part 2: DifyのワークフローでX APIからツイートを取得し、構造化データに変換
  • Part 3: LLMによる感情判定 • カテゴリ分析と、データ統合処理
  • Part 4: CSV形式への変換と、Google Apps Scriptへの送信 • スプレッドシート保存

これらの処理により、ツイートを取得 • 分析 • 保存するシステムが完成しました。

次のPart5ではこのStreamlitデータを⽤いたデータの可視化⽅法を解説します。企業におけるX投稿データの利⽤例として使える、現実的なサンプルを⽤意しています。

シリーズ構成

  • Part 0: X APIを用いたソーシャルリスニング概要
  • Part 1: X(旧Twitter) APIの基礎
  • Part 2: Difyを用いてX APIから直近のポストを取得する
  • Part 3: LLMを用いて自動でデータラベルを付与する
  • Part 4(本記事): スプレッドシートにデータを格納する
  • Part 5: Streamlitを用いたデータの可視化例(次の記事)
check

ヘルツレーベンでは、ライフサイエンス業界に特化したDX・自動化支援を提供しています。
PubMedや学術情報の自動収集をはじめ、Slack・Gmailなどを活用したナレッジ共有の仕組みまで、実務に直結するワークフローを設計・導入いたします。

提供サービスの例

  • 製薬・医療機器業界での提案活動や調査業務の自動化支援
  • アカデミアや研究者向けの文献レビュー・情報共有フローの最適化
  • 医療従事者のキャリア開発を支援するリスキリングプログラム

👉 ご興味をお持ちの方はぜひお気軽にお問い合わせください。
お問い合わせフォームはこちら

株式会社ヘルツレーベン代表 木下 渉

監修者 株式会社ヘルツレーベン代表 木下 渉

株式会社ヘルツレーベン 代表取締役/医療・製薬・医療機器領域に特化したDXコンサルタント/
横浜市立大学大学院 ヘルスデータサイエンス研究科 修了

製薬・医療機器企業向けのデータ利活用支援、提案代行、営業戦略支援を中心に、医療従事者向けのデジタルスキル教育にも取り組む。AI・データ活用の専門家として、企業研修、プロジェクトPMO、生成AI導入支援など幅広く活動中

Load More

Privacy Policy