feat: 实现 AI-First 代理系统

核心功能:
- AIAgent 模型:AI 代理身份管理
- AIOperationLog: AI 操作日志记录
- AITask: AI 异步任务系统
- AIWebhook: AI webhook 订阅

API 端点:
- POST /api/agents/auth/ - AI 代理认证
- GET/POST /api/agents/ - 代理管理
- GET /api/agent-logs/ - 操作日志查询
- GET/POST /api/agent-tasks/ - 任务管理
- GET/POST /api/agent-webhooks/ - Webhook 管理
- POST /api/batch/ - 批量操作

预置 AI 代理:
- content-moderator-ai: 内容审核 AI
- content-generator-ai: 内容生成 AI
- service-curator-ai: 服务推荐 AI
- analytics-ai: 数据分析 AI
- admin-ai: 管理员 AI

文档:
- AI_AGENT.md: AI-First 设计文档
- init_agents.py: AI 代理初始化脚本

测试:
- 认证系统测试通过
- JWT token 生成正常
- 权限系统工作正常
This commit is contained in:
maoshen
2026-04-12 11:40:11 +00:00
parent a60bb6f652
commit d9e09b61ee
30 changed files with 1373 additions and 0 deletions

View File

@@ -45,6 +45,7 @@ INSTALLED_APPS = [
'regions',
'content',
'services',
'agents', # AI 代理系统
]
MIDDLEWARE = [

View File

@@ -9,6 +9,10 @@ from regions.views import RegionViewSet, ModeratorApplicationViewSet
from users.views import UserViewSet, UserRegistrationView
from content.views import ArticleViewSet, CommentViewSet, RatingViewSet
from services.views import FeaturedServiceViewSet
from agents.views import (
AIAgentViewSet, AIOperationLogViewSet, AITaskViewSet,
AIWebhookViewSet, batch_execute
)
router = DefaultRouter()
router.register(r'regions', RegionViewSet)
@@ -18,12 +22,19 @@ router.register(r'articles', ArticleViewSet)
router.register(r'comments', CommentViewSet)
router.register(r'ratings', RatingViewSet)
router.register(r'services', FeaturedServiceViewSet)
# AI 代理系统
router.register(r'agents', AIAgentViewSet, basename='agent')
router.register(r'agent-logs', AIOperationLogViewSet, basename='agent-log')
router.register(r'agent-tasks', AITaskViewSet, basename='agent-task')
router.register(r'agent-webhooks', AIWebhookViewSet, basename='agent-webhook')
urlpatterns = [
path('admin/', admin.site.urls),
path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
path('api/register/', UserRegistrationView.as_view(), name='user_register'),
path('api/agents/auth/', AIAgentViewSet.as_view({'post': 'auth'}), name='agent-auth'),
path('api/batch/', batch_execute, name='batch-execute'),
path('api/', include(router.urls)),
]