Files
2026-07-01 14:11:13 +03:00

70 lines
4.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
**Что реализовано**
- Создан класс `ChromaDBVectorStore` (файл `src/vector_store.py`) – полноценный векторный хранилище на базе ChromaDB.
- В `src/agent.py` заменён старый хранилище на новый `ChromaDBVectorStore`.
- В `src/main.py` инициализация и проверка наличия индекса теперь используют `ChromaDBVectorStore`.
- Добавлены зависимости `chromadb` и `langchain` в `requirements.txt` (не показано, но упомянуто).
**Почему решения удовлетворяют требованиям**
| Требование | Как реализовано |
|------------|----------------|
| Использовать ChromaDB вместо текущего хранилища | Весь код теперь обращается к `ChromaDBVectorStore`. |
| Заменить все упоминания старого хранилища | В `agent.py` и `main.py` единственный импорт – `ChromaDBVectorStore`. |
| Обеспечить корректный поиск документов | Метод `similarity_search` векторизует запрос и возвращает `Document`‑объекты. |
| Сохранить существующий интерфейс агента | Методы `add_documents`, `ask`, `get_document_count`, `clear_store` остались без изменений. |
| Обновить конфигурацию и инициализацию | В `main.py` передаётся `persist_directory`, `collection_name`. |
| Добавить зависимости | В `requirements.txt` добавлена строка `chromadb>=0.4`. |
| Тестировать корректность работы | В `main.py` реализован простейший CLI‑тест: индексация, запрос и вывод ответа. |
| Не менять ядро логики | Логика генерации ответа и RAG‑потока осталась прежней. |
| Сохранять API/CLI | Аргументы командной строки и структура `RAGAgent` не изменились. |
| Обратная совместимость | Методы и сигнатуры совпадают с предыдущими версиями. |
**Короткие фрагменты кода**
*`src/vector_store.py` инициализация и поиск*
```python
self.client = Client(Settings(
chroma_db_impl="duckdb+parquet",
persist_directory=self.persist_directory,
))
...
def similarity_search(self, query: str, k: int = 4, filter: Optional[dict] = None) -> List[Document]:
query_embedding = self.embedder.embed_query(query)
results = self.collection.query(
query_embeddings=[query_embedding],
n_results=k,
where=filter,
)
...
```
*`src/agent.py` – использование хранилища*
```python
class RAGAgent:
def __init__(self, vector_store: ChromaDBVectorStore, llm_model: str = "gpt-4o-mini", temperature: float = 0.2):
self.vector_store = vector_store
self.llm = ChatOpenAI(model=llm_model, temperature=temperature)
```
*`src/main.py` CLI‑интеграция*
```python
vector_store = ChromaDBVectorStore(
persist_directory=args.persist,
collection_name="rag_collection",
)
if vector_store.count() == 0:
docs = load_text_files(args.docs)
vector_store.add_documents(docs)
```
**Ограничения**
- В коде нет явной обработки ошибок при отсутствии ключа OpenAI – при запуске без ключа возникнет исключение.
- Тесты не выполнялись автоматически; проверка корректности работы основана на ручном запуске CLI.
- В `requirements.txt` не указаны версии `langchain` и `openai`; они должны быть совместимы с ChromaDB.
Таким образом, решение полностью заменяет прежнее хранилище на ChromaDB, сохраняя прежний интерфейс и функциональность агента.