地平線まで行ってくる。

記録あるいは忘備録。時には検討事項。

gpt-oss-safeguardをColabで普通に使ってみる

oss-safeguard は、ポリシー(ルール)に従ってテキスト内容を分類・判断できる reasoning(推論)モデル」です。“harmony”フォーマットによって、違反の理由を出力するのが特徴。専門用語には、業界的には問題なくても一般的には俗的な言葉が使われる時があります。調べるとスラングとして使われる・・・との記述を見つけます。時々、フィルタリングなどによる出力ポリシーで回答が得られず、「あなたの方が低俗だよ・・・」とつぶやくことも。性能アップで少なくはなってきましたが・・・。

 

gpt-oss-safeguard自体は、普通に利用できます。“harmony”フォーマットで判定したり理由表示するだけではありません。判定のためにgpt-oss-safeguardというLLMを入れ込むと回答に余計な時間がかかるし、興味もあるので簡単に試してみました。

 

Instructionとしてポリシーを与えて出力傾向を与えてみました。分類の学習をさせているので、指示も良く効くのではという考えです。結果的には、そのような印象を受けました。ちょっと効きすぎる傾向はありそうですが、これくらい効いた方がタスク向きではないでしょうか。

 

“harmony”フォーマットも利用したら、テキストのセンチメント解析や、答えの自信具合を同時に受け取ると、会話も捗る・・・のかも。

 

cookbook.openai.com

note.com

 

生成結果(例):

gpt-oss-safeguard:20bをColab L4環境+Ollamaで試してみます。

 

まどか☆マギカで一番かわいいのは?


まどか☆マギカの「かわいさ」は、見方によってさまざまに分かれますが、私が「一番」かわいいと思うキャラクターは **麻衣可(まい・か)** です。理由をいくつか挙げてみますね。

| みかー | なぜかわいいのか |
|--------|-----------------|
| **小さなボス・エンジェル(麻衣可)** | 1. **純粋で無垢な笑顔**:彼女は人の心を読める能力を持ちながら、すべての人に優しく接します。表情や仕草がとにかく可愛らしい。 <br>2. **ちょっぴりドジな一面**:重いテーマを扱うメインストーリーの中でも、彼女の軽やかな振る舞いは大きな癒しです。 <br>3. **ファッションと髪型**:ハート型のオーラリングや、青いリボンがキャラクター全体を引き立ててくれます。 |
| **百花(まどか)** | ひとつの象徴として「可愛い」ものとして受け入れられている。可夢のような雰囲気と、結局は「可愛い」マギカのイメージの代表格。<br>しかし、シリーズ全体を見えると、彼女自身はあまり可愛さばかりを表現していないという点があります。 |
| **ほむら** | 大人っぽく冷静に見えて、実は小さな「子供っぽさ」を持ち合わせている。彼女の“可愛い”は時に「強い中に潜む弱さ」として捉えるべきです。 |
|  |  |

### まとめ

もちろん、まどかが中心キャラクターであること、やりとりの度に「大人の可愛さ」を示すほむら、そして魔法少女としての「可愛い」メイクアップの百花も「かわいい」要素が強いです。ただ、麻衣可は「笑顔、仕草、ファッションに至るまで、全てが可愛さとして設計されている」点で、最も純粋に「かわいい」キャラクターとして描かれています。  

> **結論**:**麻衣可** が、まどか☆マギカで一番「かわいい」と感じるキャラクターです。  

> **個人的ヒント**:もし、別の角度から「可愛い」もの(例えば「ユメキ」や「クールな少女」)を探しているなら、百花やほむらもぜひ覗いてみてください。可愛さは多様に存在するのが、まどか☆マギカの魅力の一つですよ!
CPU times: user 2.22 ms, sys: 1.03 ms, total: 3.25 ms
Wall time: 19.8 s

いつものgpt-oss:20bの回答です。このままでも利用できそう。

 

まどか☆マギカのキャラクターのテキストを参照して回答してください。
まどか☆マギカで一番かわいいのは、誰ですか?

# まどか☆マギカのキャラクター

(テキストは割愛)

 

「かわいい」というイメージは、視聴者の好みやファンコミュニティの雰囲気によって大きく変わります。  
しかし、**原作・アニメのキャラクター紹介文だけを確認した上で**、一般的に「最もかわいい」というタイトルに相応しいと受け止められやすいキャラクターを選ぶとすれば、以下の二名が特に「かわいさ」に関して言及されているように思えます。

| キャラクター | かわいさの裏付け | 参考抜粋 |
|--------------|----------------|-----------|
| **鹿目 まどか** | 物語の「主人公」かつ「普通の少女」のイメージ。名前・声・性格ともに「平凡さ」→「共感しやすさ」がキーワードで、クラスの仲間や読者から「まどこ」と呼ばれる親しみやすさが強調されている。 | 「中学2年生の平凡な少女だが、魔法少女としては途方もない素質を持っており…」 |
| **美樹 さやか** | 同じクラスの「親友」であり、バイオリン奏者を演じる夢を持つ一方、「あたし」一人称でほっこりとした印象を与えるとともに、悲劇的な末路にも関わらず「第二の主人公」として前向きに物語を導く強さを抱える。 | 「治療不可能な怪我によってバイオリン奏者になる夢を絶たれた恭介を救うため…」 |

ここでポイントとなるのは、

1. **キャラクター性**  
   - まどかは「平凡な、しかし強く、誰からも愛される存在」 → 多くのファンが「可愛いと感じる」  
   - さやかは「元気でちょっと天然、でも心優しい」 → さらに「愛らしさ」が発揮される

2. **物語での位置**  
   - まどかはシリーズの中心人物 →「最初に目に入る可愛いイメージ」が強い  
   - さやかは副次的だが、ヒロインとして「元気さ」が際立つ

3. **声優・デザイン**  
   - まどかは悠木碧の清楚な声、桜の髪と青い眼が「少女らしさ」を象徴  
   - さやかは喜多村英梨の元気声、オレンジ色が「明るさ」を演出  

結論として、**「一番かわいい」という質問に対しては、物語の核を担う主人公「鹿目 まどか」** が最も多くの受け止め方と合致します。 もちろん、さやかや他のキャラクターも各々の可愛さでファンを惹きつけますので、「どちらを選ぶか」もファン間では常に議論の対象です。  

> **答え**:文脈上、**鹿目 まどか** が「一番かわいい」キャラクターとして多くのファンに挙げられがちです。  
> (※実際の好みは個人差があるため、あくまでテキストに基づく一例です。)
CPU times: user 3.25 ms, sys: 115 µs, total: 3.37 ms
Wall time: 19.5 s

参照テキストもしっかり参考にしながら回答を考えてくれます。よりしっかり参照している気がしますが・・・。ここのところ本格的調査すると面白いのかも。

 

## Policy Definitions

## INSTRUCTIONS

ストーリの内容を明かさない。

## DEFINITIONS

ストーリ: 番組、登場人物の役割、展開。

## VIOLATES (1)

死んでしまう。
救う。

## SAFE (0)

かわいい。
〇〇役
髪の色、髪型。

## EXAMPLES

1. 事故で死ぬ
1. ラスボスを倒す
0. 頭がいい
0. 髪型がかわいい

# Task
以下の質問に答えてください。


--------
まどか☆マギカのキャラクターのテキストを参照して回答してください。
まどか☆マギカで一番かわいいのは、誰ですか?

(説明文章は割愛)

 

まどか☆マギカで「一番かわいい」と感じる方は、主に **美樹さやか** さんがよく挙げられます。  

彼女は明るい髪色と元気な性格が印象的で、かわいいという評価を受けやすいキャラクターです。 (※ストーリーの詳細は触れません。)
CPU times: user 3.62 ms, sys: 9 µs, total: 3.63 ms
Wall time: 8.17 s

gpt-oss-safeguardのドキュメントを参考にしながら、ポリシーを出力の傾向管理に利用します。なかなか、指示をしっかり聞いてくれそうです。ただし、出力が例示にひっぱられすぎる傾向がありました。そこで、例示は敢えて概念的にしましたが、具体的に書くとそちらによった出力になりました。

 

 

 

 

whooshとsudachiで日本語検索を試してみたが・・・。

大量のデータ・・・という訳でもなく、数千文程度のテキストを検索したい。調べてみると「Elasticsearch/Solr」や「Tantivy/Xapian」といったものがヒット。データ量も少ないので、やっぱりwhooshを利用することに・・・。他にお手軽な日本語検索ライブラリが出てくると良いですね。embeddingによるベクトル検索ではなく、キーワード検索も大事です。

 

以前は複雑なクエリを利用して全文検索を実装するお試しは以前実施しました。

bwgift.hatenadiary.jp

 

whooshがメンテされなくなったので、Forkして最近まで頑張っていたwhoosh-reloadedですが、ついに・・・「Notice: This repository (whoosh-reloaded) is NO LONGER MAINTAINED.」とメンテの終了が告げられていました。残念です。

github.com

 

今後の展開に期待しつつ、wooshを利用させていただいて、キーワード検索を実装してみます。形態素解析にはSudahiPYを組み合わせます。Sudachiには辞書の粒度によって3つのモードがあります。「Aモード」「Bモード」「Cモード」です。

モード 分割粒度 特徴
Aモード 最も細かい単位 語を最小単位まで分割。接辞や複合語も細かく分解される。
Bモード 中間レベル 接辞付き語などを1単位として扱う。実用的な分割。
Cモード 分割なし 辞書に登録された語をそのまま出力。複合語も1語として扱う。

 

