4.3 KiB
4.3 KiB
Что реализовано
- Создан класс
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 – инициализация и поиск
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 – использование хранилища
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‑интеграция
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, сохраняя прежний интерфейс и функциональность агента.