Search

ラベル ai の投稿を表示しています。 すべての投稿を表示
ラベル ai の投稿を表示しています。 すべての投稿を表示

2026/09/14

Agent Canvas 1.18.0でOpenRouterのモデル候補を増やす

Agent Canvas 1.18.0でOpenRouterのモデル候補を増やす

100%チャッピーまかせの記事です。
掲題の通りOpenRouterの特定のモデルが使えなかったので修正。
でも非公式なやり方です。
OpenHandsのライセンスと公式リポジトリは
https://github.com/OpenHands/OpenHands を参照してください。
---

Agent Canvas 1.18.0のモデル選択画面で、OpenRouterの候補を増やすためにフロントエンドのJavaScriptを2か所変更した記録です。

Dockerコンテナ名はopenhands、配置先は/opt/agent-canvas/frontend/assetsを想定。
コマンドはVPSへSSH接続したLinuxのシェルで実行してください。

注意:
これは配布済みの圧縮JavaScriptを直接書き換える非公式な方法です。ファイル名やコードが異なる版では自動的に停止します。コンテナの再作成・イメージ更新で変更が消える場合があります。


何を変更するか

  1. モデル一覧を問い合わせる箇所からlimit:100を取り除く。
  2. OpenRouterの公開モデルAPIをブラウザから取得し、既存の候補と重複を除いて結合する。

1点目は明示的な100件指定を削除する操作です。サーバー側の既定件数や画面側の制限まで解除できるとは限りません。2点目もモデル候補の表示を増やすだけで、利用可能性や料金、APIキーの設定を保証しません。

1. 対象ファイルを確認する

sudo docker exec openhands ls -l /opt/agent-canvas/frontend/assets/llm-settings-BuzF7Un3.js
sudo docker exec openhands ls -l '/opt/agent-canvas/frontend/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0x1wrp2-D_LC-b8J.js'

どちらかが存在しない場合、この手順は使えません。次へ進まないでください。

2. バックアップを作成し、構文を確認してから修正する

以下をひとまとまりでコピーします。既に修正済みなら再適用しません。コードが一致しない場合は変更前に停止します。

sudo docker exec -i -u root openhands python - <<'PYCODE'
from pathlib import Path
import subprocess

base = Path('/opt/agent-canvas/frontend/assets')
a = base / 'llm-settings-BuzF7Un3.js'
b = base / ('vendor~entry.client~root~root-layout~index-home~home~'
            'conversation-panel~conversation~launch~b0x1wrp2-D_LC-b8J.js')
old_a = '{provider__eq:e,limit:100,page_id:n}'
new_a = '{provider__eq:e,page_id:n}'
old_b = 'async getModels(e){return(await this.client.get(`/api/llm/models`,{params:e?{provider:e}:void 0})).data.models}'
new_b = '''async getModels(e){
const existing=(await this.client.get(`/api/llm/models`,{params:e?{provider:e}:void 0})).data.models;
if(e&&e!=="openrouter")return existing;
try{
const response=await fetch("https://openrouter.ai/api/v1/models");
if(!response.ok)throw new Error("OpenRouter models HTTP "+response.status);
const body=await response.json();
if(!Array.isArray(body.data))throw new Error("Invalid OpenRouter model list");
const additional=body.data.filter(m=>typeof m.id==="string").map(m=>"openrouter/"+m.id);
return [...new Set([...(existing??[]),...additional])];
}catch(error){
console.warn("OpenRouter model list fetch failed:",error);
return existing;
}
}'''

# すべての対象を先に検査し、両ファイルの構文を確認してから反映する。
changes = []
for path, old, new, suffix in (
    (a, old_a, new_a, '.before-model-limit'),
    (b, old_b, new_b, '.before-openrouter'),
):
    source = path.read_text()
    if source.count(old) == 1:
        backup = path.with_name(path.name + suffix)
        if backup.exists():
            raise SystemExit(f'{backup}: バックアップが既にあります。中身を確認してください。')
        changes.append((path, source, source.replace(old, new, 1), backup))
    elif old not in source and new in source:
        print(f'{path.name}: 適用済み')
    else:
        raise SystemExit(f'{path.name}: 対象コードが一致しません。変更せず終了します。')

