Files
patchy631--ai-engineering-hub/streaming-ai-chatbot/README.md
T
2026-07-13 12:37:47 +08:00

158 lines
4.3 KiB
Markdown

# Streaming AI Chatbot
A minimal example demonstrating **real-time AI streaming** and **conversation state management** using the Motia framework.
![streaming-ai-chatbot](docs/images/streaming-ai-chatbot.gif)
## 🚀 Features
- **Real-time AI Streaming**: Token-by-token response generation using OpenAI's streaming API
- **Live State Management**: Conversation state updates in real-time with message history
- **Event-driven Architecture**: Clean API → Event → Streaming Response flow
- **Minimal Complexity**: Maximum impact with just 3 core files
## 📁 Architecture
```
streaming-ai-chatbot/
├── steps/
│ ├── conversation.stream.ts # Real-time conversation state
│ ├── chat-api.step.ts # Simple chat API endpoint
│ └── ai-response.step.ts # Streaming AI response handler
├── package.json # Dependencies
├── tsconfig.json # TypeScript configuration
└── README.md # This file
```
## 🛠️ Setup
### Installation & Setup
```bash
# Clone the repository
git clone https://github.com/patchy631/ai-engineering-hub.git
cd streaming-ai-chatbot
# Install dependencies
npm install
# Start the development server
npm run dev
```
### Configure OpenAI API
```bash
cp .env.example .env
# Edit .env and add your OpenAI API key
```
**Open Motia Workbench**:
Navigate to `http://localhost:3000` to interact with the chatbot
## 🔧 Usage
### Send a Chat Message
**POST** `/chat`
```json
{
"message": "Hello, how are you?",
"conversationId": "optional-conversation-id" // Optional: If not provided, a new conversation will be created
}
```
**Response:**
```json
{
"conversationId": "uuid-v4",
"message": "Message received, AI is responding...",
"status": "streaming"
}
```
The response will update as the AI processes the message, with possible status values:
- `created`: Initial message state
- `streaming`: AI is generating the response
- `completed`: Response is complete with full message
When completed, the response will contain the actual AI message instead of the processing message.
### Real-time State Updates
The conversation state stream provides live updates as the AI generates responses:
- **User messages**: Immediately stored with `status: 'completed'`
- **AI responses**: Start with `status: 'streaming'`, update in real-time, end with `status: 'completed'`
## 🎯 Key Concepts Demonstrated
### 1. **Streaming API Integration**
```typescript
const stream = await openai.chat.completions.create({
model: 'gpt-4o-mini',
messages: [...],
stream: true, // Enable streaming
})
for await (const chunk of stream) {
// Update state with each token
await streams.conversation.set(conversationId, messageId, {
message: fullResponse,
status: 'streaming',
// ...
})
}
```
### 2. **Real-time State Management**
```typescript
export const config: StreamConfig = {
name: 'conversation',
schema: z.object({
message: z.string(),
from: z.enum(['user', 'assistant']),
status: z.enum(['created', 'streaming', 'completed']),
timestamp: z.string(),
}),
baseConfig: { storageType: 'default' },
}
```
### 3. **Event-driven Flow**
```typescript
// API emits event
await emit({
topic: 'chat-message',
data: { message, conversationId, assistantMessageId },
})
// Event handler subscribes and processes
export const config: EventConfig = {
subscribes: ['chat-message'],
// ...
}
```
## 🌟 Why This Example Matters
This example showcases Motia's power in just **3 files**:
- **Effortless streaming**: Real-time AI responses with automatic state updates
- **Type-safe events**: End-to-end type safety from API to event handlers
- **Built-in state management**: No external state libraries needed
- **Scalable architecture**: Event-driven design that grows with your needs
Perfect for demonstrating how Motia makes complex real-time applications simple and maintainable.
## 🔑 Environment Variables
- `OPENAI_API_KEY`: Your OpenAI API key (required)
- `AZURE_OPENAI_ENDPOINT`: Your Azure OpenAI endpoint URL (optional)
- `AZURE_OPENAI_API_KEY`: Your Azure OpenAI API key (optional)
## 📝 Notes
- Azure OpenAI integration code is included but commented out for demo purposes
- The example uses `gpt-4o-mini` model for cost-effective responses
- All conversation data is stored in Motia's built-in state management