<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>生成AI - Uranos8685のおもちゃ箱</title>
	<atom:link href="https://toybox.uranos8685.mydns.jp/category/%e7%94%9f%e6%88%90ai/feed/" rel="self" type="application/rss+xml" />
	<link>https://toybox.uranos8685.mydns.jp</link>
	<description>個人的な備忘録やゲームレビュー等のブログです</description>
	<lastBuildDate>Sun, 27 Sep 2026 16:01:00 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.4</generator>

<image>
	<url>https://toybox.uranos8685.mydns.jp/wp-content/uploads/2025/04/cropped-AE86-2-32x32.png</url>
	<title>生成AI - Uranos8685のおもちゃ箱</title>
	<link>https://toybox.uranos8685.mydns.jp</link>
	<width>32</width>
	<height>32</height>
</image> 
	<atom:link rel='hub' href='https://toybox.uranos8685.mydns.jp/?pushpress=hub'/>
<site xmlns="com-wordpress:feed-additions:1">252152419</site>	<item>
		<title>Pythonプログラムの関数の関係性をLLMに説明させてみる</title>
		<link>https://toybox.uranos8685.mydns.jp/791/python%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%81%ae%e9%96%a2%e6%95%b0%e3%81%ae%e9%96%a2%e4%bf%82%e6%80%a7%e3%82%92llm%e3%81%ab%e8%aa%ac%e6%98%8e%e3%81%95%e3%81%9b%e3%81%a6%e3%81%bf%e3%82%8b/</link>
					<comments>https://toybox.uranos8685.mydns.jp/791/python%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%81%ae%e9%96%a2%e6%95%b0%e3%81%ae%e9%96%a2%e4%bf%82%e6%80%a7%e3%82%92llm%e3%81%ab%e8%aa%ac%e6%98%8e%e3%81%95%e3%81%9b%e3%81%a6%e3%81%bf%e3%82%8b/#respond</comments>
		
		<dc:creator><![CDATA[Uranos8685]]></dc:creator>
		<pubDate>Sat, 26 Sep 2026 21:08:37 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[生成AI]]></category>
		<guid isPermaLink="false">https://toybox.uranos8685.mydns.jp/?p=791</guid>

					<description><![CDATA[<p>はじめに 　Pythonで大規模なプログラム（複数のpyに分けるようなもの）を書いていると、全体像が分かりにくくなることがあり、LLMを使ってうまく説明させられないかと思ったのが始まり。 　ちなみに、開発を始める前にOl [&#8230;]</p>
<p>The post <a href="https://toybox.uranos8685.mydns.jp/791/python%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%81%ae%e9%96%a2%e6%95%b0%e3%81%ae%e9%96%a2%e4%bf%82%e6%80%a7%e3%82%92llm%e3%81%ab%e8%aa%ac%e6%98%8e%e3%81%95%e3%81%9b%e3%81%a6%e3%81%bf%e3%82%8b/">Pythonプログラムの関数の関係性をLLMに説明させてみる</a> first appeared on <a href="https://toybox.uranos8685.mydns.jp">Uranos8685のおもちゃ箱</a>.</p>]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">はじめに</h2>



<p class="wp-block-paragraph">　Pythonで大規模なプログラム（複数のpyに分けるようなもの）を書いていると、全体像が分かりにくくなることがあり、LLMを使ってうまく説明させられないかと思ったのが始まり。</p>



<p class="wp-block-paragraph">　ちなみに、開発を始める前にOllamaに単純にpyファイルを投げて試したが、当然失敗したorz</p>



<h2 class="wp-block-heading">仕組み（ざっくり）</h2>



<h3 class="wp-block-heading">下準備（静的解析）</h3>



<p class="wp-block-paragraph">　pyファイルをそのままLLMに投げてもいい解説が生成できないため、まずはじめにastモジュールを使ってソースを構造木に変換する。<br>　で、各pyファイルの中から関数、クラス、メソッドを抽出し、呼び出しを行っているコードをコレクトする。</p>



<p class="wp-block-paragraph">　呼び出し先の解決をするが、単純に名前で一致させようとすると、別ファイルや関数内にネストされた同名のものがあった場合、誤ったマッチングが発生する。そのため、呼び出している名前がどのファイルのどの関数のものかをPythonの探し方に近い方法で探す必要があり、これがなかなか難しい。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>呼び出しの形</th><th>特定の方法</th></tr></thead><tbody><tr><td>helper()</td><td>自分の中で定義された関数 → 同じモジュールの定義 → import した名前　の順に探す</td></tr><tr><td>self.method() / cls.method()</td><td>自分が属するクラスのメソッドを探す。なければ親クラスを遡る</td></tr><tr><td>super().method()</td><td>親クラス側から探す</td></tr><tr><td>mod.func() / pkg.mod.Class.method()</td><td>importの対応表で正式な名前に直し、プロジェクト内の定義と照らし合わせる</td></tr><tr><td>パッケージのinit.py 経由で公開された名前</td><td>init.pyのimportをたどって本来の定義まで行く</td></tr><tr><td>プロジェクト内で見つからなかったもの</td><td>print や pd.DataFrameなどは「外部の呼び出し」として分離する</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">関係性をグラフ化</h3>



<p class="wp-block-paragraph">　静的解析で取得した関数の一覧と、呼び出しの関係性を、そのままnetworkxの有向グラフに投入する。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>g = nx.DiGraph()
g.add_node(&quot;code_atlas.llm:LLMClient.chat&quot;)              # 点を追加
g.add_edge(&quot;code_atlas.llm:LLMClient.test_connection&quot;,   # 矢印を追加
           &quot;code_atlas.llm:LLMClient.chat&quot;)</code></pre></div>



<p class="wp-block-paragraph">　関数が数百個あると、全部を表示しても線が絡まって読めなくなるため、「指定した中心の関数から N 歩以内だけ」に絞り込む。<br>　幅優先探索という方法で、池に石を投げて波紋が広がるように、中心から近い関数等を順に調べていきます。</p>



<p class="wp-block-paragraph">　できあがったネットワーク図をpyvisを使ってHTML化し、st.iframeに突っ込んで描画させる。</p>



<h3 class="wp-block-heading">LLMに解説させる</h3>



<p class="wp-block-paragraph">　ソースコードと一緒に静的解析の結果を渡して、どの関数で何を呼び出しているかをLLMに分からせることで、推測で解説させない。<br>　また、チャットによる質問部分では、ソースコード全体をプロンプト内に埋め込むことは出来ないため、質問に関連するソースコードのみ（呼び出し元・先含む）を渡す。基本的にRAGは意味的類似度検索（ベクトル）を使うが、質問文に出てくる関数、ファイル名を正規表現で抽出することで、誤ったマッチングを減らしている。</p>



<h2 class="wp-block-heading">スクリーンショット</h2>



<p class="wp-block-paragraph">　テストで使ったLLMはQwen3.5-9B</p>



<h3 class="wp-block-heading">概要説明</h3>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-4.png"><img fetchpriority="high" decoding="async" width="2505" height="1219" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-4.png" alt="" class="wp-image-793" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-4.png 2505w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-4-300x146.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-4-767x373.png 767w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-4-1024x498.png 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-4-1536x747.png 1536w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-4-2048x997.png 2048w" sizes="(max-width: 2505px) 100vw, 2505px" /></a></figure>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-5.png"><img decoding="async" width="2514" height="1219" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-5.png" alt="" class="wp-image-794" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-5.png 2514w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-5-300x145.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-5-767x372.png 767w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-5-1536x745.png 1536w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-5-1024x497.png 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-5-2048x993.png 2048w" sizes="(max-width: 2514px) 100vw, 2514px" /></a></figure>



<h3 class="wp-block-heading">関係図をネットワークマップで図示（pyvis）</h3>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-6.png"><img decoding="async" width="2492" height="1179" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-6.png" alt="" class="wp-image-795" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-6.png 2492w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-6-300x142.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-6-767x363.png 767w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-6-1536x727.png 1536w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-6-1024x484.png 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-6-2048x969.png 2048w" sizes="(max-width: 2492px) 100vw, 2492px" /></a></figure>



<h3 class="wp-block-heading">各pyファイルの概要</h3>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-7.png"><img loading="lazy" decoding="async" width="2130" height="1156" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-7.png" alt="" class="wp-image-796" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-7.png 2130w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-7-300x163.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-7-767x416.png 767w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-7-1024x556.png 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-7-1536x834.png 1536w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-7-2048x1111.png 2048w" sizes="(max-width: 2130px) 100vw, 2130px" /></a></figure>



<h3 class="wp-block-heading">各関数の概要</h3>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-8.png"><img loading="lazy" decoding="async" width="2176" height="1195" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-8.png" alt="" class="wp-image-797" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-8.png 2176w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-8-300x165.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-8-767x421.png 767w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-8-1024x562.png 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-8-1536x844.png 1536w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-8-2048x1125.png 2048w" sizes="(max-width: 2176px) 100vw, 2176px" /></a></figure>



<h3 class="wp-block-heading">チャットでLLMに解説させる</h3>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-9.png"><img loading="lazy" decoding="async" width="2177" height="725" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-9.png" alt="" class="wp-image-799" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-9.png 2177w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-9-300x100.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-9-1024x341.png 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-9-766x255.png 766w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-9-1536x512.png 1536w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-9-2048x682.png 2048w" sizes="(max-width: 2177px) 100vw, 2177px" /></a></figure>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-10.png"><img loading="lazy" decoding="async" width="2176" height="717" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-10.png" alt="" class="wp-image-800" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-10.png 2176w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-10-300x99.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-10-1024x337.png 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-10-768x253.png 768w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-10-2048x675.png 2048w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-10-1536x506.png 1536w" sizes="(max-width: 2176px) 100vw, 2176px" /></a></figure>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-11.png"><img loading="lazy" decoding="async" width="2173" height="716" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-11.png" alt="" class="wp-image-801" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-11.png 2173w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-11-768x253.png 768w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-11-300x99.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-11-1024x337.png 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-11-1536x506.png 1536w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-11-2048x675.png 2048w" sizes="(max-width: 2173px) 100vw, 2173px" /></a></figure>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-12.png"><img loading="lazy" decoding="async" width="2190" height="735" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-12.png" alt="" class="wp-image-802" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-12.png 2190w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-12-766x257.png 766w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-12-300x101.png 300w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-12-1024x344.png 1024w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-12-2048x687.png 2048w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-12-1536x516.png 1536w" sizes="(max-width: 2190px) 100vw, 2190px" /></a></figure>



<h2 class="wp-block-heading">生成結果のサンプル</h2>



<p class="wp-block-paragraph">　別のページで公開している、タイムスタンプ付き歌詞データ作成ツールを読み込ませてみた結果。ソースコードはわざと消してます。<br>　肌感としては結構いい感じ。ただ、MTPデバイスのファイル読み取りについて、少し前にテストしてみたものの上手くいかず、MTP連携周りのボタンを消してアプリでは実行されないようにしていますが、使われていない機能であることを認識できていないようす。この辺りが限界かも🦆。<br>　まぁ、自分が使う分には充分かな。</p>



<div class="wp-block-file"><a id="wp-block-file--media-a265b8d9-f523-4ec1-bff4-d076004d04eb" href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/LRC_MAKER_Uranos8685_atlas.html">LRC_MAKER_Uranos8685_atlas.html</a><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/LRC_MAKER_Uranos8685_atlas.html" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-a265b8d9-f523-4ec1-bff4-d076004d04eb">ダウンロード</a></div>



<p class="wp-block-paragraph">　テストがパーペキじゃないのと、自分が欲しかったので作ったものなので、ソースコードはそのうち気が向いたら公開する…かも？</p><p>The post <a href="https://toybox.uranos8685.mydns.jp/791/python%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%81%ae%e9%96%a2%e6%95%b0%e3%81%ae%e9%96%a2%e4%bf%82%e6%80%a7%e3%82%92llm%e3%81%ab%e8%aa%ac%e6%98%8e%e3%81%95%e3%81%9b%e3%81%a6%e3%81%bf%e3%82%8b/">Pythonプログラムの関数の関係性をLLMに説明させてみる</a> first appeared on <a href="https://toybox.uranos8685.mydns.jp">Uranos8685のおもちゃ箱</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://toybox.uranos8685.mydns.jp/791/python%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%81%ae%e9%96%a2%e6%95%b0%e3%81%ae%e9%96%a2%e4%bf%82%e6%80%a7%e3%82%92llm%e3%81%ab%e8%aa%ac%e6%98%8e%e3%81%95%e3%81%9b%e3%81%a6%e3%81%bf%e3%82%8b/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">791</post-id>	</item>
		<item>
		<title>VSCodeでGitコミットメッセージの生成をLLMにさせる拡張機能（Commit Maker）</title>
		<link>https://toybox.uranos8685.mydns.jp/784/vscode%e3%81%a7git%e3%82%b3%e3%83%9f%e3%83%83%e3%83%88%e3%83%a1%e3%83%83%e3%82%bb%e3%83%bc%e3%82%b8%e3%81%ae%e7%94%9f%e6%88%90%e3%82%92llm%e3%81%ab%e3%81%95%e3%81%9b%e3%82%8b%e6%8b%a1%e5%bc%b5/</link>
					<comments>https://toybox.uranos8685.mydns.jp/784/vscode%e3%81%a7git%e3%82%b3%e3%83%9f%e3%83%83%e3%83%88%e3%83%a1%e3%83%83%e3%82%bb%e3%83%bc%e3%82%b8%e3%81%ae%e7%94%9f%e6%88%90%e3%82%92llm%e3%81%ab%e3%81%95%e3%81%9b%e3%82%8b%e6%8b%a1%e5%bc%b5/#respond</comments>
		
		<dc:creator><![CDATA[Uranos8685]]></dc:creator>
		<pubDate>Sat, 26 Sep 2026 19:53:27 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[生成AI]]></category>
		<guid isPermaLink="false">https://toybox.uranos8685.mydns.jp/?p=784</guid>

					<description><![CDATA[<p>はじめに 　VSCodeのソース管理タブで、GitHubへコミットする際にGitHub Copilotを使ってコミットメッセージの生成が可能です。 　ただ、コミットメッセージの生成にもトークンコストが発生するため、無課金 [&#8230;]</p>
<p>The post <a href="https://toybox.uranos8685.mydns.jp/784/vscode%e3%81%a7git%e3%82%b3%e3%83%9f%e3%83%83%e3%83%88%e3%83%a1%e3%83%83%e3%82%bb%e3%83%bc%e3%82%b8%e3%81%ae%e7%94%9f%e6%88%90%e3%82%92llm%e3%81%ab%e3%81%95%e3%81%9b%e3%82%8b%e6%8b%a1%e5%bc%b5/">VSCodeでGitコミットメッセージの生成をLLMにさせる拡張機能（Commit Maker）</a> first appeared on <a href="https://toybox.uranos8685.mydns.jp">Uranos8685のおもちゃ箱</a>.</p>]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">はじめに</h2>



<p class="wp-block-paragraph">　VSCodeのソース管理タブで、GitHubへコミットする際にGitHub Copilotを使ってコミットメッセージの生成が可能です。<br></p>



<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image.png"><img loading="lazy" decoding="async" width="384" height="175" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image.png" alt="" class="wp-image-786" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image.png 384w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-300x137.png 300w" sizes="(max-width: 384px) 100vw, 384px" /></a></figure>



<p class="wp-block-paragraph">　ただ、コミットメッセージの生成にもトークンコストが発生するため、無課金だと使っているうちにリミットに達してしまうことがままあったため、ローカルLLMにコミットメッセージをさせる拡張機能がないか探していたところ、Commit Makerという拡張機能が良さげだったので紹介。</p>



<h2 class="wp-block-heading">Commit Makerについて</h2>


<a rel="noopener" href="https://marketplace.visualstudio.com/items?itemName=Hiromitsu.commit-maker" title="Commit Maker – コミットメーカー - Visual Studio Marketplace" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/cocoon-resources/blog-card-cache/94f149b6f3359182516b2809aa95a36d.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Commit Maker – コミットメーカー &#8211; Visual Studio Marketplace</div><div class="blogcard-snippet external-blogcard-snippet">Extension for Visual Studio Code &#8211; Git差分からコミットメッセージをAI生成。OpenAI GPT-6 Lunaを初期選択。BYOK、Codex、ローカルGGUFモデルに対応。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://marketplace.visualstudio.com/items?itemName=Hiromitsu.commit-maker" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">marketplace.visualstudio.com</div></div></div></div></a>


<p class="wp-block-paragraph">　インストールはマケプレからVSCodeにインスコするだけ。<br>　サイドバーのタブに、Commit Makerのアイコンが追加されるので、ここから設定が可能。<br>　ClaudeやCodexなどのAPIキーを設定することも出来るが、ローカルLLMもここでGGUFファイルをダウンロードすることで利用可能（外部でDL済みの任意のGGUFを指定することは出来なさそう）。</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-large"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-1.png"><img loading="lazy" decoding="async" width="312" height="1024" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-1-312x1024.png" alt="" class="wp-image-787" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-1-312x1024.png 312w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-1-91x300.png 91w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-1.png 344w" sizes="(max-width: 312px) 100vw, 312px" /></a></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-2.png"><img loading="lazy" decoding="async" width="267" height="293" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-2.png" alt="" class="wp-image-788"/></a></figure>
</div>
</div>



<p class="wp-block-paragraph">　生成した結果。生成の精度は、まぁまぁといった感じ。小さいプロジェクトならいいが、複数のpyファイルをまたぐような大規模プロジェクトだと、変更箇所しか読まないのか的外れな生成をすることがある。<br>　あと、GGUF形式のLLMをGPU推論できる環境でも、CPU推論でのみ動作するよう。一応、公式のGitHubのReadmeではGPUも使えそうなことが書いてあるが、設定方法の記載は見つけられず、よく分からん。まあ、CPU推論でも20秒程度で生成できていたので、まあいいかな。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="346" height="308" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-3.png" alt="" class="wp-image-789" srcset="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-3.png 346w, https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/image-3-300x267.png 300w" sizes="(max-width: 346px) 100vw, 346px" /></figure>


<a rel="noopener" href="https://github.com/Hiromitsu-A-T/commit-maker/tree/main" title="GitHub - Hiromitsu-A-T/commit-maker: GUIでプロンプト設定可能、自分のAPIキーを使ってサブスク不要のAIコミット生成ツール / GUI-configurable, no-subscription AI commit generator using your own API key." class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://toybox.uranos8685.mydns.jp/wp-content/uploads/cocoon-resources/blog-card-cache/0ee9cb7fa83c77e5e768379c041b5a7e.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">GitHub &#8211; Hiromitsu-A-T/commit-maker: GUIでプロンプト設定可能、自分のAPIキーを使ってサブスク不要のAIコミット生成ツール / GUI-configurable, no-subscription AI commit generator using your own API key.</div><div class="blogcard-snippet external-blogcard-snippet">GUIでプロンプト設定可能、自分のAPIキーを使ってサブスク不要のAIコミット生成ツール / GUI-configurable, no-subscription AI commit generator using your own API &#8230;</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://github.com/Hiromitsu-A-T/commit-maker" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">github.com</div></div></div></div></a><p>The post <a href="https://toybox.uranos8685.mydns.jp/784/vscode%e3%81%a7git%e3%82%b3%e3%83%9f%e3%83%83%e3%83%88%e3%83%a1%e3%83%83%e3%82%bb%e3%83%bc%e3%82%b8%e3%81%ae%e7%94%9f%e6%88%90%e3%82%92llm%e3%81%ab%e3%81%95%e3%81%9b%e3%82%8b%e6%8b%a1%e5%bc%b5/">VSCodeでGitコミットメッセージの生成をLLMにさせる拡張機能（Commit Maker）</a> first appeared on <a href="https://toybox.uranos8685.mydns.jp">Uranos8685のおもちゃ箱</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://toybox.uranos8685.mydns.jp/784/vscode%e3%81%a7git%e3%82%b3%e3%83%9f%e3%83%83%e3%83%88%e3%83%a1%e3%83%83%e3%82%bb%e3%83%bc%e3%82%b8%e3%81%ae%e7%94%9f%e6%88%90%e3%82%92llm%e3%81%ab%e3%81%95%e3%81%9b%e3%82%8b%e6%8b%a1%e5%bc%b5/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">784</post-id>	</item>
		<item>
		<title>OllamaにモデルファイルをGGUFでインストールためにOllama公式Modelfileを抽出する方法</title>
		<link>https://toybox.uranos8685.mydns.jp/756/%e3%82%aa%e3%83%95%e3%83%a9%e3%82%a4%e3%83%b3pc%e3%81%a7%e3%80%81ollama%e3%81%abgpt-oss20b%e3%82%92gguf%e3%81%a7%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%9f%e3%82%81%e3%81%aemodelf/</link>
					<comments>https://toybox.uranos8685.mydns.jp/756/%e3%82%aa%e3%83%95%e3%83%a9%e3%82%a4%e3%83%b3pc%e3%81%a7%e3%80%81ollama%e3%81%abgpt-oss20b%e3%82%92gguf%e3%81%a7%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%9f%e3%82%81%e3%81%aemodelf/#respond</comments>
		
		<dc:creator><![CDATA[Uranos8685]]></dc:creator>
		<pubDate>Sun, 13 Sep 2026 15:04:43 +0000</pubDate>
				<category><![CDATA[生成AI]]></category>
		<guid isPermaLink="false">https://toybox.uranos8685.mydns.jp/?p=756</guid>

					<description><![CDATA[<p>はじめに 　OllamaへのモデルファイルのインストールはネットにつながったPCならollama runで一発ですが、オフラインPCにインストールしたOllamaにモデルファイルをインストールする必要があり、公式Mode [&#8230;]</p>
<p>The post <a href="https://toybox.uranos8685.mydns.jp/756/%e3%82%aa%e3%83%95%e3%83%a9%e3%82%a4%e3%83%b3pc%e3%81%a7%e3%80%81ollama%e3%81%abgpt-oss20b%e3%82%92gguf%e3%81%a7%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%9f%e3%82%81%e3%81%aemodelf/">OllamaにモデルファイルをGGUFでインストールためにOllama公式Modelfileを抽出する方法</a> first appeared on <a href="https://toybox.uranos8685.mydns.jp">Uranos8685のおもちゃ箱</a>.</p>]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">はじめに</h2>



<p class="wp-block-paragraph">　OllamaへのモデルファイルのインストールはネットにつながったPCならollama runで一発ですが、オフラインPCにインストールしたOllamaにモデルファイルをインストールする必要があり、公式Modelfileを使ってオフラインPCでもモデルをインストールするやり方を見つけたので備忘録として残しておきます。</p>



<h2 class="wp-block-heading">Ollama公式のModelfileの抽出方法（インターネットにつながったPCでやる）</h2>



<p class="wp-block-paragraph">　まずは、インターネットにつながったPCで、事前にollama runコマンドでモデルを取得しておく。<br>　それで、以下のコマンドをコマンドプロンプトなどで実行するとModelfileが現在のディレクトリに出力される。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>ollama show gpt-oss:20b --modelfile &gt; official-gpt-oss.Modelfile</code></pre></div>



<p class="wp-block-paragraph">　gpt-oss:20bのModelfileの中身。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code># Modelfile generated by &quot;ollama show&quot;
# To build a new Modelfile based on this, replace FROM with:
# FROM gpt-oss:20b

FROM G:\ollama\models\blobs\sha256-e7b273f9636059a689e3ddcab3716e4f65abe0143ac978e46673ad0e52d09efb
TEMPLATE &quot;&quot;&quot;&lt;|start|&gt;system&lt;|message|&gt;You are ChatGPT, a large language model trained by OpenAI.
Knowledge cutoff: 2024-06
Current date: {{ currentDate }}
{{- if and .IsThinkSet .Think (ne .ThinkLevel &quot;&quot;) }}

Reasoning: {{ .ThinkLevel }}
{{- else if or (not .IsThinkSet) (and .IsThinkSet .Think) }}

Reasoning: medium
{{- end }}

{{- $hasNonBuiltinTools := false }}
{{- if .Tools -}}
{{- $hasBrowserSearch := false }}
{{- $hasBrowserOpen := false }}
{{- $hasBrowserFind := false }}
{{- $hasPython := false }}
  {{- range .Tools }}
    {{- if eq .Function.Name &quot;browser.search&quot; -}}{{- $hasBrowserSearch = true -}}
    {{- else if eq .Function.Name &quot;browser.open&quot; -}}{{- $hasBrowserOpen = true -}}
    {{- else if eq .Function.Name &quot;browser.find&quot; -}}{{- $hasBrowserFind = true -}}
    {{- else if eq .Function.Name &quot;python&quot; -}}{{- $hasPython = true -}}
    {{- else }}{{ $hasNonBuiltinTools = true -}}
    {{- end }}
  {{- end }}
{{- if or $hasBrowserSearch $hasBrowserOpen $hasBrowserFind $hasPython }}

# Tools
{{- if or $hasBrowserSearch $hasBrowserOpen $hasBrowserFind }}

## browser

// Tool for browsing.
// The `cursor` appears in brackets before each browsing display: `[{cursor}]`.
// Cite information from the tool using the following format:
// `【{cursor}†L{line_start}(-L{line_end})?】`, for example: `【6†L9-L11】` or `【8†L3】`.
// Do not quote more than 10 words directly from the tool output.
// sources=web (default: web)
namespace browser {
{{- if $hasBrowserSearch }}

// Searches for information related to `query` and displays `topn` results.
type search = (_: {
query: string,
topn?: number, // default: 10
source?: string,
}) =&gt; any;
{{- end }}
{{- if $hasBrowserOpen }}

// Opens the link `id` from the page indicated by `cursor` starting at line number `loc`, showing `num_lines` lines.
// Valid link ids are displayed with the formatting: `【{id}†.*】`.
// If `cursor` is not provided, the most recent page is implied.
// If `id` is a string, it is treated as a fully qualified URL associated with `source`.
// If `loc` is not provided, the viewport will be positioned at the beginning of the document or centered on the most relevant passage, if available.
// Use this function without `id` to scroll to a new location of an opened page.
type open = (_: {
id?: number | string, // default: -1
cursor?: number, // default: -1
loc?: number, // default: -1
num_lines?: number, // default: -1
view_source?: boolean, // default: false
source?: string,
}) =&gt; any;
{{- end }}
{{- if $hasBrowserFind }}

// Finds exact matches of `pattern` in the current page, or the page given by `cursor`.
type find = (_: {
pattern: string,
cursor?: number, // default: -1
}) =&gt; any;
{{- end }}

} // namespace browser
{{- end }}{{/* end if has browser tools */}}
{{- if $hasPython }}

## python

Use this tool to execute Python code in your chain of thought. The code will not be shown to the user. This tool should be used for internal reasoning, but not for code that is intended to be visible to the user (e.g. when creating plots, tables, or files).

When you send a message containing Python code to python, it will be executed in a stateful Jupyter notebook environment. python will respond with the output of the execution or time out after 120.0 seconds. The drive at &#39;/mnt/data&#39; can be used to save and persist user files. Internet access for this session is UNKNOWN. Depends on the cluster.
{{- end }}{{/* end if hasPython */}}
{{- end }}{{/* end if has any built-in tools */}}
{{- end }}{{/* end if .Tools */}}

# Valid channels: analysis, commentary, final. Channel must be included for every message.{{ if $hasNonBuiltinTools }}
Calls to these tools must go to the commentary channel: &#39;functions&#39;.
{{- end -}}&lt;|end|&gt;{{/* end of system */ -}}
{{- if or $hasNonBuiltinTools .System -}}
&lt;|start|&gt;developer&lt;|message|&gt;{{- if $hasNonBuiltinTools }}# Tools

## functions

namespace functions {
{{- range .Tools }}
{{- if not (or (eq .Function.Name &quot;browser.search&quot;) (eq .Function.Name &quot;browser.open&quot;) (eq .Function.Name &quot;browser.find&quot;) (eq .Function.Name &quot;python&quot;)) }}
{{if .Function.Description }}
// {{ .Function.Description }}
{{- end }}
{{- if and .Function.Parameters.Properties (gt (len .Function.Parameters.Properties) 0) }}
type {{ .Function.Name }} = (_: {
{{- range $name, $prop := .Function.Parameters.Properties }}
{{- if $prop.Description }}
  // {{ $prop.Description }}
{{- end }}
  {{ $name }}: {{ $prop | toTypeScriptType }},
{{- end }}
}) =&gt; any;
{{- else }}
type {{ .Function.Name }} = () =&gt; any;
{{- end }}
{{- end }}{{/* end if not browser tool */}}
{{- end }}{{/* end of range .Tools */}}

} // namespace functions
{{- end }}{{/* end if hasNonBuiltinTools */}}
{{- if .System}}

# Instructions

{{ .System }}
{{- end -}}
&lt;|end|&gt;
{{- end -}}
{{- /* Find the index of the last user message */ -}}
{{- $lastUserIdx := -1 }}
{{- $prefillingContent := false }}
{{- $prefillingThinkingOnly := false }}
{{- range $i, $msg := .Messages }}
  {{- $last := eq (len (slice $.Messages $i)) 1 -}}
  {{- if eq $msg.Role &quot;user&quot; }}
    {{- $lastUserIdx = $i }}
  {{- end -}}
  {{- if and $last (eq $msg.Role &quot;assistant&quot;) (gt (len $msg.Content) 0) }}
    {{- $prefillingContent = true }}
  {{- else if and $last (eq $msg.Role &quot;assistant&quot;) (gt (len $msg.Thinking) 0) }}
    {{- $prefillingThinkingOnly = true }}
  {{- end }}
{{- end -}}
{{- /* Now render messages */ -}}
{{- range $i, $msg := .Messages }}
  {{- $last := eq (len (slice $.Messages $i)) 1 -}}
  {{- if (ne $msg.Role &quot;system&quot;) -}}
    {{- if eq $msg.Role &quot;tool&quot; -}}
      {{- if or (eq $msg.ToolName &quot;python&quot;) (eq $msg.ToolName &quot;browser.search&quot;) (eq $msg.ToolName &quot;browser.open&quot;) (eq $msg.ToolName &quot;browser.find&quot;) -}}
        &lt;|start|&gt;{{ $msg.ToolName }} to=assistant&lt;|message|&gt;{{ $msg.Content }}&lt;|end|&gt;
      {{- else -}}
        &lt;|start|&gt;functions.{{ $msg.ToolName }} to=assistant&lt;|message|&gt;{{ $msg.Content }}&lt;|end|&gt;
      {{- end -}}
    {{- else if eq $msg.Role &quot;assistant&quot; -}}
      {{- if and $msg.Thinking (gt $i $lastUserIdx) -}}{{- /* Show thinking only after last user message */ -}}
      &lt;|start|&gt;assistant&lt;|channel|&gt;analysis&lt;|message|&gt;{{ $msg.Thinking }}{{- if not $prefillingThinkingOnly -}}&lt;|end|&gt;{{- end -}}
      {{- end -}}
      {{- if gt (len $msg.Content) 0 -}}
        &lt;|start|&gt;assistant&lt;|channel|&gt;final&lt;|message|&gt;{{ $msg.Content }}{{- if not $prefillingContent -}}&lt;|end|&gt;{{- end -}}
      {{- end -}}
      {{- if gt (len $msg.ToolCalls) 0 -}}
        {{- range $j, $toolCall := $msg.ToolCalls -}}
          {{- $isBuiltin := or (eq $toolCall.Function.Name &quot;python&quot;) (eq $toolCall.Function.Name &quot;browser.search&quot;) (eq $toolCall.Function.Name &quot;browser.open&quot;) (eq $toolCall.Function.Name &quot;browser.find&quot;) -}}
          &lt;|start|&gt;assistant&lt;|channel|&gt;{{ if $isBuiltin }}analysis{{ else }}commentary{{ end }} to={{ if not $isBuiltin}}functions.{{end}}{{ $toolCall.Function.Name }} &lt;|constrain|&gt;json&lt;|message|&gt;{{ $toolCall.Function.Arguments }}&lt;|call|&gt;
        {{- end -}}
      {{- end -}}
    {{- else if eq $msg.Role &quot;user&quot; -}}
      &lt;|start|&gt;{{ $msg.Role }}&lt;|message|&gt;{{ $msg.Content }}&lt;|end|&gt;
    {{- end }}
  {{- else }}
  {{- end }}
{{- end -}}
{{- if not (or $prefillingContent $prefillingThinkingOnly) -}}
&lt;|start|&gt;assistant
{{- end -}}&quot;&quot;&quot;
PARAMETER temperature 1
LICENSE &quot;&quot;&quot;
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      &quot;License&quot; shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      &quot;Licensor&quot; shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      &quot;Legal Entity&quot; shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      &quot;control&quot; means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      &quot;You&quot; (or &quot;Your&quot;) shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      &quot;Source&quot; form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      &quot;Object&quot; form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      &quot;Work&quot; shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      &quot;Derivative Works&quot; shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      &quot;Contribution&quot; shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, &quot;submitted&quot;
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as &quot;Not a Contribution.&quot;

      &quot;Contributor&quot; shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a &quot;NOTICE&quot; text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an &quot;AS IS&quot; BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets &quot;[]&quot;
      replaced with your own identifying information. (Don&#39;t include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same &quot;printed page&quot; as the copyright notice for easier
      identification within third-party archives.
   Copyright [yyyy] [name of copyright owner]
   Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at
       http://www.apache.org/licenses/LICENSE-2.0
   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.&quot;&quot;&quot;

</code></pre></div>



<div class="wp-block-file"><a id="wp-block-file--media-f657baf8-8d42-44d6-b409-280d8cfcd56e" href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/official-gpt-oss.modelfile">official-gpt-oss.Modelfile</a><a href="https://toybox.uranos8685.mydns.jp/wp-content/uploads/2026/09/official-gpt-oss.modelfile" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-f657baf8-8d42-44d6-b409-280d8cfcd56e">ダウンロード</a></div>



<h2 class="wp-block-heading">オフラインPCでモデルをインストールする</h2>



<p class="wp-block-paragraph">　上記Modelfileとgguf形式のモデルを使って、Ollamaにモデルをインストールする。<br>　ただ、Modelfileの先頭に、「FROM shaなんとか」は上記PCのモデルファイルのパスなので、オフラインPCに配置したGGUFのファイルパスに置換する必要がある。</p>



<p class="wp-block-paragraph">　おわり。</p>



<p class="wp-block-paragraph"></p><p>The post <a href="https://toybox.uranos8685.mydns.jp/756/%e3%82%aa%e3%83%95%e3%83%a9%e3%82%a4%e3%83%b3pc%e3%81%a7%e3%80%81ollama%e3%81%abgpt-oss20b%e3%82%92gguf%e3%81%a7%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%9f%e3%82%81%e3%81%aemodelf/">OllamaにモデルファイルをGGUFでインストールためにOllama公式Modelfileを抽出する方法</a> first appeared on <a href="https://toybox.uranos8685.mydns.jp">Uranos8685のおもちゃ箱</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://toybox.uranos8685.mydns.jp/756/%e3%82%aa%e3%83%95%e3%83%a9%e3%82%a4%e3%83%b3pc%e3%81%a7%e3%80%81ollama%e3%81%abgpt-oss20b%e3%82%92gguf%e3%81%a7%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%9f%e3%82%81%e3%81%aemodelf/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">756</post-id>	</item>
	</channel>
</rss>
