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

113 lines
2.4 KiB
Markdown

# FAQ Bot with ChromaDB and moderate-censor
This project implements an FAQ bot that uses **ChromaDB** for vector storage and retrieval, and **moderate-censor** as the single MCP-tool for content moderation.
## Features
- Vector-based FAQ retrieval using OpenAI embeddings and ChromaDB.
- User input moderation with moderate-censor.
- Simple HTTP API (`/ask`) to query the bot.
## Prerequisites
- Node.js v18+ (or any LTS version)
- npm
- OpenAI API key (set in `.env`)
- ChromaDB server running locally (default path: `chromadb`)
## Setup
1. **Clone the repository**
```bash
git clone <repo-url>
cd <repo-directory>
```
2. **Install dependencies**
```bash
npm install
```
3. **Create a `.env` file**
```env
OPENAI_API_KEY=your_openai_api_key
PORT=3000
```
4. **Prepare FAQ data**
Create a `faq.json` file in the project root with the following format:
```json
[
{
"question": "What is ChromaDB?",
"answer": "ChromaDB is a vector database for storing and retrieving embeddings."
},
{
"question": "How do I use the bot?",
"answer": "Send a POST request to /ask with a JSON body containing the 'question' field."
}
]
```
5. **Ingest FAQ data**
```bash
npm run ingest
```
This will read `faq.json`, generate embeddings, and store them in ChromaDB.
6. **Start the bot**
```bash
npm start
```
The server will listen on the port specified in `.env` (default 3000).
## Usage
Send a POST request to `/ask`:
```bash
curl -X POST http://localhost:3000/ask \
-H "Content-Type: application/json" \
-d '{"question":"What is ChromaDB?"}'
```
Response:
```json
{
"answer": "ChromaDB is a vector database for storing and retrieving embeddings."
}
```
If the question contains disallowed content, the bot will respond with a 403 status and reasons.
## Project Structure
```
├── package.json
├── src
│ ├── index.js # HTTP server and bot logic
│ ├── ingest.js # FAQ ingestion script
│ └── middleware.js # Moderation middleware
├── faq.json # FAQ data file
└── README.md
```
## Notes
- The bot uses the `text-embedding-ada-002` model for embeddings.
- Only one MCP-tool (`moderate-censor`) is used as required.
- Ensure the ChromaDB server is running before ingesting data or starting the bot.
## License
MIT License