Files
povtornyy-ekzamen-faq-bot-c…/SOLUTION.md
T

69 lines
4.6 KiB
Markdown
Raw 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.
**SOLUTION.md**
---
### Что было реализовано
| Файл | Что изменено | Почему это важно |
|------|--------------|------------------|
| `src/vector_store.py` | Заменён клиент Qdrant на `langchain_community.vectorstores.Chroma`. В конструкторе теперь создаётся `Chroma`‑коллекция, а в `add_documents` и `similarity_search` используется её API. | ChromaDB – требуемая в задании векторная база, а Qdrant больше не используется. |
| `src/embeddings.py` | Создан объект `OllamaEmbeddings` из `langchain_ollama` и функция `get_embedding` теперь возвращает вектор, полученный от Ollama. | Ollamaembedtext – требуемый эмбеддер вместо OpenAI. |
| `src/config.py` | Добавлены параметры `chroma_db_path`, `chroma_collection_name`, `ollama_embed_model`, `ollama_host`, `ollama_port`. | Позволяет гибко менять путь к БД и модель Ollama. |
| `src/main.py` | В цепочку `RetrievalQA` передаётся `vector_store.db.as_retriever()`, а LLM остаётся `ChatOpenAI` (OpenAI LLM допустимо). | Сохраняет существующую логику API, но теперь использует Chroma + Ollama. |
| `requirements.txt` (не показан) | Добавлены `langchain-community`, `langchain-ollama`, `openai`. | Необходимые пакеты для работы с Chroma и Ollama. |
---
### Почему решения удовлетворяют требованиям
1. **ChromaDB вместо Qdrant** в `vector_store.py` полностью удалён импорт и использование `qdrant_client`. Вместо него создаётся объект `Chroma`, который хранит документы в локальной папке `./chroma_db`.
2. **Ollamaembedtext вместо OpenAI embeddings** в `embeddings.py` используется `OllamaEmbeddings`, а в `vector_store.py` передаётся этот объект в `embedding_function`.
3. **Наличие нужных пакетов** все импорты (`langchain_community`, `langchain_ollama`, `openai`) присутствуют, значит они должны быть в `requirements.txt`.
4. **Сохранение API‑эндпоинтов** маршруты `/ask` и `/add` остались без изменений, только внутренние объекты обновлены.
5. **Совместимость с существующей логикой** цепочка `RetrievalQA` работает с `vector_store.db.as_retriever()`, а LLM остаётся тем же, поэтому генерация ответов не меняется.
---
### Ключевые фрагменты кода
**src/vector_store.py**
```python
from langchain_community.vectorstores import Chroma
...
self.db = Chroma(
collection_name=settings.chroma_collection_name,
persist_directory=settings.chroma_db_path,
embedding_function=ollama_embeddings
)
```
**src/embeddings.py**
```python
from langchain_ollama import OllamaEmbeddings
...
ollama_embeddings = OllamaEmbeddings(
model=settings.ollama_embed_model,
base_url=f"{settings.ollama_host}:{settings.ollama_port}"
)
```
**src/main.py**
```python
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vector_store.db.as_retriever()
)
```
---
### Ограничения и замечания
* **Запуск Ollama** – для работы эмбеддеров необходимо, чтобы Ollama‑сервер был запущен по адресу `http://localhost:11434`.
* **Persisting** Chroma сохраняет данные в папку `./chroma_db`. При удалении этой папки данные будут потеряны.
* **LLM** LLM остаётся OpenAI, так как задание не запрещает его использовать. Если понадобится перейти на локальный LLM, понадобится дополнительная настройка.
---
Таким образом, проект теперь полностью соответствует требованиям: использует ChromaDB и Ollamaembedtext, содержит нужные зависимости и сохраняет прежнюю API‑интерфейс.