แอปพลิเคชัน 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 หรือ API อื่นๆ ที่เข้ากันได้กับ 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"
หรือใช้สคริปต์ถามเพื่อประสบการณ์ที่มีการโต้ตอบมากขึ้น:
node ask.js
หากคุณไม่ได้ระบุคำถาม แอปพลิเคชันจะขอให้คุณป้อนคำถาม
ใบสมัครจะ:
log.txt
การตอบสนองที่สร้างขึ้นจะแสดงในคอนโซลและต่อท้ายไฟล์บันทึก
หากเกิดข้อผิดพลาดระหว่างการดำเนินการ ระบบจะบันทึกข้อผิดพลาดไว้ที่ error_log.txt
ในไดเร็กทอรีโปรเจ็กต์
main.js
: ตรรกะแอปพลิเคชันหลัก.env
: ไฟล์การกำหนดค่า (สร้างสิ่งนี้จาก .env.example
)log.txt
: บันทึกโดยละเอียดของการรันแต่ละครั้งerror_log.txt
: บันทึกข้อผิดพลาด (สร้างขึ้นหากเกิดข้อผิดพลาด)completion_flag.txt
: สร้างเมื่อกระบวนการเสร็จสมบูรณ์ แอปพลิเคชั่นนี้ใช้การขูดเว็บและเนื้อหาที่สร้างโดย AI ตรวจสอบให้แน่ใจว่าคุณปฏิบัติตามข้อกำหนดในการให้บริการของเว็บไซต์ที่คุณเข้าถึงและโมเดล AI ที่คุณใช้
หากคุณต้องการรัน SearXNG ภายในเครื่องโดยใช้ Docker ให้ทำตามขั้นตอนเหล่านี้:
ดึงอิมเมจ SearXNG Docker ล่าสุด:
docker pull searxng/searxng
สร้างไดเร็กทอรีสำหรับการกำหนดค่า SearXNG:
mkdir searxng-config
สร้างไฟล์ settings.yml ในไดเร็กทอรี searxng-config:
touch searxng-config/settings.yml
แก้ไขไฟล์ settings.yml เพื่อให้แน่ใจว่า 'json' รวมอยู่ในรายการ 'formats':
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 script สำหรับระบบที่คล้าย 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 และคีย์ API พื้นฐาน
# -------------------------
# -- 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
หากคุณสนุกกับโครงการนี้ โปรดส่งคำแนะนำเพื่อสนับสนุนงานของฉันมาให้ฉัน ?