You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Этот PR добавляет полноценную RAG (Retrieval Augmented Generation) систему в проект и сопутствующие исправления. Всего 19 коммитов, 236 добавлений, 7 удалений в 9 файлах.
Интеграция с PGVector через langchain-postgres для векторного поиска
Использование эмбеддингов nomic-embed-text-v2-moe (Ollama)
Гибридный поиск: векторный + keyword-matching
Детали реализации:
# Векторный поиск (similarity_search, k=5)docs=client.similarity_search(query, k=5)
# Keyword scoring с фильтрацией стоп-словkeywords=set(query.split()) -set(RUSSIAN_STOP_WORDS)
fordocindocs:
score+=1ifkeywordindoc.page_contentelse0# Возврат топ-2 документов
Стоп-слова (строки 16-56):
Добавлен обширный список русских стоп-слов (местоимения, предлоги, союзы, частицы)
Цель: улучшить качество keyword-matching, исключив слова с низким семантическим весом
Логирование:
Подробное логирование скоров и выбранных документов
Полезно для отладки качества RAG-ответов
Проблемы:
⚠️Хардкод коллекции (строка 66): collection_name="law" зашит в код, несмотря на параметр collection
⚠️Хардкод URL эмбеддингов (строка 65): base_url='http://localhost:11434' не использует Config.LLM_BASE_URL
⚠️Низкий k: k=5 может быть мало для сложных запросов
⚠️Простой scoring: Подсчёт вхождений ключевых слов (score += 1) не учитывает TF-IDF или позицию слова
2. Конфигурация (src/engine/config.py)
Изменения (строки 31, 92-97):
VECTOR_PORT=os.getenv("VECTOR_PORT", "7432") # Новый порт для pgvector@staticmethoddefget_vector_dsn() ->str:
"""Отдельный DSN для векторной БД"""# Формирование connection string для pgvector
Анализ:
✅ Правильное разделение портов: основная БД (5432) vs векторная БД (7432)
✅ Переиспользование логики get_postgres_dsn() для экранирования паролей
⚠️ Возможна избыточность: если pgvector работает на той же БД, нужен ли отдельный порт?
❌ Импорт без регистрации: инструмент импортирован, но НЕ зарегистрирован в ToolRegistry.__init__
Это означает, что агенты не смогут использоватьrag_search, пока кто-то явно не вызовет registry.register("rag_search", rag_search)
Где должна быть регистрация?
Судя по архитектуре, вероятно в src/engine/services/engine_service.py при инициализации ToolRegistry.
4. Промпт юриста (src/engine/prompts/lawyer.md)
Изменения:
Прежде чем ответить всегда проверяй факты на актуальность
при помощи инструмента поиска в RAG. Там лежат различные
кодексы РФ (такие как гражданский и жилищный).
Если в RAG ничего не найдено и ты отвечаешь за счёт только
своих знаний - уточняй это в конце ответа.
Анализ:
✅ Правильная интеграция RAG в workflow агента
✅ Требование прозрачности (указывать источник ответа)
⚠️ Инструкция предполагает, что rag_search доступен агенту, но см. проблему с регистрацией выше
5. Зависимости (requirements.txt)
Добавлено:
langchain-postgres>=0.0.16 # PGVector через LangChain
psycopg2>=2.9.11 # PostgreSQL драйвер для pgvector
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
add rag and some fixes