2.3 KiB
2.3 KiB
What was implemented
- Unified the vector‑storage layer to a single stack: ChromaDB as the vector database and MCP‑tool as the sole embedding generator.
- Removed all previous references to other vector stores (e.g. FAISS, Pinecone).
- Kept the FAQ‑bot logic unchanged, so the interactive question‑answer loop still works.
Why the main parts satisfy the requirements
VectorStorenow only talks to a ChromaDB collection (chromadb.Client) and usesmcp_tool.get_embeddingfor every document and query.- The MCP‑tool implements a deterministic fallback embedding, so the bot can run even without an OpenAI key, while still allowing real embeddings when the key is present.
- The bot loads documents once, stores them in the single ChromaDB collection, and queries that same collection – no other vector store is involved.
Key code excerpts
src/vector_store.py – single ChromaDB collection and MCP‑tool usage
self.client = chromadb.Client(Settings())
self.collection = self.client.get_or_create_collection(name=collection_name)
...
embeddings.append(get_embedding(doc["text"]))
...
embedding = get_embedding(query_text)
results = self.collection.query(query_embeddings=[embedding], n_results=top_k)
src/mcp_tool.py – one embedding generator with OpenAI fallback
def get_embedding(text: str) -> List[float]:
api_key = os.getenv("OPENAI_API_KEY")
if api_key and openai:
...
return response["data"][0]["embedding"]
return _hash_embedding(text)
src/faq_bot.py – uses the unified VectorStore
store = VectorStore()
if store.collection.count() == 0:
docs = load_documents(data_dir)
store.add_documents(docs)
...
results = store.query(query, top_k=3)
Honest limitations
- The deterministic dummy embedding may reduce retrieval quality when no OpenAI key is set.
- ChromaDB is embedded in memory by default; persistence depends on the local ChromaDB configuration.
- No additional vector store is introduced, but the fallback embedding is a simple hash‑based vector, not a true semantic embedding.
This refactor satisfies the assignment: a single stack (ChromaDB + one MCP‑tool) is used, the FAQ bot remains functional, and no extra vector stores are present.