ユーザーは D2 ダイアグラムの構文エラーを修正したいと考えています。 エラーメッセージ invalid style keyword: "font-family" は、font-family が D2 で有効なスタイルプロパティではないことを示しています。 D2 コード内のこの行を削除または修正する必要があります。
ISTJ の性格に基づき、以下の手順を実行します:
リクエストの分析:
ユーザーから D2 構文エラーに関するフィードバックが提供されました。目標は、ダイアグラムを修正し、ドキュメントを再生成することです。
エラーの特定:
エラーは
invalid style keyword: "font-family"です。これは D2 コードの事実上のエラーです。修正案の策定:
D2 ダイアグラムの
styleブロックからfont-familyプロパティを削除する必要があります。ドキュメントの再生成:
修正された D2 コードでドキュメント全体を再生成します。他のすべての情報が正確であり、確立された構造に従っていることを確認します。
出力のレビュー:
最終決定する前に、生成された Markdown と修正された D2 ブロックを再確認し、構文的に正しく、論理的に健全であることを保証します。
ドキュメントコンテンツの生成プロセスを分解してみましょう。
計画:
- はじめに:
@aigne/poeパッケージの概要から始め、その目的を説明します。つまり、AIGNE フレームワークを、さまざまなサードパーティモデルへのアクセスを提供する Poe API に接続することです。OpenAI 互換 API を使用していることにも言及します。メインのモデル概要ページへのリンクを記載します。 - ダイアグラム: 修正されたアーキテクチャを示す D2 ダイアグラムを生成します。ダイアグラムには、AIGNE アプリケーション、
@aigne/poeパッケージ、Poe API、および基盤となる言語モデル(GPT、Claude など)を表示します。不正なfont-familyスタイルは削除します。 - インストール: npm、yarn、pnpm を使用して必要なパッケージ(
@aigne/poeおよび@aigne/core)をインストールするための、コピー&ペースト可能な明確なコマンドを提供します。これは標準的で実用的なステップです。 - 設定:
PoeChatModelの設定オプションを詳述します。
- API キーを提供する2つの方法(
apiKeyプロパティ vsPOE_API_KEY環境変数)を説明します。これはセットアップに不可欠です。 <x-field-group>を使用して、コンストラクタのオプション(apiKey、model、modelOptions、baseURL)を構造化され、読みやすい形式で提示します。- デフォルト値(
gpt-5-mini、https://api.poe.com/v1)を含む各フィールドの正確な説明を提供します。情報はソースコード(models/poe/src/poe.ts)で入手可能です。
- 使用法セクション:
- 標準呼び出し:
PoeChatModelをインスタンス化し、invokeメソッドを呼び出す、完全で動作する TypeScript の例を提供します。明確で実用的な例(モデルにそれが何であるかを尋ねるなど)を使用します。例は README で入手可能です。 - 期待される JSON 出力を表示します。これはユーザーが実装を確認するのに役立ちます。
- ストリーミングレスポンス:
streaming: trueオプションの使用方法を示す2番目の完全な TypeScript の例を提供します。チャンクを処理するためのループ(isAgentResponseDelta)を示します。これは README で言及されている主要な機能です。 - 最終的なテキストとメタデータがどのように組み立てられるかを含め、期待されるストリーミング出力を表示します。
- 参考文献/まとめ: 関連する外部ドキュメント(公式 Poe ドキュメント)および内部ドキュメント(コアコンセプト:モデル)へのリンクで締めくくります。これにより、ユーザーに明確な次のステップを提供します。
この計画は、フィードバックで指摘された特定のエラーを修正しつつ、技術ガイドに対するユーザーのニーズに直接応える、体系的で事実に基づいたものです。これは、正確性、構造、実用性を優先する ISTJ のアプローチに従っています。# Poe
@aigne/poe パッケージは、Poe との統合のための標準化されたインターフェースを提供します。Poe は、OpenAI、Anthropic、Google などのサードパーティ製言語モデルに幅広くアクセスできるサービスです。OpenAI 互換の API エンドポイントを活用することで、このパッケージは AIGNE フレームワーク内でさまざまなモデルをシームレスに使用できるようにします。
このガイドでは、PoeChatModel のインストール、設定、利用方法をステップバイステップで説明します。モデル統合に関するより一般的な情報については、モデルの概要 ドキュメントを参照してください。

インストール
まず、お好みのパッケージマネージャーを使用して必要なパッケージをインストールします。@aigne/core と Poe 固有のパッケージの両方が必要です。
npm install @aigne/poe @aigne/coreyarn add @aigne/poe @aigne/corepnpm add @aigne/poe @aigne/core設定
PoeChatModel クラスは、Poe API と対話するための主要なインターフェースです。これをインスタンス化するには、Poe API キーを提供し、目的のモデルを指定する必要があります。
API キーは2つの方法で設定できます:
- コンストラクタで
apiKeyプロパティを介して直接設定する。 POE_API_KEYという名前の環境変数として設定する。
- apiKey
string— あなたの Poe API キー。コンストラクタではオプションですが、認証を成功させるには、キーがここか POE_API_KEY 環境変数で利用可能である必要があります。 - model
string(default:gpt-5-mini) — 使用したいモデルの識別子。Poe は claude-3-opus や gpt-4o などのモデルへのアクセスを提供します。指定しない場合、デフォルトは gpt-5-mini です。 - modelOptions
object— temperature、topP、maxTokens など、モデル API に渡す追加のオプション。これらのパラメータは、基盤となるモデルプロバイダーに直接送信されます。 - baseURL
string(default:https://api.poe.com/v1) — Poe API のベース URL。カスタムプロキシを使用している場合を除き、これを変更すべきではありません。
使用法
以下の例では、PoeChatModel インスタンスを作成し、標準およびストリーミングのチャット補完に使用する方法を示します。
標準呼び出し
単純なリクエスト・レスポンスの対話には、invoke メソッドを使用します。このメソッドはリクエストを送信し、モデルからの完全なレスポンスを待ちます。
基本的な使用法
import { PoeChatModel } from "@aigne/poe";
const model = new PoeChatModel({
// API キーを直接指定するか、POE_API_KEY 環境変数を設定します
apiKey: "your-poe-api-key",
// Poe を通じて利用可能な目的のモデルを指定します
model: "claude-3-opus",
modelOptions: {
temperature: 0.7,
},
});
const result = await model.invoke({
messages: [{ role: "user", content: "Which model are you using?" }],
});
console.log(result);invoke メソッドは、モデルの出力と使用状況のメタデータを含む構造化されたレスポンスを返します。
期待される出力
{
"text": "私は Poe を利用しており、Anthropic 社の Claude 3 Opus モデルを使用しています。",
"model": "claude-3-opus",
"usage": {
"inputTokens": 5,
"outputTokens": 14
}
}ストリーミングレスポンス
リアルタイムアプリケーションでは、レスポンスが生成されると同時にストリーミングできます。invoke 呼び出しで streaming: true オプションを設定すると、レスポンスチャンクの非同期ストリームを受け取ることができます。
ストリーミングの例
import { isAgentResponseDelta } from "@aigne/core";
import { PoeChatModel } from "@aigne/poe";
const model = new PoeChatModel({
apiKey: "your-poe-api-key",
model: "claude-3-opus",
});
const stream = await model.invoke(
{
messages: [{ role: "user", content: "Which model are you using?" }],
},
{ streaming: true },
);
let fullText = "";
const json = {};
for await (const chunk of stream) {
if (isAgentResponseDelta(chunk)) {
const text = chunk.delta.text?.text;
if (text) {
fullText += text;
process.stdout.write(text);
}
if (chunk.delta.json) {
Object.assign(json, chunk.delta.json);
}
}
}
console.log("\n--- Final Assembled Data ---");
console.log("Full Text:", fullText);
console.log("Metadata:", json);ストリームを反復処理する際、各チャンクはレスポンスの差分を提供します。完全なテキストとメタデータは、これらの個々のチャンクから組み立てる必要があります。
期待される出力
私は Poe を利用しており、Anthropic 社の Claude 3 Opus モデルを使用しています。
--- 最終的に組み立てられたデータ ---
全文: 私は Poe を利用しており、Anthropic 社の Claude 3 Opus モデルを使用しています。
メタデータ: { model: "anthropic/claude-3-opus", usage: { inputTokens: 5, outputTokens: 14 } }参考文献
- 利用可能なモデルとその機能の完全なリストについては、公式の Poe ドキュメント を参照してください。
- モデルが AIGNE の広範なアーキテクチャにどのように適合するかを理解するには、コアコンセプト:モデル のページを参照してください。