@restnfeel/agentc-starter-kit
Version:
한국어 기업용 CMS 모듈 - Task Master AI와 함께 빠르게 웹사이트를 구현할 수 있는 재사용 가능한 컴포넌트 시스템
459 lines (345 loc) • 8.51 kB
Markdown
# RAG Chatbot Library
A comprehensive React-based chatbot library with RAG (Retrieval Augmented Generation) capabilities, built for modern web applications.
## Features
- 🤖 **RAG-powered AI Chat** - Intelligent responses with document-based knowledge
- 📚 **Document Management** - Upload and manage various document formats (PDF, DOCX, TXT, etc.)
- 🔍 **Semantic Search** - Vector-based document search and retrieval
- 🌐 **Multi-language Support** - Built-in internationalization (i18n)
- 🎨 **Customizable UI** - Flexible theming and styling options
- 📱 **Responsive Design** - Works on desktop and mobile devices
- 🔧 **Admin Tools** - Knowledge management and configuration interfaces
- 🧪 **Well Tested** - Comprehensive test coverage with Jest and React Testing Library
- 📦 **TypeScript** - Full type safety and excellent developer experience
## Installation
```bash
npm install @restnfeel/agentc-starter-kit
```
### Peer Dependencies
Make sure you have the following peer dependencies installed:
```bash
npm install react react-dom next @prisma/client @supabase/supabase-js
```
## Quick Start
### 1. Basic Setup
```tsx
import {
ChatbotProvider,
ChatbotWidget,
} from "@restnfeel/agentc-starter-kit/chatbot";
function App() {
return (
<ChatbotProvider>
<div className="app">
{/* Your app content */}
<ChatbotWidget />
</div>
</ChatbotProvider>
);
}
```
### 2. With Configuration
```tsx
import {
ChatbotProvider,
ChatbotWidget,
} from "@restnfeel/agentc-starter-kit/chatbot";
const chatbotConfig = {
llm: {
provider: "openai",
model: "gpt-3.5-turbo",
apiKey: process.env.OPENAI_API_KEY,
maxTokens: 1000,
temperature: 0.7,
},
vectorStore: {
provider: "supabase",
dimensions: 1536,
},
storage: {
provider: "supabase",
bucket: "documents",
},
};
function App() {
return (
<ChatbotProvider config={chatbotConfig}>
<ChatbotWidget
theme={{
primaryColor: "#007bff",
mode: "light",
}}
position="bottom-right"
/>
</ChatbotProvider>
);
}
```
## Components
### Client Components
#### ChatbotWidget
The main chatbot interface that users interact with.
```tsx
import { ChatbotWidget } from "@restnfeel/agentc-starter-kit/chatbot/client";
<ChatbotWidget
theme={{
primaryColor: "#007bff",
mode: "light",
}}
position="bottom-right"
showSuggestedQuestions={true}
placeholder="Ask me anything..."
/>;
```
#### RAGChat
A full-featured chat interface with document support.
```tsx
import { RAGChat } from "@restnfeel/agentc-starter-kit/chatbot/client";
<RAGChat
conversationId="conversation-123"
showDocumentSearch={true}
showUpload={true}
maxHeight="600px"
/>;
```
#### FloatingChatButton
A floating action button to open the chat interface.
```tsx
import { FloatingChatButton } from "@restnfeel/agentc-starter-kit/chatbot/client";
<FloatingChatButton
position="bottom-right"
size="md"
icon={<MessageCircle />}
/>;
```
### Admin Components
#### KnowledgeManagement
Admin interface for managing documents and knowledge base.
```tsx
import { KnowledgeManagement } from "@restnfeel/agentc-starter-kit/chatbot/admin";
<KnowledgeManagement
showUpload={true}
showBulkActions={true}
allowedFileTypes={["pdf", "docx", "txt"]}
maxFileSize="10MB"
/>;
```
#### RAGManager
Advanced admin interface for RAG system configuration.
```tsx
import { RAGManager } from "@restnfeel/agentc-starter-kit/chatbot/admin";
<RAGManager
showAnalytics={true}
showConfiguration={true}
enableBatchProcessing={true}
/>;
```
## Hooks
### useChatbot
Main hook for accessing chatbot functionality.
```tsx
import { useChatbot } from "@restnfeel/agentc-starter-kit/chatbot/hooks";
function ChatComponent() {
const {
isInitialized,
sendMessage,
uploadDocument,
conversations,
currentConversation,
isProcessing,
lastError,
} = useChatbot();
const handleSendMessage = async (content: string) => {
try {
await sendMessage(content);
} catch (error) {
console.error("Failed to send message:", error);
}
};
return <div>{/* Chat UI */}</div>;
}
```
### useDocuments
Hook for document management.
```tsx
import { useDocuments } from "@restnfeel/agentc-starter-kit/chatbot/hooks";
function DocumentManager() {
const {
documents,
uploadDocument,
deleteDocument,
searchDocuments,
isLoading,
} = useDocuments();
return <div>{/* Document management UI */}</div>;
}
```
### useErrorHandler
Hook for centralized error handling.
```tsx
import { useErrorHandler } from "@restnfeel/agentc-starter-kit/chatbot/hooks";
function ChatComponent() {
const { error, hasError, clearError, handleError, getErrorMessage } =
useErrorHandler();
if (hasError) {
return (
<div className="error">
{getErrorMessage()}
<button onClick={clearError}>Dismiss</button>
</div>
);
}
return <div>{/* Normal UI */}</div>;
}
```
## API
### ChatbotAPI
Direct API access for advanced use cases.
```tsx
import { ChatbotAPI } from "@restnfeel/agentc-starter-kit/chatbot/core";
const api = new ChatbotAPI();
// Initialize
await api.initialize({
llm: { provider: "openai", apiKey: "your-key" },
vectorStore: { provider: "memory" },
});
// Send message
const response = await api.sendMessage("Hello", "conversation-id");
// Upload document
const file = new File(["content"], "document.txt");
const document = await api.uploadDocument(file);
// Search documents
const results = await api.searchSimilarDocuments("query");
```
## Configuration
### LLM Providers
#### OpenAI
```typescript
{
llm: {
provider: 'openai',
model: 'gpt-3.5-turbo',
apiKey: process.env.OPENAI_API_KEY,
maxTokens: 1000,
temperature: 0.7,
}
}
```
#### Anthropic
```typescript
{
llm: {
provider: 'anthropic',
model: 'claude-3-sonnet-20240229',
apiKey: process.env.ANTHROPIC_API_KEY,
maxTokens: 1000,
}
}
```
### Vector Store Providers
#### Supabase
```typescript
{
vectorStore: {
provider: 'supabase',
url: process.env.SUPABASE_URL,
apiKey: process.env.SUPABASE_ANON_KEY,
dimensions: 1536,
}
}
```
#### Memory (Development)
```typescript
{
vectorStore: {
provider: 'memory',
dimensions: 1536,
}
}
```
## Styling
### CSS Variables
The library uses CSS variables for theming:
```css
:root {
--chatbot-primary-color: #007bff;
--chatbot-background-color: #ffffff;
--chatbot-text-color: #333333;
--chatbot-border-color: #e0e0e0;
--chatbot-border-radius: 8px;
--chatbot-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
```
### Custom Themes
```tsx
import { useTheme } from "@restnfeel/agentc-starter-kit/chatbot/hooks";
function ThemedChat() {
const { theme, setTheme } = useTheme();
const applyDarkTheme = () => {
setTheme({
mode: "dark",
backgroundColor: "#1a1a1a",
textColor: "#ffffff",
primaryColor: "#3b82f6",
});
};
return <div>{/* Chat UI */}</div>;
}
```
## Internationalization
### Built-in Languages
- English (en)
- Korean (ko)
- Japanese (ja)
- Chinese (zh)
### Usage
```tsx
import { useI18n } from "@restnfeel/agentc-starter-kit/chatbot/hooks";
function ChatComponent() {
const { language, setLanguage, t } = useI18n();
return (
<div>
<button onClick={() => setLanguage("ko")}>한국어</button>
<p>{t("chatbot.welcome")}</p>
</div>
);
}
```
## Testing
### Running Tests
```bash
# Run all chatbot tests
npm run test:chatbot
# Run tests in watch mode
npm run test:chatbot:watch
# Generate coverage report
npm run test:chatbot:coverage
```
### Custom Matchers
The library includes custom Jest matchers:
```javascript
expect(response).toBeValidChatbotResponse();
```
## Building
### Library Build
```bash
# Build the library
npm run build:lib
# Build TypeScript declarations
npm run build:types
# Build everything
npm run build:package
```
## Contributing
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests for new functionality
5. Ensure all tests pass
6. Submit a pull request
## License
MIT License - see the [LICENSE](LICENSE) file for details.
## Support
For questions and support:
- 📧 Email: contact@restnfeel.com
- 🐛 Issues: [GitHub Issues](https://github.com/restnfeel/agentc-starter-kit/issues)
- 📖 Documentation: [Full Documentation](https://docs.restnfeel.com)