application_memory.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. # coding=utf-8
  2. """
  3. 智能体记忆视图
  4. 提供记忆的 CRUD API
  5. """
  6. from django.utils.translation import gettext as _
  7. from rest_framework.request import Request
  8. from rest_framework.views import APIView
  9. from common.auth import TokenAuth
  10. from common.exception.app_exception import AppApiException
  11. from common.result import result
  12. from application.services.application_memory_service import ApplicationMemoryService
  13. class ApplicationMemoryView(APIView):
  14. """智能体记忆管理"""
  15. authentication_classes = [TokenAuth]
  16. class List(APIView):
  17. """获取记忆列表"""
  18. authentication_classes = [TokenAuth]
  19. def get(self, request: Request, application_id: str):
  20. memory_type = request.query_params.get('memory_type')
  21. is_enabled = request.query_params.get('is_enabled', 'true') == 'true'
  22. limit = int(request.query_params.get('limit', 100))
  23. memories = ApplicationMemoryService.get_memories(
  24. application_id=application_id,
  25. memory_type=memory_type,
  26. is_enabled=is_enabled,
  27. limit=limit
  28. )
  29. data = [{
  30. 'id': str(m.id),
  31. 'memory_type': m.memory_type,
  32. 'content': m.content,
  33. 'metadata': m.metadata,
  34. 'is_enabled': m.is_enabled,
  35. 'relevance_score': m.relevance_score,
  36. 'create_time': m.create_time.isoformat() if m.create_time else None,
  37. 'update_time': m.update_time.isoformat() if m.update_time else None,
  38. } for m in memories]
  39. return result.success(data)
  40. class Create(APIView):
  41. """创建记忆"""
  42. authentication_classes = [TokenAuth]
  43. def post(self, request: Request, application_id: str):
  44. content = request.data.get('content', '')
  45. memory_type = request.data.get('memory_type', 'DIALOGUE')
  46. metadata = request.data.get('metadata', {})
  47. if not content:
  48. raise AppApiException(400, _('记忆内容不能为空'))
  49. memory = ApplicationMemoryService.create_memory(
  50. application_id=application_id,
  51. content=content,
  52. memory_type=memory_type,
  53. metadata=metadata
  54. )
  55. return result.success({
  56. 'id': str(memory.id),
  57. 'memory_type': memory.memory_type,
  58. 'content': memory.content,
  59. 'metadata': memory.metadata,
  60. 'is_enabled': memory.is_enabled,
  61. 'relevance_score': memory.relevance_score,
  62. 'create_time': memory.create_time.isoformat() if memory.create_time else None,
  63. })
  64. class Operate(APIView):
  65. """记忆操作(更新/删除)"""
  66. authentication_classes = [TokenAuth]
  67. def put(self, request: Request, application_id: str, memory_id: str):
  68. content = request.data.get('content')
  69. memory_type = request.data.get('memory_type')
  70. is_enabled = request.data.get('is_enabled')
  71. relevance_score = request.data.get('relevance_score')
  72. metadata = request.data.get('metadata')
  73. memory = ApplicationMemoryService.update_memory(
  74. memory_id=memory_id,
  75. content=content,
  76. memory_type=memory_type,
  77. is_enabled=is_enabled,
  78. relevance_score=relevance_score,
  79. metadata=metadata
  80. )
  81. if not memory:
  82. raise AppApiException(404, _('记忆不存在'))
  83. return result.success({
  84. 'id': str(memory.id),
  85. 'memory_type': memory.memory_type,
  86. 'content': memory.content,
  87. 'metadata': memory.metadata,
  88. 'is_enabled': memory.is_enabled,
  89. 'relevance_score': memory.relevance_score,
  90. 'update_time': memory.update_time.isoformat() if memory.update_time else None,
  91. })
  92. def delete(self, request: Request, application_id: str, memory_id: str):
  93. success = ApplicationMemoryService.delete_memory(memory_id)
  94. if not success:
  95. raise AppApiException(404, _('记忆不存在'))
  96. return result.success(True)
  97. class BatchDelete(APIView):
  98. """批量删除记忆"""
  99. authentication_classes = [TokenAuth]
  100. def post(self, request: Request, application_id: str):
  101. memory_ids = request.data.get('memory_ids', [])
  102. if not memory_ids:
  103. raise AppApiException(400, _('请选择要删除的记忆'))
  104. count = ApplicationMemoryService.batch_delete_memories(memory_ids)
  105. return result.success({'deleted_count': count})
  106. class Search(APIView):
  107. """搜索记忆"""
  108. authentication_classes = [TokenAuth]
  109. def get(self, request: Request, application_id: str):
  110. query = request.query_params.get('query', '')
  111. limit = int(request.query_params.get('limit', 10))
  112. if not query:
  113. raise AppApiException(400, _('搜索关键词不能为空'))
  114. memories = ApplicationMemoryService.search_memories(
  115. application_id=application_id,
  116. query=query,
  117. limit=limit
  118. )
  119. data = [{
  120. 'id': str(m.id),
  121. 'memory_type': m.memory_type,
  122. 'content': m.content,
  123. 'metadata': m.metadata,
  124. 'relevance_score': m.relevance_score,
  125. 'create_time': m.create_time.isoformat() if m.create_time else None,
  126. } for m in memories]
  127. return result.success(data)