JA ▾
API キーを取得

フィルターなしAIコーダー:CursorとPythonでの使用方法

一部のコードリクエストは、主要なアシスタントから拒否や警告ラベルの対象になります:セキュリティツール、スクレイパー、リバースエンジニアリング、ラボ用のエクスプロイト解説など。ここでは、無検閲モデルをエディターやスクリプトに接続する方法と、そこから何を期待すべきかについて説明します。

更新日:

コードブロックが連結されたキューブに流れるアイソメトリックターミナル、無検閲コーディングAPIのイラスト

主要ポイント

  • エンドポイントはOpenAIチャット形式を使用するため、カスタムベースURLを受け付けるエディターやフレームワークで使用できます。
  • ツール呼び出し、JSONモード、ストリーミングがサポートされており、ほとんどのコーディングエージェントパターンに対応しています。
  • 100,000トークンのウィンドウは、1つのリクエストでリポジトリの大きな部分を収めるのに適しています。
  • これは汎用モデルであり、コード専用モデルではないため、まず独自のタスクでテストしてください。

フィルターなしコーダーとは何か、そして何ではないか

フィルターなしのAIコーダーは、あなたの理由を二重に確認することなくプログラミングリクエストに回答する言語モデルです。あなたが所有するネットワーク用のポートスキャナを書いている場合、ソースを失ったレガシーバイナリのデコンパイルを行っている場合、またはブラウザを模倣するスクレイパーを構築している場合、責任ある使用に関する段落ではなくコードが得られます。

このサービスが何であるかを正確に理解することが重要です。これは、合法な成人用途に対してコンテンツ拒否なしで回答するように調整された1つのオープンスウェイトモデルであり、独立したプロバイダによって実行されています。大手ベンダーの公式APIではなく、モデル間で選択するルータでもありません。モデルIDはuncensoredです。ベンチマークスコアに関する主張はありません。このサイトではそれらのスコアが公開されていないためです。拒否が少ないモデルが自動的に優れたプログラマーになるわけではないので、最初の1週間は評価として扱ってください。

合法な使用はあなたの責任です。このツールは、正当なセキュリティ作業、研究、および特殊なエンジニアリングの障壁を取り除きます。これは、所有していないシステムを攻撃するためのライセンスではありません。

Pythonまたはcurlから呼び出す

最も簡単なテストは単一のリクエストです。このPythonスクリプトは小さなツールを要求し、回答を出力します。

from openai import OpenAI

client = OpenAI(base_url="https://api.nofilterai.cc/v1", api_key="YOUR_KEY")

resp = client.chat.completions.create(
    model="uncensored",
    temperature=0.2,
    messages=[
        {"role": "system", "content": "You are a senior engineer. Reply with code first, then at most five lines of notes."},
        {"role": "user", "content": "Write a Python script that scans TCP ports 1-1024 on a host I own, using asyncio, with a 0.5 s timeout."},
    ],
)
print(resp.choices[0].message.content)

温度パラメータはコードに適しています。0.1から0.3の値はより安定した出力をもたらし、seedを使用すると、プロンプトを比較する際に実行を繰り返すことができます。シェルからの同じリクエストは次のようになります。

curl https://api.nofilterai.cc/v1/chat/completions \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "temperature": 0.2,
    "messages": [
      {"role": "user", "content": "Explain this regex and rewrite it without lookbehind: (?<=id=)\\d+"}
    ]
  }'

エンドポイントが公開している内容はGET /v1/modelsで一覧表示できます。APIキーのページからキーを取得してください。ワンクリックの試用クレジット$0.50は、何百もの小さなコーディングリクエストに十分です。

Cursorにセットアップする

Cursorではモデル設定でOpenAIのベースURLを上書きでき、これにより互換性のあるプロバイダーを指定できます。メニュー名はバージョンによって異なるため、ラベルよりも概念に従ってください。

  1. Cursorの設定を開き、モデルセクションを見つけます。
  2. OpenAI APIキーフィールドにキーを貼り付けます。
  3. OpenAIベースURLを上書きするオプションを有効にし、https://api.nofilterai.cc/v1を入力します。
  4. uncensoredという名前のカスタムモデルを追加し、チャットパネルで選択します。
  5. 複数のファイルにわたる編集を試す前に、小さなテストメッセージを送信してください。

