2.4 KiB
2.4 KiB
What was implemented
- Replaced all Qdrant usage with a lightweight ChromaDB wrapper (
src/chromadb_client.py). - Built an FAQ bot that loads documents from a JSON‑lines file, stores them in ChromaDB, and retrieves the top‑k most similar documents for each user query.
- Integrated a single MCP‑tool (
src/mcp_tool.py) that returns the current UTC time. - Added OpenAI function‑calling logic in
src/main.pyso the model can invoke the MCP‑tool when needed.
Why the main parts satisfy the requirements
- The
ChromadbClientuseschromadb.Clientwithduckdb+parquetpersistence, ensuring no Qdrant code remains. ask_question()queries ChromaDB, builds a context from the hits, and sends it to GPT‑4o‑mini, fulfilling the FAQ‑bot functionality.- Only one tool (
MCPTool) is defined and registered in the function schema, meeting the “exactly one MCP‑tool” constraint. - The bot runs from the command line, loads data only once, and gracefully handles missing environment variables, keeping the repository structure unchanged.
Short code excerpts
src/chromadb_client.py – client initialization
self.client = chromadb.Client(Settings(
chroma_db_impl="duckdb+parquet",
persist_directory=persist_directory,
))
self.collection = self.client.get_or_create_collection(name=collection_name)
src/mcp_tool.py – single MCP‑tool implementation
class MCPTool:
name = "get_current_utc_time"
description = "Returns the current UTC datetime in ISO 8601 format."
def __call__(self, arguments: Dict[str, Any]) -> Dict[str, Any]:
now = datetime.datetime.utcnow().isoformat() + "Z"
return {"current_time": now}
src/main.py – function‑calling integration
response = openai.ChatCompletion.create(
model="gpt-4o-mini",
messages=messages,
functions=[function_schema],
function_call="auto",
)
Honest limitations
- The bot loads all FAQ documents at startup; for very large datasets a more incremental approach would be preferable.
- Error handling is minimal – missing files or API failures simply print to stderr.
- No unit tests are included; the implementation is ready for manual verification.
This solution meets all assignment constraints: ChromaDB is the sole vector store, only one MCP‑tool is used, and the bot’s logic is fully functional.