はじめに
個人でPythonによる株式デイトレードの自動売買プログラムを開発しています。エントリー・エグジットの判断そのものは自前のMLパイプラインで行っていますが、その周辺で「ニュースやIR情報を読んで、銘柄ごとの注目度・トーンをざっくりスコア化する」ような、LLMを使ったテキスト系の補助エージェントも並行して動かしています。
こうしたエージェントは、これまでOpenAIやClaudeのAPIをそのまま叩いて作っていました。ただ、日々大量のテキスト(ニュース見出し、IR要約、掲示板の書き込みなど)を処理するタスクだと、地味に効いてくるのが推論コストです。判断そのものはシンプルな分類・要約タスクであることも多く、「本当にこのタスクにフラッグシップモデルが必要か?」は常に気になっていました。
今回、OpenAI / Anthropic互換APIでオープンモデル(gpt-oss, Gemma, DeepSeekなど)を国内データセンターから提供する ai& Inference を試してみたので、実際に自分のエージェントのbase_urlを差し替えて、コスト・速度・日本語品質を比較した記録を残します。
ai& Inferenceとは
- gpt-oss、Google Gemma、DeepSeekなどのオープンモデルを、国内データセンターから推論基盤として提供
- OpenAI互換API / Anthropic互換APIの両方に対応しており、既存コードの
base_urlを書き換えるだけでオープンモデルに切り替えられる - クレジットカード登録不要の無料トライアルがあり、プロモーションコード
unitabetaiで$50分のクレジットが付与される
登録手順は以下の通りです。
- https://console.aiand.com でユーザー登録
- ホーム画面右上の「Credits: $0.00」をクリック
- 「Enter Amount」で$50を選択し「Purchase」をクリック
- プロモーションコード欄に
unitabetaiを入力
詳細: https://aiand.com/jp/inference
やったこと
自分のニュース分析エージェントは、ざっくり以下のような処理をしています。
ニュース見出し・IR要約テキスト
│
▼
[LLM] 銘柄に対する影響度・トーンを分類(ポジティブ/ネガティブ/中立 + 一言コメント)
│
▼
スコアをCSVに蓄積 → 裁量判断の補助材料として参照
このLLM呼び出し部分を、OpenAI SDK互換のクライアントのままbase_urlだけ差し替えて、モデルをClaude/GPTからオープンモデルに変更してみました。
Before: OpenAI/Claudeを直接叩く場合
from openai import OpenAI
client = OpenAI(
api_key="OPENAI_API_KEY",
)
def classify_news(headline: str) -> str:
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{
"role": "system",
"content": "あなたは日本株のニュース分析アシスタントです。",
},
{
"role": "user",
"content": (
f"次のニュース見出しについて、対象銘柄への影響を"
f"ポジティブ/ネガティブ/中立のいずれかで分類し、"
f"理由を一言で述べてください。\n\n見出し: {headline}"
),
},
],
)
return resp.choices[0].message.content
After: ai& Inferenceに差し替える場合
変更点は base_url と api_key、そして model 名だけです。プロンプトやレスポンスの処理コードは一切触っていません。
from openai import OpenAI
client = OpenAI(
api_key="AIAND_API_KEY",
base_url="https://api.aiand.com/v1", # ← ここだけ差し替え
)
def classify_news(headline: str, model: str = "deepseek-chat") -> str:
resp = client.chat.completions.create(
model=model,
messages=[
{
"role": "system",
"content": "あなたは日本株のニュース分析アシスタントです。",
},
{
"role": "user",
"content": (
f"次のニュース見出しについて、対象銘柄への影響を"
f"ポジティブ/ネガティブ/中立のいずれかで分類し、"
f"理由を一言で述べてください。\n\n見出し: {headline}"
),
},
],
)
return resp.choices[0].message.content
既存のバッチ処理・ログ整形・CSV出力まわりのコードはそのまま流用できるので、移行コストはほぼゼロでした。
比較してみた
同じ日本株ニュース見出し30本(決算速報・アナリスト格上げ/格下げ・業績修正など)を使って、複数モデルに同じプロンプトを投げて比較しました。
| モデル | 提供元 | 分類の妥当性(体感) | 日本語の自然さ | 体感速度 | コスト感 |
|---|---|---|---|---|---|
| Claude Opus | Anthropic直 | ◎ | ◎ | 普通 | 高い |
| GPT-4o系 | OpenAI直 | ◎ | ◎ | 普通 | やや高い |
| gpt-oss(ai&) | ai& Inference | ○ | ○ | 速い | 低い |
| DeepSeek(ai&) | ai& Inference | ○ | ○〜◎ | 速い | 低い |
体感ベースの比較にはなりますが、「見出しからポジティブ/ネガティブ/中立を分類し、理由を一言添える」程度のタスクであれば、オープンモデルでもフラッグシップモデルと遜色ない結果が返ってくる印象でした。特にDeepSeek系は日本語の言い回しも比較的自然で、単純な分類タスクなら十分実用に耐えると感じています。
一方で、「複数の材料を統合して総合的にリスクを評価する」といった、より複雑な推論を求めるプロンプトでは、フラッグシップモデルとの差を感じる場面もありました。タスクの複雑さに応じてモデルを使い分ける、という運用が現実的だと思います。
Anthropic互換APIでの利用例
Claude SDKをそのまま使っている場合も、同様に差し替えが可能です。
import anthropic
client = anthropic.Anthropic(
api_key="AIAND_API_KEY",
base_url="https://api.aiand.com/anthropic", # Anthropic互換エンドポイント
)
message = client.messages.create(
model="gemma-2-27b",
max_tokens=200,
messages=[
{
"role": "user",
"content": "次のIR要約から、業績インパクトの大小を判定してください: ...",
}
],
)
print(message.content)
Claude用に書いていたコードもほぼそのまま動くため、「Claudeでプロトタイプを作って、量産フェーズだけオープンモデルに寄せる」という段階的な移行もやりやすいです。
実際に運用に組み込んでみて感じたこと
- 大量のニュース見出しをバッチでスコアリングするような「単純分類×大量処理」のタスクは、オープンモデルへの置き換えとの相性が良い
- 一方、最終的な売買判断に近い部分(複数情報の統合判断)は、引き続きフラッグシップモデルに任せる方が安心感がある
-
base_urlを切り替えるだけで済む互換設計のおかげで、モデルごとのA/Bテストが非常にやりやすい。同じプロンプト・同じ後処理コードのまま、モデルだけを差し替えて精度とコストを比較できるのは地味に大きい
自動売買システムの「意思決定コア」はこれまで通り自前のMLパイプラインに残しつつ、その手前にある大量のテキスト前処理・一次分類のレイヤーを、コストの低いオープンモデルに置き換えていく、という役割分担が今のところしっくりきています。
今後試したいこと
- IR要約・決算説明会の文字起こしテキスト(別記事で扱ったScribe API連携の出力)を、ai& Inference経由でオープンモデルに要約させ、コストを比較する
- 複数エージェント(ニュース収集エージェント・分類エージェント・レポート生成エージェント)をオーケストレーションし、夜間バッチとして丸ごとオープンモデル側に寄せられるか検証する
- Qwen・GLMなど、まだ試せていないモデルでの日本語品質比較
まとめ
OpenAI/Anthropic互換という設計のおかげで、既存のPythonコードをほぼ変更せずに base_url の差し替えだけでオープンモデルに移行できました。単純な分類・要約タスクであれば、コストを抑えつつ実用的な精度が得られる印象で、「フラッグシップモデルを使うべき処理」と「オープンモデルで十分な処理」を切り分けて使い分ける、という設計の余地が広がったのが一番の収穫でした。
無料トライアル($50分、プロモーションコード unitabetai)で試せるので、既存のOpenAI/Claude活用ツールがある方は、まずbase_urlを1行変えてみるところから試してみることをおすすめします。
参考リンク
- ai& Inference 詳細: https://aiand.com/jp/inference
- コンソール(無料トライアル登録): https://console.aiand.com