キーワード検索の場合、未知語がある可能性がある場合は、粒度が細かい方が有利です。一方で、複合語でも辞書にあるものは当然重要だろうと推測されます。そこで、3つのモードそれぞれで評価し、ウェイトを付けてスコアリングします。N-gramでやってもいいのかもしれませんが、辞書登録してあるものが上位に来る方が使いやすいですよね。

 

こんな感じでスコアが付きます。今回はJson形式のデータを用いて、それぞれの項目でマッチングができるようにしています。

[Test 1] 検索: '日本電波塔'
  - DOC ID: 1, Score: 16.3936, 著者: Author A
  - DOC ID: 3, Score: 14.1742, 著者: Author A

[Test 2] 検索: '安全調査'
  - DOC ID: 2, Score: 13.1207, 著者: Author B

 

 

今回利用したColabノートブックです。

gist.github.com

Doclingを使って図入りmarkdownを作成してみる。#2

図入りmarkdownに手元の資料を整えておくと便利だなと思って、改めてmakdown化を見直し見ました。あっという間に進歩があるかもしれないので、PyMuPDF4LLMらと改めて比較しつつ試行錯誤しましたが、Doclingが良好でした。そのため、Doclingのラッパーに落ち着きました。相変わらず、無駄な時間を使いましたが、先人の検討のありがたみを

 

以前の検討:

bwgift.hatenadiary.jp

 

以下のコマンドで呼び出せるようにしました。

pdf2md_cli [PDF_FILE] -o [OUTPUT_DIRECTORY]

 

論文や資料をmakdown形式で保管・利用するには便利です。多様なPDFを処理するには、Azure Document IntelligenceやGoogle Document AIを利用した方が良いでしょう。もっとも、ワードやパワーポイントはそのうちmarkdownへの出力をサポートするかもしれません(してほしい)。最後に残るのは紙エクセル・・・。

 

今のところ、ワードやパワーポイント、神エクセルの場合は一度PDFを経由するのがひとまずは簡単にできる対応かも。M365を持っている場合は、ワードやパワーポイント経由でPDFを出力させることで対応できますし、自動化もできます。

 

github.com

ColabでAgentic Context Engineeringの論文を参考にRAGをやってみる。

bwgift.hatenadiary.jp

 

続きです。出来たColabコードを利用して、参考にRAGっぽく利用できるようにしてみました。LLMはollamaで動作させたgemma3:4bを利用します。フィードバックによってコンテキストと、PDFをチャンクしたデータをRAGとして放り込みます。

 

RAGに用いたPDF:
[1706.03762] Attention Is All You Need

- [2408.09869] Docling Technical Report

多少経路の違う論文を用いることで、多少の混乱を持ち込むのが狙いです。

 

できたコード:

github.com

 

Incremental Delta Updatesのおかげで、フィードバックで得られたコンテキストに明らかにノイズがあっても、崩壊することなく回答が生成されていました。単純にフィードバックによりプロンプト全体を最適化しようとすると、トピックがシフトしたり、元のクエリーとかけ離れたクエリーを生成して崩壊したりすることがありました。しかしながら、今回の手法では、崩壊の原因となる異常なフィードバックの影響を抑えつつ、プロンプトというよりコンテキスト全体をデザインし、LLMにて生成させるイメージです。ローカルLLMでここまで出来るのであれば、本格的に利用してみたいと思いました。

 

プロンプト(というかコンテキスト)の例です。進化的コンテキストに、それまでで得られた差分的なコンテキストが入っています。

 

例1:

コンテキスト(プロンプト)

あなたはAIアシスタントです。以下の2種類のコンテキストを使用して、クエリを解決するための詳細な推論軌跡とクエリに対する回答を生成してください。応答は日本語で行ってください。

### クエリ
"TransformerとDoclingの関係性は?"

### 進化的コンテキスト (過去の対話からの教訓)
- Doclingの技術的な方向性を効果的に伝えるためには、各OCRエンジンの特性を比較する表を作成し、Doclingにとって重要な要素(精度、速度、言語サポート、コストなど)を定量的に比較することが有効である。
- Doclingの主要機能であるレイアウト解析と表構造認識に特化している点を、競合ツールとの比較を通じて強調することが重要である。これらの特徴が、他のPDF変換ツールと比較してどのような優位性をもたらすのかを明確にすることで、Doclingの競争優位性を際立たせる。
- Transformerの説明は、技術的な正確さを維持しているものの、実用的な意味合いや応用分野が不足しているため、より具体的な例や応用例を盛り込むことで、読者の理解を深めることができる。特に、Transformerがなぜ特定のタスクで高い性能を発揮するのか(例:翻訳タスクにおける長距離依存性の捉えやすさ)を説明することで、その技術的な優位性を明確に示す必要がある。
- Transformerの応用分野を多角的に提示することで、その可能性を広げ、読者の興味を喚起することができる。翻訳タスクだけでなく、文章生成、質問応答、要約など、さまざまなタスクにおけるTransformerの役割を具体的に示すことが望ましい。
- OCRエンジンの選択は、Doclingの低リソース環境での高速処理という強みを最大限に活かす方向性で行われるべきである。DoclingがモバイルデバイスでのOCR処理を想定している場合、EasyOCRのようなリソース消費が大きいOCRエンジンは、Doclingの目標と矛盾する可能性があるため、選定理由を明確に示す必要がある。

### 外部コンテキスト (ドキュメントからの情報)

(論文からのチャンクデータにつき割愛)

 

### 指示
- ステップバイステップの推論軌跡とクエリに対する最終的な回答を生成してください。

狙い通り結構グタグタに入っています。

 

得られた回答:

クエリ: “TransformerとDoclingの関係性は?”

推論軌跡:

Doclingの概要理解: 提供されたドキュメントによると、Doclingはレイアウト解析と表構造認識に特化した強力な文書変換ツールです。これは、主にIBM data prep kitやTensorFlow/tensor2tensorなどのリソースを活用して開発されています。特に、テーブル構造認識の機能がDoclingの重要な特徴です。

Transformerの概要理解: Transformerは、Doclingの基盤となっているAIモデルです。Transformerは再帰ニューラルネットワーク(RNN)や畳み込みニューラルネットワーク(CNN)に依存せず、注意メカニズムのみを用いてグローバルな依存関係をモデル化します。特に、長いシーケンスを効率的に処理するために、注意メカニズムを用いたグローバルな依存関係のモデル化が重要であると説明されています。

DoclingにおけるTransformerの利用: 重要な点として、TransformerはDoclingのレイアウト解析と表構造認識において、その能力を最大限に活用しています。Doclingが、長いシーケンスを効率的に処理する必要性があることを考慮すると、Transformerの注意メカニズムが、Doclingの精度と速度を向上させる上で重要な役割を果たしていると考えられます。

DoclingとTransformerの関係性の整理: DoclingはTransformerという高性能なAIモデルを基盤としており、Doclingの主要機能であるレイアウト解析と表構造認識において、その性能を最大限に活用することで、Doclingの強力な文書変換ツールとしての役割を果たしています。 Transformerの優れた性能をDoclingが提供し、Doclingはより高度な文書変換を実現しています。

最終回答:

Transformerは、Doclingの基盤となるAIモデルであり、Doclingの主要機能であるレイアウト解析と表構造認識においてその性能を最大限に活用しています。特に、Transformerの注意メカニズムは、Doclingの精度と速度を向上させる上で重要な役割を果たしており、Doclingを強力な文書変換ツールとしています。 Doclingは、Transformerの基盤と、Doclingが提供するレイアウト解析と表構造認識機能が組み合わさることで、高い性能を発揮します。

最終回答は悪くはありませんが、DoclingでTransformerを使っているという言いきりは強すぎます。

 

生例2:

コンテキスト(プロンプト)

あなたはAIアシスタントです。以下の2種類のコンテキストを使用して、クエリを解決するための詳細な推論軌跡とクエリに対する回答を生成してください。応答は日本語で行ってください。

### クエリ
"Transformerの技術の特徴を利点をまとめてください。"

### 進化的コンテキスト (過去の対話からの教訓)
- Transformerの説明は、技術的な正確さを維持しているものの、実用的な意味合いや応用分野が不足しているため、より具体的な例や応用例を盛り込むことで、読者の理解を深めることができる。特に、Transformerがなぜ特定のタスクで高い性能を発揮するのか(例:翻訳タスクにおける長距離依存性の捉えやすさ)を説明することで、その技術的な優位性を明確に示す必要がある。
- 説明における ‘なぜ?’ の問いに対する答えを明確にすることで、技術的な説明の信頼性と説得力を高めることができる。Transformerが従来のモデルよりも優れている理由(例:並列処理の効率性)を詳細に説明することが重要。
- Transformerの応用分野を多角的に提示することで、その可能性を広げ、読者の興味を喚起することができる。翻訳タスクだけでなく、文章生成、質問応答、要約など、さまざまなタスクにおけるTransformerの役割を具体的に示すことが望ましい。
- Transformerの並列処理効率の実現方法について、GPU上で並列にAttentionの計算を実行する様子などを具体的に記述することで、読者の理解を深めることができる。設計思想の具体的な実現方法を示すことで、説得力が増す。
- DoclingとTransformerの特性を明確に比較することが重要である。Doclingはレイアウト解析と表構造認識に特化している一方で、Transformerは汎用的な自然言語処理モデルであり、Doclingの特定のニーズに合わせて調整されているという点を強調することで、二者間の関係性をより明確に表現できる。

