レ点腫瘍学ノート
Top日記2026年10月30日

家系図作成GPTs v0.12の中身、技術編

AI chatGPT 家系図 遺伝性腫瘍

408419ca94.png

実践編に続き、この技術編では自然言語の家族歴をSVGの家系図へ変換する仕組みと、v0.7からv0.12までの約10か月間の改修・試行錯誤をまとめます。プログラムと指示書はGitHubで公開しています*1。

GitHub - m0370/pedigree_drawer
Contribute to m0370/pedigree_drawer development by creating an account on GitHub.
https://github.com/m0370/pedigree_drawer

生成AIに直接描かせない構成

システムは、カスタムGPT、中間データのJSON、Pythonの描画プログラム(pedigree_drawer_lib.py)の3つでできています。GPTは文章から人物と関係を読み取ってJSONにするところまでを受け持ち、作図はPythonに任せているので、同じJSONからは必ず同じ図が出ます。生成AIに家系図の画像やSVGを直接描かせると、同じ人物が2回出てくる、親子の線が途中で切れる、世代がずれる、といった誤りが起き、しかも見た目は整っているので誤りに気づきにくくなります。描画の規則をPython側にまとめておけば、プログラムを直したときに前の版と出力を比べることもできます。配布先にGPTsを選んだのは、コードインタープリターでPythonを実行でき、ChatGPTのアカウントがあれば誰でも使えるからで、基本指示書、描画プログラム、JSON仕様書、詳細指示書の4ファイルを載せて動かしています。v0.7のころからこの分け方は変えておらず、ここを変えなかったことが後の改修を楽にしたと思います。

JSONという中間表現

JSONは人物一覧(individuals)、関係一覧(relationships)、全体設定(meta)でできています*2。人物には世代付きのID、性別・ジェンダー、年齢、診断名と診断年齢、遺伝学的検査の結果を持たせ、発端者(proband)と相談者(consultand)も区別します。小児の患者さんの母親が相談に来た場合は、患者さんに矢印とP、母親に相談者の矢印を付けます。

408419ca94-fig1w.png

関係は、親の組ごとに子を並べて書きます。「母の兄2人、それぞれに子が2人」であれば、母と伯父2人を同じ両親の子とし、各伯父の子は別の家族として扱います。親を図に出さないきょうだいだけをsiblingsで書き、親がいるきょうだいをsiblingsで独立させることは禁じました。一卵性双生児は人数記号にまとめず、1人ずつのIDに共通のtwin.groupを付けます。v0.10やv0.11の試験でもGPTはこのあたりをよく読み違えたので、指示書の多くはこうした読み方の規則で占められています。

v0.12では注記の持ち方も見直しました。原文を残しておくためのmedical_notesと、図に表示するdisplay_notesを分け、前者は既定で表示しないようにしています。「年齢不明」「疾患歴なし」のように記号を見れば分かる文字で図が埋まっていたのが理由です。診断の項目にもdisplay_on_chartを設け、急性胆嚢炎のようながん以外の病気は、データに残したまま図の文字と凡例から外せるようにしました。

描画の前に止める検証

描画プログラムは、JSONを受け取るとまず整合性を調べ、ID重複、存在しない人物への参照、世代の不整合、双生児やきょうだいの関係の矛盾、家系の分断があれば描画を止めてエラーを返します。相談者が指定されていないなどの軽い問題は警告として実行記録に残し、その実行記録には図上の番号(II-3など)との対応表と家族の要約も入れて、原文との照合に使えるようにしています。ただ、プログラムで止められるのは形の誤りだけです。開発中には、母方の祖父母がきょうだいとして登録される、相談者の指定が抜ける、父の年齢欄に「父より5歳上の兄」の年齢が入る、といった読み違いがありました。家系の分断は検出できても、年齢の取り違えはJSONとして正しい形をしているので検出できず、最後は人が原文と見比べる必要があります。

この対策として、v0.10ではGPTに原文から照合表(source_facts)を先に作らせ、JSONと突き合わせる仕組みを試しました。けれども照合表を作るのも同じモデルなので読み違いは防げず、不一致による作図の停止や途中での中断が増えたため、v0.11で照合表は任意に戻しています。手間を二重にしても同じ読み違いは見つからないので、この取りやめは妥当だったと考えています。

配置で苦労したところ

v0.7の記事でも書いたとおり、いちばん手こずったのは配置です。家系図の自動配置では、出生順を守ること、夫婦を隣に置くこと、線を交差させないことの3つがぶつかります。特に夫婦の双方にきょうだいがいる場合、出生順を守ると片方のきょうだいの線の間にもう片方の家族が入り込みます。v0.12では出生順の入れ替えと別家族の割り込みをそれぞれ評価して配置を決め、順序を入れ替えたときは実行記録に警告を残すようにしました(JSONの出生順そのものは書き換えません)。双生児は、v0.11まで通常のきょうだい線に分岐線を重ねていたため余分な横線や縦線が出ていたので、v0.12では2人を1単位として扱い、親からの線を共通の分岐点につないで描いています。下の図は実践編の使用例3で、右側のIII-5とIII-6が一卵性双生児です。

408419ca94-fig2.png