for path, source, updated, backup in changes:
    # 一時ファイルを同じディレクトリに置き、反映前に node で構文検査する。
    staged = path.with_name(path.name + '.model-patch-check.js')
    try:
        staged.write_text(updated)
        subprocess.run(['node', '--check', str(staged)], check=True)
    finally:
        staged.unlink(missing_ok=True)

for path, source, updated, backup in changes:
    backup.write_text(source)
    path.write_text(updated)
    print(f'{path.name}: 修正しました(バックアップ: {backup.name})')
print('完了。実画面でもモデル候補を確認してください。')
PYCODE

エラーが出た場合は表示されたファイル名と内容を確認し、次の操作へ進まないでください。

3. 構文と画面を確認する

sudo docker exec openhands node --check /opt/agent-canvas/frontend/assets/llm-settings-BuzF7Un3.js
sudo docker exec openhands node --check '/opt/agent-canvas/frontend/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0x1wrp2-D_LC-b8J.js'

どちらも無表示で終了すれば、JavaScriptの構文検査は成功です。その後、Agent Canvasを再読み込みし、OpenRouterのモデル候補を検索してください。開発者ツールのConsoleにOpenRouter model list fetch failed:が出る場合は、ブラウザから公開APIへの取得に失敗しています。ブラウザの通信制限やCORSも確認してください。

必要なときだけsudo docker restart openhandsを実行します。ブラウザに古いファイルが残る場合は、開発者ツールを開いた状態でキャッシュを無効にして再読み込みします。

元に戻す方法

以下は、修正時に作成されたバックアップがあるファイルだけを復元します。復元後に再読み込みしてください。

sudo docker exec -i -u root openhands python - <<'PYCODE'
from pathlib import Path
base = Path('/opt/agent-canvas/frontend/assets')
for name, suffix in (
    ('llm-settings-BuzF7Un3.js', '.before-model-limit'),
    ('vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0x1wrp2-D_LC-b8J.js', '.before-openrouter'),
):
    path = base / name
    backup = path.with_name(name + suffix)
    if backup.exists():
        path.write_bytes(backup.read_bytes())
        print('復元:', name)
    else:
        print('バックアップなし:', name)
PYCODE

補足

OpenRouterのモデルAPIはdata配列にモデルのidを返します。このコードは各IDの先頭にopenrouter/を付けています。APIに新しいモデルが掲載されても、そのモデルをAgent Canvasのバックエンドが実際に利用できるかは別途確認が必要です。

参考:OpenRouterの公開モデルAPI



2026/06/25

USD12払えば無料枠が1000リクエスト/日で案外使えるOpenRouterのレビュー

AIのことなのに文章にAI使っていないので、読みづらかったらすみません。
APIでのAIツールOpenRouterのご紹介&無料枠のレビュー。

OpenRouterには無料で使えるものあります。
無課金だと50リクエスト/日であまり使えないですが、
USD10以上のクレジットを買うと、1,000リクエスト/日まで増えます。
結構使えます。
VsCodeの拡張機能CLINEを使って数日間いろいろやってみた感想を書いていきます。

結論
基本的には制限が厳しいので全部作って系のバイブコーディングには使えません。
しかし、それなりに使えるので、CodexやClaude Codeの制限を抑えるための補助ツールとしていいかも、です。
メインにするには制限が強すぎて、途中で止まるのが多い。
案外使えるので、少人数で1時間に10回のリクエストをAPIで使うとか、
OCRするとか、文章要約には便利。
アプリへの組み込みも使えるな、と思います。

問題点
1)制限かかってすぐに停止する。対処必須。
2)利用規約に一部のデータ保存とあるので情報流出の危険があるのかも。

使えそうなモデル
下記ですが2026/06/25現在のもので、入替えがあります。
cohere/north-mini-code:free                       
nvidia/nemotron-3.5-content-safety:free           
nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free
nvidia/nemotron-3-nano-30b-a3b:free               
poolside/laguna-xs.2:free                         
poolside/laguna-m.1:free                          
google/gemma-4-31b-it:free                        
nvidia/nemotron-3-super-120b-a12b:free            
liquid/lfm-2.5-1.2b-instruct:free                 
openai/gpt-oss-120b:free                          
openai/gpt-oss-20b:free                           