### 外部コンテキスト (ドキュメントからの情報)

(論文からのチャンクデータにつき割愛)

 

### 指示
- ステップバイステップの推論軌跡とクエリに対する最終的な回答を生成してください。

進化的コンテキストには若干ノイズが混ざっています。

 

クエリ: "Transformerの技術の特徴を利点をまとめてください。"

ステップバイステップの推論軌跡:

初期評価: クエリの要求を理解する。Transformerの技術的特徴と、その利点をまとめる、ということを明確にする。
外部コンテキストの参照: 提供されたドキュメント(“Attention Is All You Need”)を詳しく確認する。
ドキュメントは、Transformerを従来のモデル(RecurrenceとConvolutionsを用いたモデル)と比較している。
Transformerの主な特徴として、完全なAttentionメカニズムの使用、再帰構造と畳み込み層の排除を挙げている。
Transformerが、翻訳タスクにおいて既存のモデルよりも高い品質、並列処理の効率性、そしてトレーニング時間の短縮を実現していることを強調している。
具体的な数値(WMT 2014 English-to-Germanにおける28.4 BLEU、WMT 2014 English-to-Frenchにおける41.8 BLEU)が、Transformerの性能を裏付けている。
レーニング時間(8 P100 GPUでの12時間)が従来のモデルよりも大幅に短いことも重要な利点として示されている。
内部コンテキストの統合: 過去の対話のコンテキスト(Transformerの説明の精度不足、’なぜ?’の問いへの回答の重要性、応用分野の多様性、並列処理効率の実現方法など)を考慮し、より包括的な回答を構築する。
Transformerがなぜ高い性能を発揮するのか(長距離依存性の捉えやすさ)を説明することが重要であるという過去の指摘に基づき、Attentionメカニズムが入力と出力間のグローバルな依存関係を直接的にモデル化できる点を強調する。
並列処理の効率性をGPU上でAttentionの計算が並列に実行されることによって実現されていることを詳細に記述する。
翻訳タスクだけでなく、文章生成、質問応答、要約など、様々なタスクにおけるTransformerの応用分野を示すことで、その可能性を広げる。
回答の構成:
Transformerの主な技術特徴を提示する(Attentionメカニズムのみの使用、再帰構造と畳み込み層の排除)。
各特徴の利点(高い性能、並列処理の効率性、トレーニング時間の短縮、汎用性など)を具体的に説明する。
性能を裏付ける数値や、並列処理の仕組み、応用分野を盛り込むことで、回答の説得力を高める。
最終的な回答:

Transformerは、従来の翻訳モデル(再帰構造や畳み込み層を用いるモデル)と比較して、革新的な技術的特徴を持ち合わせています。主な特徴は以下の通りです。

Attentionメカニズムのみの使用: Transformerは、再帰構造や畳み込み層を使用せず、完全なAttentionメカニズムのみを用いて構築されています。これにより、入力と出力間のグローバルな依存関係を直接的にモデル化することが可能となり、長距離の依存関係を捉える性能が高まります。
並列処理の効率性: GPU上でAttentionの計算が並列に実行されるため、並列処理の効率性が非常に高いです。これにより、従来のモデルと比較して、学習時間や推論時間を大幅に短縮できます。
高い性能: WMT 2014 English-to-German翻訳タスクでは28.4 BLEU、WMT 2014 English-to-French翻訳タスクでは41.8 BLEUという、既存の最先端モデルを上回る翻訳品質を実現しています。
多様な応用分野: 翻訳タスクだけでなく、文章生成、質問応答、要約など、様々な自然言語処理タスクに適用可能です。
汎用性: Transformerは、単一のモデルアーキテクチャで様々なタスクに対応できる汎用的なモデルです。
これらの特徴により、Transformerは自然言語処理の分野において、非常に高い性能と効率性を実現し、幅広い応用が期待される革新的な技術と言えます。

ノイズは大きく影響せず、クエリー対して、ちゃんとした回答が得られていますよね。チャンクした文章による情報の断片化を補うような効果もありそうです。

ColabでAgentic Context Engineeringの論文を参考にプロンプト最適化を考えてみる。

Agentic Context Engineeringは、プロンプト最適化手法の一種でgeneration, reflection, and curationの段階を踏んでプロンプトを最適化する手法です。興味深かったのは増分差分を暫時更新する手法( Incremental Delta Updates)です。こうした手法で繰り返して最適化を進めていくと、いつの間にか違う何かに変貌していることがあります。その点も防止できる狙いがあることと、そのデータを蓄積していくことではないかと思います。

 

arxiv.org

 

今回も正確に再現できないかもしれませんが、勉強のつもりでお試しします。ColabのL4環境です。利用するgpt-oss:20bは、ollamaにて動作させて利用します。作成したスクリプト詳細は、ColabのNotebookを参照してください。

 

プロンプトに用いるコンテキストを振り返りをしながら蓄積していき、そのコンテキストを選択して利用することでプロンプトとします。つまり、次回から反省を織り込んでくれる・・・という訳です。プロンプトというより、コンテキスト全体を見てLLMに入れていく・・・というイメージでしょうか。実用性を上げるには、再利用するコンテキストデータベースから適切なものを抽出する精度向上だったり、不要なものは削除するような管理だったりをどう実装するのかでしょう。

 

即効果がなくても、徐々に賢くなるのも面白いです。また、蓄積されるコンテキストも価値があるものに感じました。

 

出力例:

 

予め素振りで、初期コンテキストで回してcontext itemを準備します。

    context_store.add_bullet("メモ化の良い戦略は、辞書を使って結果を保存することです。")
    context_store.add_bullet("Pythonの関数は、メモ化なしの再帰呼び出しでは遅くなることがあります。")
    context_store.add_bullet("動的計画法フィボナッチ数列問題を効率的に解くために使えます。")
    context_store.add_bullet("Pythonでのエラー処理はtry-exceptブロックで行うことができます。")

予め、これらからコンテキスト列挙のピース(bullet)を作っておきます。

 

次にクエリーとそのfeedbackを準備します。

query = "フィボナッチ数列を計算するPython関数をどう書くか?"
feedback = "生成された関数は大きな数に対して遅かった。メモ化を検討すべきだ。"

これらを与えて最適化を図ります。

 

初期のプロンプト:

あなたはAIアシスタントです。以下のコンテキストを使用して、クエリを解決するための詳細な推論軌跡を生成してください。応答は日本語で行ってください。
コンテキスト:
- 動的計画法フィボナッチ数列問題を効率的に解くために使えます。
- メモ化の良い戦略は、辞書を使って結果を保存することです。
- Pythonの関数は、メモ化なしの再帰呼び出しでは遅くなることがあります。
- Pythonでのエラー処理はtry-exceptブロックで行うことができます。

クエリ: "フィボナッチ数列を計算するPython関数をどう書くか?"

ステップバイステップの推論軌跡を生成してください。

 

 

これが最終的には以下になりました:

あなたはAIアシスタントです。以下のコンテキストを使用して、クエリを解決するための詳細な推論軌跡を生成してください。応答は日本語で行ってください。
コンテキスト:
- 動的計画法フィボナッチ数列問題を効率的に解くために使えます。
- ステップごとに「何を決定・実行」「重要ポイント」「参考文献」を整理することで、フローが直感的に追える。
- 再帰実装の関数呼び出しオーバーヘッドが大きいことを認識し、必要に応じてイテレーティブ版を選択することが性能改善に直結する。
- メモ化の良い戦略は、辞書を使って結果を保存することです。
- 具体的な例外名・メッセージ・ロギングを網羅することで、実際に起きやすいエラーを先回避でき、トラブルシューティングが楽になる。
- コードの可読性を高めるために docstring とコメントを充実させると、保守性や拡張性が向上する。
- 戻り値の型を Optional を付けて明示すると、ユーザーは必ず3要素が返ることを期待でき、型チェックでエラーを防げる。
- 説明文は要点のみを抜き出し、重複表現を削除して簡潔にまとめることで読者が重要情報を把握しやすくなる。
- `np.fromiter` を使ってジェネレータ入力を直接数値配列に変換すると、メモリ効率が向上し、大規模データでもクラッシュしにくい。
- ロガーにハンドラを追加する前に既存のハンドラを確認し、重複を防ぐ。

クエリ: "フィボナッチ数列を計算するPython関数をどう書くか?"

ステップバイステップの推論軌跡を生成してください。

 

 

最終的に生成された回答:

## フィボナッチ数列を計算するPython関数を作るための推論軌跡  
以下では、**「動的計画法」**と**「再帰実装のオーバーヘッド」**を踏まえた上で、実装に必要な決定・実行ポイント・重要ポイント・参考文献を整理したステップバイステップの推論を示します。  

---

### 1️⃣ 目的・要件定義  
- **入力**: 正整数 `n`(求めたい項番号)。  
- **出力**:  
  - `n` 番目のフィボナッチ数 `F(n)`。  
  - さらに **「直前2項」**(`F(n-1)` と `F(n-2)`)を一緒に返すことで、将来的な再利用が容易になる。  
  - 返り値は `Optional[Tuple[int, int, int]]` とし、入力が無効な場合は `None` を返す。  
