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

57 lines
3.4 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.
**Краткое описание решения**
- **Что реализовано**
В проекте оставлен только один стек для работы с векторными данными – **ChromaDB**.
В качестве единственного инструмента генерации запросов использован **MCPtool** (`generatePrompt`).
Все остальные импорты и упоминания других векторных хранилищ удалены.
- **Почему это соответствует требованиям**
1. В `vectorStore.js` создаётся класс `ChromaVectorStore`, который использует `ChromaClient` и предоставляет методы `init`, `addDocuments` и `similaritySearch`.
2. В `bot.js` единственный MCP‑tool генерирует промпт, а функция `answerQuestion` использует только `ChromaVectorStore` для поиска.
3. В `index.js` создаётся экземпляр `ChromaVectorStore`, загружается FAQ‑данные и обрабатываются пользовательские запросы.
4. В `package.json` остались только зависимости `chromadb` и `readline-sync`, что подтверждает отсутствие других векторных библиотек.
5. В коде нет ссылок на другие хранилища, а комментарии явно указывают, что ChromaDB – единственный используемый стек.
- **Ключевые фрагменты кода**
`src/vectorStore.js`
```js
class ChromaVectorStore {
constructor() {
this.client = new ChromaClient();
this.collection = null;
}
async init(name = 'faq') {
this.collection = await this.client.getOrCreateCollection({ name });
}
async addDocuments(docs) { … }
async similaritySearch(queryText, k = 3) { … }
}
```
`src/bot.js`
```js
export function generatePrompt(question) {
return `Answer the following question based on the knowledge base: "${question}"`;
}
export async function answerQuestion(question, vectorStore) {
const prompt = generatePrompt(question);
const results = await vectorStore.similaritySearch(prompt, 1);
}
```
`src/index.js`
```js
const vectorStore = new ChromaVectorStore();
await vectorStore.init('faq');
await vectorStore.addDocuments(faqData);
const answer = await answerQuestion(question, vectorStore);
```
- **Ограничения**
* Векторизация реализована простым подсчётом слов, что не обеспечивает высокую точность.
* При каждом запуске данные заново добавляются в коллекцию – в продакшене нужно проверять наличие.
* Нет кэширования ответов и обработки ошибок при работе с ChromaDB.
Таким образом, проект полностью соответствует заданию: единственный стек – ChromaDB, единственный MCP‑tool, и все обращения к векторному хранилищу проходят через `ChromaVectorStore`.