isage-middleware 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of isage-middleware might be problematic. Click here for more details.

Files changed (191) hide show
  1. isage_middleware-0.1.0.dist-info/METADATA +424 -0
  2. isage_middleware-0.1.0.dist-info/RECORD +191 -0
  3. isage_middleware-0.1.0.dist-info/WHEEL +5 -0
  4. isage_middleware-0.1.0.dist-info/top_level.txt +1 -0
  5. sage/__init__.py +2 -0
  6. sage/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  7. sage/__pycache__/__init__.cpython-311.pyc +0 -0
  8. sage/middleware/__init__.py +83 -0
  9. sage/middleware/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  10. sage/middleware/__pycache__/__init__.cpython-311.pyc +0 -0
  11. sage/middleware/api/__init__.py +22 -0
  12. sage/middleware/api/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  13. sage/middleware/api/__pycache__/__init__.cpython-311.pyc +0 -0
  14. sage/middleware/api/__pycache__/graph_api.cpython-311.opt-2.pyc +0 -0
  15. sage/middleware/api/__pycache__/graph_api.cpython-311.pyc +0 -0
  16. sage/middleware/api/__pycache__/kv_api.cpython-311.opt-2.pyc +0 -0
  17. sage/middleware/api/__pycache__/kv_api.cpython-311.pyc +0 -0
  18. sage/middleware/api/__pycache__/memory_api.cpython-311.opt-2.pyc +0 -0
  19. sage/middleware/api/__pycache__/memory_api.cpython-311.pyc +0 -0
  20. sage/middleware/api/__pycache__/vdb_api.cpython-311.opt-2.pyc +0 -0
  21. sage/middleware/api/__pycache__/vdb_api.cpython-311.pyc +0 -0
  22. sage/middleware/api/graph_api.py +74 -0
  23. sage/middleware/api/kv_api.py +45 -0
  24. sage/middleware/api/memory_api.py +64 -0
  25. sage/middleware/api/vdb_api.py +60 -0
  26. sage/middleware/enterprise/__init__.py +75 -0
  27. sage/middleware/enterprise/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  28. sage/middleware/enterprise/__pycache__/__init__.cpython-311.pyc +0 -0
  29. sage/middleware/enterprise/sage_db/__init__.py +132 -0
  30. sage/middleware/enterprise/sage_db/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  31. sage/middleware/enterprise/sage_db/__pycache__/__init__.cpython-311.pyc +0 -0
  32. sage/middleware/enterprise/sage_db/__pycache__/sage_db.cpython-311.opt-2.pyc +0 -0
  33. sage/middleware/enterprise/sage_db/__pycache__/sage_db.cpython-311.pyc +0 -0
  34. sage/middleware/enterprise/sage_db/python/__init__.py +7 -0
  35. sage/middleware/enterprise/sage_db/python/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  36. sage/middleware/enterprise/sage_db/python/__pycache__/__init__.cpython-311.pyc +0 -0
  37. sage/middleware/enterprise/sage_db/python/__pycache__/sage_db.cpython-311.opt-2.pyc +0 -0
  38. sage/middleware/enterprise/sage_db/python/__pycache__/sage_db.cpython-311.pyc +0 -0
  39. sage/middleware/enterprise/sage_db/python/sage_db.py +44 -0
  40. sage/middleware/enterprise/sage_db/sage_db.py +395 -0
  41. sage/middleware/enterprise/sage_db/tests/__pycache__/test_python.cpython-311.opt-2.pyc +0 -0
  42. sage/middleware/enterprise/sage_db/tests/__pycache__/test_python.cpython-311.pyc +0 -0
  43. sage/middleware/enterprise/sage_db/tests/test_python.py +144 -0
  44. sage/middleware/examples/__pycache__/api_usage_tutorial.cpython-311.opt-2.pyc +0 -0
  45. sage/middleware/examples/__pycache__/api_usage_tutorial.cpython-311.pyc +0 -0
  46. sage/middleware/examples/__pycache__/dag_microservices_demo.cpython-311.opt-2.pyc +0 -0
  47. sage/middleware/examples/__pycache__/dag_microservices_demo.cpython-311.pyc +0 -0
  48. sage/middleware/examples/__pycache__/microservices_demo.cpython-311.opt-2.pyc +0 -0
  49. sage/middleware/examples/__pycache__/microservices_demo.cpython-311.pyc +0 -0
  50. sage/middleware/examples/__pycache__/microservices_integration_demo.cpython-311.opt-2.pyc +0 -0
  51. sage/middleware/examples/__pycache__/microservices_integration_demo.cpython-311.pyc +0 -0
  52. sage/middleware/examples/__pycache__/microservices_registration_demo.cpython-311.opt-2.pyc +0 -0
  53. sage/middleware/examples/__pycache__/microservices_registration_demo.cpython-311.pyc +0 -0
  54. sage/middleware/examples/api_usage_tutorial.py +339 -0
  55. sage/middleware/examples/dag_microservices_demo.py +220 -0
  56. sage/middleware/examples/microservices_demo.py +0 -0
  57. sage/middleware/examples/microservices_integration_demo.py +373 -0
  58. sage/middleware/examples/microservices_registration_demo.py +144 -0
  59. sage/middleware/py.typed +2 -0
  60. sage/middleware/services/graph/__init__.py +8 -0
  61. sage/middleware/services/graph/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  62. sage/middleware/services/graph/__pycache__/__init__.cpython-311.pyc +0 -0
  63. sage/middleware/services/graph/__pycache__/graph_index.cpython-311.opt-2.pyc +0 -0
  64. sage/middleware/services/graph/__pycache__/graph_index.cpython-311.pyc +0 -0
  65. sage/middleware/services/graph/__pycache__/graph_service.cpython-311.opt-2.pyc +0 -0
  66. sage/middleware/services/graph/__pycache__/graph_service.cpython-311.pyc +0 -0
  67. sage/middleware/services/graph/examples/__pycache__/graph_demo.cpython-311.opt-2.pyc +0 -0
  68. sage/middleware/services/graph/examples/__pycache__/graph_demo.cpython-311.pyc +0 -0
  69. sage/middleware/services/graph/examples/graph_demo.py +177 -0
  70. sage/middleware/services/graph/graph_index.py +194 -0
  71. sage/middleware/services/graph/graph_service.py +541 -0
  72. sage/middleware/services/graph/search_engine/__init__.py +0 -0
  73. sage/middleware/services/graph/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  74. sage/middleware/services/graph/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  75. sage/middleware/services/graph/search_engine/__pycache__/base_graph_index.cpython-311.opt-2.pyc +0 -0
  76. sage/middleware/services/graph/search_engine/__pycache__/base_graph_index.cpython-311.pyc +0 -0
  77. sage/middleware/services/graph/search_engine/base_graph_index.py +0 -0
  78. sage/middleware/services/kv/__init__.py +8 -0
  79. sage/middleware/services/kv/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  80. sage/middleware/services/kv/__pycache__/__init__.cpython-311.pyc +0 -0
  81. sage/middleware/services/kv/__pycache__/kv_service.cpython-311.opt-2.pyc +0 -0
  82. sage/middleware/services/kv/__pycache__/kv_service.cpython-311.pyc +0 -0
  83. sage/middleware/services/kv/examples/__pycache__/kv_demo.cpython-311.opt-2.pyc +0 -0
  84. sage/middleware/services/kv/examples/__pycache__/kv_demo.cpython-311.pyc +0 -0
  85. sage/middleware/services/kv/examples/kv_demo.py +213 -0
  86. sage/middleware/services/kv/kv_service.py +306 -0
  87. sage/middleware/services/kv/search_engine/__init__.py +0 -0
  88. sage/middleware/services/kv/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  89. sage/middleware/services/kv/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  90. sage/middleware/services/kv/search_engine/__pycache__/base_kv_index.cpython-311.opt-2.pyc +0 -0
  91. sage/middleware/services/kv/search_engine/__pycache__/base_kv_index.cpython-311.pyc +0 -0
  92. sage/middleware/services/kv/search_engine/__pycache__/bm25s_index.cpython-311.opt-2.pyc +0 -0
  93. sage/middleware/services/kv/search_engine/__pycache__/bm25s_index.cpython-311.pyc +0 -0
  94. sage/middleware/services/kv/search_engine/base_kv_index.py +75 -0
  95. sage/middleware/services/kv/search_engine/bm25s_index.py +238 -0
  96. sage/middleware/services/memory/__init__.py +12 -0
  97. sage/middleware/services/memory/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  98. sage/middleware/services/memory/__pycache__/__init__.cpython-311.pyc +0 -0
  99. sage/middleware/services/memory/__pycache__/memory_service.cpython-311.opt-2.pyc +0 -0
  100. sage/middleware/services/memory/__pycache__/memory_service.cpython-311.pyc +0 -0
  101. sage/middleware/services/memory/examples/__pycache__/dag_microservices_demo.cpython-311.opt-2.pyc +0 -0
  102. sage/middleware/services/memory/examples/__pycache__/dag_microservices_demo.cpython-311.pyc +0 -0
  103. sage/middleware/services/memory/examples/__pycache__/memory_demo.cpython-311.opt-2.pyc +0 -0
  104. sage/middleware/services/memory/examples/__pycache__/memory_demo.cpython-311.pyc +0 -0
  105. sage/middleware/services/memory/examples/dag_microservices_demo.py +220 -0
  106. sage/middleware/services/memory/examples/memory_demo.py +490 -0
  107. sage/middleware/services/memory/memory_collection/__pycache__/base_collection.cpython-311.opt-2.pyc +0 -0
  108. sage/middleware/services/memory/memory_collection/__pycache__/base_collection.cpython-311.pyc +0 -0
  109. sage/middleware/services/memory/memory_collection/__pycache__/graph_collection.cpython-311.opt-2.pyc +0 -0
  110. sage/middleware/services/memory/memory_collection/__pycache__/graph_collection.cpython-311.pyc +0 -0
  111. sage/middleware/services/memory/memory_collection/__pycache__/kv_collection.cpython-311.opt-2.pyc +0 -0
  112. sage/middleware/services/memory/memory_collection/__pycache__/kv_collection.cpython-311.pyc +0 -0
  113. sage/middleware/services/memory/memory_collection/__pycache__/vdb_collection.cpython-311.opt-2.pyc +0 -0
  114. sage/middleware/services/memory/memory_collection/__pycache__/vdb_collection.cpython-311.pyc +0 -0
  115. sage/middleware/services/memory/memory_collection/base_collection.py +0 -0
  116. sage/middleware/services/memory/memory_collection/graph_collection.py +0 -0
  117. sage/middleware/services/memory/memory_collection/kv_collection.py +0 -0
  118. sage/middleware/services/memory/memory_collection/vdb_collection.py +0 -0
  119. sage/middleware/services/memory/memory_service.py +474 -0
  120. sage/middleware/services/memory/utils/__init__.py +0 -0
  121. sage/middleware/services/memory/utils/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  122. sage/middleware/services/memory/utils/__pycache__/__init__.cpython-311.pyc +0 -0
  123. sage/middleware/services/memory/utils/__pycache__/path_utils.cpython-311.opt-2.pyc +0 -0
  124. sage/middleware/services/memory/utils/__pycache__/path_utils.cpython-311.pyc +0 -0
  125. sage/middleware/services/memory/utils/path_utils.py +0 -0
  126. sage/middleware/services/vdb/__init__.py +8 -0
  127. sage/middleware/services/vdb/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  128. sage/middleware/services/vdb/__pycache__/__init__.cpython-311.pyc +0 -0
  129. sage/middleware/services/vdb/__pycache__/vdb_service.cpython-311.opt-2.pyc +0 -0
  130. sage/middleware/services/vdb/__pycache__/vdb_service.cpython-311.pyc +0 -0
  131. sage/middleware/services/vdb/examples/__pycache__/vdb_demo.cpython-311.opt-2.pyc +0 -0
  132. sage/middleware/services/vdb/examples/__pycache__/vdb_demo.cpython-311.pyc +0 -0
  133. sage/middleware/services/vdb/examples/vdb_demo.py +447 -0
  134. sage/middleware/services/vdb/search_engine/__init__.py +0 -0
  135. sage/middleware/services/vdb/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  136. sage/middleware/services/vdb/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  137. sage/middleware/services/vdb/search_engine/__pycache__/base_vdb_index.cpython-311.opt-2.pyc +0 -0
  138. sage/middleware/services/vdb/search_engine/__pycache__/base_vdb_index.cpython-311.pyc +0 -0
  139. sage/middleware/services/vdb/search_engine/__pycache__/faiss_index.cpython-311.opt-2.pyc +0 -0
  140. sage/middleware/services/vdb/search_engine/__pycache__/faiss_index.cpython-311.pyc +0 -0
  141. sage/middleware/services/vdb/search_engine/base_vdb_index.py +58 -0
  142. sage/middleware/services/vdb/search_engine/faiss_index.py +461 -0
  143. sage/middleware/services/vdb/vdb_service.py +433 -0
  144. sage/middleware/utils/__init__.py +5 -0
  145. sage/middleware/utils/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  146. sage/middleware/utils/__pycache__/__init__.cpython-311.pyc +0 -0
  147. sage/middleware/utils/embedding/__init__.py +35 -0
  148. sage/middleware/utils/embedding/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  149. sage/middleware/utils/embedding/__pycache__/__init__.cpython-311.pyc +0 -0
  150. sage/middleware/utils/embedding/__pycache__/_cohere.cpython-311.opt-2.pyc +0 -0
  151. sage/middleware/utils/embedding/__pycache__/_cohere.cpython-311.pyc +0 -0
  152. sage/middleware/utils/embedding/__pycache__/bedrock.cpython-311.opt-2.pyc +0 -0
  153. sage/middleware/utils/embedding/__pycache__/bedrock.cpython-311.pyc +0 -0
  154. sage/middleware/utils/embedding/__pycache__/embedding_api.cpython-311.opt-2.pyc +0 -0
  155. sage/middleware/utils/embedding/__pycache__/embedding_api.cpython-311.pyc +0 -0
  156. sage/middleware/utils/embedding/__pycache__/embedding_model.cpython-311.opt-2.pyc +0 -0
  157. sage/middleware/utils/embedding/__pycache__/embedding_model.cpython-311.pyc +0 -0
  158. sage/middleware/utils/embedding/__pycache__/hf.cpython-311.opt-2.pyc +0 -0
  159. sage/middleware/utils/embedding/__pycache__/hf.cpython-311.pyc +0 -0
  160. sage/middleware/utils/embedding/__pycache__/instructor.cpython-311.opt-2.pyc +0 -0
  161. sage/middleware/utils/embedding/__pycache__/instructor.cpython-311.pyc +0 -0
  162. sage/middleware/utils/embedding/__pycache__/jina.cpython-311.opt-2.pyc +0 -0
  163. sage/middleware/utils/embedding/__pycache__/jina.cpython-311.pyc +0 -0
  164. sage/middleware/utils/embedding/__pycache__/lollms.cpython-311.opt-2.pyc +0 -0
  165. sage/middleware/utils/embedding/__pycache__/lollms.cpython-311.pyc +0 -0
  166. sage/middleware/utils/embedding/__pycache__/mockembedder.cpython-311.opt-2.pyc +0 -0
  167. sage/middleware/utils/embedding/__pycache__/mockembedder.cpython-311.pyc +0 -0
  168. sage/middleware/utils/embedding/__pycache__/nvidia_openai.cpython-311.opt-2.pyc +0 -0
  169. sage/middleware/utils/embedding/__pycache__/nvidia_openai.cpython-311.pyc +0 -0
  170. sage/middleware/utils/embedding/__pycache__/ollama.cpython-311.opt-2.pyc +0 -0
  171. sage/middleware/utils/embedding/__pycache__/ollama.cpython-311.pyc +0 -0
  172. sage/middleware/utils/embedding/__pycache__/openai.cpython-311.opt-2.pyc +0 -0
  173. sage/middleware/utils/embedding/__pycache__/openai.cpython-311.pyc +0 -0
  174. sage/middleware/utils/embedding/__pycache__/siliconcloud.cpython-311.opt-2.pyc +0 -0
  175. sage/middleware/utils/embedding/__pycache__/siliconcloud.cpython-311.pyc +0 -0
  176. sage/middleware/utils/embedding/__pycache__/zhipu.cpython-311.opt-2.pyc +0 -0
  177. sage/middleware/utils/embedding/__pycache__/zhipu.cpython-311.pyc +0 -0
  178. sage/middleware/utils/embedding/_cohere.py +68 -0
  179. sage/middleware/utils/embedding/bedrock.py +174 -0
  180. sage/middleware/utils/embedding/embedding_api.py +12 -0
  181. sage/middleware/utils/embedding/embedding_model.py +150 -0
  182. sage/middleware/utils/embedding/hf.py +90 -0
  183. sage/middleware/utils/embedding/instructor.py +10 -0
  184. sage/middleware/utils/embedding/jina.py +115 -0
  185. sage/middleware/utils/embedding/lollms.py +100 -0
  186. sage/middleware/utils/embedding/mockembedder.py +46 -0
  187. sage/middleware/utils/embedding/nvidia_openai.py +97 -0
  188. sage/middleware/utils/embedding/ollama.py +97 -0
  189. sage/middleware/utils/embedding/openai.py +112 -0
  190. sage/middleware/utils/embedding/siliconcloud.py +133 -0
  191. sage/middleware/utils/embedding/zhipu.py +85 -0