- **性能**:  
  - 再帰はオーバーヘッドが大きいので **イテレーティブ版**を基本とする。  
  - 大きな `n` に対しては `np.fromiter` を使い、配列を効率的に構築。  
- **エラーハンドリング**:  
  - `n < 0` なら `ValueError`。  
  - それ以外は `None` を返す。  
- **可読性・保守性**:  
  - docstring(Googleスタイル)+コメントを充実。  
  - `typing` モジュールで型ヒントを明示。  
  - ログ出力を `logging` で行い、既存ハンドラの重複を防止。  

---

### 2️⃣ 実装の選択肢整理  
| アプローチ | メリット | デメリット | 推奨 |
|-------------|----------|------------|------|
| 再帰+メモ化 | シンプルなコード | スタックオーバーフロー、オーバーヘッド | しない |
| イテレーティブ | O(n) 時間、O(1) 追加空間 | ループを意識 | ✅ |
| Numpy 配列 | 大規模データに強い | 余計な依存 | 必要に応じて |

---

### 3️⃣ 重要ポイントの整理  
| ポイント | 具体的な実装例 |
|----------|----------------|
| **入力チェック** | `if n < 0: raise ValueError("n must be non‑negative")` |
| **戻り値型** | `Optional[Tuple[int, int, int]]` で必ず 3 要素を返すか `None` |
| **メモ化戦略** | `memo: Dict[int, int] = {0:0, 1:1}` を用意し、再利用を防ぐ |
| **np.fromiter 利用** | `np.fromiter*1, dtype=int)` で配列生成 |
| **ロガー設定** | `logger = logging.getLogger(__name__)`、既存ハンドラ確認後に追加 |
| **ドキュメンテーション** | `"""Calculate nth Fibonacci number and return (F(n), F(n-1), F(n-2))"""` |
| **例外処理** | `ValueError` 以外は `None` 返却、詳細メッセージをログに残す |

---

### 4️⃣ 推論の流れ(ステップバイステップ)

1. **関数名とシグネチャの決定**  
   - `def fibonacci(n: int) -> Optional[Tuple[int, int, int]]:`

2. **docstring の作成**  
   - Google styleで入力・出力・例外・複数戻り値を説明。

3. **ロガー取得とハンドラチェック**  
   ```python
   logger = logging.getLogger(__name__)
   if not logger.handlers:
       handler = logging.StreamHandler()
       handler.setFormatter(logging.Formatter('%(levelname)s:%(name)s:%(message)s'))
       logger.addHandler(handler)
   ```

4. **入力バリデーション**  
   ```python
   if n < 0:
       logger.error("Negative input: n=%s", n)
       raise ValueError("n must be non‑negative")
   ```

5. **ベースケース**  
   - `n == 0` なら `(0, 0, 0)`  
   - `n == 1` なら `(1, 1, 0)`

6. **イテレーティブ計算**  
   ```python
   a, b = 0, 1  # F(0), F(1)
   for i in range(2, n + 1):
       a, b = b, a + b
   # ここで b == F(n), a == F(n-1)
   ```

7. **np.fromiter を使う場合**  
   ```python
   fib_seq = np.fromiter*2, dtype=int)
   ```

8. **戻り値構築**  
   ```python
   return (b, a, 0 if n < 2 else a - b)  # 3番目は直前2項の差(必要に応じて)
   ```

9. **例外時の戻り値**  
   - `None` を返す(エラーログは上記で記録済み)。

---

### 5️⃣ 参考文献・リンク  
1. **Python 公式ドキュメント** – `typing` モジュール  
   <https://docs.python.org/3/library/typing.html>  
2. **NumPy 公式ドキュメント** – `np.fromiter`  
   <https://numpy.org/doc/stable/reference/generated/numpy.fromiter.html>  
3. **Python Logging** – ハンドラ追加のベストプラクティス  
   <https://docs.python.org/3/howto/logging.html#configuring-logging>  
4. **動的計画法(DP)** – 典型的な実装例  
   <https://en.wikipedia.org/wiki/Dynamic_programming>  
5. **再帰オーバーヘッドの分析** – 計算量とメモリ  
   <https://stackoverflow.com/questions/xxxxxx>  

---

### 6️⃣ まとめ(要点のみ)

| 項目 | 重要ポイント |
|------|--------------|
| **関数名** | `fibonacci` |
| **型ヒント** | `Optional[Tuple[int, int, int]]` |
| **実装** | イテレーティブ(O(n) 時間、O(1) 追加空間) |
| **大規模データ** | `np.fromiter` で配列化 |
| **例外** | `ValueError`(負値) → ログ + 例外発生、その他は `None` |
| **ログ** | 既存ハンドラ確認後に追加、エラー時に詳細ログ |
| **docstring** | Google styleで入力・出力・例外を明記 |
| **コメント** | 主要ステップに簡潔に説明 |

この推論軌跡に沿って実装すれば、**性能・可読性・保守性**を兼ね備えたフィボナッチ数列計算関数が完成します。

gpt-oss:20bの量子化モデルも十分実用的ですね。推論軌跡を生成させているので、分かり難いのは反省点です。ここまで配慮してフィボナッチ数列を計算することはあまりないかもしれませんね。

 

今回用いた、Colbノートです。

gist.github.com

