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

3.4 KiB
Raw Blame History

Краткое описание решения

  • Что реализовано
    В проекте оставлен только один стек для работы с векторными данными – 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

    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

    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

    const vectorStore = new ChromaVectorStore();
    await vectorStore.init('faq');
    await vectorStore.addDocuments(faqData);
    const answer = await answerQuestion(question, vectorStore);
    
  • Ограничения

    • Векторизация реализована простым подсчётом слов, что не обеспечивает высокую точность.
    • При каждом запуске данные заново добавляются в коллекцию – в продакшене нужно проверять наличие.
    • Нет кэширования ответов и обработки ошибок при работе с ChromaDB.

Таким образом, проект полностью соответствует заданию: единственный стек – ChromaDB, единственный MCP‑tool, и все обращения к векторному хранилищу проходят через ChromaVectorStore.