@@ -0,0 +1,490 @@
1
+ """
2
+ Memory Service API 使用示例
3
+ 展示如何正确使用Memory微服务的API接口进行高级记忆管理
4
+ Memory服务作为编排服务,协调KV、VDB和Graph服务
5
+ """
6
+ import numpy as np
7
+ import time
8
+ from sage.core.api.local_environment import LocalEnvironment
9
+ from sage.middleware.services import (
10
+ create_kv_service_factory,
11
+ create_vdb_service_factory,
12
+ create_graph_service_factory,
13
+ create_memory_service_factory
14
+ )
15
+ from sage.middleware.services.api.memory_api import MemoryServiceAPI
16
+
17
+
18
+ def test_memory_service_api():
19
+ """测试Memory服务API的正确使用方式"""
20
+ print("🚀 Memory Service API Demo")
21
+ print("=" * 60)
22
+
23
+ # 创建环境
24
+ env = LocalEnvironment("memory_service_demo")
25
+
26
+ # 注册所有依赖的微服务
27
+ print("📋 Registering microservices...")
28
+
29
+ # KV服务
30
+ kv_factory = create_kv_service_factory(
31
+ service_name="demo_kv",
32
+ backend_type="memory",
33
+ max_size=10000
34
+ )
35
+ env.register_service("demo_kv", kv_factory)
36
+ print(" ✅ KV Service registered")
37
+
38
+ # VDB服务
39
+ vdb_factory = create_vdb_service_factory(
40
+ service_name="demo_vdb",
41
+ embedding_dimension=384,
42
+ index_type="IndexFlatL2"
43
+ )
44
+ env.register_service("demo_vdb", vdb_factory)
45
+ print(" ✅ VDB Service registered")
46
+
47
+ # Graph服务
48
+ graph_factory = create_graph_service_factory(
49
+ service_name="demo_graph",
50
+ backend_type="memory",
51
+ max_nodes=5000
52
+ )
53
+ env.register_service("demo_graph", graph_factory)
54
+ print(" ✅ Graph Service registered")
55
+
56
+ # Memory编排服务
57
+ memory_factory = create_memory_service_factory(
58
+ service_name="demo_memory",
59
+ kv_service_name="demo_kv",
60
+ vdb_service_name="demo_vdb",
61
+ graph_service_name="demo_graph",
62
+ enable_knowledge_graph=True
63
+ )
64
+ print("✅ All microservices registered successfully")
65
+
66
+ # 在实际应用中,你需要启动环境并获取服务代理
67
+ # env.submit() # 启动环境
68
+ # memory_service = env.get_service_proxy("demo_memory")
69
+
70
+ # 这里我们演示API接口的预期使用方式
71
+ demonstrate_memory_api_usage()
72
+
73
+
74
+ def demonstrate_memory_api_usage():
75
+ """演示Memory服务API的标准使用模式"""
76
+ print("\n📝 Memory Service API Usage Patterns:")
77
+ print("-" * 50)
78
+
79
+ # 展示API接口
80
+ print("💡 Memory Service API Interface (High-level Orchestration):")
81
+ print(" class MemoryServiceAPI:")
82
+ print(" - store_memory(content, vector, session_id, ...) -> str")
83
+ print(" - retrieve_memories(query_vector, session_id, ...) -> List[Dict]")
84
+ print(" - get_memory(memory_id) -> Optional[Dict]")
85
+ print(" - delete_memory(memory_id) -> bool")
86
+ print(" - search_memories(query, session_id, ...) -> List[Dict]")
87
+ print(" - get_session_memories(session_id) -> List[Dict]")
88
+ print(" - clear_session_memories(session_id) -> bool")
89
+
90
+ print("\n📋 Standard Usage Example:")
91
+ usage_code = '''
92
+ # 1. 获取Memory服务代理(高级编排服务)
93
+ memory_service = env.get_service_proxy("demo_memory")
94
+
95
+ # 2. 存储对话记忆
96
+ session_id = "conversation_001"
97
+
98
+ # 存储用户问题
99
+ question_memory_id = memory_service.store_memory(
100
+ content="用户询问:如何在Python中实现装饰器?",
101
+ vector=embed_text("如何在Python中实现装饰器?"), # 假设的embedding函数
102
+ session_id=session_id,
103
+ memory_type="user_question",
104
+ metadata={
105
+ "topic": "python",
106
+ "difficulty": "intermediate",
107
+ "timestamp": time.time()
108
+ }
109
+ )
110
+
111
+ # 存储AI回答
112
+ answer_memory_id = memory_service.store_memory(
113
+ content="AI回答:装饰器是Python中的高级特性,可以用来修改函数行为...",
114
+ vector=embed_text("装饰器是Python中的高级特性..."),
115
+ session_id=session_id,
116
+ memory_type="ai_response",
117
+ metadata={
118
+ "topic": "python",
119
+ "relates_to": question_memory_id,
120
+ "code_examples": True
121
+ }
122
+ )
123
+
124
+ # 3. 基于向量相似性检索相关记忆
125
+ query_vector = embed_text("Python函数装饰器的使用方法")
126
+ related_memories = memory_service.retrieve_memories(
127
+ query_vector=query_vector,
128
+ session_id=session_id,
129
+ memory_type=None, # 所有类型
130
+ top_k=5
131
+ )
132
+
133
+ # 4. 基于文本搜索记忆
134
+ text_search_results = memory_service.search_memories(
135
+ query="装饰器",
136
+ session_id=session_id,
137
+ memory_type="ai_response",
138
+ top_k=10
139
+ )
140
+
141
+ # 5. 获取会话的完整记忆历史
142
+ session_history = memory_service.get_session_memories(session_id)
143
+
144
+ # 6. 获取特定记忆的详细信息
145
+ memory_detail = memory_service.get_memory(question_memory_id)
146
+ '''
147
+ print(usage_code)
148
+
149
+ # 模拟执行结果
150
+ print("🎯 Expected Results:")
151
+ operations = [
152
+ ("store_memory(question)", "'mem_q_uuid_123'"),
153
+ ("store_memory(answer)", "'mem_a_uuid_456'"),
154
+ ("retrieve_memories(vector)", "[{'id': 'mem_q_123', 'score': 0.94, ...}]"),
155
+ ("search_memories('装饰器')", "[{'id': 'mem_a_456', 'content': 'AI回答...', ...}]"),
156
+ ("get_session_memories()", "[{'id': 'mem_q_123', ...}, {'id': 'mem_a_456', ...}]"),
157
+ ("get_memory('mem_q_123')", "{'id': 'mem_q_123', 'content': '用户询问...', ...}"),
158
+ ]
159
+
160
+ for operation, result in operations:
161
+ print(f" {operation:<30} -> {result}")
162
+
163
+
164
+ def demonstrate_advanced_memory_patterns():
165
+ """演示Memory服务的高级使用模式"""
166
+ print("\n🧠 Advanced Memory Management Patterns:")
167
+ print("-" * 50)
168
+
169
+ advanced_patterns = '''
170
+ # 1. 智能对话上下文管理
171
+ class ConversationContextManager:
172
+ def __init__(self, memory_service: MemoryServiceAPI):
173
+ self.memory = memory_service
174
+
175
+ def maintain_context(self, session_id: str, new_message: str,
176
+ max_context_memories: int = 10):
177
+ """维护对话上下文"""
178
+ # 获取最近的记忆作为上下文
179
+ recent_memories = self.memory.get_session_memories(session_id)
180
+ context_memories = recent_memories[-max_context_memories:]
181
+
182
+ # 基于新消息检索相关历史记忆
183
+ message_vector = embed_text(new_message)
184
+ relevant_memories = self.memory.retrieve_memories(
185
+ query_vector=message_vector,
186
+ session_id=session_id,
187
+ top_k=5
188
+ )
189
+
190
+ # 组合上下文
191
+ full_context = {
192
+ "recent_memories": context_memories,
193
+ "relevant_memories": relevant_memories,
194
+ "current_message": new_message
195
+ }
196
+
197
+ return full_context
198
+
199
+ # 2. 知识图谱增强的记忆检索
200
+ class KnowledgeEnhancedRetrieval:
201
+ def __init__(self, memory_service: MemoryServiceAPI):
202
+ self.memory = memory_service
203
+
204
+ def enhanced_retrieval(self, query: str, session_id: str):
205
+ """增强的检索:结合向量相似性和知识图谱"""
206
+ query_vector = embed_text(query)
207
+
208
+ # 第一步:向量相似性检索
209
+ vector_results = self.memory.retrieve_memories(
210
+ query_vector=query_vector,
211
+ session_id=session_id,
212
+ top_k=20
213
+ )
214
+
215
+ # 第二步:文本检索
216
+ text_results = self.memory.search_memories(
217
+ query=query,
218
+ session_id=session_id,
219
+ top_k=20
220
+ )
221
+
222
+ # 第三步:知识图谱扩展(通过Memory服务的Graph集成)
223
+ # Memory服务内部会自动利用知识图谱关系
224
+
225
+ # 合并和去重结果
226
+ all_results = self.merge_and_rank_results(vector_results, text_results)
227
+
228
+ return all_results[:10] # 返回top 10
229
+
230
+ # 3. 记忆生命周期管理
231
+ class MemoryLifecycleManager:
232
+ def __init__(self, memory_service: MemoryServiceAPI):
233
+ self.memory = memory_service
234
+
235
+ def archive_old_memories(self, session_id: str, days_threshold: int = 30):
236
+ """归档旧记忆"""
237
+ cutoff_time = time.time() - (days_threshold * 24 * 3600)
238
+
239
+ all_memories = self.memory.get_session_memories(session_id)
240
+ old_memories = [
241
+ mem for mem in all_memories
242
+ if mem.get("metadata", {}).get("timestamp", 0) < cutoff_time
243
+ ]
244
+
245
+ # 选择性保留重要记忆
246
+ important_memories = self.filter_important_memories(old_memories)
247
+ memories_to_delete = [
248
+ mem for mem in old_memories if mem not in important_memories
249
+ ]
250
+
251
+ # 删除不重要的旧记忆
252
+ for memory in memories_to_delete:
253
+ self.memory.delete_memory(memory["id"])
254
+
255
+ return len(memories_to_delete)
256
+
257
+ def filter_important_memories(self, memories):
258
+ """过滤重要记忆(基于metadata标记、用户反馈等)"""
259
+ important = []
260
+ for memory in memories:
261
+ metadata = memory.get("metadata", {})
262
+ if (metadata.get("importance") == "high" or
263
+ metadata.get("user_bookmarked") or
264
+ metadata.get("memory_type") == "key_insight"):
265
+ important.append(memory)
266
+ return important
267
+
268
+ # 4. 多模态记忆存储
269
+ class MultiModalMemoryManager:
270
+ def __init__(self, memory_service: MemoryServiceAPI):
271
+ self.memory = memory_service
272
+
273
+ def store_conversation_turn(self, session_id: str, user_message: str,
274
+ ai_response: str, images=None, files=None):
275
+ """存储多模态对话轮次"""
276
+ turn_id = f"turn_{int(time.time())}"
277
+
278
+ # 存储用户消息
279
+ user_memory_id = self.memory.store_memory(
280
+ content=user_message,
281
+ vector=embed_text(user_message),
282
+ session_id=session_id,
283
+ memory_type="user_message",
284
+ metadata={
285
+ "turn_id": turn_id,
286
+ "has_images": bool(images),
287
+ "has_files": bool(files),
288
+ "modalities": ["text"] + (["image"] if images else []) + (["file"] if files else [])
289
+ }
290
+ )
291
+
292
+ # 存储AI回应
293
+ ai_memory_id = self.memory.store_memory(
294
+ content=ai_response,
295
+ vector=embed_text(ai_response),
296
+ session_id=session_id,
297
+ memory_type="ai_response",
298
+ metadata={
299
+ "turn_id": turn_id,
300
+ "responds_to": user_memory_id,
301
+ "response_quality": "pending_evaluation"
302
+ }
303
+ )
304
+
305
+ return turn_id, user_memory_id, ai_memory_id
306
+ '''
307
+ # print(advanced_patterns)
308
+ # "vector": np.random.random(384).tolist(),
309
+ # "memory_type": "answer",
310
+ # "metadata": {"topic": "programming", "language": "python", "complexity": "basic"}
311
+ # },
312
+ # {
313
+ # "content": "用户表示理解了,并询问更高级的主题",
314
+ # "vector": np.random.random(384).tolist(),
315
+ # "memory_type": "feedback",
316
+ # "metadata": {"sentiment": "positive", "next_topic": "advanced"}
317
+ # }
318
+ # ]
319
+
320
+ print(f"\n🧠 Storing memories for session {session_id}:")
321
+ memory_ids = []
322
+ for i, memory in enumerate(memories):
323
+ # memory_id = memory_service.store_memory(
324
+ # content=memory["content"],
325
+ # vector=memory["vector"],
326
+ # session_id=session_id,
327
+ # memory_type=memory["memory_type"],
328
+ # metadata=memory["metadata"],
329
+ # create_knowledge_graph=True
330
+ # )
331
+ memory_id = f"mem_{i+1}" # 模拟返回的ID
332
+ memory_ids.append(memory_id)
333
+ print(f" ✅ Stored {memory['memory_type']}: {memory_id}")
334
+
335
+ # 模拟记忆搜索
336
+ print(f"\n🔍 Searching memories:")
337
+ query_vector = np.random.random(384).tolist()
338
+
339
+ # search_results = memory_service.search_memories(
340
+ # query_vector=query_vector,
341
+ # session_id=session_id,
342
+ # limit=5,
343
+ # include_graph_context=True
344
+ # )
345
+
346
+ # 模拟搜索结果
347
+ search_results = [
348
+ {
349
+ "id": "mem_2",
350
+ "content": "AI助手提供了Python基础语法的详细解释",
351
+ "similarity_score": 0.85,
352
+ "memory_type": "answer",
353
+ "graph_context": {
354
+ "related_nodes": ["topic:python", "user:conversation_001"],
355
+ "relationships": ["ABOUT", "IN_SESSION"]
356
+ }
357
+ },
358
+ {
359
+ "id": "mem_1",
360
+ "content": "用户询问了关于Python编程的问题",
361
+ "similarity_score": 0.82,
362
+ "memory_type": "question",
363
+ "graph_context": {
364
+ "related_nodes": ["topic:python", "user:conversation_001"],
365
+ "relationships": ["ASKS_ABOUT", "IN_SESSION"]
366
+ }
367
+ }
368
+ ]
369
+
370
+ print(f" 📖 Found {len(search_results)} relevant memories:")
371
+ for result in search_results:
372
+ print(f" - {result['memory_type']}: {result['content'][:50]}...")
373
+ print(f" 相似度: {result['similarity_score']:.3f}")
374
+ print(f" 图上下文: {len(result['graph_context']['related_nodes'])} 相关节点")
375
+
376
+ # 模拟会话记忆分析
377
+ print(f"\n📊 Session Analysis:")
378
+
379
+ # session_analysis = memory_service.get_session_memories(
380
+ # session_id=session_id,
381
+ # include_graph_analysis=True
382
+ # )
383
+
384
+ session_analysis = {
385
+ "session_id": session_id,
386
+ "memory_count": 3,
387
+ "memory_types": {"question": 1, "answer": 1, "feedback": 1},
388
+ "graph_analysis": {
389
+ "topics_discussed": ["python", "programming"],
390
+ "conversation_flow": "question -> answer -> feedback",
391
+ "sentiment_trend": "neutral -> positive",
392
+ "knowledge_gaps": ["advanced topics"]
393
+ }
394
+ }
395
+
396
+ print(f" 📈 Session Statistics:")
397
+ print(f" - 总记忆数: {session_analysis['memory_count']}")
398
+ print(f" - 记忆类型: {session_analysis['memory_types']}")
399
+ print(f" - 讨论主题: {', '.join(session_analysis['graph_analysis']['topics_discussed'])}")
400
+ print(f" - 对话流程: {session_analysis['graph_analysis']['conversation_flow']}")
401
+ print(f" - 情感趋势: {session_analysis['graph_analysis']['sentiment_trend']}")
402
+
403
+ print("\n💡 Memory Service Features:")
404
+ print(" - 统一记忆管理接口")
405
+ print(" - 自动知识图谱构建")
406
+ print(" - 语义搜索和过滤")
407
+ print(" - 会话上下文分析")
408
+ print(" - 跨服务事务一致性")
409
+ print(" - 图增强的记忆检索")
410
+
411
+
412
+ def test_memory_use_cases():
413
+ """演示Memory服务的应用场景"""
414
+ print("\n🎯 Memory Service Use Cases:")
415
+
416
+ use_cases = [
417
+ {
418
+ "name": "智能客服",
419
+ "scenario": "记住用户历史问题,提供个性化答案",
420
+ "memory_types": ["question", "answer", "preference", "issue"],
421
+ "features": ["上下文理解", "问题追踪", "解决方案推荐"]
422
+ },
423
+ {
424
+ "name": "个人助手",
425
+ "scenario": "学习用户习惯,提供主动建议",
426
+ "memory_types": ["habit", "preference", "schedule", "goal"],
427
+ "features": ["习惯分析", "日程优化", "目标跟踪"]
428
+ },
429
+ {
430
+ "name": "教育系统",
431
+ "scenario": "跟踪学习进度,个性化教学路径",
432
+ "memory_types": ["knowledge", "skill", "progress", "difficulty"],
433
+ "features": ["知识图谱", "学习路径", "难点识别"]
434
+ },
435
+ {
436
+ "name": "内容推荐",
437
+ "scenario": "基于用户兴趣历史推荐相关内容",
438
+ "memory_types": ["interest", "interaction", "content", "feedback"],
439
+ "features": ["兴趣建模", "内容关联", "反馈学习"]
440
+ }
441
+ ]
442
+
443
+ for case in use_cases:
444
+ print(f" 📚 {case['name']}: {case['scenario']}")
445
+ print(f" 记忆类型: {', '.join(case['memory_types'])}")
446
+ print(f" 核心功能: {', '.join(case['features'])}")
447
+
448
+
449
+ def test_memory_advantages():
450
+ """展示Memory服务相比单一服务的优势"""
451
+ print("\n🌟 Memory Service Advantages:")
452
+
453
+ advantages = [
454
+ {
455
+ "aspect": "统一接口",
456
+ "description": "单一API调用,自动协调KV、VDB、Graph服务",
457
+ "benefit": "简化应用开发,减少集成复杂度"
458
+ },
459
+ {
460
+ "aspect": "事务一致性",
461
+ "description": "确保数据在多个服务间的一致性",
462
+ "benefit": "避免数据不一致,提高可靠性"
463
+ },
464
+ {
465
+ "aspect": "图增强检索",
466
+ "description": "结合向量相似性和图关系进行检索",
467
+ "benefit": "更准确的上下文理解和推荐"
468
+ },
469
+ {
470
+ "aspect": "自动索引",
471
+ "description": "自动维护各服务间的关联关系",
472
+ "benefit": "减少手动维护,提高数据质量"
473
+ },
474
+ {
475
+ "aspect": "智能分析",
476
+ "description": "提供跨服务的综合分析能力",
477
+ "benefit": "深度洞察,支持决策"
478
+ }
479
+ ]
480
+
481
+ for adv in advantages:
482
+ print(f" ⭐ {adv['aspect']}: {adv['description']}")
483
+ print(f" 价值: {adv['benefit']}")
484
+
485
+
486
+ if __name__ == "__main__":
487
+ test_memory_service_api()
488
+ demonstrate_advanced_memory_patterns()
489
+ print("\n🎯 Memory Service API demo completed!")
490
+ print("\n📚 Next: Check the complete API tutorial for integration examples")