diff --git a/.gitignore b/.gitignore
index 96b1cb8..def2f5e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,6 @@
/.data/*
/rag/input_html/*
-/rag/input_md/*
+/rag/data/*
/rag/sys_prompt.txt
/rag/chats/*.md
diff --git a/README.md b/README.md
index 97ed0b2..5d7b151 100644
--- a/README.md
+++ b/README.md
@@ -31,7 +31,7 @@
* python, venv, pip
* [docker](https://docker.com)
* [ollama](https://ollama.com)
-* [qdrant](https://qdrant.tech)
+* [qdrant](https://qdrant.tech/documentation/quickstart/)
* [open-webui](https://docs.openwebui.com)
## Как использовать
diff --git a/rag/README.md b/rag/README.md
index 03d78a2..1720a9a 100644
--- a/rag/README.md
+++ b/rag/README.md
@@ -37,7 +37,7 @@ RAG (Retrieval-Augmented Generation) — это архитектура, кото
```
rag/
├── input_html/ # Входные файлы HTML, загруженные из Confluence
-├── input_md/ # Входные (конвертированные) файлы Markdown
+├── data/ # Входные (конвертированные) Markdown и прочие текстовые файлы
├── chats/ # Директория для сохранения чатов
├── download.sh # Скрипт для загрузки страниц из Confluence
├── convert.py # Скрипт конвертации HTML в Markdown
@@ -121,7 +121,7 @@ https://conf.company.ltd/pages/viewpreviousversions.action?pageId=987654321
python3 convert.py
```
-В результате все html-файлы будут сохранены в директорию `./input_md/`.
+В результате все html-файлы будут сохранены в директорию `./data/`.
Файлы будут названы по заголовкам страниц, внутри также сохранится ссылка на исходную страницу `@@...@@`.
Для получения справки по скрипту выполни команду:
@@ -132,9 +132,9 @@ python3 convert.py --help
### 3. Векторизация (индексирование)
-Файлы `./input_md/*.md` должны быть проиндексированы.
+Файлы `./data/*` должны быть проиндексированы.
-Для того, чтобы проиндексировать Markdown-документы, выполнить команду:
+Для того, чтобы проиндексировать документы, выполнить команду:
```bash
python3 vectorize.py
@@ -185,6 +185,9 @@ python3 rag.py --query "твой запрос здесь"
python3 rag.py --help
```
+> [!NOTE]
+> У скрипта очень довольно аргументов для гибкой настройки.
+
### Кастомный системный промпт
Если хочется уточнить роль генеративной модели, можно создать файл `sys_prompt.txt` и прописать туда всё необходимое, учитывая следующие правила:
@@ -213,10 +216,15 @@ python3 rag.py --help
Для генерации ответов:
- `qwen2.5:3b` (по умолчанию)
+- `qwen3:8b`
- `gemma3n:e2b`
- `phi4-mini:3.8b`
- `qwen2.5:1.5b`
-- ...
+
+> [!NOTE]
+> Чем меньше млрд параметров (b, billion), тем меньше вероятности получить корректный ответ на не-английском языке.
+> Такие модели работают быстро, но качество ответов низкое.
+> Чем больше параметров, тем лучше и медленее ответы.
## Дисклеймер
diff --git a/rag/clear.sh b/rag/clear.sh
index 09cc91d..6cb7302 100755
--- a/rag/clear.sh
+++ b/rag/clear.sh
@@ -1,4 +1,5 @@
#!/bin/bash
rm -rf ./input_html/*.html
-rm -rf ./input_md/*.md
+rm -rf ./data/*
+touch ./data/.gitkeep
diff --git a/rag/convert.py b/rag/convert.py
index 99d4e3d..d84f2ad 100644
--- a/rag/convert.py
+++ b/rag/convert.py
@@ -15,11 +15,11 @@ def convert_html_to_md(input_dir, output_dir):
md_content = markdownify.markdownify(html_content, heading_style="ATX")
with open(output_path, "w", encoding="utf-8") as f:
f.write(md_content)
- print(f"Converted {input_path} to {output_path}")
+ print(f"Готово: {output_path}")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Конвертер HTML-файлов в Markdown")
parser.add_argument("--input-dir", type=str, default="input_html", help="Директория с HTML-файлами для конвертации")
- parser.add_argument("--output-dir", type=str, default="input_md", help="Директория для сохранения Markdown-файлов")
+ parser.add_argument("--output-dir", type=str, default="data", help="Директория для сохранения Markdown-файлов")
args = parser.parse_args()
convert_html_to_md(args.input_dir, args.output_dir)
diff --git a/rag/input_md/.gitkeep b/rag/data/.gitkeep
similarity index 100%
rename from rag/input_md/.gitkeep
rename to rag/data/.gitkeep
diff --git a/rag/download.sh b/rag/download.sh
index 5d0fc3a..323d423 100755
--- a/rag/download.sh
+++ b/rag/download.sh
@@ -21,7 +21,7 @@ OUTPUT_PATH="./input_html"
[ ! -d "$OUTPUT_PATH" ] && mkdir -p "$OUTPUT_PATH"
for PAGE_ID in "$@"; do
- API_ENDPOINT="${CONF_URL}/rest/api/content/${PAGE_ID}?expand=body.view,children.page"
+ API_ENDPOINT="${CONF_URL}/rest/api/content/${PAGE_ID}?expand=body.view,children.page,version"
echo
echo "Загрузка: $API_ENDPOINT"
@@ -37,25 +37,40 @@ for PAGE_ID in "$@"; do
exit 1
fi
- TITLE=$(echo "$RESPONSE" | jq -r .title)
CONTENT=$(echo "$RESPONSE" | jq -r .body.view.value)
-
if [ -z "$CONTENT" ]; then
echo "Пустая страница, пропущено"
exit
fi
+ TITLE=$(echo "$RESPONSE" | jq -r .title)
+ VERSION_NUM=$(echo "$RESPONSE" | jq -r .version.number)
+ VERSION_WHEN=$(date -d "$(echo "$RESPONSE" | jq -r .version.when)" +'%d.%m.%Y %H:%M:%S %Z')
+ VERSION_BY=$(echo "$RESPONSE" | jq -r .version.by.username)
+
TITLE_ESC="${TITLE//\//_}"
FILENAME="$TITLE_ESC.html"
if [ "$(echo "$FILENAME" | wc -c)" -gt 255 ]; then # измерение по байтам, а не длине
FILENAME="${TITLE_ESC:0:120}.html"
fi
HTML_FILEPATH="$OUTPUT_PATH/$FILENAME"
- CONTENT=${CONTENT//href=\"\//href=\"$CONF_URL}
- CONTENT=${CONTENT//src=\"\//src=\"$CONF_URL}
+ CONTENT=${CONTENT//href=\"\//href=\"$CONF_URL/}
+ CONTENT=${CONTENT//src=\"\//src=\"$CONF_URL/}
URL="$CONF_URL/pages/viewpage.action?pageId=$PAGE_ID"
- echo -e "@@$URL@@\n