يقوم تطبيق Node.js هذا بإنشاء الويب المعزز باستخدام موفري LLM المختلفين ونتائج بحث الويب من SearXNG.
استنساخ المستودع:
git clone https://github.com/jparkerweb/web-augmented-generation.git
cd web-augmented-generation
تثبيت التبعيات:
npm ci
انسخ ملف .env.example
إلى .env
:
cp .env.example .env
قم بتحرير ملف .env
وقم بتحديث القيم حسب الحاجة:
# #####################
# # General Settings ##
# #####################
NUM_URLS = 10 # Number of URLs to fetch
SEARXNG_URL = https://searx.be/ # URL of the SearXNG server
SEARXNG_URL_EXTRA_PARAMETER = "key=optional_auth_key_here&language=en" # Extra parameter for SearXNG URL
SEARXNG_FORMAT = html # Format for SearXNG results (html or json)
FETCH_TIMEOUT_MS = 5000 # Timeout for fetching URLs
DISABLE_SSL_VALIDATION = true # Whether to disable SSL validation
# #################
# # LLM Settings ##
# #################
LLM_STREAM_RESPONSE = true # Whether to stream the LLM response
# Ollama Local Configuration
LLM_BASE_URL = http://localhost:11434/v1 # Base URL for the LLM API (OpenAI format)
LLM_API_KEY = ollama!!! # API key for the LLM (use 'ollama' for Ollama)
LLM_MODEL = llama3.2:1b # Model to use with the LLM API
# ###################################
# # Scraped Page Content Settings ##
# ###################################
# Semantic Chunking Settings
CHUNK_CONTENT = true # Enable semantic chunking for better quality answers
CHUNK_CONTENT_USE_HYBRID_FALLBACK = true # Enable hybrid mode to fallback to summarization if no chunks found
# # The following parameters are only used by the `chunk-match` library (if CHUNK_CONTENT is set to true)
CHUNK_CONTENT_MAX_RESULTS = 10
CHUNK_CONTENT_MIN_SIMILARITY = 0.375
CHUNK_CONTENT_MAX_TOKEN_SIZE = 500
CHUNK_CONTENT_SIMILARITY_THRESHOLD = 0.4
CHUNK_CONTENT_DYNAMIC_THRESHOLD_LOWER_BOUND = 0.3
CHUNK_CONTENT_DYNAMIC_THRESHOLD_UPPER_BOUND = 0.5
CHUNK_CONTENT_NUM_SIMILARITY_SENTENCES_LOOKAHEAD = 3
CHUNK_CONTENT_COMBINE_CHUNKS = true
CHUNK_CONTENT_COMBINE_CHUNKS_SIMILARITY_THRESHOLD = 0.5
CHUNK_CONTENT_ONNX_EMBEDDING_MODEL = " Xenova/all-MiniLM-L6-v2 "
CHUNK_CONTENT_DTYPE = " q8 "
# Raw Content Settings (used when CHUNK_CONTENT=false)
WEB_PAGE_CONTENT_MAX_LENGTH = 1000 # Maximum length of raw page content to send to LLM
تكوينات موفر LLM البديلة:
# together.ai Configuration
LLM_BASE_URL = https://api.together.xyz/v1
LLM_API_KEY = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
LLM_MODEL = meta-llama/Llama-3.2-3B-Instruct-Turbo
# llama.cpp Configuration
LLM_BASE_URL = http://localhost:8080/v1
LLM_API_KEY = not-needed
LLM_MODEL = not-needed
# OpenRouter Configuration
LLM_BASE_URL = https://openrouter.ai/api/v1
LLM_API_KEY = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
LLM_MODEL = google/gemini-pro-1.5-exp
# Google AI Studio Configuration
LLM_BASE_URL = https://generativelanguage.googleapis.com/v1beta/openai/
LLM_API_KEY = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
LLM_MODEL = gemini-exp-1121
يتضمن التكوين:
يستخدم هذا التطبيق تنسيق OpenAI API لتفاعلات نماذج اللغة. يمكنك تهيئته للعمل مع Ollama أو واجهات برمجة التطبيقات الأخرى المتوافقة مع OpenAI. وإليك كيفية إعداده:
.env
الخاص بك..env
الخاص بك: LLM_BASE_URL=http://localhost:11434/v1
LLM_API_KEY=ollama
LLM_MODEL=llama3.2:1b
llama3.2:1b
باسم النموذج الذي تريد استخدامه في Ollama..env
الخاص بك: LLM_BASE_URL=https://api.openai.com/v1
LLM_API_KEY=your_api_key_here
LLM_MODEL=gpt-3.5-turbo
your_api_key_here
بمفتاح API الفعلي الخاص بك، و gpt-3.5-turbo
بالنموذج الذي تريد استخدامه.سيستخدم التطبيق هذه الإعدادات لإجراء استدعاءات واجهة برمجة التطبيقات (API) لنموذج اللغة للقيام بمهام مثل إعادة صياغة الاستعلامات وإنشاء الاستجابات.
تشغيل التطبيق مع أو بدون استعلام:
node main.js "Your question or prompt here"
أو استخدم البرنامج النصي Ask للحصول على تجربة أكثر تفاعلية:
node ask.js
إذا لم تقم بتقديم استعلام، فسيطالبك التطبيق بإدخال استعلام.
التطبيق سوف:
log.txt
سيتم عرض الاستجابة التي تم إنشاؤها في وحدة التحكم وإلحاقها بملف السجل.
إذا حدث خطأ أثناء التنفيذ، فسيتم تسجيله في error_log.txt
في دليل المشروع.
main.js
: منطق التطبيق الرئيسي.env
: ملف التكوين (قم بإنشاء هذا من .env.example
)log.txt
: سجل تفصيلي لكل عملية تشغيلerror_log.txt
: سجل الأخطاء (يتم إنشاؤه في حالة حدوث أخطاء)completion_flag.txt
: يتم إنشاؤه عند اكتمال العملية بنجاح يستخدم هذا التطبيق تجريف الويب والمحتوى الذي تم إنشاؤه بواسطة الذكاء الاصطناعي. تأكد من الالتزام بشروط خدمة مواقع الويب التي تصل إليها ونماذج الذكاء الاصطناعي التي تستخدمها.
إذا كنت تريد تشغيل SearXNG محليًا باستخدام Docker، فاتبع الخطوات التالية:
اسحب أحدث صورة من SearXNG Docker:
docker pull searxng/searxng
قم بإنشاء دليل لتكوين SearXNG:
mkdir searxng-config
قم بإنشاء ملف settings.yml في دليل searxng-config:
touch searxng-config/settings.yml
قم بتحرير ملف settings.yml للتأكد من تضمين "json" في قائمة "التنسيقات":
nano searxng-config/settings.yml
إضافة أو تعديل الأسطر التالية:
search :
formats :
- html
- json
قم بتشغيل حاوية SearXNG Docker:
docker run -d
-v $(pwd)/searxng-config:/etc/searxng
-p 8787:8080
-e BASE_URL=http://localhost:8787/
-e INSTANCE_NAME=my-searxng
searxng/searxng
قم بالوصول إلى مثيل SearXNG المحلي الخاص بك على http://localhost:8787
قم بتحديث ملف .env الخاص بك لاستخدام مثيل SearXNG المحلي:
SEARXNG_URL=http://localhost:8787
الآن لديك مثيل SearXNG محلي يعمل على المنفذ 8787 مع تمكين إخراج JSON، والذي يمكنك استخدامه مع هذا التطبيق.
SEARXNG_URL_EXTRA_PARAMETER
: يتيح لك هذا الحقل إضافة معلمات إضافية إلى عنوان URL للبحث في SearXNG. يمكن استخدامه لأغراض مختلفة:
key=your_auth_key_here
language=en&time_range=year
&
. على سبيل المثال: key=your_auth_key_here&language=en
SEARXNG_FORMAT
: يحدد هذا الحقل تنسيق نتائج بحث SearXNG. يمكن ضبطه إما على "html" أو "json":
مثال للاستخدام في ملف .env:
SEARXNG_URL_EXTRA_PARAMETER="key=abcdef123456&language=en"
SEARXNG_FORMAT=json
سيؤدي ذلك إلى إلحاق &key=abcdef123456&language=en
بعنوان URL لبحث SearXNG، وسيتوقع التطبيق استجابات JSON من SearXNG ويحللها.
DISABLE_SSL_VALIDATION
: اضبط على "صحيح" لتعطيل التحقق من صحة شهادة SSL (الافتراضي: خطأ، استخدم بحذر)
LLM_STREAM_RESPONSE
: يحدد هذا الحقل ما إذا كان يجب بث استجابات LLM في الوقت الفعلي أو إرجاعها كرد واحد:
مثال للاستخدام في ملف .env:
LLM_STREAM_RESPONSE=true
وهذا من شأنه تمكين تدفق استجابات LLM، مما يوفر تجربة أكثر تفاعلية.
(مثال تقديم SearXNG على المنفذ 8787)
server {
listen 80 ;
listen 443 ssl;
server_name searxng.acme.org;
ssl_certificate C:/some-path/fullchain.pem;
ssl_certificate_key C:/some-path/privkey.pem;
# Define a variable to store the API key
set $api_key "eXamPle__Key!!!" ;
# Use a secure cookie to store the key
set $key_cookie "searxng_key" ;
# Add resolver directive
resolver 127.0.0.1 ;
# Debug logging
error_log logs/error.log debug ;
# Check if the key is valid
set $key_valid 0 ;
if ( $arg_key = $api_key ) {
set $key_valid 1 ;
}
if ( $cookie_searxng_key = $api_key ) {
set $key_valid 1 ;
}
# Allow access to static files without key
location /static/ {
proxy_pass http://127.0.0.1:8787;
proxy_buffering off ;
}
# Redirect all requests without a valid key to a default error page or login page
location = / {
if ( $key_valid = 0) {
return 403 ;
}
proxy_pass http://127.0.0.1:8787;
proxy_buffering off ;
}
location / {
# Debug headers (always add these for debugging)
add_header X-Debug-Key-Valid $key_valid always;
add_header X-Debug-Arg-Key $arg_key always;
add_header X-Debug-Cookie-Key $cookie_searxng_key always;
# If the key is not valid, return 403
if ( $key_valid = 0) {
return 403 ;
}
# Set the cookie if the key is provided in the URL
if ( $arg_key = $api_key ) {
add_header Set-Cookie "${key_cookie}= $arg_key ; HttpOnly; Secure; SameSite=Strict; Path=/;" always;
}
# Proxy headers
proxy_set_header Host $host ;
proxy_set_header X-Real-IP $remote_addr ;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ;
proxy_set_header X-Forwarded-Proto $scheme ;
# Preserve the key parameter during redirects
proxy_redirect ~^(https?://[^/]+)(.*)$ $1$2$is_args$args ;
# Pass the request to the upstream server
proxy_pass http://127.0.0.1:8787;
proxy_buffering off ;
}
}
يتضمن هذا المشروع برامج نصية ملائمة لتشغيل التطبيق من سطر الأوامر. توجد هذه البرامج النصية في دليل ask-scripts
:
ask
: برنامج نصي عالمي للأنظمة المشابهة لنظام Unix وWindowsask.sh
: برنامج Bash النصي للأنظمة المشابهة لنظام Unixask.bat
: البرنامج النصي الدفعي لموجه أوامر Windowsask.ps1
: البرنامج النصي PowerShell لنظام التشغيل Windows PowerShell لاستخدام هذه البرامج النصية على مستوى العالم، تحتاج إلى إضافة دليل ask-scripts
إلى المسار PATH الخاص بنظامك. فيما يلي تعليمات لأنظمة التشغيل المختلفة:
ask-scripts
الخاصة بك~/.bashrc
، ~/.zshrc
، أو ~/.bash_profile
)/path/to/ask-scripts
بالمسار الفعلي: export PATH="$PATH:/path/to/ask-scripts"
source ~/.bashrc
(أو الملف المناسب الذي قمت بتحريره) بمجرد وجود دليل ask-scripts
في PATH، يمكنك تشغيل التطبيق من أي مكان بمجرد كتابة:
ask
سيطالبك البرنامج النصي بعد ذلك بإدخال سؤالك أو مطالبتك.
سيستخدم هذا الأمر تلقائيًا البرنامج النصي المناسب لنظامك:
لا تحتاج إلى تقديم السؤال أو المطالبة كوسيطة سطر أوامر. سيطلب البرنامج النصي بشكل تفاعلي إدخالك.
توفر هذه البرامج النصية طريقة ملائمة للتفاعل مع التطبيق دون الحاجة إلى الانتقال إلى دليل المشروع أو تشغيل node main.js
يدويًا في كل مرة.
إذا كنت تريد استضافة Ollama خلف وكيل عكسي NGINX، فيمكنك استخدام التكوين التالي كنقطة بداية. يتضمن هذا الإعداد مصادقة مفتاح SSL وواجهة برمجة التطبيقات الأساسية.
# -------------------------
# -- ollama.yourdomain.com --
# -------------------------
upstream ollama {
server 127.0.0.1:11434;
}
server {
listen 80 ;
listen 443 ssl;
server_name ollama.yourdomain.com;
ssl_certificate C:/Certbot/live/ollama.yourdomain.com/fullchain.pem;
ssl_certificate_key C:/Certbot/live/ollama.yourdomain.com/privkey.pem;
location / {
# Check if the Authorization header is present and has the correct Bearer token / API Key
set $token "Bearer MY_PRIVATE_API_KEY" ;
if ( $http_authorization != $token ) {
return 401 "Unauthorized" ;
}
# The localhost headers are to simulate the forwarded request as coming from localhost
# so we dont have to set the Ollama origins as *
proxy_set_header Host "127.0.0.1" ;
proxy_set_header X-Real-IP "127.0.0.1" ;
proxy_set_header X-Forwarded-For "127.0.0.1" ;
proxy_set_header X-Forwarded-Proto $scheme ;
proxy_pass http://ollama; # Forward request to the actual web service
}
}
يقوم هذا التكوين بما يلي:
تذكر استبدال MY_PRIVATE_API_KEY
بمفتاح API الفعلي الخاص بك، وتأكد من صحة مسارات شهادة SSL لنظامك.
عند استخدام هذا التكوين، قم بتحديث ملف .env
الخاص بك للإشارة إلى مثيل Ollama الخاص بوكيل NGINX:
LLM_BASE_URL=https://ollama.yourdomain.com/v1
LLM_API_KEY=MY_PRIVATE_API_KEY
LLM_MODEL=llama3.2:1b
يتيح لك هذا الإعداد الكشف بشكل آمن عن مثيل Ollama الخاص بك على الإنترنت مع الحفاظ على التحكم في الوصول من خلال مصادقة مفتاح API.
إذا كنت تستمتع بهذا المشروع، فيرجى التفكير في إرسال نصيحة لي لدعم عملي؟