Cursorや類似のエディタは、一部機能のために独自のサーバーを使用することがあり、一部の機能はカスタムモデルを受け付けない場合があります。機能に失敗した場合は、エンドポイントが壊れていると想定するのではなく、それがベンダー独自のモデルに依存しているかどうかを確認してください。カスタムモデルとのチャットが信頼できる部分です。

ContinueやAiderなど、OpenAI互換エンドポイントを受け付ける他のツールも、同じ3つの値(ベースURL、キー、モデル名)を使用します。

LangChainから使用する

LangChainのChatOpenAIクラスはbase_url引数を取るため、エンドポイントはカスタムラッパーなしでそのまま置き換え可能です。

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="uncensored",
    base_url="https://api.nofilterai.cc/v1",
    api_key="YOUR_KEY",
    temperature=0.2,
)

print(llm.invoke("Write a bash one-liner that lists the 10 largest files under /var/log.").content)

チェーン、プロンプトテンプレート、出力パーサーは、OpenAIスキーマに従う任意のチャットモデルと同じ方法で動作します。エージェントを構築する場合は、同時実行数の制限を覚えておいてください。フルキーは同時に8リクエスト、1分間に300リクエストを許可し、試用キーは2と60です。10個のツール呼び出しを並列に実行するエージェントは、追加のリクエストに対してHTTP 429とコードconcurrencyを受け取ります。ファンアウトを制限するか、短い遅延で再試行してください。

エージェントのためのツール呼び出しとJSONモード

コーディングエージェントは構造化された出力に依存します。APIはtools、tool_choice、ストリーミングされたtool_calls、およびrole: "tool"メッセージとして返されるツール結果をサポートしています。以下は、ファイルを読み取る関数を使用した最小限のリクエストとレスポンスの一連の処理です。

import json
from openai import OpenAI

client = OpenAI(base_url="https://api.nofilterai.cc/v1", api_key="YOUR_KEY")

tools = [{
    "type": "function",
    "function": {
        "name": "read_file",
        "description": "Read a UTF-8 text file from the project",
        "parameters": {
            "type": "object",
            "properties": {"path": {"type": "string"}},
            "required": ["path"],
        },
    },
}]

messages = [{"role": "user", "content": "Open main.py and tell me what it does."}]
first = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
call = first.choices[0].message.tool_calls[0]

messages.append(first.choices[0].message)
messages.append({
    "role": "tool",
    "tool_call_id": call.id,
    "content": open(json.loads(call.function.arguments)["path"]).read(),
})
final = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
print(final.choices[0].message.content)

モデルが何かを要求する前に、常に引数を検証してください。モデル由来のパス、シェル文字列、URLは、どのモデルが生成したかにかかわらず信頼できない入力です。

コードが解析する必要がある出力の場合、response_formatを{"type":"json_object"}に設定し、期待するキーをプロンプトで指定してください。JSONモードは返信を有効なJSONにしますが、スキーマチェックは依然としてコード内に行う必要があります。

コンテキストサイズとコーディング呼び出しのコスト

ウィンドウはプロンプトと返信合わせて100,000トークンです。大まかな目安として、これは複数のソースファイルを一度に保持できるため、要約する代わりに、モジュール、テスト、失敗したトレースバックを一度に貼り付けることができます。プロンプトが大きいほどコストがかかるため、質問に必要な分だけ送信してください。

価格は入力トークン1Mあたり$0.15、出力トークン1Mあたり$0.50です。例:

リクエスト入力出力コスト
関数を説明する1,500500$0.000225 + $0.00025 = $0.000475
テスト付きモジュールをレビューする30,0002,000$0.0045 + $0.001 = $0.0055
1日にそのようなレビューが200件6,000,000400,000$0.90 + $0.20 = $1.10
入力をウィンドウ全体として使用、1回の呼び出し100,0000$0.015