おすすめモデル
openai/gpt-oss-20b:free、google/gemma-4-31b-it:freeが標準的で安定した出力で使えます。
cohere/north-mini-code:freeがコーディングではいいかもな感触です。

といっても・・・
Groqの無料枠を使ってしまいます。
無課金でもOKだし、FreeTier枠が案外大きい。
ほかサービスと比較して速度がとっても速い!
(推測でしかありませんが、無課金の無料枠なのでデータ流出もある程度は許容しながらのものではないかと思います。)
Groqのレビューは下記↓
https://nokoshitamono.blogspot.com/2026/02/whisperllm0ai-apigroq-cloud20262.html


最後の感想
AIは従量課金が拡大していくサービスですが、便利なので安く使いたい。
そういう用途ならOpenRouterも一つの選択肢だと思います。
ただし、無料なのでいつ終了するのか分かりません。
でも、何かのサービスでこういう課金+無料枠のサービスは続いていくのではと思います。
そう入ってもコーディングではClaudeが圧倒して強いな、と思います。


勝手におすすめの本
必須ではないですが、ゲーム開発するならこの本読むと深い理解に繋がる。
そして、ホイジンガのホモ・ルーデンスも読みたくなる。
(ホモ・ルーデンスまで読まなくてもいいと思う。
時間は逆ですが、カイヨワを先にがわかりやすい)






