4.6 KiB
4.6 KiB
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. |
Ollama‑embed‑text – требуемый эмбеддер вместо 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. |
Почему решения удовлетворяют требованиям
- ChromaDB вместо Qdrant – в
vector_store.pyполностью удалён импорт и использованиеqdrant_client. Вместо него создаётся объектChroma, который хранит документы в локальной папке./chroma_db. - Ollama‑embed‑text вместо OpenAI embeddings – в
embeddings.pyиспользуетсяOllamaEmbeddings, а вvector_store.pyпередаётся этот объект вembedding_function. - Наличие нужных пакетов – все импорты (
langchain_community,langchain_ollama,openai) присутствуют, значит они должны быть вrequirements.txt. - Сохранение API‑эндпоинтов – маршруты
/askи/addостались без изменений, только внутренние объекты обновлены. - Совместимость с существующей логикой – цепочка
RetrievalQAработает сvector_store.db.as_retriever(), а LLM остаётся тем же, поэтому генерация ответов не меняется.
Ключевые фрагменты кода
src/vector_store.py
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
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
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 и Ollama‑embed‑text, содержит нужные зависимости и сохраняет прежнюю API‑интерфейс.