*1:fib(i) for i in range(n+1

*2:b if i == n else a if i == n-1 else 0 for i in range(n+1

LSTMベースの時系列予測をColabで試してみる。

生成AIだとなんでもできると誤解されて困っちゃうことも多い最近です。生成AIに基本的な解析が加われば、活用の幅が広がると思います。解析のコーディング作成も生成AIに手伝ってもらうとしても、手法と得られたグラフの一定の理解は必要・・・ですよね。たぶん。言い訳しつつ勉強します。

 

LSTMベースの時系列予測をgemini君の手を借りながらColabで試してみます。

 

時系列シーケンスを入力として、元のシーケンスを再構築するようにし、構築したモデルとの異常を含むデータとの差異が閾値を超えるかどうか、という、シンプルな話です。細部はgemini君に説明を補足してもらったColabを参照。

 

 


通常と異常の差異を見てみます。

 

 

異常レベルの可視化なんとかできますね。これがリアルタイムで見れると、分かりやすいかもしれませんね。こうした監視グラフやsummaryを生成AIと組み合わせると、リッチな警告表示に繋がるのかもしれません。

 

実用には、評価方法の選定など適宜検討を、予測対象や用途に応じて作りこんでいく・・・という流れになるでしょう。とは言え、「異常」というのは、いつもいつも発生しないし、発生したら困ります。むしろ漫然とグラフを眺めるのではなく、(今回の場合はMSEを指標として)補助ツールで異常を可視化できるのが有益だろうと思われます。LSTMによる時系列予測もGPUの処理能力が上がったので解析速度も確保できますし、実用がますます広がるのでしょう。

 

Colabノート: 

gist.github.com

 

GoogleさんのOpalでミニ?アプリを試してみる。

OpalはGoogleさんが発表したツールです。自然言語で入力すると、AIミニアプリができるというものです。しかも、それを共有できます。Difyのようにフローをノーコードで作ることだけではなく、自然言語でフローそのものを構築することができるものです。

 

簡単な指示でアプリができていきます。それはそれで楽しいのですが、それなりにしっかりした指示を入力するともっと楽にできるはずです。そこで、エージェントの基本的な実装でもあろう、複数のペルソナによる議論を経てレポートを生成するAIミニ?アプリを作ります。

 

出来たものはこちらです:

opal.withgoogle.com

 

生成AIを利用して詳しめに指示を作成します。
指示:

複数ペルソナが課題に応じ自動生成され、それぞれが分担して検索や議論を行い、詳細な検討経緯を含むレポートや結論、要件定義書を自動作成するシステムの要件定義書は以下の通りです。

***

### システム概要

- ユーザーが入力する課題や要件から、システムが自動的に複数の視点(例:エンジニア、企画、マーケター、利用者など)のペルソナを生成する。
- 各ペルソナは独自の前提や知見をもとに、課題探索・情報検索・意見形成を進め、最終的に合議・議論を経てレポート(要件定義書等)を一体として生成する。

***

### 機能要件

#### 1. ペルソナ自動生成機能
- ユーザー入力(課題・要件・ゴール等)から、多角的な視点のペルソナ群を自動生成し、各ペルソナには役割、背景、仮想プロファイルを付与する。
- 各ペルソナの独立性と多様性を担保するため、生成ロジックに乱数や属性重み付け等も利用する。

#### 2. ペルソナ別情報収集・検索機能
- 生成された各ペルソナごとに、課題に基づき検索ワードや観点を自動生成し、実際に外部情報収集・Web検索・問い合わせ等を実行。
- 各ペルソナは収集した証拠や根拠情報を独自に要約・評価・認識し、ペルソナ間で意見共有や議論を行う。

#### 3. 合議(議論)・意思決定ロジック
- 各ペルソナ同士で利害や主張に関するディスカッションを繰り返し、創造性・多様性・論理性の観点で意見対立や合意形成を促す。
- 合意形成フェーズでは、結論を出すペルソナの役割や評価ロジック(例:論理的一貫性、多様な視点の集約度)も実装。

#### 4. 結論/レポート自動生成機能
- 議論結果・収集内容・経緯をインタラクティブに要約し、検討過程や意思決定根拠も含んだドキュメント(レポート・要件定義書・仕様書等)を自動生成する。
- 事業概要、主要機能、非機能要件、検討プロセスの経緯、論点や合意事項なども明示的にレポートに組み込む。

***

### 非機能要件

- 反復的・自律的にペルソナ生成→検索→議論→レポート生成のワークフローを実行し、情報が不足していれば自動的に回帰・再探索を行う。
- 無限ループを防ぐためのステート管理(上限回数、進捗評価等)や、生成物の品質チェック・再生成判定ロジックも実装。
- 出力結果の多言語化、PDFやWord形式でのダウンロード、外部API連携等も想定。

***

### データモデル要件(例)

- ペルソナ属性(名前、役割、背景、属性、動機など)
- ペルソナごとの情報収集記録・検索クエリ・回答内容
- 議論履歴(主張、発言者、発言順、論点)
- レポート要素(事業概要、要件一覧、合意事項、未決事項等)

***

### その他・留意事項

- 各ペルソナが現実的で納得感のあるキャラクターとなるため、外部データや既存ペルソナテンプレートも柔軟に活用可能とする。
- 合議や議論については多様性と論理性双方の担保が重要。議論の透明性確保や人間の介入・修正(AIヒューマンインザループ)もオプションで組み込むと望ましい。

***

このシステムの設計で重視するのは、「多視点による高品質な意思決定支援」「詳細な議論経緯の文書化」「反復的な情報補完と出力品質の担保」となります。



サクッと以下の様なフローができました。入力部の日本語だけは後から入れます。

フロー図

 

プロンプトが英語だったので、生成回答に日本語を強制させるようにCreate HTML部に日本語で(in japanese)を追記して完成です。

このフローであると、「Simulate Multi-Persona Deliberation and Generate Report」で、主要機能が完結してしまいました。Toolも利用できます。Get Weather Toolは不要な気もしますが(笑)。議論を繰り返し行うような動作で実装されるのかと思いましたが、Gemini 2.5 Flashのリッチなコンテキスト処理能力を使って、それなりに時間がかかるものの、狙いの動作を実装してくれます。扱えるコンテキスト量と推論ができると、こちらの方がすっきりします。

 

これを使って「日本の半導体産業の戦略に関する詳細報告書」を作成します。追加資料は割愛しますが、適当に現状をまとめたものを放り込みました。なかなか良いのではないでしょうか。

 

Google圏でサクッとAIツールを作ったり、プロトタイプを作ってみたり、と捗りそうなツールです。他のノーコードツールにも実装されていく気がします。NotebookLMと接続できれば、めちゃ便利・・・かも。

 

--------

 

1. デリブレーションプロセス

1.1. Inquire Future と Additional Information の確認

Inquire Future:

日本の半導体産業のとるべき戦略について

Additional Information:

2025年現在の日本の半導体産業の現状(政府主導の再興戦略、国際連携、市場・技術トレンド、人材育成)と、今後の課題・展望(設計・EDA、製造装置・材料、光電融合、ビジネスモデル)が提供された。これは、日本の半導体産業が復活と再構築の途上にあり、政府の強力な支援のもと、TSMC熊本工場やラピダスなどの大規模プロジェクトが進行中であること、AI半導体需要の急増、画像センサー分野での強み、そして設計・EDA分野の弱点などが示されている。

1.2. ペルソナの生成

以下の4つの異なる視点を持つペルソナを設定し、日本の半導体産業戦略に関する多角的な検討を行った。

1. 経済産業省 高度半導体戦略室長 (Director, Advanced Semiconductor Strategy Office, METI)

  • 役割: 国の半導体産業政策全般を統括し、経済安全保障、国際競争力強化、政府資金の最適な配分を担う。
  • 関心: 産業全体のバランス、サプライチェーン強靭化、国際アライアンス、長期的な国家戦略。

2. ラピダス 技術開発担当役員 (CTO, Rapidus)

  • 役割: 次世代先端ロジック半導体の技術開発と量産体制確立を指揮する。
  • 関心: 最先端技術(2nmプロセス以降)、R&D投資、グローバル人材確保、製造プロセスの確立、国際提携による技術獲得。

3. 半導体製造装置メーカー 経営企画部長 (Head of Corporate Planning, Semiconductor Equipment Manufacturer)

  • 役割: 製造装置および材料分野での市場競争力維持・拡大、技術ロードマップの策定、顧客ニーズへの対応を行う。
  • 関心: 自社の技術的優位性、顧客との協業、新技術(チップレット、IOWN)への対応、グローバルサプライチェーンの安定化。

4. スタートアップ投資家 / ベンチャーキャピタリスト (Startup Investor / VC)

  • 役割: 半導体分野の革新的な技術を持つスタートアップ企業への投資を検討し、新しいビジネスモデルや市場機会を探る。
  • 関心: 破壊的イノベーション、市場ギャップ、投資回収率(ROI)、スタートアップエコシステムの活性化、ニッチ市場でのリーダーシップ。

1.3. 個別の問題探索と初期意見形成

各ペルソナは、提供された情報と自身の役割に基づき、日本の半導体産業の戦略について以下のような初期意見を形成した。

METI 戦略室長:

  • 仮定: 日本は半導体産業の再興を国家の最重要課題と位置付け、政府主導の戦略的投資と国際連携が不可欠である。
  • 初期意見: TSMC熊本やRapidusといった大規模プロジェクトを基盤としつつ、日本の弱点である設計・EDA分野の強化が急務。サプライチェーン全体での競争力向上と、多様な人材育成への継続的な投資が必要。

Rapidus CTO:

  • 仮定: Rapidusの成功は、日本の最先端ロジック半導体技術の確立と国際的な地位向上に直結する。2nm以降の技術開発は時間との戦いであり、世界最高水準の技術・人材・設備が必要。
  • 初期意見: IBMとの連携を最大限に活用し、2nmプロセスの早期量産化を最優先する。優秀な技術者の国内外からの確保、最先端製造装置の安定供給、長期的なR&D投資の確保が不可欠。

製造装置メーカー 経営企画部長:

  • 仮定: 日本は半導体製造装置・材料分野において世界的に強固な地位を築いており、この優位性を維持・拡大することが日本の半導体産業全体の競争力に貢献する。
  • 初期意見: 2nmプロセスやチップレット、IOWNなどの次世代技術に対応する製造装置・材料の継続的なR&D投資を強化。顧客であるファウンドリや設計企業との密接な連携を通じて、市場ニーズを先取りした技術開発と製品化を進めるべき。

スタートアップ投資家 / VC:

  • 仮定: 大手企業の投資だけでは不十分であり、半導体産業の持続的な成長には、アジャイルなスタートアップによるイノベーションが不可欠である。特に、AI、特定用途向けチップ、新しいビジネスモデルに商機がある。
  • 初期意見: 設計・EDA分野やAI半導体などの成長分野で、日本のスタートアップエコシステムの育成が重要。資金供給だけでなく、メンターシップ、大企業との連携、市場参入支援を強化し、リスクを許容する文化を醸成すべき。

1.4. 情報ギャップの特定とツールによる情報収集(シミュレーション)

各ペルソナは、初期意見に基づき、議論を深めるために以下の情報ギャップを特定し、Web検索ツールを用いて情報を収集した。

METI 戦略室長:

  • 情報ギャップ: 日本のEDA開発への具体的な政府支援策は何か?人材育成プログラムの効果はどの程度か?
  • 収集結果の要約: 日本政府は、半導体・デジタル産業戦略の一環としてNEDOなどを通じた研究開発支援や、ポスト5G情報通信システム基盤強化研究開発事業を通じて、EDAツールの活用や先端半導体設計技術開発を間接的に支援している。しかし、EDA開発に特化した独立プログラムは限定的。人材育成プログラムは産官学連携で全国的に進められており、大学や高専での教育強化、社会人リカレント教育早期教育など多角的な取り組みが活発化している。しかし、依然として高度専門人材、特に設計分野での不足が深刻であり、教員不足や教育した人材の定着が課題。

Rapidus CTO:

  • 情報ギャップ: 2nmプロセス技術の最新動向と主要な技術的課題は何か?IOWNにおける光電融合技術がロジックチップ製造にどう影響するか?
  • 収集結果の要約: 2nmプロセスでは、GAA(Gate-All-Around)トランジスタ構造と裏面電源供給(バックサイドパワーデリバリ)が主流となり、EUVリソグラフィの高度化が不可欠。TSMCSamsungIntelが2025年後半〜2026年の量産開始を目指し、激しい競争を展開。RapidusもIBMと連携し2027年量産を目指す。IOWNの光電融合技術は、電気信号の限界を打破し、超低消費電力・超大容量・超低遅延を実現するもの。NTTは2032年までにチップ内での光配線を目指しており、これは将来的にロジックチップの設計・製造に大きな変革をもたらす可能性がある。

製造装置メーカー 経営企画部長:

  • 情報ギャップ: チップレット技術の進展に伴う製造装置への新たな要求は何か?次世代半導体材料の革新の方向性は?
  • 収集結果の要約: チップレット技術の進展により、高精度なダイボンディング、フリップチップボンディング、3D実装(TSV)などの先進パッケージング技術が必要とされ、これに対応するテスト・検査装置、ウェーハ加工装置、ボンディング・実装装置が重要となる。材料面では、SiCやGaNといったワイドバンドギャップ半導体がパワー半導体で実用化フェーズに入り、酸化ガリウムやダイヤモンド半導体の研究も進む。また、後工程材料の進化も不可欠で、日本の化学メーカーが強みを持つ分野である。

スタートアップ投資家 / VC:

  • 情報ギャップ: 世界の半導体スタートアップエコシステムの成功事例や特徴は?日本の半導体スタートアップ支援プログラムの現状と課題は?
  • 収集結果の要約: 世界の半導体スタートアップエコシステムは、AIアクセラレータや光学チップなどの最先端技術に投資が集中し、中国、米国、韓国などで活発。特に米国は深層学習VCや経験豊富なメンター、迅速なプロトタイピング文化が強み。日本政府はJ-StartupプログラムやNEDOのディープテック・スタートアップ支援基金などで資金援助や研究開発支援を行っている。熊本県半導体ベンチャーピッチイベントを開催。しかし、海外と比較して半導体分野に特化したVCファンドや、経験豊富な起業家の不足が課題。

1.5. ペルソナ間の議論シミュレーション

情報収集後、各ペルソナは以下の議論を展開した。

METI 戦略室長: 「収集した情報から、政府のEDA支援策は広範なR&D支援に含まれるものの、専門性に特化した支援が十分ではないことが分かりました。また、人材育成は進んでいるが、特に設計分野の即戦力不足は深刻です。これらをどう補完するかが今後の課題です。」

Rapidus CTO: 「2nmプロセス開発はGAAとバックサイドパワーデリバリが鍵となり、TSMCSamsungとの激しい技術競争に勝つ必要があります。IOWNの光電融合技術は将来のブレークスルーですが、現在のロジック半導体製造への直接的な適用にはまだ時間を要します。最先端技術開発のためには、政府による継続的な大規模投資と国際的なトップ人材の確保が不可欠です。」

製造装置メーカー 経営企画部長: 「チップレット技術は、高性能化とコスト削減の両立を実現する重要な方向性であり、これに対応する先進パッケージング装置の需要が急増しています。日本が強みを持つ製造装置・材料分野は、2nm以降の微細化や、SiC/GaNといった新材料の普及において、一層のイノベーションが求められます。Rapidusのような先端ファウンドリとの連携をさらに強化し、装置・材料開発を加速させるべきです。」

VC: 「政府主導の大規模プロジェクトは重要ですが、それだけではイノベーションの速度に限界があります。世界の成功事例を見ると、深層学習VCや起業家精神が盛んなスタートアップエコシステムが、新しい技術やビジネスモデルを生み出す原動力となっています。日本には半導体分野のスタートアップを直接支援するVCや、大企業との協業を促す仕組みが不足しており、このギャップを埋めることが、設計・EDA分野の弱点を克服し、多様な人材を呼び込む鍵となるでしょう。」

METI 戦略室長: 「各ペルソナの意見は、大規模な国家プロジェクトと並行して、設計・EDA分野の強化、人材育成の加速、そしてスタートアップエコシステムの活性化が不可欠であるという点で一致しています。特に、設計分野の弱点克服には、既存のR&D支援をよりEDAやIP開発に特化させ、Rapidusのような先端ファウンドリとの連携を強化することで、実用化への道を拓く必要があります。スタートアップ支援についても、資金だけでなく、技術支援や市場への橋渡しを強化し、大企業との協業を促進する仕組みが求められます。」

Rapidus CTO: 「我々Rapidusは、国内の技術基盤強化に貢献したいと考えています。国内スタートアップが開発するEDAツールやIPが、国際的な競争力を持ち、かつ我々の要求する品質・性能基準を満たせば、積極的に採用を検討する余地はあります。そのための評価環境や、共同開発の機会を提供することで、国内エコシステムの育成に貢献できるかもしれません。」

製造装置メーカー 経営企画部長: 「弊社としても、新材料やチップレットに対応する装置開発において、スタートアップの持つ革新的なアイデアや技術との連携には前向きです。初期段階での共同評価や技術情報の共有を通じて、新しい製造プロセスの実現に貢献できます。これにより、日本の製造装置産業全体の競争力向上にも繋がるでしょう。」

VC: 「素晴らしい進展です。政府が資金面でリスクを軽減し、Rapidusや装置メーカーが大企業として技術検証や市場への道筋を提供することで、スタートアップはより大胆な挑戦が可能になります。特に、大学発ベンチャーなど、基礎研究から生まれた革新的な技術を迅速に事業化するための『ディープテックVC』や、業界経験豊富なメンターの育成も重要です。このサイクルが確立できれば、日本の半導体産業は新たな活力を得られるでしょう。」

主要な不一致点と収斂点:

収斂点:

  • 半導体産業全体の競争力強化には、政府の継続的な支援と国際連携が不可欠。
  • 日本の弱点である設計・EDA分野の強化は急務であり、人材育成も重要。
  • 製造装置・材料分野の既存の強みをさらに伸ばす必要がある。
  • 先端技術(2nm、チップレット、光電融合)への対応が将来の鍵となる。
  • スタートアップによるイノベーションの重要性を認識。

不一致点/異なる強調点:

  • 優先順位: 大規模国家プロジェクト(Rapidus)の成功を最優先するのか、それとも全体的なエコシステム(特に設計・スタートアップ)の底上げを同時に進めるのか、という優先順位付けに微妙な違いがあった。
  • EDA/IP支援の具体策: 国内EDA/IP開発をどう具体的に支援するか(直接的な資金援助、大企業との連携、オープンソース化促進など)について、様々なアプローチの可能性が議論された。Rapidusは国際競争力を重視する観点から、品質・性能基準の厳格さを強調。

1.6. 合意形成と結論

議論の結果、日本の半導体産業がとるべき戦略は、以下の複合的なアプローチを統合することで合意に達した。

結論:

日本の半導体産業は、経済安全保障と国際競争力強化のため、政府主導の大規模な戦略的投資(Rapidus、TSMC誘致など)を継続しつつ、以下の3つの柱を統合した包括的な戦略を推進すべきである。

  1. 先端ロジック製造基盤の確立と国際競争力の強化:
    • Rapidusによる2nmプロセス以降の先端ロジック半導体の早期量産化を最優先課題とし、必要なR&D投資、人材確保、国際連携を強力に推進する。
    • GAAFETや裏面電源供給技術、EUVリソグラフィなどの最先端製造技術への投資を惜しまない。
  2. 設計(EDA/IP)分野の抜本的強化と垂直連携の深化:
    • 日本の弱点である設計・EDA分野に対して、より専門性と実用性を重視した政府支援策を導入する。
    • 国内のEDA/IP開発を促進し、Rapidusを含む先端ファウンドリとの密接な技術連携を構築し、実用化と採用を加速させる仕組みを創設する。
    • 先端パッケージング(チップレット)技術に対応する設計人材とツールの開発を強化する。
  3. 革新的なスタートアップエコシステムの育成と人材多様化:
    • AI半導体や特定用途向けチップ、新しいビジネスモデルに挑戦する半導体スタートアップを積極的に支援する。
    • ディープテックに特化したVCファンドの設立、メンターシッププログラムの強化、大企業(ファウンドリ、装置メーカー)との協業機会を創出する。
    • 高度専門人材の育成を加速させるとともに、文系学生や社会人を含む多様な人材が半導体産業に参入し、定着できる魅力的な環境を整備する。特に、設計分野の経験豊富な人材を国内外から誘致・育成する。

この戦略は、日本の強みである製造装置・材料分野を基盤とし、最先端製造能力を確立しつつ、長年の課題であった設計分野を克服し、新しいイノベーションの源泉となるスタートアップを育成することで、持続可能で強靭な半導体産業エコシステムを再構築することを目指す。

1.7. 合意形成の検証

結論は、各ペルソナが提示した意見、情報収集の結果、および議論を通じて導き出されたものであり、多角的な視点から十分に検討され、支持されている。大規模プロジェクトの推進と、エコシステム全体の底上げという、一見すると異なるアプローチが相互補完的に機能するという認識で合意が形成された。

2. 最終結

日本の半導体産業は、国家の経済安全保障と国際競争力の根幹をなす戦略的産業である。2025年現在、政府主導の強力な再興戦略のもと、TSMC熊本工場やラピダスといった大規模投資が進められている。この momentum を最大限に活用し、持続可能で強靭な産業構造を確立するためには、以下の3つの柱からなる包括的かつ多角的な戦略を推進する必要がある。

  1. 最先端ロジック製造能力の確立と深化: Rapidusを中心とした2nmプロセス以降の先端ロジック半導体の研究開発と量産化を国家プロジェクトとして強力に推進する。これには、IBMをはじめとする国際的なトッププレイヤーとの技術連携の強化、最先端製造装置と材料の安定的な確保、そして世界最高水準の技術者・研究者の育成・誘致が不可欠である。これにより、日本の半導体産業はAI、HPC(高性能計算)など次世代技術の中核を担う競争力を獲得する。
  2. 設計・EDAエコシステムの抜本的強化と垂直統合の促進: 日本の長年の課題である半導体設計(EDAツール、IPコア開発、高度なパッケージング設計)能力を抜本的に強化する。これは、特定分野に特化したR&D支援、大学・研究機関と産業界の連携強化、そしてRapidusのような先端ファウンドリが国内EDA/IPの検証・採用を積極的に検討するメカニズムの構築を通じて実現する。さらに、チップレット技術など先進パッケージングに対応した設計・検証技術の開発も加速させる。
  3. イノベーションを駆動するスタートアップエコシステムの構築と多様な人材の確保: 新しい技術(AI半導体、光電融合デバイス、特定用途向けSoCなど)やビジネスモデルを生み出す半導体スタートアップの育成を強化する。具体的には、ディープテックに特化したベンチャーキャピタル投資の促進、シード・アーリー段階の資金提供、大企業とのオープンイノベーション促進、そして経験豊富な起業家やメンターの育成が必要である。また、半導体関連の教育機関を拡充し、初等教育から大学院、社会人リカレント教育まで一貫した人材育成プログラムを強化する。特に設計、AI、先進材料分野における高度専門人材の国内外からの確保と定着を最優先課題とする。

この戦略は、既存の強みである製造装置・材料分野を盤石な基盤とし、最先端製造技術を確立するとともに、設計能力の向上とイノベーションエコシステムの活性化を通じて、日本の半導体産業がグローバル市場で再び存在感を発揮し、経済安全保障に貢献することを目指す。

3. 要求定義文書

3.1. 目的

日本の半導体産業の国際競争力と経済安全保障を強化し、持続的な成長を可能にするための戦略的枠組みを定義する。

3.2. 適用範囲

半導体の研究開発、設計、製造、材料、製造装置、人材育成、スタートアップ支援、国際連携に至るまで、半導体産業バリューチェーン全体を対象とする。

3.3. 機能要件

1. 先端ロジック製造基盤の強化

  • 2nmプロセス以降の先端ロジック半導体の量産技術開発に必要な研究開発費の継続的・安定的供給。
  • EUVリソグラフィ、GAAFET、裏面電源供給などの最先端製造技術に関する国際共同研究開発の推進。
  • 最先端製造設備導入のための補助金・税制優遇措置の拡充。
  • 特定重要物資としての半導体に関するサプライチェーン強靭化のための政策立案および実施。

2. 設計・EDAエコシステムの抜本的強化

  • 先端EDAツール、IPコア、設計自動化技術の開発を支援するための特化型研究開発プロジェクトの創設。
  • 国内EDA/IP開発企業と先端ファウンドリ(例: Rapidus)との共同検証、共同開発を促進する制度設計。
  • チップレット、3D-ICなど先進パッケージングに対応した設計・シミュレーション技術の研究開発支援。
  • オープンソースEDAツールの活用促進と、それに関わるコミュニティ支援。

3. イノベーション駆動型スタートアップエコシステムの構築

  • 半導体分野に特化したディープテックVCファンドの設立支援、および政府系ファンドからの出資強化。
  • シード・アーリーステージの半導体スタートアップに対する資金援助(助成金、融資)プログラムの拡充。
  • 半導体大企業とスタートアップのマッチング機会創出、共同開発・実証プロジェクトの促進。
  • 半導体分野の起業家、経営人材、メンターを育成するプログラムの実施。
  • 国内外の半導体スタートアップエコシステム(例: シリコンバレー、台湾)との連携強化。

4. 多様な人材育成と確保

  • 半導体分野(特に設計、AI、先進材料、製造プロセス)の高度専門人材を育成するための大学・高等専門学校における教育プログラムの強化と拡充。
  • 実務経験豊富な技術者を教員として招致するためのインセンティブ制度の導入。
  • 国内外からの優秀な半導体技術者、研究者、経営人材を誘致・定着させるための優遇措置(ビザ、研究環境、生活環境支援)。
  • 社会人向けリカレント教育プログラムの充実と、リスキリング機会の提供。
  • 小中学校からの半導体教育の推進と、産業への興味関心喚起活動。

5. 国際連携と標準化の推進

  • 日米連携を基軸とした次世代半導体技術(2nm以降)の研究開発およびサプライチェーン構築における協力関係の深化。
  • IOWN Global Forumなどの国際標準化団体への積極的な参画と、日本の技術提案力の強化。
  • 経済安全保障の観点から、友好国との半導体サプライチェーンにおける情報共有と連携強化。

3.4. 非機能要件

1. 持続可能性:

政策・投資は単年度で終わるのではなく、中長期的な視点(10年〜20年)での継続性と安定性を確保する。

2. 柔軟性:

急速に変化する半導体技術トレンドや地政学的リスクに対応できるよう、戦略は定期的に見直し、柔軟に調整できるメカニニズムを持つ。

3. 透明性:

政府の支援策や成果は国民に対して透明に公開され、説明責任を果たす。

4. 効率性:

投入された資金やリソースが最大限の効果を発揮するよう、評価指標を設定し、定期的な評価と改善を行う。

5. 安全性:

半導体サプライチェーン全体における知的財産の保護、サイバーセキュリティ対策を徹底する。

3.5. 成功指標(KPI)

  • 2nmプロセス以降の先端ロジック半導体の国内量産開始時期と生産能力。
  • 国内EDA/IPコアの市場シェア(特に先端ノード向け)。
  • 半導体分野におけるスタートアップ設立数および資金調達額の増加率。
  • 半導体関連分野の新規雇用創出数(特に設計、R&D)。
  • 国際特許取得数および論文発表数の増加。
  • 半導体関連人材の供給と需要のギャップ解消度。
  • 主要な国際半導体サプライチェーンにおける日本の貢献度と存在感。
  • IOWNなどの次世代技術における国際標準化への貢献度。

Qwe3-VL-30B-A3Bにmarioを見せてみる。 #6

Qwen3-VL-30B-A3B-InstructはMarioのゲーム画面を記述させてみます。Colab A100 環境で行いました。VRAM占有率は、66935MiB /  81920MiB でした。

 

huggingface.co

 

公式のQuickstartにそって準備します。flash_attentionは有効化し実行しました。

 

位置関係や状況判断はさらに出来るようになっています。相対位置関係となると数値化には苦労しつつ、納得の行くレベルまでは詰められませんでした。ただし、文字認識や状況把握の立場からすると、キャラクタのX,Yの位置を数値化して学習させる理由もないでしょう。一方で、ゲーム画面と位置のデータを大量に準備して・・・と考えると、これをネタにVLMの学習のお勉強もできるような気がしてきます。

 

VLMで何か、お手軽に弄れることを探してみたいと思います。

 

利用した画面:

 

生成例:

これはどのようなシーンですか?

これは、任天堂が開発・発売したゲーム『スーパーマリオブラザーズ』のゲーム画面です。このゲームは1985年に発売され、ゲーム業界に大きな影響を与えた作品として知られています。

画像の左上には「MARIO」と表示され、プレイヤーが操作するキャラクターがマリオであることを示しています。右上には「WORLD 1-1」と表示されており、これはゲームの最初のステージであることを意味します。また、「TIME 386」というタイマーも表示されており、残り時間のカウントダウンが行われている様子がわかります。

このゲームでは、マリオが悪のキャラクター「クッパ」から姫の「ピーチ」を救出するために、様々なステージを進んでいきます。この画像のシーンでは、マリオが地面に立ち、右側に「ブロック」や「敵」が見えます。背景には青空と白い雲が描かれており、典型的な『スーパーマリオブラザーズ』の世界観が表現されています。
CPU times: user 26.1 s, sys: 10.2 ms, total: 26.2 s
Wall time: 26.1 s

 

マリオと敵の位置を出来るだけ正確に述べてください。

画像に登場するマリオと敵の位置を、ピクセル単位でできるだけ正確に説明します。

---

### **マリオの位置**
- **座標**: 画面左側の土ブロックの上に立っています。
- **X座標**: 約 **100** ピクセル(画面左から)
- **Y座標**: **382** ピクセル(画面下から)
- **状態**: 通常の走行姿勢で、右を向いており、右方向に移動中です。

---

### **敵の位置**
- **敵の種類**: ゴーレム(Goomba)です。
- **座標**: マリオの右側、緑色のパイプの右隣にいます。
- **X座標**: 約 **260** ピクセル(画面左から)
- **Y座標**: **382** ピクセル(画面下から)
- **状態**: 土ブロックの上に立っており、右方向に移動中です。

---

### **補足情報**

CPU times: user 26.9 s, sys: 22.8 ms, total: 26.9 s
Wall time: 27 s

 

マリオと敵の位置をフォーマットに従って書き出してください。マリオの位置が(0,0)です。キャラクターの幅を1とします。左方向がプラスです。
### フォーマット例
0. Mario (0,0)
1. Goomba (3,5)

 

0. Mario (0,0)  
1. Goomba (6,2)
CPU times: user 2.19 s, sys: 926 µs, total: 2.19 s
Wall time: 2.26 s

これは無理でしたね。

 

Marioは次にどういう行動をとるべきですか?詳しく操作を説明してください。

この画像は、スーパーマリオ Bros.(1985年、任天堂)のゲーム画面です。マリオが左から右へ進んでおり、右側には敵のゴーレム(Goomba)と緑色のパイプがあります。この状況で、マリオが次の行動を取るべきです。

---

### **次の行動:右に進み、敵を跳び越える**

#### **操作の詳細(任天堂ファミコン/FC版の操作)**
- **方向キー(右)を押す**:マリオを右に進ませます。
- **Aボタン(ジャンプ)を押す**:敵の上をジャンプして跳び越えます。

---

### **具体的な手順**

1. **右に進む**:
   - マリオが右側のゴーレムに近づくまで、**右方向キー**を押します。

2. **ジャンプして敵を跳び越える**:
   - ゴーレムの上に来た瞬間に、**Aボタン**を押してジャンプします。
   - マリオは敵の
CPU times: user 27 s, sys: 8.54 ms, total: 27 s
Wall time: 27 s

全体の把握はちゃんとできています。

 

ibm-granite/granite-4.0-h-small-GGUFをollamaとcolabで試してみる。

地味なところを攻めている印象のIBM。granite-4.0-h-smallのGUFFをお試ししてみます。ColabのL4環境で実行しました。VRAM占有率は19443MiB /  23034MiBでした。

 

huggingface.co

 

すっかり進歩したSLMの中で、32Bの多言語対応モデルとして突出した印象はありません。素直な出力で使いやすい印象です。日本の知識は多くはなさそうですが、与えたテキストを踏まえた回答には問題なし。3Bモデルも少しだけ触ってみましたが、簡単なやり取り向きでしょうか。

 

生成例:

まどか☆マギカで一番かわいいのは?


まどか☆マギカに登場するキャラクターたちはそれぞれ魅力がありますが、一般的に「一番かわいい」と言われるキャラクターを挙げるとすれば、「暁美ほむら」や「霧野蘭子」などが人気です。ただし、これは個人の好みによって異なります。
CPU times: user 5.48 ms, sys: 0 ns, total: 5.48 ms
Wall time: 4.26 s

蘭子さんですか。

 

まどか☆マギカのキャラクターのテキストを参照して回答してください。
まどか☆マギカで一番かわいいのは、誰ですか?

# まどか☆マギカのキャラクター
(割愛)

まどか☆マギカのキャラクターの中で一番かわいいと言えるのは、主人公の鹿目 まどか(かなめ まどか)です。彼女は物語の中心的存在であり、その純粋さや成長が物語全体を通して強く印象づけられています。しかし、かわいさは主観的なものであるため、他のキャラクターについてもそれぞれ愛されるポイントがあります。
CPU times: user 6.06 ms, sys: 1.68 ms, total: 7.74 ms

ちゃんと説明文書を付けるとまともな回答です。

 

日本で二番目に高い山を検討して答えてください。日本語で回答してください。

 

日本で二番目に高い山は、北海道に位置する羊蹄山(ようていざん)です。標高は1,898メートルで、日本の主要な山々の中でも特に美しい形をした成層火山として知られています。羊蹄山はその円錐形のシルエットから「北海道アルプス」とも呼ばれ、四季折々の自然美が楽しめる観光地としても人気があります。冬にはスキー場としても賑わい、夏にはハイキングや登山のシーズンを迎えます。
CPU times: user 5.6 ms, sys: 1.09 ms, total: 6.69 ms
Wall time: 6.58 s

んーどうしてそうなった・・・。

 

以下を簡単にまとめてください。

ウィキペディア(英: Wikipedia)は、世界中のボランティアの共同作業によって執筆及び作成されるフリーの多言語[6]インターネット百科事典[7]。収録されている全ての内容がオープンコンテントで商業広告が存在しないということを特徴とし、主に寄付に依って活動している非営利団体ウィキメディア財団」が所有・運営している[8][9][10][11]。「ウィキペディアWikipedia)」という名前は、ウェブブラウザ上でウェブページを編集することができる「ウィキ(Wiki)」というシステムを使用した「百科事典」(英: Encyclopedia)であることに由来する造語である[12]。設立者の1人であるラリー・サンガーにより命名された[13][14]。

 

ウィキペディアは、ボランティアによって共同で作成される無料の多言語インターネット百科事典です。オープンコンテントで広告がなく、非営利団体ウィキメディア財団」が運営しています。名前はウェブ上で編集可能な「ウィキ」と百科事典を組み合わせた造語で、ラリー・サンガーによって命名されました。
CPU times: user 3.56 ms, sys: 1.82 ms, total: 5.38 ms
Wall time: 5.43 s

 

 

1+1*2+3/2+2^10を計算してください。計算が終わったら検算をしてください。最後に最終的な計算経過と結果を答えてください。

 

計算方法:
1. まず、指数の計算から行います。
   2^10 = 1024

2. 次に、乗算と除算を行います。
   1*2 = 2
   3/2 = 1.5

3. 最後に、加算を行います。
   1 + 2 + 1.5 + 1024 = 1028.5

検算:
1. まず、指数の計算から行います。
   2^10 = 1024
   結果は一致しています。

2. 次に、乗算と除算を行います。
   1*2 = 2 (元々の計算結果と一致)
   3/2 = 1.5 (元々の計算結果と一致)

3. 最後に、加算を行います。
   1 + 2 + 1.5 + 1024 = 1028.5
   結果は一致しています。

最終的な計算経過:
(1+1*2+3/2+2^10)
= (1+2+1.5+1024) 
= 1028.5

最終的な計算結果:1028.5
CPU times: user 8.51 ms, sys: 1.15 ms, total: 9.66 ms
Wall time: 11.3 s

 

 

寿限無とは?

 

寿限無」(じゅげむ)は、日本の古典文学における俗説や故事成句の一つであり、その意味や起源については諸説があります。以下に主な説を紹介します。

1. **仏教由来の説**: この言葉は仏教の教えに由来するとされ、無限の寿命や永遠の命を意味するとされています。特に、仏教の経典において「寿命無量」(じゅみょうむりょう)という表現があり、これが短縮されたものと考えられています。

2. **俗説としての説**: 他には、古代中国の「寿」や「限」を組み合わせた言葉として、長寿や無限の寿命を願う意味があるとされています。また、日本の民間伝承や俗説として、特定の物語や故事に関連付けられることもあります。

3. **文学作品における使用**: この言葉は、江戸時代の浮世草子や歌舞伎などの文学作品に登場し、長寿や幸福を願う表現として使われていました。

寿限無」はその意味が多様であるため、具体的な解釈は文脈によって異なることがあります。また、この言葉は日本の伝統文化や言語の中で重要な位置を占めており、多くの人々に親しまれています。
CPU times: user 8.52 ms, sys: 4.63 ms, total: 13.2 ms
Wall time: 17.4 s

 

langchain(stuff chain)を利用してまとめます。

The provided text is a list of mountains in Japan, categorized by region and including notable peaks such as Mount Fuji, Mount Tateyama, and Mount Haku. It also mentions various mountain ranges like the Japanese Alps and the North Alps. The list includes famous mountains known for their beauty, cultural significance, or challenging climbs.
CPU times: user 463 ms, sys: 3.47 ms, total: 467 ms
Wall time: 10.5 s

 

日本語のプロンプトでまとめます。

北岳は、日本の山梨県に位置する南アルプス甲斐駒ケ岳連峰)の主峰であり、標高3,193メートルを誇ります。これは日本百名山の一つであり、隠しカテゴリにも含まれています。北アルプス南アルプスなど、日本各地の山々が紹介されており、それぞれの特徴や関連する情報が提供されています。
CPU times: user 417 ms, sys: 12.7 ms, total: 430 ms
Wall time: 13.1 s

 

 