[

2026/02/23

WhisperもLLMも無料で試せる?0円でAI APIを使う方法:Groq Cloud無料枠の簡単レビュー 2026年2月版

Groq Cloudは無料で使える?実際にAPIを試してわかった無料枠と制限まとめ

AI APIは便利ですが、気になるのは料金です。

OpenAIやAnthropicは従量課金制。
テスト段階ではできるだけコストを抑えたいものです。

そこで試してみたのが「Groq Cloudの無料枠(Free Tier)」です。
https://groq.com/

今回は、実際にAPIを使ってみた経験をもとに、

  • 無料枠の内容
  • どこまで実用的か
  • 制限は厳しいのか

を整理します。

目次の前にさらっと結論!
1:APIなので低スペックPCでも使える。便利
2:テストでやってみるなら全然OK
3:0円で使えるので消費量みて従量のコストが体感できる。怖くない
4:OpenAI形式なので汎用性のあるAPIが覚えられる
5:使ってみるとgeminiよりも応答の速いGroqすごいと思う
6:whisperでも応答が速い。Groqすごい
7:Groqの従量課金は高くないのでGroq使い勝手いいかも
8:調子にのって使っていると制限で使えなくなる

テスト環境はCPUは10世代のIntel+メモリ16GBの5万くらいの中古ノート
アマゾンならこういうの>https://amzn.to/3MTlDUd
ちゃんと動く。
PCではPowershellでURLアクセスとテキスト処理のみ。

もう少ししっかりテストするなら10万以下のこういうので↓いいと思う。
GROQのAPI運用ならローカルのスペックはそんなにいらない。
メモリ16GBでいいと思う。



Groqは応答速度が非常に速い。でも、OpenAIのgpt-5-nanoはかなりコストが安い。
gpt-5-nanoでも十分ならOpenAIでいいのかも。nanoでも精度は良い。

https://developers.openai.com/api/docs/pricing
gpt-5-nano $0.05/1M-input $0.40/1M-Output
(↑1Mトークンでどこまでやれるの?の体感をGroqで試してみてもいいかも。)
(llama-3.3-70b-versatile、gpt-oss-120bで、GPT-4に足りないくらいの精度らしい)

Groq Cloudとは

Groq Cloudは、高速推論に特化したAI APIサービスです。

対応モデルには以下のようなものがあります。

  • Llama系モデル
  • Whisper(音声文字起こし)
  • Vision対応モデル

特に特徴的なのは、推論速度の速さです。

体感としては、他のAPIよりもレスポンスが非常に速い印象があります。
開発時のストレスが少ないのは大きな利点です。

無料枠(Free Tier)の内容

2026年2月時点での無料枠の概要は以下の通りです。
多くはないですが試験するには十分と思います。

Groq Free Tier Limits
Model RPM RPD TPM TPD
allam-2-7b307K6K500K
groq/compound3025070KNo limit
groq/compound-mini3025070KNo limit
llama-3.1-8b-instant3014.4K6K500K
llama-3.3-70b-versatile301K12K100K
meta-llama/llama-4-maverick-17b-128e-instruct301K6K500K
meta-llama/llama-4-scout-17b-16e-instruct301K30K500K
meta-llama/llama-guard-4-12b3014.4K15K500K
meta-llama/llama-prompt-guard-2-22m3014.4K15K500K
meta-llama/llama-prompt-guard-2-86m3014.4K15K500K
moonshotai/kimi-k2-instruct601K10K300K
moonshotai/kimi-k2-instruct-0905601K10K300K
openai/gpt-oss-120b301K8K200K
openai/gpt-oss-20b301K8K200K
openai/gpt-oss-safeguard-20b301K8K200K
qwen/qwen3-32b601K6K500K
Token Cost Comparison (1M tokens)
Model Input (1M) Output (1M)
OPENAI gpt-5-nano $0.05 $0.40
Groq GPT OSS 120B 128k $0.15 $0.60
Model Capabilities
Model テキスト 画像 特長
allam-2-7b○×軽量高速
groq/compound○×複合推論
groq/compound-mini○×軽量複合
llama-3.1-8b-instant○×超高速
llama-3.3-70b-versatile○×高精度
meta-llama/llama-4-maverick-17b-128e-instruct○○視覚対応
meta-llama/llama-4-scout-17b-16e-instruct○○視覚高速
meta-llama/llama-guard-4-12b○×安全判定
meta-llama/llama-prompt-guard-2-22m○×入力検査
meta-llama/llama-prompt-guard-2-86m○×高精検査
moonshotai/kimi-k2-instruct○×長文強い
moonshotai/kimi-k2-instruct-0905○×改良版
openai/gpt-oss-120b○×大規模
openai/gpt-oss-20b○×軽量版
openai/gpt-oss-safeguard-20b○×安全特化
qwen/qwen3-32b○×多言語

リクエスト制限

多くのモデルで 30リクエスト/分(RPM)

1日のリクエスト上限

モデルごとに異なります。

例:

  • llama-3.1-8b-instant → 約14,000回/日
  • llama-3.3-70b → 約1,000回/日

トークン制限

  • 1分あたり 6,000〜70,000トークン(モデルによる)
  • 1日あたり 100,000〜500,000トークン(モデルによる)

Whisper(音声API)

音声処理には時間ベースの制限があります。

例:

  • 1時間あたり 約120分の音声処理
  • 1日あたり 約8時間分

実際に使ってみた感想

テキスト処理

ブログ整形、OCR結果の整形、要約などは十分実用的です。
無料枠でも日常的なテスト用途には問題ありません。

Whisper文字起こし

2時間を超えるm4aファイルも、分割すれば対応可能です。
業務テスト用途としては十分な性能です。

注意点

  • 商用利用する場合は必ず利用規約を確認すること
  • 無料枠は予告なく変更される可能性があること
  • 同時実行数には制限があること

無料枠は実用レベルか

結論としては、開発・検証用途なら十分実用レベルです。

特に以下の用途には向いています。

  • OCR後のテキスト整形
  • Whisper文字起こし
  • 社内ツール開発
  • 小規模な自動化

本格運用の前段階としては非常に使いやすいサービスです。

まとめ

Groq Cloudは、無料枠でも十分に実用的なAI APIサービスです。

開発段階で従量課金を避けたい場合や、 まずは試してみたいという方には特におすすめできます。

といっても、OpenAIのAPIもとても高額な料金ではないので、 まずはやってみたい方ならいいかも。
Groqの反応速度は使い勝手よしです。


さらっとテストコード

<#
Get-Weather-Groq.ps1
- Open-Meteoで今日の天気(実データ)を取得
- Groq (llama-3.3-70b-versatile) に渡して「詳しく説明」させる
必要:
  $env:GROQ_API_KEY にAPIキーを設定
例:
  $env:GROQ_API_KEY="gsk_...."
  .\Get-Weather-Groq.ps1 -City "東京" -Language "ja"
#>

param(
  [Parameter(Mandatory=$false)][string]$City = "東京",
  [Parameter(Mandatory=$false)][string]$Language = "ja",
  [Parameter(Mandatory=$false)][string]$Timezone = "Asia/Tokyo",
  [Parameter(Mandatory=$false)][string]$Model = "llama-3.3-70b-versatile"
)

$ErrorActionPreference = "Stop"

# --- 0) Groq API Key ---
$apiKey = $env:GROQ_API_KEY
if ([string]::IsNullOrWhiteSpace($apiKey)) {
  throw "環境変数 GROQ_API_KEY が未設定です。例: `$env:GROQ_API_KEY='gsk_...'`"
}

# --- 1) 都市名 -> 緯度経度(Open-Meteo Geocoding) ---
$geoUrl = "https://geocoding-api.open-meteo.com/v1/search?name=$([uri]::EscapeDataString($City))&count=1&language=$Language&format=json"
$geo = Invoke-RestMethod -Uri $geoUrl -Method Get

if (-not $geo.results -or $geo.results.Count -eq 0) {
  throw "都市 '$City' の緯度経度が見つかりませんでした。別の表記で試してください。"
}

$place = $geo.results[0]
$lat = $place.latitude
$lon = $place.longitude
$resolvedName = $place.name
$admin = @($place.admin1, $place.country) -join ", "

# --- 2) 今日の天気(Open-Meteo Forecast) ---
# 取得項目(必要なら増やしてOK)
$meteoUrl = "https://api.open-meteo.com/v1/forecast" +
  "?latitude=$lat&longitude=$lon" +
  "&timezone=$([uri]::EscapeDataString($Timezone))" +
  "&forecast_days=1" +
  "&hourly=temperature_2m,apparent_temperature,precipitation_probability,precipitation,weathercode,windspeed_10m,windgusts_10m,winddirection_10m,relativehumidity_2m" +
  "&daily=weathercode,temperature_2m_max,temperature_2m_min,precipitation_sum,precipitation_probability_max,windspeed_10m_max,windgusts_10m_max,sunrise,sunset"

$wx = Invoke-RestMethod -Uri $meteoUrl -Method Get

# --- 3) Groq に「今日の天気を詳しく」説明させる ---
$today = (Get-Date).ToString("yyyy-MM-dd")
$system = @"
あなたは日本の天気解説の専門家です。
ユーザーが提供する天気APIのJSON(Open-Meteo)を根拠に、推測で補完せず、データに基づいて「今日の天気」を詳しく説明してください。
出力は日本語。読みやすい箇条書き中心。最後に「外出アドバイス」を短く付けてください。
"@

$user = @"
場所: $resolvedName ($admin)
日付: $today
次のOpen-Meteo JSONを解析して、今日の天気を詳しく解説してください。

--- OPEN-METEO JSON ---
$($wx | ConvertTo-Json -Depth 12)
"@

$endpoint = "https://api.groq.com/openai/v1/chat/completions"

$body = @{
  model = $Model
  messages = @(
    @{ role="system"; content=$system },
    @{ role="user"; content=$user }
  )
  temperature = 0.2
  top_p = 1
  max_tokens = 1200
} | ConvertTo-Json -Depth 10

$headers = @{
  "Authorization" = "Bearer $apiKey"
  "Content-Type"  = "application/json"
}

$res = Invoke-RestMethod -Method Post -Uri $endpoint -Headers $headers -Body $body
$text = $res.choices[0].message.content

# --- 4) 表示 ---
"=== 今日の天気(Groq解説)==="
$text

ページ上部へ戻る

2025/08/21

LM STUDIOで6GBのGPUでもそれなりに動くものテスト 

WindowsのLM STUDIOで動作テスト
GPUは6GBです。
2025/08/21にやりました。

Qwenの4Bモデルが低スペックでも動く情報多いのでやってみました。



1:Qwen3 4B 2507
https://huggingface.co/Qwen/Qwen3-4B

2:Jan V1 4B
https://huggingface.co/janhq/Jan-v1-4B

3:gemma-3n-e4b
https://huggingface.co/google/gemma-3n-E4B

■こんにちは、と聞いたり、文章書いてまとめてをお願いしたとき。

1:Qwen3 4B 2507
レスポンス早い。
文章いれてまとめてなど使えるレベル。
これなら使っていいかもと思う。

2:Jan V1 4B
レスポンス良いが、
必ずthinkingモードに入るのでパラメータ間違ったかも。
(Qwen3が元なので性能同じなの?)

3:gemma-3n-e4b
Qwen3と同じく。
とても早い。


■MCPにDuckDuckGoのAPIを設定したとき
今日の東京の天気は? の返答


1:Qwen3 4B 2507
レスポンス早い。
公開しているウェブを教えてくれただけ。

2:Jan V1 4B
たくさん検索し直して、回答短い。
パラメータの影響。

3:gemma-3-270m
回答得られず。
うまくいくときありので質問が悪い?




-------
qwen/qwen3-4b-2507
search
({"query":"今日の東京の天気","max_results":1}…})

