add some old posts
This commit is contained in:
@@ -0,0 +1,495 @@
|
||||
---
|
||||
title: "Content Placeholder"
|
||||
build:
|
||||
render: never
|
||||
list: never
|
||||
publishResources: false
|
||||
draft: true
|
||||
---
|
||||
|
||||
# 📚 Полная инструкция по установке Memory OS + Hermes Agent
|
||||
|
||||
## Содержание
|
||||
1. [Подготовка окружения](#1-подготовка-окружения)
|
||||
2. [Настройка хранилищ](#2-настройка-хранилищ)
|
||||
3. [Установка Memory OS](#3-установка-memory-os)
|
||||
4. [Решение проблем](#4-решение-проблем)
|
||||
5. [Проверка работы](#5-проверка-работы)
|
||||
6. [Настройка автоматизации](#6-настройка-автоматизации)
|
||||
|
||||
---
|
||||
|
||||
## 1. Подготовка окружения
|
||||
|
||||
### 1.1. Системные требования
|
||||
- Ubuntu 22.04/24.04 (или аналогичный Linux)
|
||||
- Python 3.11+
|
||||
- Docker 24.0+ и Docker Compose
|
||||
- 16 GB RAM (рекомендуется)
|
||||
|
||||
### 1.2. Установка Docker и Docker Compose
|
||||
|
||||
```bash
|
||||
# Установка Docker
|
||||
curl -fsSL https://get.docker.com -o get-docker.sh
|
||||
sudo sh get-docker.sh
|
||||
sudo usermod -aG docker $USER
|
||||
|
||||
# Установка Docker Compose
|
||||
sudo apt install docker-compose-plugin
|
||||
```
|
||||
|
||||
### 1.3. Установка Python и uv
|
||||
|
||||
```bash
|
||||
# Установка Python
|
||||
sudo apt install python3 python3-venv python3-pip
|
||||
|
||||
# Установка uv (быстрый менеджер пакетов)
|
||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
source ~/.bashrc
|
||||
```
|
||||
|
||||
### 1.4. Установка Ollama (для локальных эмбеддингов)
|
||||
|
||||
```bash
|
||||
curl -fsSL https://ollama.com/install.sh | sh
|
||||
ollama pull nomic-embed-text # или другую модель
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. Настройка хранилищ
|
||||
|
||||
### 2.1. Создание структуры каталогов
|
||||
|
||||
```bash
|
||||
# Основная директория для всех данных
|
||||
sudo mkdir -p /opt/hermes
|
||||
sudo chown $USER:$USER /opt/hermes
|
||||
|
||||
# Структура данных
|
||||
mkdir -p /opt/hermes/.hermes
|
||||
mkdir -p /opt/hermes/vault/{wiki,raw,concepts,entities,comparisons,_meta,_archive}
|
||||
mkdir -p /opt/hermes/vault/fabric
|
||||
mkdir -p /opt/hermes/.hermes/logs
|
||||
mkdir -p /opt/hermes/.hermes/cron/output
|
||||
```
|
||||
|
||||
### 2.2. Монтирование Obsidian Vault (опционально)
|
||||
|
||||
**Если у вас Obsidian Vault в S3:**
|
||||
|
||||
```bash
|
||||
# Установка s3fs
|
||||
sudo apt install s3fs -y
|
||||
|
||||
# Создание файла с ключами
|
||||
echo "ACCESS_KEY:SECRET_KEY" > ~/.passwd-s3fs
|
||||
chmod 600 ~/.passwd-s3fs
|
||||
|
||||
# Монтирование
|
||||
s3fs obsidian /opt/hermes/obsidian-vault \
|
||||
-o passwd_file=/home/$USER/.passwd-s3fs \
|
||||
-o allow_other \
|
||||
-o use_cache=/tmp \
|
||||
-o url=https://s3.nixg.ru \
|
||||
-o endpoint=garage \
|
||||
-o use_path_request_style \
|
||||
-o sigv4
|
||||
|
||||
# Для автоматического монтирования (fstab)
|
||||
echo "s3fs#obsidian /opt/hermes/obsidian-vault fuse _netdev,allow_other,passwd_file=/etc/passwd-s3fs,use_cache=/tmp,url=https://s3.nixg.ru,endpoint=garage,use_path_request_style,sigv4 0 0" | sudo tee -a /etc/fstab
|
||||
```
|
||||
|
||||
### 2.3. Настройка переменных окружения
|
||||
|
||||
```bash
|
||||
# Добавьте в ~/.bashrc
|
||||
export HERMES_HOME=/opt/hermes/.hermes
|
||||
export VAULT_PATH=/opt/hermes/vault
|
||||
export WIKI_PATH=/opt/hermes/vault/wiki
|
||||
export OBSIDIAN_VAULT_PATH=/opt/hermes/obsidian-vault
|
||||
source ~/.bashrc
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. Установка Memory OS
|
||||
|
||||
### 3.1. Клонирование репозитория
|
||||
|
||||
```bash
|
||||
cd /opt/hermes
|
||||
git clone https://github.com/ClaudioDrews/memory-os.git
|
||||
cd memory-os
|
||||
```
|
||||
|
||||
### 3.2. Настройка виртуального окружения
|
||||
|
||||
```bash
|
||||
# Через uv
|
||||
uv venv --python 3.12
|
||||
source .venv/bin/activate
|
||||
uv pip install -r requirements.txt
|
||||
|
||||
# Или через venv
|
||||
python3 -m venv .venv
|
||||
source .venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### 3.3. Настройка .env
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
nano .env
|
||||
```
|
||||
|
||||
**Пример `.env` для Polza.ai:**
|
||||
|
||||
```bash
|
||||
# ── Required ──────────────────────────────────────────
|
||||
REDIS_PASSWORD=26a7b9ccfc87717cf1e7b5e1ebf514a8
|
||||
|
||||
# ── Paths ─────────────────────────────────────────────
|
||||
FABRIC_DIR=/opt/hermes/vault/fabric
|
||||
VAULT_PATH=/opt/hermes/vault
|
||||
WIKI_ROOT=/opt/hermes/vault/wiki
|
||||
HERMES_HOME=/opt/hermes/.hermes
|
||||
STATE_DB_PATH=/opt/hermes/.hermes/state.db
|
||||
HERMES_LOGS_DIR=/opt/hermes/.hermes/logs
|
||||
|
||||
# ── Embedding Backend (Polza.ai) ─────────────────────
|
||||
EMBEDDING_API_BASE=https://polza.ai/api/v1
|
||||
EMBEDDING_MODEL=qwen/qwen3-embedding-8b
|
||||
EMBEDDING_API_KEY=pza_ваш_ключ_здесь
|
||||
EMBEDDING_DIMS=4096
|
||||
|
||||
# ── Icarus Extraction ─────────────────────────────────
|
||||
ICARUS_ENDPOINT=https://polza.ai/api/v1/chat/completions
|
||||
ICARUS_API_KEY_ENV=pza_ваш_ключ_здесь
|
||||
ICARUS_EXTRACTION_MAX_TOKENS=4096
|
||||
ICARUS_EXTRACTION_MODEL=qwen/qwen3-embedding-8b
|
||||
|
||||
# ── Strongly Recommended ──────────────────────────────
|
||||
HERMES_AGENT_NAME=hermes
|
||||
COLLECTION_NAME=knowledge_base
|
||||
|
||||
# ── Obsidian Integration ──────────────────────────────
|
||||
ICARUS_OBSIDIAN=1
|
||||
OBSIDIAN_VAULT_PATH=/opt/hermes/obsidian-vault
|
||||
|
||||
# ── Docker Compose volumes ────────────────────────────
|
||||
MEMORY_OS_WIKI_PATH=/opt/hermes/vault/wiki
|
||||
MEMORY_OS_HERMES_HOME=/opt/hermes/.hermes
|
||||
MEMORY_OS_FABRIC_DIR=/opt/hermes/vault/fabric
|
||||
```
|
||||
|
||||
### 3.4. Запуск Docker стека
|
||||
|
||||
```bash
|
||||
cd /opt/hermes/memory-os/docker
|
||||
cp ../.env .env
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
### 3.5. Установка плагина Icarus
|
||||
|
||||
```bash
|
||||
cp -r /opt/hermes/memory-os/icarus /opt/hermes/.hermes/plugins/
|
||||
```
|
||||
|
||||
### 3.6. Настройка контекстного усилителя
|
||||
|
||||
```bash
|
||||
mkdir -p /opt/hermes/.hermes/scripts
|
||||
ln -sf /opt/hermes/memory-os/scripts/context_enhancer.py /opt/hermes/.hermes/scripts/context_enhancer.py
|
||||
```
|
||||
|
||||
### 3.7. Настройка базы данных
|
||||
|
||||
```bash
|
||||
cd /opt/hermes/memory-os
|
||||
python3 setup/setup_db.py
|
||||
```
|
||||
|
||||
### 3.8. Применение протокола
|
||||
|
||||
```bash
|
||||
if [ -f /opt/hermes/.hermes/SOUL.md ]; then
|
||||
echo "" >> /opt/hermes/.hermes/SOUL.md
|
||||
echo "<!-- Memory OS additions -->" >> /opt/hermes/.hermes/SOUL.md
|
||||
cat /opt/hermes/memory-os/modifications/execution-agent-protocol.md >> /opt/hermes/.hermes/SOUL.md
|
||||
fi
|
||||
```
|
||||
|
||||
### 3.9. Настройка cron
|
||||
|
||||
```bash
|
||||
(crontab -l 2>/dev/null; echo "0 * * * * cd /opt/hermes/memory-os && export REDIS_PASSWORD=26a7b9ccfc87717cf1e7b5e1ebf514a8 && source .venv/bin/activate && python3 scripts/wiki_continuous_ingest.py >> /opt/hermes/.hermes/logs/wiki-ingest.log 2>&1") | crontab -
|
||||
```
|
||||
|
||||
### 3.10. Перезапуск Hermes
|
||||
|
||||
```bash
|
||||
sudo /home/$USER/.local/bin/hermes gateway restart
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. Решение проблем
|
||||
|
||||
### 4.1. Ошибка: Permission denied при монтировании s3fs
|
||||
|
||||
**Проблема:** `s3fs: MOUNTPOINT: /opt/hermes/obsidian-vault permission denied`
|
||||
|
||||
**Решение:**
|
||||
```bash
|
||||
sudo chown $USER:$USER /opt/hermes/obsidian-vault
|
||||
```
|
||||
|
||||
### 4.2. Ошибка: allow_other only allowed if 'user_allow_other' is set
|
||||
|
||||
**Проблема:** `fusermount: option allow_other only allowed if 'user_allow_other' is set in /etc/fuse.conf`
|
||||
|
||||
**Решение:**
|
||||
```bash
|
||||
sudo nano /etc/fuse.conf
|
||||
# Раскомментируйте строку: user_allow_other
|
||||
```
|
||||
|
||||
### 4.3. Ошибка: AuthorizationHeaderMalformed с S3
|
||||
|
||||
**Проблема:** `Authorization header malformed, unexpected scope: 20260619/us-east-1/s3/aws4_request`
|
||||
|
||||
**Решение:**
|
||||
```bash
|
||||
# Укажите правильный регион и используйте sigv4
|
||||
s3fs obsidian /opt/hermes/obsidian-vault \
|
||||
-o endpoint=garage \
|
||||
-o sigv4 \
|
||||
-o use_path_request_style
|
||||
```
|
||||
|
||||
### 4.4. Ошибка: pip install --break-system-packages
|
||||
|
||||
**Проблема:** Ubuntu блокирует системную установку пакетов (PEP 668)
|
||||
|
||||
**Решение:**
|
||||
```bash
|
||||
# Используйте виртуальное окружение
|
||||
python3 -m venv .venv
|
||||
source .venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
|
||||
# Или используйте uv
|
||||
uv venv
|
||||
source .venv/bin/activate
|
||||
uv pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### 4.5. Ошибка: Vector dimension error (768 vs 4096)
|
||||
|
||||
**Проблема:** `Vector dimension error: expected dim: 4096, got 768`
|
||||
|
||||
**Причина:** `nomic-embed-text` выдаёт векторы размерности 768, а коллекция Qdrant настроена на 4096
|
||||
|
||||
**Решение:**
|
||||
```bash
|
||||
# Вариант 1: Использовать другую модель эмбеддингов (OpenRouter/Polza.ai)
|
||||
# Вариант 2: Пересоздать коллекцию с размерностью 768
|
||||
curl -X DELETE "http://localhost:6333/collections/knowledge_base"
|
||||
curl -X PUT "http://localhost:6333/collections/knowledge_base" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"vectors": {"dense": {"size": 768, "distance": "Cosine"}}}'
|
||||
```
|
||||
|
||||
### 4.6. Ошибка: Qdrant требует API ключ
|
||||
|
||||
**Проблема:** `401 Client Error: Unauthorized for url: http://localhost:6333`
|
||||
|
||||
**Решение:**
|
||||
```bash
|
||||
# В docker-compose.yml отключите аутентификацию
|
||||
environment:
|
||||
- QDRANT__SERVICE__API_KEY= # Оставляем пустым
|
||||
```
|
||||
|
||||
### 4.7. Ошибка: Redis authentication required
|
||||
|
||||
**Проблема:** `⚠️ Redis indisponível: Authentication required.`
|
||||
|
||||
**Решение:**
|
||||
```bash
|
||||
# Убедитесь, что REDIS_PASSWORD экспортирован
|
||||
export REDIS_PASSWORD=26a7b9ccfc87717cf1e7b5e1ebf514a8
|
||||
python3 scripts/wiki_continuous_ingest.py
|
||||
```
|
||||
|
||||
### 4.8. Ошибка: This model does not support embeddings
|
||||
|
||||
**Проблема:** `{"error":"this model does not support embeddings"}`
|
||||
|
||||
**Причина:** Не все модели Ollama поддерживают эмбеддинги
|
||||
|
||||
**Решение:** Используйте модели, явно предназначенные для эмбеддингов:
|
||||
- `nomic-embed-text` (768 dims)
|
||||
- `mxbai-embed-large` (1024 dims)
|
||||
- Или облачные сервисы (OpenRouter, Polza.ai)
|
||||
|
||||
### 4.9. Ошибка: ModuleNotFoundError: No module named 'services'
|
||||
|
||||
**Проблема:** Python не находит модули Memory OS
|
||||
|
||||
**Решение:**
|
||||
```bash
|
||||
# Добавьте путь к PYTHONPATH
|
||||
export PYTHONPATH=/opt/hermes/memory-os:$PYTHONPATH
|
||||
python3 scripts/bulk_wiki_ingest_polza.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. Проверка работы
|
||||
|
||||
### 5.1. Проверка Docker стека
|
||||
|
||||
```bash
|
||||
cd /opt/hermes/memory-os/docker
|
||||
docker compose ps
|
||||
# Все контейнеры должны быть в статусе Up и healthy
|
||||
```
|
||||
|
||||
### 5.2. Проверка Qdrant
|
||||
|
||||
```bash
|
||||
curl -s http://localhost:6333/ | python3 -m json.tool
|
||||
curl -s -X GET "http://localhost:6333/collections/knowledge_base" | python3 -m json.tool
|
||||
```
|
||||
|
||||
### 5.3. Проверка Redis
|
||||
|
||||
```bash
|
||||
docker exec docker-redis-1 redis-cli -a 26a7b9ccfc87717cf1e7b5e1ebf514a8 ping
|
||||
# Должен ответить: PONG
|
||||
```
|
||||
|
||||
### 5.4. Индексация тестового документа
|
||||
|
||||
```bash
|
||||
echo "# Test Document
|
||||
|
||||
This is a test document to verify indexing works.
|
||||
|
||||
## Content
|
||||
Memory OS should index this document." > /opt/hermes/vault/wiki/test.md
|
||||
|
||||
cd /opt/hermes/memory-os
|
||||
source .venv/bin/activate
|
||||
export EMBEDDING_API_KEY=pza_ваш_ключ_здесь
|
||||
python scripts/bulk_wiki_ingest_polza.py
|
||||
```
|
||||
|
||||
### 5.5. Проверка поиска
|
||||
|
||||
```bash
|
||||
cd /opt/hermes/memory-os
|
||||
source .venv/bin/activate
|
||||
python scripts/context_enhancer.py "test" --top-k 3
|
||||
```
|
||||
|
||||
### 5.6. Проверка через Hermes
|
||||
|
||||
```bash
|
||||
hermes chat
|
||||
# В чате спросите: "What documents are in your knowledge base?"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. Настройка автоматизации
|
||||
|
||||
### 6.1. Синхронизация Obsidian Vault
|
||||
|
||||
```bash
|
||||
cat > /opt/hermes/sync_obsidian.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
VAULT_SRC="/opt/hermes/obsidian-vault"
|
||||
WIKI_DEST="/opt/hermes/vault/wiki/raw/obsidian"
|
||||
|
||||
mkdir -p "$WIKI_DEST"
|
||||
rsync -av --include="*.md" --include="*/" --exclude="*" "$VAULT_SRC/" "$WIKI_DEST/"
|
||||
|
||||
cd /opt/hermes/memory-os
|
||||
source .venv/bin/activate
|
||||
export EMBEDDING_API_KEY=pza_ваш_ключ_здесь
|
||||
python scripts/bulk_wiki_ingest_polza.py --wiki-root /opt/hermes/vault/wiki
|
||||
EOF
|
||||
|
||||
chmod +x /opt/hermes/sync_obsidian.sh
|
||||
|
||||
# Добавление в cron (каждые 10 минут)
|
||||
(crontab -l 2>/dev/null; echo "*/10 * * * * /opt/hermes/sync_obsidian.sh >> /opt/hermes/.hermes/logs/obsidian-sync.log 2>&1") | crontab -
|
||||
```
|
||||
|
||||
### 6.2. Регулярная индексация (каждый час)
|
||||
|
||||
```bash
|
||||
(crontab -l 2>/dev/null; echo "0 * * * * cd /opt/hermes/memory-os && export REDIS_PASSWORD=26a7b9ccfc87717cf1e7b5e1ebf514a8 && source .venv/bin/activate && python3 scripts/wiki_continuous_ingest.py >> /opt/hermes/.hermes/logs/wiki-ingest.log 2>&1") | crontab -
|
||||
```
|
||||
|
||||
### 6.3. Резервное копирование
|
||||
|
||||
```bash
|
||||
cat > /opt/hermes/backup.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
BACKUP_DIR="/opt/hermes/backups"
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
tar -czf "$BACKUP_DIR/hermes_backup_$(date +%Y%m%d_%H%M%S).tar.gz" \
|
||||
/opt/hermes/.hermes \
|
||||
/opt/hermes/vault \
|
||||
/opt/hermes/memory-os/.env
|
||||
EOF
|
||||
chmod +x /opt/hermes/backup.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📌 Краткий чек-лист
|
||||
|
||||
- [ ] Docker и Docker Compose установлены
|
||||
- [ ] Python 3.11+ установлен
|
||||
- [ ] Hermes Agent установлен и работает
|
||||
- [ ] Memory OS склонирован в `/opt/hermes/memory-os`
|
||||
- [ ] Виртуальное окружение создано и активировано
|
||||
- [ ] `.env` настроен с правильными ключами
|
||||
- [ ] Docker стек запущен (redis, qdrant, worker)
|
||||
- [ ] Плагин Icarus скопирован в `.hermes/plugins/`
|
||||
- [ ] Коллекция Qdrant создана с правильной размерностью
|
||||
- [ ] Тестовый документ проиндексирован
|
||||
- [ ] Контекстный усилитель работает
|
||||
- [ ] Cron задачи настроены
|
||||
|
||||
---
|
||||
|
||||
## 🔗 Полезные ссылки
|
||||
|
||||
- [Memory OS на GitHub](https://github.com/ClaudioDrews/memory-os)
|
||||
- [Hermes Agent](https://github.com/ClaudioDrews/hermes-agent)
|
||||
- [Qdrant Documentation](https://qdrant.tech/documentation/)
|
||||
- [Ollama](https://ollama.ai/)
|
||||
- [Polza.ai](https://polza.ai) (альтернатива OpenRouter)
|
||||
|
||||
---
|
||||
|
||||
## 📝 Примечания
|
||||
|
||||
1. **Размерность эмбеддингов** должна совпадать в `.env` и коллекции Qdrant
|
||||
2. **API ключи** храните в `.env` и никогда не коммитьте в Git
|
||||
3. **s3fs** может быть медленным — для больших объёмов рассмотрите rclone
|
||||
4. **Контекстное окно** может переполняться при активном исследовании — используйте делегирование задач
|
||||
|
||||
---
|
||||
|
||||
*Инструкция составлена на основе реального опыта установки Memory OS на Ubuntu сервер. Если вы нашли ошибку или хотите дополнить инструкцию — создайте Issue или Pull Request в репозитории.*
|
||||
Reference in New Issue
Block a user