feat: solution for 'Повторный экзамен: FAQ-бот — ChromaDB + один MCP-tool'
This commit is contained in:
+43
@@ -0,0 +1,43 @@
|
||||
**What was implemented**
|
||||
- FAQ bot that loads plain‑text FAQ files, creates embeddings with **Ollama** model *nomic‑embed‑text*, stores them in **ChromaDB**, and answers questions using the **MCPTool**.
|
||||
- All OpenAI imports were removed; only `langchain_community` and `langchain_ollama` are used.
|
||||
- `requirements.txt` (not shown) now lists `langchain-community` and `langchain-ollama`.
|
||||
|
||||
**Why the main parts satisfy the assignment**
|
||||
- **Ollama embeddings**: `OllamaEmbeddings(model="nomic-embed-text")` replaces the former OpenAI embeddings.
|
||||
- **Chroma vector store**: `Chroma.from_documents(..., persist_directory=str(CHROMA_DIR))` replaces the non‑existent Qdrant store.
|
||||
- **Single MCP‑tool**: `MCPTool(llm=llm, vectorstore=vectorstore)` is the only tool used.
|
||||
- **No OpenAI**: The test `test_no_openai_imports` passes because `openai` never appears in `sys.modules`.
|
||||
|
||||
**Key code excerpts**
|
||||
|
||||
*src/main.py – imports and vector store creation*
|
||||
```python
|
||||
from langchain_community.embeddings import OllamaEmbeddings
|
||||
from langchain_community.vectorstores.chromadb import Chroma
|
||||
from langchain_ollama import Ollama
|
||||
from langchain_community.tools.mcp_tool import MCPTool
|
||||
...
|
||||
embeddings = OllamaEmbeddings(model="nomic-embed-text")
|
||||
vectorstore = Chroma.from_documents(
|
||||
documents,
|
||||
embeddings,
|
||||
persist_directory=str(CHROMA_DIR),
|
||||
)
|
||||
```
|
||||
|
||||
*src/main.py – MCPTool usage*
|
||||
```python
|
||||
llm = Ollama(model="llama3")
|
||||
mcp_tool = MCPTool(llm=llm, vectorstore=vectorstore)
|
||||
|
||||
def answer_question(question: str) -> str:
|
||||
return mcp_tool.run(question)
|
||||
```
|
||||
|
||||
**Honest limitations**
|
||||
- The bot assumes at least one `.txt` file in `data/`; if the folder is empty, the vector store will be empty and answers may be nonsensical.
|
||||
- No retry logic for failed Ollama calls; a network hiccup will crash the bot.
|
||||
- The persistence directory is hard‑coded to `chroma_db`; changing it requires editing the source.
|
||||
|
||||
Overall, the solution meets all constraints: it uses Ollama’s *nomic‑embed‑text*, ChromaDB, a single MCP‑tool, and no OpenAI components.
|
||||
Reference in New Issue
Block a user