失敗または拒否されたリクエストは課金されません。クレジットは前払いで、期限切れにならず、チャージは$20から$500までの任意の整数額で実行され、$50からは5%、$100からは10%、$200からは15%のボーナスが付きます。支払いは暗号資産のみ:TRC20上のUSDTまたはBase上のUSDC。現在の利用規約については価格ページを参照してください。

実際の差分で機能するレビュープロンプト

大きなコンテキストウィンドウの最も良い使い方の一つがレビューです。「このコードは良いか」と尋ねる代わりに、差分とそれが影響するファイルを貼り付け、決まった形式で所見を求めてください。各項目がファイル名、行番号、問題点、および1行の修正を含む番号付きリストをリクエストし、空のリストも有効な回答であることを伝えてください。最後の指示が重要です:問題を発見するよう指示されたモデルは、あなたを喜ばせるために問題をでっちあげることがあります。

レビューには温度を0.2付近に保ってください。2回目の実行でも同じ指摘を得たいからです。継続的インテグレーションジョブでレビューを実行する場合は、seedを設定し、X-Request-Idヘッダーをログに記録して、後で驚くべき結果を追跡できるようにしてください。スクリプトが指摘を投稿する必要がある場合は、これをJSONモードと組み合わせ、file、line、severity、fixなどのキーを求めてください。

回答が間違っている場合または空の場合

失敗した実行の大部分は3つの問題に起因します。401エラーが発生した場合、API キーが不足しているか、ヘッダーが Authorization: Bearer で始まり、その後にあなたのキーが続いていません。エディタがモデルが存在しないと言う場合、名前が正確に uncensored であり、Base URL が余分なパスなしで /v1 で終わっていることを確認してください。コードはコンパイルされるが動作がおかしい場合、失敗した出力をモデルに与え、修正する前にエラーの説明を求めてください。診断後の修正は、見当違いの修正よりも小さく、安全になる傾向があります。

適している場所と適していない場所

他のアシスタントが拒否したり曖昧に答えたりするリクエストには無検閲エンドポイントを使用し、あなたにとってより良く機能する場合は通常のツールを維持してください。多くの開発者は2つのモデルを並行して実行し、各タスクを明確に回答する方に送信します。

  • 適切な用途:所有するシステム上のセキュリティラボ作業、スクレイピングと自動化スクリプト、ディフェンダー向けのマルウェア分析レポート、リバースエンジニアリングのノート、奇妙なデータ処理ジョブ。
  • 注意:生成されたコードにはエラーや発明されたライブラリ関数が含まれる場合があります。実行し、テストし、読んでください。
  • 提供していない機能:画像や音声の生成、埋め込み、ファインチューニング。これはテキストチャットエンドポイントのみです。
  • プライバシー: プロンプトはトレーニングに使用されません。これは、プロプライエタリなコードを貼り付ける場合に重要です。

リクエストあたりのボディサイズ制限は8 MBで、コンテキストウィンドウが処理できる量をはるかに超えています。レスポンスヘッダーにはX-Request-Id、X-Balance-USD、レート制限の値が含まれ、ログに役立ちます。ドキュメントには、渡されるすべてのパラメータが記載されています。

質問と回答

フィルターなしのAIコーダーは、他のモデルよりもプログラミングが得意ですか?

デフォルトではそうではありません。拒否が少ないことは、回答の内容が変わるだけで、コーディングの質が向上するわけではありません。信頼する前に、独自のタスクでテストしてください。

どのエディターやフレームワークと互換性がありますか?

カスタムOpenAI互換のベースURL、APIキー、モデル名を指定できるものならすべて対応します。Cursor、LangChain、公式OpenAI SDKが一般的な例です。

関数呼び出しに対応していますか?

はい。toolsやtool_choiceを受け付け、ストリーミング時を含めtool_callsを返します。結果はrole: toolメッセージとして受け取れます。JSON モードも利用可能です。

レート制限に達するとどうなりますか?

HTTP 429エラー(エラーコードはrate_limitedまたはconcurrency)が返されます。一時的な過負荷の場合、429レスポンスには5秒間のRetry-Afterヘッダーが含まれます。

キーはフォーム 1 つで手に入ります

アカウントを作成し、キーをコピーし、ベースURLを変更します。これでセットアップは完了です。