mcp/ddg-search





今日の東京の天気については、日本気象協会のサイトで詳細な情報が見られます。

以下のリンクから、東京都の今日の天気(気温、降水確率、その他)を確認できます:

👉 


ただし、この回答では具体的な天気(例:晴れ、雨など)や気温の数値は提供できておりません。実際の天気を知るためには、上記のリンクをご確認ください。
-------

-------
jan-v1-4b
Thought for 2.94 seconds






search
({"query":"Tokyo today weather forecast","max_resul…})

mcp/ddg-search






Thought for 7.14 seconds















search
({"query":"Tokyo today weather forecast The Weather…})

mcp/ddg-search






Thought for 4.83 seconds










search
({"query":"Tokyo weather today forecast real time",…})

mcp/ddg-search






Thought for 3.70 seconds








search
({"query":"japanweather.org/tokyo real time weather…})

mcp/ddg-search





Thought for 4.17 seconds








search
({"query":"japanweather.org/tokyo current weather",…})

mcp/ddg-search





Thought for 4.40 seconds







search
({"query":"japanweather.org/tokyo today weather tem…})

mcp/ddg-search





Thought for 3.25 seconds







search
({"query":"japanweather.org/tokyo real time temp no…})

mcp/ddg-search





Thought for 2.43 seconds





search
({"query":"japanweather.org/tokyo now temperature",…})

mcp/ddg-search





Thought for 2.67 seconds







search
({"query":"japanweather.org/tokyo current temperatu…})

mcp/ddg-search





Thought for 3.50 seconds






search
({"query":"東京の現在の天気","max_results":1}…})

mcp/ddg-search





Thought for 3.82 seconds






search
({"query":"東京 天気 2023-10-05","max_results":1}…})

mcp/ddg-search





Thought for 4.00 seconds





search
({"query":"東京の現在の天気 2024-10-05","max_results":1}…})

mcp/ddg-search





Thought for 3.41 seconds





search
({"query":"東京 10月 天気予報","max_results":1}…})

mcp/ddg-search





Thought for 3.57 seconds






search
({"query":"2024-10-05 東京 天気","max_results":1}…})

mcp/ddg-search





Thought for 2.16 seconds




東京の今日の天気は、曇りで午前18度、午後23度と予想されます。気温差が大きいので、体調管理に注意してください。
-------

-------
google/gemma-3n-e4b
search
({"query":"今日の東京の天気"}…})

mcp/ddg-search




I'm sorry, I was unable to find the weather for today in Tokyo. The search query returned no results. I cannot fulfill your request at this time.
-------


「LM StudioのddgのMCPの設定方法」
Pythonがインストールしてある状態で下記をpowershellにて。

py -m pip install uv
py -m pip install uvx
py -m pip install duckduckgo-mcp-server
py -m duckduckgo_mcp_server


LM Studio → 右ペイン Program → Install > Edit mcp.json を開き、次を追加して保存:
{
  "mcpServers": {
    "ddg-search": {
      "command": "uvx",
      "args": ["duckduckgo-mcp-server"]
    }
  }
}

チャットの窓でddg-seachをチェックして青色にする