https://venus.chub.ai 的包装器,用于使用本地 Python 脚本创建帐户并访问高级 LLM。
该脚本的目的是演示使用 Python 进行逆向工程的功能。该项目纯粹用于教育目的,属于 GPL-3 许可证。欲了解更多信息,您可以随时通过 [email protected] 与我联系。出于法律原因,请仔细阅读法律表
本自述文件适合初学者且分步说明。这个过程需要慢慢进行。
这个简单的项目利用了selenium
、 requests
等模块,并利用了站点的安全漏洞和不一致之处。添加 Cloudflare 也无济于事 - 我只需使用 nodriver 而不是 selenium
运行git clone https://github.com/Recentaly/Venus-Chub-Wrapper.git
通过在Venus-Chub-Wrapper目录中打开控制台并运行pip install -r requirements.txt
来安装依赖项
对于上下文,提供了一个示例脚本。该项目仅提供单独的代码片段来注册帐户、获取您的 Mars 令牌、登录等。您需要创建自己的main.py ,但此脚本将指导您完成此过程。 (更新:main.py 是意外传送的。不过这只是示例 2。它将被删除,但如果您一无所知,请随时检查提交日志)
首先,在项目的根目录中创建一个main.py。
注册只需要 2 次导入。查看下面并将它们复制到您的 main.py 中。第一个需要获取 Cloudflare 跨站请求伪造令牌,第二个是注册函数本身。
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 )
这会注册一个 Burner 帐户并复制来自 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
下的虚拟机器人,该代码将无法工作。但是,您可以在此处放置任何公共机器人的路线。我推荐一个轻型机器人,这样网络驱动程序就不需要处理大量的令牌流量。然后,网络驱动程序将登录、访问聊天并获取 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 函数发送两个请求 - 一个用于创建聊天资源,另一个create_chat
创建综合浏览量。
要使用 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 )
输出(注意:硒日志记录已被故意排除以防止泛洪。部分敏感信息已使用“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 密钥,我们可以与托管的法学硕士聊天。
进口产品为:
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 )