ほかに、片親だけを図に出すときに縦線が記号の中心を通っていた不具合(v0.7から存在)は、記号の下縁から線を出すように直しています。世代の間隔は、v0.9の初期には一律の計算で266ピクセルも空いていたので、注記の下端から必要な高さを計算する方式に変え、140〜158ピクセルまで詰めました。片親の縦線と疾患の注記が重なる問題は、v0.12でもまだ残っています。

408419ca94-fig3w.png

上の図では、第II世代のII-1の配偶者を省いた簡略表記になっていて、子への縦線はII-1の記号の下縁から出ています。注記に線が重なっているのが、まだ残っている問題のほうです。簡略表記にせず配偶者も描いた本来の書き方にしたいときは、GPTに「簡略表記にしないでください」と伝えれば描き直してくれるはずです。

v0.7からv0.12までの回り道

v0.7までは、ChatGPTの画面で指示書やコードを直してはコピー&ペーストで差し替えていたため、版の管理ができていませんでした。同じ「v0.7」でも中身の違う版があり、v0.8では描画スクリプトが特定の家系だけを描く固定処理に置き換わって動かなくなる不具合も出ています。そこでv0.8は採用せず、gitでタグを付けてあったv0.7を土台にv0.9を作り直しました。v0.9以降は合成家系の回帰試験を少しずつ足し、基本記号、各種の血縁関係、出生順、複数世代、養子、妊娠、一卵性双生児、注記の表示、疾患の塗り分けなどを確かめる試験が、v0.9の15件からv0.12では64件になって、すべて通っています。

GPTsの環境に特有のつまずきもありました。v0.11の初期には、描画を始める関数を指示書の中にだけ書いてプログラム本体に入れ忘れていたためGPTが止まり、指示欄の設定を取り違えて図が出なくなったこともあります。手元の試験に通ってもGPTの画面で動くとは限らない、というのがこの時期のいちばんの教訓で、それからは版を上げるたびにGPTの新しい会話で描かせて確かめています。v0.12は2026年10月19日にGitHubで公開しました。

参照した記載法

記号体系は、NSGCの1995年の標準*3、2008年の更新*4、性とジェンダーの表記を中心にした2022年の改訂*5を参照しました。2025年に出た訂正(異所性妊娠の斜線、生殖補助医療の記号)もv0.10で取り込んでいます*6。国内の書き方は、HBOC診療ガイドライン2024年版の総論2と德富先生の解説で確かめました*7*8。v0.7の記事でも触れたように、ガイドラインの総論には「何歳で乳癌を発症」のような記載例がほとんどないので、診断年齢の書き方はNSGCの例に寄せています。

配偶子提供・妊娠・養育が別々の人になる生殖補助医療の接続図、子なし・不妊・家族歴不明の終端記号、近親婚の親等の表示は、未対応か簡略化したままです。遺伝性腫瘍の診療を想定して作ったので、先天性疾患を扱う産科・小児科領域では足りないところが出てくると思います。

これからの課題

次は、文章からの読み取りの正確さ、医療者が直した回数、作成時間を数字で測り、臨床遺伝の専門家に記号と線の書き方を確認してもらう予定です。2026年12月11日に予定されているカスタムGPTの提供終了とPluginへの移行にも、急いで対応する必要があります*9。描画をPythonに切り出してあるので、移行で書き直すのは主に指示書になる見込みです。

開発の大部分は、GPTやClaudeにコードを書かせ、ぼくが図の表示のおかしなところを指摘して直させる繰り返しでした。家系図の記載法の面で直すべき点があれば、コメント欄かGitHubで教えてください。

この記事に対するコメント

このページには、まだコメントはありません。

お名前:



*1 m0370/pedigree_drawer, GitHub https://github.com/m0370/pedigree_drawer
*2 JSON_SCHEMA.md, GitHub https://github.com/m0370/pedigree_drawer/blob/main/JSON_SCHEMA.md
*3 Bennett RL, et al. Recommendations for standardized human pedigree nomenclature. Am J Hum Genet 1995;56(3):745-752 https://pmc.ncbi.nlm.nih.gov/articles/PMC1801187/
*4 Bennett RL, et al. Standardized human pedigree nomenclature: update and assessment of the recommendations of the National Society of Genetic Counselors. J Genet Couns 2008;17(5):424-433 https://doi.org/10.1007/s10897-008-9169-9
*5 Bennett RL, et al. Practice resource-focused revision: Standardized pedigree nomenclature update centered on sex and gender inclusivity. J Genet Couns 2022;31(6):1238-1248 https://doi.org/10.1002/jgc4.1621
*6 Steinhaus French K, et al. Correction to: Practice resource-focused revision. J Genet Couns 2025;34(2):e2020 https://doi.org/10.1002/jgc4.2020
*7 遺伝性乳癌卵巣癌(HBOC)診療ガイドライン2024年版 総論2 家族歴聴取と家系図記載法, 日本遺伝性乳癌卵巣癌総合診療制度機構 https://johboc.jp/guidebook_2024/outline2/
*8 德富智明. 家系図を正しく書こう. 小児科診療 2025;88(8):899-905 https://doi.org/10.34433/pp.0000001728
*9 Custom GPT retirement and migration FAQ, OpenAI Help Center https://help.openai.com/en/articles/20001519

更新日:2026-10-31 閲覧数:9 views.