Skip to content

Commit 1b3580c

Browse files
committed
deploy: 3b83be5
1 parent ac03d6e commit 1b3580c

1 file changed

Lines changed: 66 additions & 0 deletions

File tree

index.html

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,10 @@ <h3>第 4 章</h3>
259259
<ul>
260260
<li><a href="#ch04-6-tools-demo-filename">4.6 節 ツール動作確認スクリプトのファイル名</a></li>
261261
</ul>
262+
<h3>第 6 章</h3>
263+
<ul>
264+
<li><a href="#ch06-4-create-model-from-env">6.4 節 createModelFromEnv の実装差異</a></li>
265+
</ul>
262266
<h3>第 7 章</h3>
263267
<ul>
264268
<li><a href="#ch07-2-variables">7.2 節 Variables の設定</a></li>
@@ -324,6 +328,68 @@ <h3>ツール動作確認スクリプトのファイル名</h3>
324328
</article>
325329
</section>
326330

331+
<section class="chapter-group">
332+
<h2>第 6 章</h2>
333+
334+
<article id="ch06-4-create-model-from-env">
335+
<header>
336+
<span class="chapter-label">6.4 節</span>
337+
<h3><code>createModelFromEnv</code> と配布リポジトリ実装の差異</h3>
338+
<a class="anchor" href="#ch06-4-create-model-from-env">#</a>
339+
</header>
340+
<dl>
341+
<dt>本書の記載</dt>
342+
<dd>
343+
<p>本書では <code>createModelFromEnv</code> を次の形で実装しています(抜粋)。</p>
344+
<pre><code>export function createModelFromEnv(): LanguageModel {
345+
const provider = process.env.LLM_PROVIDER;
346+
const modelName = process.env.LLM_MODEL;
347+
const apiKey = process.env.LLM_API_KEY;
348+
if (!provider) throw new Error('LLM_PROVIDER 環境変数が設定されていません');
349+
if (!modelName) throw new Error('LLM_MODEL 環境変数が設定されていません');
350+
switch (provider.toLowerCase()) {
351+
case 'openai': {
352+
if (apiKey &amp;&amp; !process.env.OPENAI_API_KEY) {
353+
process.env.OPENAI_API_KEY = apiKey;
354+
}
355+
const openai = createOpenAI();
356+
return openai(modelName);
357+
}
358+
// anthropic / google も同様に process.env 経由で apiKey を伝搬
359+
}
360+
}</code></pre>
361+
</dd>
362+
<dt>症状</dt>
363+
<dd>
364+
<p>本書のコードをそのまま写経して進める範囲では問題なく動作します。ただし、配布リポジトリの <code>src/providers/modelFactory.ts</code> は付録 B(Responses API 対応)を含む拡張のため、次の 3 点で本書の記載と異なります。</p>
365+
<ul>
366+
<li><strong>シグネチャ</strong><code>createModelFromEnv(options?: { useResponses?: boolean })</code> のように Responses API の切替オプションを受け取ります。</li>
367+
<li><strong><code>LLM_API_KEY</code> の扱い</strong>:未設定時に明示的に <code>throw</code> します(本書版はサイレント通過のため、後段の SDK 呼び出しで <code>401</code> として現れます)。</li>
368+
<li><strong>API キーの渡し方</strong><code>createOpenAI({ apiKey })</code> のように直接引数で渡します(本書版は <code>process.env.&lt;PROVIDER&gt;_API_KEY</code> への代入経由)。</li>
369+
</ul>
370+
<p>このため、配布リポジトリの <code>bin/cli.ts --responses</code>(付録 B)を試そうとすると、本書版の <code>createModelFromEnv</code> には <code>useResponses</code> 切替が存在せず、付録 B のサンプルどおりに動作させられません。</p>
371+
</dd>
372+
<dt>対処</dt>
373+
<dd>
374+
<p>本書の章を順に進める読者は、本書のコードのままで問題ありません。配布リポジトリのコードを参照する場合や、付録 B(Responses API 対応)を試す場合は、リポジトリの <code>src/providers/modelFactory.ts</code> の実装を参照してください。</p>
375+
<p>Responses API 切替を本書版に最小限取り込みたい場合は、OpenAI ケースに次の分岐を加える方法があります。</p>
376+
<pre><code>case 'openai': {
377+
if (apiKey &amp;&amp; !process.env.OPENAI_API_KEY) {
378+
process.env.OPENAI_API_KEY = apiKey;
379+
}
380+
const useResponses = process.env.USE_RESPONSES_API === 'true';
381+
const openai = useResponses ? createOpenAIResponses() : createOpenAI();
382+
return openai(modelName);
383+
}</code></pre>
384+
</dd>
385+
<dt>補足</dt>
386+
<dd>
387+
<p>同様の経緯で、本書 6.4 節のコード片では Google ケースの API キーに <code>process.env.GOOGLE_API_KEY</code> を使っていますが、配布リポジトリの <code>.env.example</code> および <code>src/providers/google.ts</code><code>GEMINI_API_KEY</code> を優先します(<code>GOOGLE_API_KEY</code> もフォールバックとして読みます)。本書のコードは引き続き動作しますが、リポジトリの環境変数名は <code>GEMINI_API_KEY</code> である点に留意してください。</p>
388+
</dd>
389+
</dl>
390+
</article>
391+
</section>
392+
327393
<section class="chapter-group">
328394
<h2>第 7 章</h2>
329395

0 commit comments

Comments
 (0)