
0dAPI الوثائق الرسمية
ابدأ!
pip install zerodai==0.0.0.20
export zerodapi_key="TU_API_KEY"
احصل على مفتاح API الخاص بك 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: النموذج الموصى به لاستدعاءات الدوال، الأفضل في استدعاءات الدوال مع سياق كبير، أخف من 0dai70b، بالإضافة إلى أنه على مستوى استدعاءات الدوال متعددة الخطوات فهو على مستوى أفضل GPT.
0dai70b (موصى به): حاليًا الأفضل (SOTA) في الأمن السيبراني، قادر على إجراء استدلالات منطقية معقدة بناءً على سياق كبير وحل اختبارات الاختراق بشكل شبه مستقل. يحتوي على استدعاءات دالة ويمكنه الرد برسائل منظمة. وهو الأبطأ ولكنه يوفر قفزة كبيرة في الجودة.
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"
}
}
]
يمكن أن يوجد أيضًا منطق تكراري بين الاستدلال والدالة يغذيان بعضهما البعض، تخيل هذه الحالة
دالة النطاقات الفرعية
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_endpoints = [ {
"name": "crawler",
"description": "This tools is used to crawle ndpoints for a host",
"parameter_definitions": {
"host": {
"type": "string",
"description": "The domain",
"required": True
}
}
}, ]
المدخل:
أحتاج الحصول على النطاقات الفرعية لـ openai.com و omegaai.io
المخرج 1. الدالة:
[
{
"tool_name": "subdomains",
"parameters": {
"domain": "openai.com"
}
},
{
"tool_name": "subdomains",
"parameters": {
"domain": "omegaai.io"
}
},
]
بعد استخراج النطاقات الفرعية من المدخل، نطبق منطق التنفيذ الخاص بنا والذي سيكون الحصول على النطاقات الفرعية...
subdomain1.openai.com
subdomain2.openai.com
subdomain3.openai.com
subdomain1.omegaai.io
subdomain2.omegaai.io
subdomain3.omegaai.io
بعد تمرير هذا إلى دالة الزاحف سيكون شيئًا مثل
المخرج 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 نفسه
###الاستخدام
from zerodai import zerodai
zerodai.api_auth("TU_API_KEY")
tool_name, parameters = zerodai.fn_c(model_fn=model_fn_call, messages=messages, functions=subdomain_functions, stream=stream, multistep=False)
print(tool_name)
print(parameters)
print(parameters["domain"])
ملاحظة: عادة ما يكون معيار الدوال هو OpenAI، ولهذا صممنا دالة تقوم بتحويل دوال OpenAI إلى تنسيقنا الخاص، مثال:
tool_name, parameters = cls.fn_c(model_fn=model_fn_call, messages=messages, functions=OpenAI2CommandR(osint_funcs), stream=stream, multistep=False)