655 lines
28 KiB
Markdown
655 lines
28 KiB
Markdown
# AI-native Technical Support Ticket Platform Design
|
|
|
|
Date: 2026-06-30
|
|
|
|
## 1. Product Positioning
|
|
|
|
This project is a new long-term product, independent from the existing `finance-it-support` repository.
|
|
|
|
It is an AI-native technical support ticket system for single-enterprise private deployment. It is not a traditional ticket system with AI bolted on, and it is not a generic Agent platform. The core business assets are tickets, business knowledge, and reusable solutions. AI capabilities exist to improve ticket creation, support analysis, knowledge reuse, and operational review.
|
|
|
|
The system should be built as an independent Git repository so all design, code, migration scripts, and deployment assets have their own version history.
|
|
|
|
## 2. Core Principles
|
|
|
|
| Principle | Decision |
|
|
|---|---|
|
|
| Tickets are the business spine | AI capabilities must serve ticket creation, handling, review, and knowledge reuse. |
|
|
| Business knowledge is a first-class asset | Documents, historical tickets, FAQs, and reusable solutions must be searchable, citable, and auditable. |
|
|
| Agents are controlled executors | Agents produce suggestions, drafts, and analysis by default. Business writes require human confirmation. |
|
|
| Skills are reusable capability templates | MVP Skills are configuration-driven, not arbitrary Python code. |
|
|
| MCP is the external tool boundary | Tools are authorized, risk-classified, and audited. Read-only tools come first. |
|
|
| Model gateway isolates providers | The system supports OpenAI-compatible channels and model comparison across chat, vision, multimodal, and embedding models. |
|
|
| Enterprise governance is foundational | Single-enterprise RBAC, menu permissions, button permissions, operation audit, and Agent audit should be implemented early. |
|
|
| Design system comes first | Frontend development starts from product theme tokens and reusable components, not ad hoc page styling. |
|
|
|
|
## 3. Overall Architecture
|
|
|
|
The product has four layers:
|
|
|
|
| Layer | Responsibility |
|
|
|---|---|
|
|
| Ticket business layer | Ticket lifecycle, comments, attachments, status transitions, reusable solutions, exports, statistics. |
|
|
| Business knowledge layer | Knowledge bases, documents, chunks, structured knowledge items, reusable solutions, citations. |
|
|
| AI platform layer | Model providers, model configs, Agents, Skills, MCP tools, vector retrieval, execution traces. |
|
|
| Enterprise governance layer | Users, groups, roles, menus, button permissions, audit logs, system settings. |
|
|
|
|
Relationship:
|
|
|
|
```text
|
|
Users / permissions / audit
|
|
↓
|
|
Tickets ←→ Business knowledge / reusable solutions
|
|
↓ ↓
|
|
Agents / Skills / MCP / model gateway
|
|
↓
|
|
LLMs / vision models / embedding models / vector retrieval
|
|
```
|
|
|
|
Tickets and knowledge are business assets. AI is the capability amplifier. Permissions and audit form the trust boundary.
|
|
|
|
## 4. MVP Scope
|
|
|
|
MVP means a complete platform skeleton with minimal but real closed loops in every core module.
|
|
|
|
### Included
|
|
|
|
| Module | MVP Capabilities |
|
|
|---|---|
|
|
| Enterprise admin | Users, user groups, roles, menus, button permissions, operation audit. |
|
|
| Tickets | Create, list, detail, edit, status transition, comments, attachments, export. |
|
|
| Ticket events | Status and key field changes recorded as events. |
|
|
| Reusable solutions | Solution library, ticket-solution links, usage count, solution recommendation. |
|
|
| Knowledge base | Document upload, parsing, chunking, embedding, retrieval, structured knowledge items. |
|
|
| Model gateway | OpenAI-compatible providers, model configs, capabilities, model tests, multi-model comparison. |
|
|
| Agents | Ticket creation Agent, support analysis Agent, knowledge distillation Agent. |
|
|
| Skills | Configuration-driven prompt templates with input/output schemas. |
|
|
| MCP tools | Tool server registration, tool sync, risk level, Agent binding, call audit. |
|
|
| Agent audit | Agent runs, steps, model calls, retrieval, tool calls, AI artifact adoption. |
|
|
| Migration | Import historical tickets only, then vectorize and distill useful solutions/knowledge. |
|
|
| Frontend design system | Theme tokens, base components, layout templates, status badges, table/form standards. |
|
|
|
|
### Excluded From MVP
|
|
|
|
| Excluded Item | Reason |
|
|
|---|---|
|
|
| Multi-tenant SaaS | Current target is single-enterprise private deployment. |
|
|
| Complex BPMN workflow | Status lifecycle is enough for MVP. |
|
|
| Automatic dispatch loop | Requires more operational data and trust. |
|
|
| Automatic ticket closure | Too risky for first version. |
|
|
| Arbitrary Python code Skills | Security and sandboxing should come later. |
|
|
| Autonomous multi-Agent collaboration | Not needed for the first closed loop. |
|
|
| Unattended production remediation | High-risk MCP actions are out of scope. |
|
|
| Full compatibility with old system fields | This is a new product, not a clone of the old schema. |
|
|
|
|
## 5. Recommended Technology Stack
|
|
|
|
| Area | Choice |
|
|
|---|---|
|
|
| Backend | Django + Django Ninja |
|
|
| Database | PostgreSQL + pgvector |
|
|
| Async jobs | Celery + Redis |
|
|
| File storage | MinIO / S3-compatible storage |
|
|
| AI SDK | OpenAI Python SDK-compatible provider adapter |
|
|
| Frontend | React + Vite |
|
|
| UI base | Tailwind CSS + shadcn/ui + Radix UI |
|
|
| Tables | TanStack Table |
|
|
| Forms | React Hook Form + Zod |
|
|
| Icons | lucide-react |
|
|
| Charts | Recharts |
|
|
| Deployment | Docker Compose first |
|
|
|
|
The backend should start as a modular monolith. Code boundaries should be clear enough to split heavy workers later, but runtime should stay simple during MVP.
|
|
|
|
Recommended Django apps:
|
|
|
|
```text
|
|
apps/accounts
|
|
apps/tickets
|
|
apps/knowledge
|
|
apps/solutions
|
|
apps/modelhub
|
|
apps/agents
|
|
apps/skills
|
|
apps/tools
|
|
apps/audit
|
|
apps/system
|
|
```
|
|
|
|
## 6. Data Model Baseline
|
|
|
|
### 6.1 Ticket Core
|
|
|
|
`ticket` should be a slim main table. It answers: what is this ticket, what state is it in, and who owns it now.
|
|
|
|
| Field | Type Suggestion | Meaning | Notes |
|
|
|---|---|---|---|
|
|
| `id` | bigint / uuid | Ticket primary key | New system ID. |
|
|
| `ticket_no` | varchar | User-facing ticket number | Example: `TK202607010001`. |
|
|
| `title` | varchar | Ticket title | Core list/search field. |
|
|
| `description` | text | Problem description | User-confirmed description. |
|
|
| `category_id` | bigint | Ticket category | References `ticket_category`. |
|
|
| `status` | varchar | Ticket status | Pending info, pending handling, in progress, pending confirmation, resolved, closed. |
|
|
| `priority` | varchar | Priority | Low, medium, high, urgent. |
|
|
| `impact_scope` | varchar | Impact scope | Single user, branch, system-level, etc. |
|
|
| `environment` | varchar | Environment | Production, test, staging, local. |
|
|
| `related_system_id` | bigint | Related system | References a system dictionary table. |
|
|
| `requester_id` | bigint | Requester | References user. |
|
|
| `assignee_id` | bigint | Current assignee | References user. |
|
|
| `created_by` | bigint | Creator | Supports creating on behalf of another user. |
|
|
| `created_at` | datetime | Created time | System field. |
|
|
| `updated_at` | datetime | Updated time | System field. |
|
|
| `resolved_at` | datetime | Resolved time | Set when resolved. |
|
|
| `closed_at` | datetime | Closed time | Set when closed. |
|
|
|
|
Fields intentionally excluded from `ticket`:
|
|
|
|
| Data | Destination | Reason |
|
|
|---|---|---|
|
|
| Old system ID/source/raw JSON | Temporary migration staging only | Avoid polluting the new long-term model. |
|
|
| Collaborators | `ticket_collaborator` | Many-to-many relation. |
|
|
| Attachments | `ticket_attachment` | Large parsed/OCR content grows independently. |
|
|
| Comments | `ticket_comment` | One-to-many communication history. |
|
|
| Status and field changes | `ticket_event` | Audit and timeline. |
|
|
| Resolution details | `ticket_resolution` and `solution` | Separate instance handling from reusable solutions. |
|
|
| AI output | `ticket_ai_artifact` and `agent_run` | AI output has versions, sources, and confidence. |
|
|
|
|
### 6.2 Ticket Subtables
|
|
|
|
`ticket_comment`
|
|
|
|
| Field | Type Suggestion | Meaning | Notes |
|
|
|---|---|---|---|
|
|
| `id` | bigint / uuid | Comment ID | |
|
|
| `ticket_id` | bigint | Ticket ID | |
|
|
| `content` | text | Comment content | Communication or handling note. |
|
|
| `comment_type` | varchar | Comment type | User supplement, internal note, system event, AI suggestion. |
|
|
| `visibility` | varchar | Visibility | Internal or requester-visible. |
|
|
| `created_by` | bigint | Creator | User or system Agent identity. |
|
|
| `created_at` | datetime | Created time | |
|
|
|
|
`ticket_attachment`
|
|
|
|
| Field | Type Suggestion | Meaning | Notes |
|
|
|---|---|---|---|
|
|
| `id` | bigint / uuid | Attachment ID | |
|
|
| `ticket_id` | bigint | Ticket ID | |
|
|
| `file_name` | varchar | Original file name | |
|
|
| `file_type` | varchar | File type | Image, log, document, archive. |
|
|
| `mime_type` | varchar | MIME type | |
|
|
| `file_size` | bigint | File size | Bytes. |
|
|
| `storage_path` | varchar | Storage path | MinIO/S3 key. |
|
|
| `ocr_text` | text | OCR or image understanding text | Optional. |
|
|
| `parsed_text` | text | Parsed document/log text | Optional. |
|
|
| `created_by` | bigint | Uploader | |
|
|
| `created_at` | datetime | Uploaded time | |
|
|
|
|
`ticket_event`
|
|
|
|
| Field | Type Suggestion | Meaning | Notes |
|
|
|---|---|---|---|
|
|
| `id` | bigint / uuid | Event ID | |
|
|
| `ticket_id` | bigint | Ticket ID | |
|
|
| `event_type` | varchar | Event type | Status change, assignment, edit, close, AI analysis. |
|
|
| `from_value` | jsonb | Previous value | Snapshot or field value. |
|
|
| `to_value` | jsonb | New value | Snapshot or field value. |
|
|
| `operator_id` | bigint | Operator | User ID. |
|
|
| `remark` | text | Remark | Optional. |
|
|
| `created_at` | datetime | Event time | |
|
|
|
|
`ticket_category`
|
|
|
|
| Field | Type Suggestion | Meaning | Notes |
|
|
|---|---|---|---|
|
|
| `id` | bigint / uuid | Category ID | |
|
|
| `parent_id` | bigint | Parent category | Supports hierarchy. |
|
|
| `name` | varchar | Category name | |
|
|
| `code` | varchar | Category code | Useful for imports and rules. |
|
|
| `description` | text | Description | Can be used as AI classification context. |
|
|
| `enabled` | boolean | Enabled | |
|
|
| `sort_order` | int | Sort order | |
|
|
|
|
### 6.3 Resolution And Reusable Solutions
|
|
|
|
`ticket_resolution` records the handling result of one ticket.
|
|
|
|
| Field | Type Suggestion | Meaning | Notes |
|
|
|---|---|---|---|
|
|
| `id` | bigint / uuid | Resolution ID | |
|
|
| `ticket_id` | bigint | Ticket ID | |
|
|
| `resolution_type` | varchar | Resolution type | Resolved, workaround, transferred, cannot reproduce. |
|
|
| `root_cause` | text | Case-specific root cause | Optional. |
|
|
| `solution_text` | text | Case-specific handling note | Human-confirmed. |
|
|
| `linked_solution_id` | bigint | Linked reusable solution | Optional. |
|
|
| `confirmed_by` | bigint | Confirmer | |
|
|
| `created_at` | datetime | Created time | |
|
|
| `updated_at` | datetime | Updated time | |
|
|
|
|
`solution` records reusable support solutions.
|
|
|
|
| Field | Type Suggestion | Meaning | Notes |
|
|
|---|---|---|---|
|
|
| `id` | bigint / uuid | Solution ID | |
|
|
| `title` | varchar | Solution title | |
|
|
| `problem_signature` | text | Problem signature | Error code, symptom, key log. |
|
|
| `related_system_id` | bigint | Related system | Optional. |
|
|
| `environment_scope` | varchar | Environment scope | |
|
|
| `category_id` | bigint | Category | |
|
|
| `root_cause` | text | Common root cause | |
|
|
| `solution` | text | Standard solution steps | |
|
|
| `risk_note` | text | Risk note | |
|
|
| `status` | varchar | Status | Draft, published, disabled. |
|
|
| `usage_count` | int | Usage count | Incremented when adopted. |
|
|
| `created_by` | bigint | Creator | |
|
|
| `updated_at` | datetime | Updated time | |
|
|
|
|
`ticket_solution_link`
|
|
|
|
| Field | Type Suggestion | Meaning | Notes |
|
|
|---|---|---|---|
|
|
| `ticket_id` | bigint | Ticket ID | |
|
|
| `solution_id` | bigint | Solution ID | |
|
|
| `link_type` | varchar | Link type | Recommended, adopted, referenced. |
|
|
| `agent_run_id` | bigint | Agent source | Optional. |
|
|
| `created_by` | bigint | Creator | |
|
|
| `created_at` | datetime | Created time | |
|
|
|
|
### 6.4 Knowledge Base
|
|
|
|
`knowledge_base`
|
|
|
|
| Field | Type Suggestion | Meaning | Notes |
|
|
|---|---|---|---|
|
|
| `id` | bigint / uuid | Knowledge base ID | |
|
|
| `name` | varchar | Name | Example: payment system knowledge base. |
|
|
| `description` | text | Description | |
|
|
| `scope` | varchar | Scope | System, business line, department. |
|
|
| `enabled` | boolean | Enabled | |
|
|
| `created_by` | bigint | Creator | |
|
|
| `created_at` | datetime | Created time | |
|
|
| `updated_at` | datetime | Updated time | |
|
|
|
|
`knowledge_document`
|
|
|
|
| Field | Type Suggestion | Meaning | Notes |
|
|
|---|---|---|---|
|
|
| `id` | bigint / uuid | Document ID | |
|
|
| `knowledge_base_id` | bigint | Knowledge base ID | |
|
|
| `file_name` | varchar | Original file name | |
|
|
| `file_type` | varchar | File type | PDF, Word, Markdown, log, etc. |
|
|
| `storage_path` | varchar | Storage path | MinIO/S3 key. |
|
|
| `parse_status` | varchar | Parse status | Pending, parsing, success, failed. |
|
|
| `parse_error` | text | Parse error | Optional. |
|
|
| `created_by` | bigint | Uploader | |
|
|
| `created_at` | datetime | Uploaded time | |
|
|
|
|
`knowledge_item`
|
|
|
|
| Field | Type Suggestion | Meaning | Notes |
|
|
|---|---|---|---|
|
|
| `id` | bigint / uuid | Knowledge item ID | |
|
|
| `knowledge_base_id` | bigint | Knowledge base ID | |
|
|
| `title` | varchar | Title | |
|
|
| `problem` | text | Problem symptom | |
|
|
| `applicable_scope` | text | Applicable scope | System, version, environment, branch. |
|
|
| `error_code` | varchar | Error code | Optional. |
|
|
| `root_cause` | text | Possible cause | |
|
|
| `troubleshooting_steps` | text | Troubleshooting steps | |
|
|
| `solution` | text | Solution | |
|
|
| `risk_note` | text | Risk note | |
|
|
| `status` | varchar | Status | Draft, published, disabled. |
|
|
| `source_type` | varchar | Source type | Manual, document, ticket, AI draft. |
|
|
| `source_ticket_id` | bigint | Source ticket | Optional. |
|
|
| `created_by` | bigint | Creator | |
|
|
| `reviewed_by` | bigint | Reviewer | Optional in MVP. |
|
|
| `created_at` | datetime | Created time | |
|
|
| `updated_at` | datetime | Updated time | |
|
|
|
|
`knowledge_chunk`
|
|
|
|
| Field | Type Suggestion | Meaning | Notes |
|
|
|---|---|---|---|
|
|
| `id` | bigint / uuid | Chunk ID | |
|
|
| `knowledge_base_id` | bigint | Knowledge base ID | Retrieval filter. |
|
|
| `document_id` | bigint | Source document | Optional. |
|
|
| `item_id` | bigint | Source item | Optional. |
|
|
| `chunk_index` | int | Chunk index | |
|
|
| `content` | text | Chunk content | Retrieval context. |
|
|
| `embedding` | vector | Embedding | pgvector field. |
|
|
| `embedding_model_id` | bigint | Embedding model | References model config. |
|
|
| `metadata` | jsonb | Metadata | Page, heading, tags, etc. |
|
|
| `created_at` | datetime | Created time | |
|
|
|
|
### 6.5 AI Platform Tables
|
|
|
|
`model_provider`
|
|
|
|
| Field | Type Suggestion | Meaning | Notes |
|
|
|---|---|---|---|
|
|
| `id` | bigint / uuid | Provider ID | |
|
|
| `name` | varchar | Provider name | OpenAI, Azure, private model, etc. |
|
|
| `provider_type` | varchar | Provider type | openai-compatible, custom. |
|
|
| `base_url` | varchar | API base URL | Supports custom channels. |
|
|
| `api_key_encrypted` | text | Encrypted API key | Never store plaintext. |
|
|
| `enabled` | boolean | Enabled | |
|
|
| `created_at` | datetime | Created time | |
|
|
| `updated_at` | datetime | Updated time | |
|
|
|
|
`model_config`
|
|
|
|
| Field | Type Suggestion | Meaning | Notes |
|
|
|---|---|---|---|
|
|
| `id` | bigint / uuid | Model config ID | |
|
|
| `provider_id` | bigint | Provider ID | |
|
|
| `name` | varchar | Display name | |
|
|
| `model_name` | varchar | API model name | |
|
|
| `capabilities` | jsonb | Capability tags | chat, vision, embedding, multimodal. |
|
|
| `default_parameters` | jsonb | Default params | temperature, max_tokens, etc. |
|
|
| `is_default_chat` | boolean | Default chat model | |
|
|
| `is_default_embedding` | boolean | Default embedding model | |
|
|
| `enabled` | boolean | Enabled | |
|
|
|
|
`agent_definition`
|
|
|
|
| Field | Type Suggestion | Meaning | Notes |
|
|
|---|---|---|---|
|
|
| `id` | bigint / uuid | Agent ID | |
|
|
| `name` | varchar | Agent name | Ticket creation Agent, support analysis Agent. |
|
|
| `agent_type` | varchar | Agent type | ticket_create, ticket_analysis, knowledge_draft. |
|
|
| `description` | text | Description | |
|
|
| `model_config_id` | bigint | Model config | Can override default. |
|
|
| `system_prompt` | text | System prompt | Behavior constraints. |
|
|
| `output_schema` | jsonb | Output schema | Structured output. |
|
|
| `allowed_knowledge_base_ids` | jsonb | Allowed knowledge bases | MVP can store JSON IDs. |
|
|
| `allowed_skill_ids` | jsonb | Allowed Skills | |
|
|
| `allowed_tool_ids` | jsonb | Allowed MCP tools | |
|
|
| `requires_human_confirm` | boolean | Requires confirmation | Default true. |
|
|
| `enabled` | boolean | Enabled | |
|
|
| `created_at` | datetime | Created time | |
|
|
| `updated_at` | datetime | Updated time | |
|
|
|
|
`agent_run`
|
|
|
|
| Field | Type Suggestion | Meaning | Notes |
|
|
|---|---|---|---|
|
|
| `id` | bigint / uuid | Run ID | |
|
|
| `agent_id` | bigint | Agent ID | |
|
|
| `ticket_id` | bigint | Ticket ID | Nullable for tests. |
|
|
| `run_type` | varchar | Run type | Creation, analysis, knowledge draft, test. |
|
|
| `input_snapshot` | jsonb | Input snapshot | Ticket, attachment summary, user input. |
|
|
| `output` | jsonb | Output result | Structured suggestion. |
|
|
| `status` | varchar | Status | running, success, failed, cancelled. |
|
|
| `error_message` | text | Error message | Optional. |
|
|
| `created_by` | bigint | Triggering user | |
|
|
| `started_at` | datetime | Started time | |
|
|
| `finished_at` | datetime | Finished time | |
|
|
|
|
`agent_step`
|
|
|
|
| Field | Type Suggestion | Meaning | Notes |
|
|
|---|---|---|---|
|
|
| `id` | bigint / uuid | Step ID | |
|
|
| `run_id` | bigint | Agent run ID | |
|
|
| `step_type` | varchar | Step type | model_call, retrieval, tool_call, skill, human_confirm. |
|
|
| `step_name` | varchar | Step name | |
|
|
| `input` | jsonb | Step input | Sensitive data should be masked. |
|
|
| `output` | jsonb | Step output | |
|
|
| `latency_ms` | int | Latency | Milliseconds. |
|
|
| `status` | varchar | Status | success, failed, skipped. |
|
|
| `error_message` | text | Error message | Optional. |
|
|
| `created_at` | datetime | Created time | |
|
|
|
|
`ticket_ai_artifact`
|
|
|
|
| Field | Type Suggestion | Meaning | Notes |
|
|
|---|---|---|---|
|
|
| `id` | bigint / uuid | Artifact ID | |
|
|
| `ticket_id` | bigint | Ticket ID | |
|
|
| `agent_run_id` | bigint | Agent run ID | |
|
|
| `artifact_type` | varchar | Artifact type | Summary, field suggestion, analysis, reply draft. |
|
|
| `content` | jsonb | Artifact content | Structured AI output. |
|
|
| `confidence` | decimal | Confidence | Optional. |
|
|
| `accepted_by` | bigint | Adopting user | Nullable. |
|
|
| `accepted_at` | datetime | Adopted time | Nullable. |
|
|
|
|
### 6.6 Skills And MCP Tools
|
|
|
|
`skill_definition`
|
|
|
|
| Field | Type Suggestion | Meaning | Notes |
|
|
|---|---|---|---|
|
|
| `id` | bigint / uuid | Skill ID | |
|
|
| `name` | varchar | Skill name | |
|
|
| `description` | text | Description | |
|
|
| `scenario` | varchar | Scenario | Creation, analysis, reply, knowledge distillation. |
|
|
| `prompt_template` | text | Prompt template | Supports variables. |
|
|
| `input_schema` | jsonb | Input schema | |
|
|
| `output_schema` | jsonb | Output schema | |
|
|
| `allowed_tool_ids` | jsonb | Allowed tools | Optional in MVP. |
|
|
| `enabled` | boolean | Enabled | |
|
|
| `created_at` | datetime | Created time | |
|
|
| `updated_at` | datetime | Updated time | |
|
|
|
|
`tool_server`
|
|
|
|
| Field | Type Suggestion | Meaning | Notes |
|
|
|---|---|---|---|
|
|
| `id` | bigint / uuid | MCP server ID | |
|
|
| `name` | varchar | Server name | Example: log platform MCP. |
|
|
| `server_url` | varchar | Server URL | |
|
|
| `auth_type` | varchar | Auth type | none, token, basic, custom. |
|
|
| `auth_config_encrypted` | text | Encrypted auth config | |
|
|
| `enabled` | boolean | Enabled | |
|
|
| `created_at` | datetime | Created time | |
|
|
|
|
`tool_definition`
|
|
|
|
| Field | Type Suggestion | Meaning | Notes |
|
|
|---|---|---|---|
|
|
| `id` | bigint / uuid | Tool ID | |
|
|
| `server_id` | bigint | MCP server ID | |
|
|
| `name` | varchar | Tool name | |
|
|
| `description` | text | Description | |
|
|
| `input_schema` | jsonb | Input schema | Synced from MCP. |
|
|
| `risk_level` | varchar | Risk level | low, medium, high. |
|
|
| `requires_human_confirm` | boolean | Requires confirmation | High risk defaults true. |
|
|
| `enabled` | boolean | Enabled | |
|
|
|
|
`tool_call`
|
|
|
|
| Field | Type Suggestion | Meaning | Notes |
|
|
|---|---|---|---|
|
|
| `id` | bigint / uuid | Tool call ID | |
|
|
| `run_id` | bigint | Agent run ID | |
|
|
| `tool_id` | bigint | Tool ID | |
|
|
| `input` | jsonb | Call input | |
|
|
| `output` | jsonb | Call output | |
|
|
| `status` | varchar | Status | success, failed, blocked, waiting_confirm. |
|
|
| `confirmed_by` | bigint | Confirmer | Nullable. |
|
|
| `created_at` | datetime | Call time | |
|
|
|
|
## 7. Agent, Skill, MCP Boundaries
|
|
|
|
| Concept | Responsibility |
|
|
|---|---|
|
|
| Agent | Owns the task goal and execution flow. |
|
|
| Skill | Provides reusable professional capability templates. |
|
|
| MCP | Provides authorized external tool access. |
|
|
|
|
MVP built-in Agents:
|
|
|
|
| Agent | Goal | Input | Output | Auto-write business data |
|
|
|---|---|---|---|---|
|
|
| Ticket creation Agent | Help users create complete tickets | Description, images, attachment summaries | Field drafts, missing-info questions, category suggestions, similar tickets | No |
|
|
| Support analysis Agent | Help support engineers analyze tickets | Ticket detail, comments, attachments, knowledge retrieval | Possible causes, steps, solution recommendations, reply draft | No |
|
|
| Knowledge distillation Agent | Turn resolved tickets into knowledge | Ticket, comments, adopted solution | Solution draft, knowledge item draft | No |
|
|
|
|
MVP Skill examples:
|
|
|
|
| Skill | Purpose |
|
|
|---|---|
|
|
| Field extraction | Extract ticket fields from natural language. |
|
|
| Missing-info question generation | Identify missing key information and ask concise questions. |
|
|
| Similar ticket summary | Summarize historical similar tickets. |
|
|
| Solution recommendation | Recommend reusable solutions from the solution library. |
|
|
| Customer reply generation | Draft user-facing replies. |
|
|
| Screenshot understanding | Extract errors and system clues from screenshots. |
|
|
| Knowledge draft generation | Create knowledge drafts from resolved tickets. |
|
|
|
|
MCP rules:
|
|
|
|
| Risk Level | Examples | MVP Strategy |
|
|
|---|---|---|
|
|
| low | Search docs, search historical tickets | Auto-call allowed if Agent is authorized. |
|
|
| medium | Query logs, monitoring, read-only business status | Auto-call allowed with full audit. |
|
|
| high | Modify config, run commands, restart services | Not available in MVP or requires human confirmation. |
|
|
|
|
## 8. Frontend Product Shape
|
|
|
|
The frontend should feel like a minimal, designed enterprise AI workbench.
|
|
|
|
Navigation groups:
|
|
|
|
```text
|
|
Workspace
|
|
Tickets
|
|
Knowledge Base
|
|
Solutions
|
|
Agents
|
|
Models & Tools
|
|
System Management
|
|
```
|
|
|
|
Core pages:
|
|
|
|
| Module | Page | Goal |
|
|
|---|---|---|
|
|
| Workspace | My tasks | Pending tickets and confirmations. |
|
|
| Workspace | Support overview | Trends, high-frequency issues, Agent usage. |
|
|
| Tickets | Ticket list | Search, filter, export, batch operations. |
|
|
| Tickets | Create ticket | Form plus ticket creation Agent. |
|
|
| Tickets | Ticket detail | Handling, comments, attachments, AI analysis, solution links. |
|
|
| Knowledge | Knowledge bases | Manage business knowledge scopes. |
|
|
| Knowledge | Documents | Upload, parse, chunk, vectorize. |
|
|
| Knowledge | Knowledge items | Maintain structured knowledge. |
|
|
| Solutions | Solution library | Manage reusable solutions. |
|
|
| Agents | Agent config | Configure models, Skills, knowledge, tools, safety. |
|
|
| Agents | Agent runs | Inspect runs and steps. |
|
|
| Models & Tools | Model providers | Configure channels and model capabilities. |
|
|
| Models & Tools | Model testing | Compare model outputs. |
|
|
| Models & Tools | MCP tools | Register services, sync tools, configure risk. |
|
|
| System | Users and groups | User/group/role management. |
|
|
| System | Permissions | Menu and button permissions. |
|
|
| System | Audit logs | Operation and login logs. |
|
|
|
|
## 9. Frontend Design System Requirement
|
|
|
|
Frontend development must start with a design system.
|
|
|
|
Dependency structure:
|
|
|
|
```text
|
|
shadcn/ui / Radix UI / Tailwind
|
|
↓
|
|
Product Design System
|
|
↓
|
|
Business Components
|
|
↓
|
|
Pages
|
|
```
|
|
|
|
Business pages should use project-level components instead of direct ad hoc styles.
|
|
|
|
Required first-phase design tokens and standards:
|
|
|
|
| Type | Content |
|
|
|---|---|
|
|
| Color | Primary, background, surface, border, text, status, risk, priority. |
|
|
| Typography | Font sizes, line heights, weights. |
|
|
| Spacing | Page padding, section gaps, form/table density. |
|
|
| Radius | Buttons, inputs, dialogs, cards. |
|
|
| Shadow | Only for popovers, dialogs, dropdowns. |
|
|
| Icons | Unified lucide-react icons. |
|
|
| Tables | Filter bar, toolbar, density, pagination, empty state. |
|
|
| Forms | Label alignment, validation, required fields, grouping. |
|
|
| Badges | Ticket status, priority, Agent state, tool risk level. |
|
|
| Layouts | List page, detail page, config page, workbench templates. |
|
|
| AI UI | Running, success, failed, references, adoption buttons, trace display. |
|
|
|
|
Suggested product components:
|
|
|
|
```text
|
|
AppButton
|
|
AppInput
|
|
AppSelect
|
|
AppTable
|
|
AppForm
|
|
AppDialog
|
|
AppDrawer
|
|
AppStatusBadge
|
|
AppPriorityBadge
|
|
AppPageHeader
|
|
AppFilterBar
|
|
AppDetailLayout
|
|
AppAuditTimeline
|
|
AgentRunPanel
|
|
KnowledgeReferenceList
|
|
SolutionRecommendationCard
|
|
```
|
|
|
|
Rules:
|
|
|
|
- Do not write raw color values in business pages.
|
|
- Do not define one-off status badges in pages.
|
|
- Do not build complex tables from scratch per page.
|
|
- Use unified components for Agent traces, knowledge references, and solution recommendations.
|
|
- AI accent color should be restrained. AI is a capability, not the whole visual identity.
|
|
|
|
## 10. Development Milestones
|
|
|
|
| Stage | Goal | Key Deliverables |
|
|
|---|---|---|
|
|
| 0. Product skeleton and design system | Establish project foundation | Backend init, frontend init, Docker Compose, auth, RBAC, audit, design tokens, base components. |
|
|
| 1. Ticket workflow | Replace traditional ticket minimum loop | Ticket CRUD, status flow, comments, attachments, events, export, reusable solutions. |
|
|
| 2. Knowledge and vector retrieval | Make knowledge a core asset | Knowledge base, document parsing, chunks, embeddings, retrieval, knowledge drafts. |
|
|
| 3. Model gateway and Agent/Skill | Establish AI platform capability | Providers, model configs, model comparison, Skills, built-in Agents, Agent runs/steps. |
|
|
| 4. MCP tools and trust boundary | Add controlled tool access | MCP registration, tool sync, risk level, Agent binding, tool calls, confirmation. |
|
|
| 5. Historical migration and polish | Prepare trial replacement | Import historical tickets, vectorize, distill solutions, dashboards, UI polish. |
|
|
|
|
## 11. Historical Ticket Migration
|
|
|
|
Only historical tickets should be migrated. Old users, roles, menus, and organization structures should not be migrated.
|
|
|
|
| Stage | Goal | Approach | Output |
|
|
|---|---|---|---|
|
|
| Raw import | Make historical tickets searchable | Map old records into the new ticket structure via migration staging. | Historical ticket list/detail. |
|
|
| Standardization | Improve retrieval quality | Use rules/AI to extract title, category, system, environment, error codes. | Standard fields and summaries. |
|
|
| Vectorization | Support similar ticket search | Embed description, handling notes, and solution text. | Historical tickets available to retrieval. |
|
|
| Knowledge distillation | Convert valuable tickets into knowledge | Generate drafts, then manually publish. | `solution`, `knowledge_item`, `knowledge_chunk`. |
|
|
| User mapping | Avoid legacy org lock-in | Keep old people names as text where needed; optionally bind to new users later. | Migration remains lightweight. |
|
|
|
|
## 12. Acceptance Criteria For The First Architecture Slice
|
|
|
|
The first usable architecture slice is complete when:
|
|
|
|
- The system can run locally with Docker Compose.
|
|
- Admin users can log in and manage users/groups/permissions.
|
|
- The design system has a preview page and business pages use shared components.
|
|
- Users can create and process tickets end to end.
|
|
- Tickets can link to reusable solutions.
|
|
- Documents and knowledge items can be vectorized and retrieved.
|
|
- At least one OpenAI-compatible model provider can be configured and tested.
|
|
- Built-in Agents can create auditable runs and steps.
|
|
- AI artifacts can be accepted, edited, or ignored by users.
|
|
- MCP tools can be registered and audited, with high-risk calls blocked or requiring confirmation.
|
|
|
|
## 13. Open Questions
|
|
|
|
| Topic | Current Decision | Later Decision Needed |
|
|
|---|---|---|
|
|
| Primary key style | bigint or uuid both acceptable | Decide during implementation setup. |
|
|
| Next.js vs Vite | Vite React is preferred for private admin MVP | Revisit only if SSR/BFF becomes necessary. |
|
|
| Code-type Skills | Excluded from MVP | Revisit with sandbox design. |
|
|
| High-risk MCP tools | Excluded or confirmation-only | Revisit after audit and trust model matures. |
|
|
| Workflow engine | Simple status flow for MVP | Revisit if SLA/escalation complexity grows. |
|