
0dAPI Официальная документация
Начинаем!
pip install zerodai==0.0.0.20
export zerodapi_key="TU_API_KEY"
Получите свой api key https://zerodai.com Простой разговорный чат - без памяти
from zerodai import zerodai
import os
zerodai.api_auth(os.getenv("zerodapi_key"))
messages = []
while True:
prompt = input("> ")
if prompt == "exit":
break
messages.append({"role": "user", "content": prompt})
messages.append({"role": "system", "content": "Eres 0dAI un asistente de ciberseguridad cuya unica función es..."})
zerodai.inference(model="0dai70b", messages=messages, temperature=0.7, stream=True)
Zerodai — это библиотека обработки естественного языка, ориентированная на кибербезопасность, которая стремится частично автоматизировать процессы, основанные на человеческой обработке информации, рассуждении, планировании и выполнении. Мы стремимся создать фреймворк агентов для кибербезопасности со следующими возможностями:
Это основной метод взаимодействия с моделью, который имеет следующие параметры. Важно хорошо изучить и понять эти параметры, так как они являются основой библиотеки.
model: Языковая модель для использования. Доступные модели:
0dai7b: Базовая модель с неограниченным использованием, быстрая, отлично подходит для простых разговоров и помощи в программировании. Хорошо справляется с задачами кибербезопасности.
0dai8x7b: Гибкая модель с большим окном контекста, на уровне GPT-4 в коде, хороша для сложных вопросов и сценариев кибербезопасности.
0daifn: Рекомендуемая модель для function calls, лучшая в этой области, много контекста, легче чем 0dai70b, а также по многошаговым function calls на уровне лучшего GPT.
0dai70b (Рекомендуется): В настоящее время SOTA в кибербезопасности, способен выполнять сложные логические рассуждения на основе большого контекста и полуавтономно решать задачи пентеста. Имеет function calls и может отвечать структурированными сообщениями. Самый медленный, но предлагает огромный скачок качества.
messages: Сообщения, которые будут отправлены модели. Здесь необходимо понять 3 роли:
Сообщения должны быть в этом формате:
messages = [
{"role": "system", "content": """Eres 0dAI tu función es..."""},
{"role": "user", "content": "0dAI escribe un exploit en C"},
]
functions: Функции, которые могут быть вызваны во время взаимодействия. Мы подробнее рассмотрим функции в разделе fn_c. В данном случае это просто даст нам JSON.
Функция объявляется так:
function_shodan = [ {
"name": "shodan_dork",
"description": "This tools is used to generate a shodan query",
"parameter_definitions": {
"dork": {
"type": "string",
"description": "The shodan dork",
"required": True
}
}
}, ]
temperature: Управляет случайностью ответов модели. Чем выше температура, тем больше случайности; чем ниже, тем меньше случайности.
stream (bool): Следует ли передавать ответ в реальном времени.
from zerodai import zerodai
messages = []
messages.append({"role": "user", "content": prompt})
messages.append({"role": "system", "content": "Eres 0dAI un asistente de ciberseguridad cuya unica función es..."})
zerodai.inference(model="0dai70b", messages=messages, temperature=0.7, stream=True)
На основе функции или списка функций в параметре function Модель сможет сгенерировать структурированный ответ, который может быть полезен после инференса: Базовая функция
function_shodan = [ {
"name": "shodan_dork",
"description": "This tools is used to generate a shodan query",
"parameter_definitions": {
"dork": {
"type": "string",
"description": "The shodan dork",
"required": True
}
}
}, ]
Ответ модели на основе этой функции
[
{
"tool_name": "shodan_dork",
"parameters": {
"dork": "hacked-router-help-sos"
}
}
]
Эти функции могут быть как многошаговыми, так и нет; это определяется количеством позиций в JSON. Многошаговый ответ выглядит так:
[
{
"tool_name": "shodan_dork",
"parameters": {
"dork": "hacked-router-help-sos"
}
},
{
"tool_name": "shodan_dork",
"parameters": {
"dork": "\"smb\" \"authentication: disabled\""
}
},
{
"tool_name": "shodan_dork",
"parameters": {
"dork": ".docuword_exploited.txt"
}
}
]
Также может существовать рекурсивная логика, где инференс и функция взаимно дополняют друг друга. Представим такой случай:
Функция subdominios (субдомены)
funcion_subdomains = [ {
"name": "subdominios",
"description": "This tools is used to collect domains to extract subdomains",
"parameter_definitions": {
"domain": {
"type": "string",
"description": "The domain",
"required": True
}
}
}, ]
Функция crawler (краулер)
crawler_endpoints = [ {
"name": "crawler",
"description": "This tools is used to crawle ndpoints for a host",
"parameter_definitions": {
"host": {
"type": "string",
"description": "The domain",
"required": True
}
}
}, ]
Input:
Нужно получить субдомены openai.com и omegaai.io
Output 1. Функция:
[
{
"tool_name": "subdomains",
"parameters": {
"domain": "openai.com"
}
},
{
"tool_name": "subdomains",
"parameters": {
"domain": "omegaai.io"
}
},
]
После извлечения субдоменов из input применяется наша логика выполнения: получаем субдомены...
subdomain1.openai.com
subdomain2.openai.com
subdomain3.openai.com
subdomain1.omegaai.io
subdomain2.omegaai.io
subdomain3.omegaai.io
После передачи этого в функцию краулера будет примерно так:
Output 2. Функция:
[
{
"tool_name": "crawler",
"parameters": {
"domain": "subdominio1.openai.com"
}
},
{
"tool_name": "crawler",
"parameters": {
"domain": "subdominio1.omegaai.io"
}
},
{
"tool_name": "crawler",
"parameters": {
"domain": "subdominio2.openai.com"
}
},
{
"tool_name": "crawler",
"parameters": {
"domain": "subdominio2.omegaai.io"
}
},
{
"tool_name": "crawler",
"parameters": {
"domain": "subdominio3.openai.com"
}
},
{
"tool_name": "crawler",
"parameters": {
"domain": "subdominio3.omegaai.io"
}
},
]
fn_c Позволяет нам собирать параметры и имя инструмента напрямую, без необходимости проходить через логику фильтрации самого JSON.