1
0

Мелочи по rag

- переименована папка
- написан новый скрипт quickstart
- отказ от requirements.txt
- добавлен забытый и актуализированный README
This commit is contained in:
2025-08-19 15:42:09 +08:00
parent 7824e99235
commit ed123da101
13 changed files with 101 additions and 158 deletions

9
.gitignore vendored
View File

@@ -1,3 +1,12 @@
/.data/*
/rag/input_html/*
/rag/output_md/*
/rag/ready_rag/*
/rag/venv
.env
*.html
*.md
*.sqlite*
!.gitkeep

10
@rag/.gitignore vendored
View File

@@ -1,10 +0,0 @@
/input_html/*
/output_md/*
/ready_rag/*
/venv
*.html
*.md
*.sqlite*
!.gitkeep

View File

@@ -1,49 +0,0 @@
#!/bin/bash
DELAY=1
# 1. Указать реквизиты доступа к confluence
USERNAME=""
PASSWORD=""
CONFLUENCE_URL=""
# 2. Вызвать: ./1_download_page.sh <pageId>
##################################################################
if [ $# -lt 1 ]; then
echo "Usage: $0 <pageId>"
exit 1
fi
command -v curl >/dev/null 2>&1 || { echo >&2 "Error: curl is required but not installed."; exit 1; }
command -v jq >/dev/null 2>&1 || { echo >&2 "Error: jq is required but not installed."; exit 1; }
PAGE_ID="$1"
API_ENDPOINT="${CONFLUENCE_URL}/rest/api/content/${PAGE_ID}?expand=body.storage,children.page"
echo
echo "Downloading: $API_ENDPOINT"
response=$(curl -s -u "$USERNAME:$PASSWORD" -H "Accept: application/json" "${API_ENDPOINT}")
if [ $? -ne 0 ]; then
echo "Error: Failed to retrieve article"
fi
error_message=$(echo "$response" | jq -r '.message' 2>/dev/null)
if [ -n "$error_message" ] && [ "$error_message" != "null" ]; then
echo "API Error: $error_message"
else
output_path="./input_html/"
title=$(echo "$response" | jq -r .title)
content=$(echo "$response" | jq -r .body.storage.value)
[ ! -d "$output_path" ] && mkdir -p "$output_path"
echo "<html><body>$content</body></html>" > "$output_path/$title.html"
echo "Saved as: $output_path/$title.html"
child_ids=$(echo "$response" | jq -r '.children.page.results[]?.id' 2>/dev/null)
for child_id in $child_ids; do
echo "Downloading child page ID: $child_id"
sleep $DELAY
./confluence_get_article.sh "$child_id"
done
fi

View File

@@ -1,96 +0,0 @@
apt-xapian-index==0.49
aptdaemon==2.0.2
argcomplete==3.5.3
asn1crypto==1.5.1
attrs==25.1.0
autocommand==2.2.2
bcc==0.30.0
bcrypt==4.2.0
blinker==1.9.0
Brlapi==0.8.6
certifi==2025.1.31
chardet==5.2.0
click==8.1.8
command-not-found==0.3
cryptography==43.0.0
cupshelpers==1.0
dbus-python==1.3.2
defer==1.0.6
distro==1.9.0
distro-info==1.13
docker==7.1.0
docker-compose==1.29.2
dockerpty==0.4.1
docopt==0.6.2
fuse-python==1.0.9
html5lib-modern==1.2
httplib2==0.22.0
idna==3.10
importlib_metadata==8.6.1
inflect==7.3.1
jaraco.context==6.0.1
jaraco.functools==4.1.0
jsonpointer==2.4
jsonschema==4.19.2
jsonschema-specifications==2023.12.1
language-selector==0.1
launchpadlib==2.1.0
lazr.restfulclient==0.14.6
lazr.uri==1.0.6
louis==3.32.0
markdown-it-py==3.0.0
mdurl==0.1.2
mechanize==0.4.10
more-itertools==10.6.0
netaddr==1.3.0
netifaces==0.11.0
oauthlib==3.2.2
packaging==24.2
pipx==1.7.1
platformdirs==4.3.6
psutil==5.9.8
pycairo==1.27.0
pycups==2.0.4
Pygments==2.18.0
PyGObject==3.50.0
PyJWT==2.10.1
pylibacl==0.7.2
pyparsing==3.1.2
PyQt5==5.15.11
PyQt5_sip==12.17.0
PyQt6==6.8.1
PyQt6_sip==13.10.0
python-apt==3.0.0
python-dateutil==2.9.0
python-debian==1.0.1+ubuntu1
python-dotenv==1.0.1
python-magic==0.4.27
pyxattr==0.8.1
pyxdg==0.28
PyYAML==6.0.2
referencing==0.35.1
requests==2.32.3
rich==13.9.4
rpds-py==0.21.0
s3cmd==2.4.0
sentry-sdk==2.18.0
ssh-import-id==5.11
systemd-python==235
texttable==1.7.0
tornado==6.4.2
typeguard==4.4.2
typing_extensions==4.12.2
ubuntu-drivers-common==0.0.0
ubuntu-pro-client==8001
ufw==0.36.2
unattended-upgrades==0.1
urllib3==2.3.0
usb-creator==0.3.16
userpath==1.9.2
wadllib==2.0.0
webencodings==0.5.1
websocket-client==1.8.0
wheel==0.45.1
xdg==5
xkit==0.0.0
zipp==3.21.0

View File

@@ -3,7 +3,7 @@
Набор скриптов для быстрого запуска локальных LLM.
Модели подбираются вручную, примерно в пределазх 40 млрд параметров (обычно, максимум 32b или 34b).
Такие модели наиболее реально запускать на среднем ПК.
Такие модели наиболее реально запускать на домашних ПК разных мощностей.
Меньше параметров → меньше памяти на диске и в ОЗУ → выше скорость (tps) → ниже качество.
@@ -12,9 +12,23 @@
Модели до 7 млрд достаточно хорошо отвечают (до 5-10 tps) на i5-9400 CPU 2.90GHz + 32 Гб ОЗУ без видеокарты, при условии, что в один момент времени одна модель обрабатывает один запрос.
Например, [phi4-mini:3.8b](phi4-mini/3.8b), [qwen2.5:7b](qwen2.5/7b) или небольшая llama.
## Структура проекта
```
./
├── models/ # Директория со скриптами установки моделей ollama
├── rag/ # Директория с инструментами для подготовки RAG
├── up # Скрипт для запуска ollama + open-webui
├── down # Скрипт для остановки ollama + open-webui
├── ollama # Скрипт для выполнения произвольных команд ollama
├── ollama.code-workspace # Конфигурация VSCode Workspace
└── README.md # Этот файл
```
## Стек
* bash
* python, venv, pip
* [docker](https://docker.com)
* [ollama](https://ollama.com)
* [open-webui](https://docs.openwebui.com)
@@ -36,9 +50,9 @@
Плагины должны соединиться с `localhost:11434` и подгрузить доступные модели из контейнера.
## Использование RAG системы
### Использование RAG системы
Для работы RAG системы необходимо обратиться к документу [@rag/README.md](@rag/README.md).
Для работы RAG системы необходимо обратиться к документу [rag/README.md](rag/README.md).
## Дополнительные материалы

6
rag/.env.example Normal file
View File

@@ -0,0 +1,6 @@
# Адрес Confluence, например, https://confluence.company.ltd
CONF_URL=
# Имя пользователя и его пароль для авторизации
CONF_USERNAME=
CONF_PASSWORD=

43
rag/1_download_page.sh Executable file
View File

@@ -0,0 +1,43 @@
#!/bin/bash
command -v curl >/dev/null 2>&1 || { echo >&2 "Ошибка: curl не установлен"; exit 1; }
command -v jq >/dev/null 2>&1 || { echo >&2 "Ошибка: jq не установлен"; exit 1; }
if [ $# -lt 1 ]; then
echo >&2 "Ошибка: не указан ID страницы для загрузки"
echo "Использование: $0 <pageId>"
exit 1
fi
PAGE_ID="$1"
API_ENDPOINT="${CONF_URL}/rest/api/content/${PAGE_ID}?expand=body.storage,children.page"
echo
echo "Загрузка: $API_ENDPOINT"
response=$(curl -s -u "$CONF_USERNAME:$CONF_PASSWORD" -H "Accept: application/json" "${API_ENDPOINT}")
if [ $? -ne 0 ]; then
echo "$response"
exit 1
fi
error_message=$(echo "$response" | jq -r '.message' 2>/dev/null)
if [ -n "$error_message" ] && [ "$error_message" != "null" ]; then
echo "$response"
exit 1
fi
output_path="./input_html/"
[ ! -d "$output_path" ] && mkdir -p "$output_path"
title=$(echo "$response" | jq -r .title)
content=$(echo "$response" | jq -r .body.storage.value)
echo "<html><body>$content</body></html>" > "$output_path/$title.html"
echo "Сохранено: $output_path/$title.html"
child_ids=$(echo "$response" | jq -r '.children.page.results[]?.id' 2>/dev/null)
for child_id in $child_ids; do
echo "Переход к дочерней странице: $child_id"
sleep 1
$0 "$child_id"
done

26
rag/quickstart.sh Executable file
View File

@@ -0,0 +1,26 @@
#!/bin/bash
command -v python3 >/dev/null 2>&1 || { echo >&2 "Ошибка: python3 не установлен"; exit 1; }
command -v pip >/dev/null 2>&1 || { echo >&2 "Ошибка: pip не установлен"; exit 1; }
[ ! -f .env ] && cp .env.example .env
source .env
[ -z "$CONF_URL" ] && { echo >&2 "Ошибка: CONF_URL не указан в файле .env"; exit 1; }
[ -z "$CONF_USERNAME" ] && { echo >&2 "Ошибка: CONF_USERNAME не указан в файле .env"; exit 1; }
[ -z "$CONF_PASSWORD" ] && { echo >&2 "Ошибка: CONF_PASSWORD не указан в файле .env"; exit 1; }
echo "Поиск зависимостей..."
python3 -m venv venv
source venv/bin/activate
[ "$(pip install --dry-run chromadb 2>&1 | grep -c 'Would install')" -gt 0 ] && pip install chromadb
[ "$(pip install --dry-run numpy 2>&1 | grep -c 'Would install')" -gt 0 ] && pip install numpy
[ "$(pip install --dry-run requests 2>&1 | grep -c 'Would install')" -gt 0 ] && pip install requests
[ "$(pip install --dry-run beautifulsoup4 2>&1 | grep -c 'Would install')" -gt 0 ] && pip install beautifulsoup4
echo "Начало работы"
./1_download_page.sh "$@" || exit 1
python3 ./2_html_to_md.py
python3 ./3_rag.py --action build
python3 ./3_rag.py --action interactive