ローカルの Python スクリプトを使用してアカウントを作成し、プレミアム LLM にアクセスするための https://venus.chub.ai のラッパー。
このスクリプトの目的は、Python を使用したリバース エンジニアリングの機能を実証することです。このプロジェクトは純粋に教育目的であり、GPL-3 ライセンスに該当します。詳細については、いつでも[email protected]までご連絡ください。法的理由により、法的シートをよくお読みください。
この README は初心者向けで、ステップごとに説明されています。プロセスはゆっくりと進みます。
この単純なプロジェクトは、 selenium
、 requests
などのモジュールを利用し、サイトのセキュリティの脆弱性や不整合を少し悪用します。 Cloudflareを追加しても役に立ちません - Seleniumの代わりにnodriverを使用するだけです
git clone https://github.com/Recentaly/Venus-Chub-Wrapper.git
Venus-Chub-Wrapperディレクトリでコンソールを開き、 pip install -r requirements.txt
を実行して、依存関係をインストールします。
コンテキストのために、サンプル スクリプトが提供されています。このプロジェクトでは、アカウントの登録、 Mars Token の取得、ログインなどを行うための個別のコード スニペットのみが同梱されています。独自のmain.pyを作成する必要がありますが、このスクリプトがそのプロセスをガイドします。 (追記: main.py が誤って同梱されていました。ただし、これは単なる例 2 です。削除される予定ですが、あまりにも無知な場合はコミット ログを確認してください)
まず、プロジェクトのルートにmain.py を作成します。
登録には 2 つのインポートのみが必要です。以下を参照して、これらを main.py にコピーします。 1 つ目は Cloudflare クロスサイト リクエスト フォージェリ トークンを取得するために必要で、2 つ目は登録関数自体です。
from assets . scripts . webdriver . csrf_cookie import get_csrf_cookie
from assets . scripts . register import register
(オプション)
from assets . scripts import make_fake_mail , make_fake_password , make_fake_username
make_fake_mail
: 最後に UUIDv4 + "@gmail.com" を返します。
make_fake_password
: 大文字の I + UUIDv4 + "!" を返します。 (パスワード基準を満たすため)
make_fake_username
: 単純に UUIDv4 文字列を返します。
これが最初のセキュリティ上の欠陥です。未検証の電子メール アドレスは、完全に作成されたもの (例: [email protected]) であっても許可され、無料の API クレジットを取得できます。
コードを実行する方法の例を次に示します。
from assets . scripts . webdriver . csrf_cookie import get_csrf_cookie
from assets . scripts . register import register
# get csrf token
__csrf_token : str = get_csrf_cookie ()
# register
register_response = register ( fake_email , fake_password , fake_username , fake_username , __csrf_token )
これにより、バーナー アカウントが登録され、Chub API からの応答がコピーされます。 register_response
の形式の例を次に示します。
{
"git_id" : 73017801 ,
"samwise" : " 2949skqo-901d-4f87-b22b-7c9b03221baf " ,
"username" : " ihatechildren "
}
私たちが必要とする唯一の本当に重要なオブジェクトはsamwise
トークンです。認証に使用されます。
ログインは比較的簡単ですが、ほとんどの場合は必要ありません。次のモジュールをインポートします。
from assets . scripts . webdriver . csrf_cookie import get_csrf_cookie
from assets . scripts . login import login
ログインするには、次のパラメータを準備する必要があります。
get_csrf_cookie()
を呼び出して取得します。次に、ログイン関数を呼び出します
login_response = login ( csrf_cookie , email , password )
例として、結果の出力形式を次に示します。
{
"git_id" : 73017801 ,
"samwise" : " 2949skqo-901d-4f87-b22b-7c9b03221baf " ,
"subscription" : 0 ,
"username" : " guatemalafan45 "
}
既存のアカウントをお持ちの場合は、これを使用して重要なsamwise
トークンを取得します。
次に、ダミーチャットを設定する必要があります。チャットを開始するために使用するボットをすでに作成しました。ユーザーがチャットを開始するまで API キーは初期化されないため、チャットを開始する必要があります。エンドポイントcomposed_view_3402/reference-endpoint-4dbc6dbef1b4
の下にあるダミーボットが削除された場合、コードは機能しません。ただし、任意のパブリック ボットのルートをここに置くことができます。 Webdriver が大量のトークン トラフィックを処理する必要がないように、軽量のボットをお勧めします。その後、ウェブドライバーがログインし、チャットにアクセスして API キーを取得してから、すぐに終了します。
輸入品:
from assets . scripts . create_chat import create_chat
関数を実行します。できれば登録後。スニペットの例を次に示します。
from assets . scripts . register import register
from assets . scripts . webdriver . csrf_cookie import get_csrf_cookie
from assets . scripts . create_chat import create_chat
__csrf_cookie = get_csrf_cookie ()
# register
register_response = register ( fake_email , fake_password , fake_username , fake_username , __csrf_cookie )
# make new chat
chat_id : int = create_chat ( register_response [ "samwise" ])
create_chat
メソッドには、登録またはログインで取得したsamwise
トークンが必要です。 create_chat
関数は 2 つのリクエストを送信します。1 つはチャット リソースの作成で、もう 1 つはページビューです。
Burner アカウントまたは既存のアカウントを使用して Mars または Mercury LLM とチャットするには、API キーを取得する必要があります。幸いなことに、 get_mars_token
関数がこれを行ってくれます。 「get_mars_token」という名前ですが、このトークンはすべてのモデルで使用できます。
まず、必要なモジュールをインポートします
from assets . scripts . webdriver . mars_token import get_mars_token
次に、次のように関数を呼び出してトークンを取得します。
# get mars token for chat
MARS_TOKEN : str = get_mars_token ( fake_email , fake_password , chat_id )
Webdriver プロセスは、シャットダウンしない限り生き続けます。それ用の機能もあります。
次の方法でインポートします。
from assets . scripts . webdriver import close_driver
次に、関数close_driver
呼び出します。 API キーを取得した後にこれを実行してください。
API キーを取得するための完全なコードの例を次に示します。
from assets . scripts . webdriver . mars_token import get_mars_token
from assets . scripts . webdriver . csrf_cookie import get_csrf_cookie
from assets . scripts . webdriver import close_driver
from assets . scripts . register import register
from assets . scripts . login import login
from assets . scripts . API . Chat import chat
from assets . scripts . API . parse_helper import parse_for_content
from assets . scripts . create_chat import create_chat
from assets . scripts import make_fake_mail , make_fake_password , make_fake_username
fake_username : str = make_fake_username ()
fake_email : str = make_fake_mail ()
fake_password : str = make_fake_password ()
# get csrf token
__csrf_token : str = get_csrf_cookie ()
# register
register_response = register ( fake_email , fake_password , fake_username , fake_username , __csrf_token )
# make new chat
chat_id : int = create_chat ( register_response [ "samwise" ])
# get mars token for chat
MARS_TOKEN : str = get_mars_token ( fake_email , fake_password , chat_id )
# close the webdriver
close_driver ()
print ( MARS_TOKEN )
出力 (注: Selenium のログはフラッディングのために意図的に省略されています。機密情報の一部は「x」を使用して編集されています。)
[...]
2024-06-15 23:16:07,554 - root - INFO - Registering with email: [email protected], password: I5ba08d2cc5exxxxxxxxxxxxxxxxxxxxx ! , username: 6b8d861390944f0f9f00d7478993eef5, name: 6b8d861390944f0f9f00d7478993eef5
[...]
CHK-2STMC397I00589C0Q5X6Uxxxxxxxxxxxxxxxxxxxxxxxxxx
60 個の無料リクエストを含む (バーナー) API キーを取得したので、ホストされている LLM とチャットできます。
インポートは次のとおりです。
from assets . scripts . API . Chat import chat
(オプション - ストリーミングに推奨)
from assets . scripts . API . parse_helper import parse_for_content
オプションのモジュールは、イベント ストリーム チャンクからトークンを抽出できます。これは、手動で行う必要がなく、常に受信ストリームから単語を解析するのに適しています。
チャット通話の例を次に示します。
for chunk in chat (
MARS_TOKEN , # you need to get your API key first as well.
[
{
"role" : "system" ,
"content" : "You're a helpful assistant."
},
{
"role" : "user" ,
"content" : "Yo."
}
],
model = "mixtral" , # model choices: mixtral, mistral, mobile, asha, mythomax
max_tokens = 100 , # goes from 0 to 2048 -> 0 for unlimited.
):
print ( parse_for_content ( chunk ), end = '' , flush = True )
出力:
I'm a web developer from the UK. I have recently got into Ruby on Rails and find it to be an excellent framework (which is why i am here!).
I don't really know what else to say but if there is anything in particular you would like to know about me then please just ask.
I look forward to getting to know some of you!
ええ、くだらない話をしています。まあ、これらのモデルはとにかく RP 調整されているので、プロンプトを試してみてください。私個人としてはどうすることもできませんが、モデルを ChatGPT のようなアシスタントのペルソナに滑り込ませるだけで十分です。それでうまくいけばうまくいきます。
chat
機能は次のパラメーターを受け取ります。
CH_API_KEY : str , # your API key
messages : List [ Dict [ str , str ] ] , # A list of messages in OpenAI format.
model : str , # model choices: mixtral, mistral, mobile, asha, mythomax
max_tokens : int = 250 , # the maximum tokens to generate. Goes up to 2048 (Unconfirmed)
temperature : float = 0.8 , # the randomness of the generation. 0-2
top_p : float = 0.99 , # helps balance between being predictable and being creative by controlling how big a piece of the "word pie" I can choose from. (explained like a child)
frequency_penalty : float = 1 , # ranges from (-2) to (2)
presence_penalty : float = 1 , # ranges from (-2) to (2)
stream : bool = True , # recommended to keep it at True. False seems to be buggy mostly.
stop : List [ str ] = [ 'USER:' , '#' , '[' ] # stopping sequences. If you use this for RP, add your username as an element in the stopping sequences.
補足された関数を使用して解析しない場合のチャンク形式は次のとおりです。
data: {"id": "459e62e9-bb18-423f-9403-079cdd9c597a", "object": "chat.completion", "created": "26", "model": "mixtral", "choices": [{"delta": {"content": "<a token will appear here>"}
最後のチャンク:
data: [DONE]
from assets . scripts . webdriver . mars_token import get_mars_token
from assets . scripts . webdriver . csrf_cookie import get_csrf_cookie
from assets . scripts . webdriver import close_driver
from assets . scripts . register import register
from assets . scripts . API . Chat import chat
from assets . scripts . API . parse_helper import parse_for_content
from assets . scripts . create_chat import create_chat
from assets . scripts import make_fake_mail , make_fake_password , make_fake_username
fake_username : str = make_fake_username ()
fake_email : str = make_fake_mail ()
fake_password : str = make_fake_password ()
# get csrf token
__csrf_token : str = get_csrf_cookie ()
# register
register_response = register ( fake_email , fake_password , fake_username , fake_username , __csrf_token )
# make new chat
chat_id : int = create_chat ( register_response [ "samwise" ])
# get mars token for chat
MARS_TOKEN : str = get_mars_token ( fake_email , fake_password , chat_id )
# close the webdriver
close_driver ()
# chat with mars
for chunk in chat (
MARS_TOKEN ,
[
{
"role" : "system" ,
"content" : "You're a helpful assistant."
},
{
"role" : "user" ,
"content" : "Yo. Say hi please."
}
],
model = "mixtral" ,
max_tokens = 100 ,
):
print ( parse_for_content ( chunk ), end = '' , flush = True )