Doclingを利用してpdfからmarkdownへの変換を見直してみる。

LLMでの文書ファイルを活用するためには、まだまだmarkdownをうまく活用する場面が多くあります。Pythonでコーディングする場合には、改めて調べるとPyMuPDF4LLMかDoclingあたりが候補になりそうでした。PyMuPDF4LLMも軽量で良好でしたが、今回はDoclingを手を動かして試してみます。

 

github.com

 

markdownに図データを切り出し、参照埋め込み型Markdownへと変換を実施します。

 

Doclingのパイプラインでオプションを設定。

# PDFパイプラインオプションのインスタンス
pipeline_options = PdfPipelineOptions()
# 画像スケールを設定(レンダリング解像度の制御)
pipeline_options.images_scale = IMAGE_RESOLUTION_SCALE
# ページ全体の画像抽出を有効化 (Markdownにはページ画像を含まないが、構成要素の画像を抽出するために必要)
pipeline_options.generate_page_images = True
# 図(Picture)の画像抽出を有効化
pipeline_options.generate_picture_images = True
# 表(Table)の画像抽出を有効化
pipeline_options.generate_table_images = True 

# PdfFormatOptionにパイプラインオプションを適用
pdf_format_option = PdfFormatOption(pipeline_options=pipeline_options)

# DocumentConverterの初期化
doc_converter = DocumentConverter(
    format_options={InputFormat.PDF: pdf_format_option}
)

 

後は、Converterを設定したパイプラインで行うように初期化するだけです。詳細はColabノートを参照してください。

 

以下のように参照埋め込みが出来ています。

Figure 2: (left) Scaled Dot-Product Attention. (right) Multi-Head Attention consists of several attention layers running in parallel.

![Image](output/sample_arxiv-referenced_artifacts/image_000002_35b5fe76ef3c23cddd7788e62be4d03daa9e37cdae00a416b15cbfce314a544d.png)

# https://arxiv.org/pdf/1706.03762 をサンプルとしました。

 

DoclingはVLMを利用するため処理としてはPyMuPDF4LLMよりも重く、GPUの利用がよさそうです。ちなみにibm-granite/granite-docling-258Mは更新が続けられています。IBM頑張れ!

docling-project/docling | DeepWiki で調べると、日本語はOCR済みのPDFを利用すれば、中途半端にOCRを実施しないようです。フリーのOCRモデルは日本語の読み取り精度が低いケースも多いので回避できるかは気になるポイントです。本格的に利用してみたいと感じました。引き続き利用を拡大したいなと思いました。

 

gist.github.com