57 lines
3.4 KiB
Markdown
57 lines
3.4 KiB
Markdown
**Краткое описание решения**
|
||
|
||
- **Что реализовано**
|
||
В проекте оставлен только один стек для работы с векторными данными – **ChromaDB**.
|
||
В качестве единственного инструмента генерации запросов использован **MCP‑tool** (`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`. |