Repository navigation
Expand file tree
/
Copy pathasync_usage.py
More file actions
275 lines (222 loc) · 8.57 KB
/
Copy pathasync_usage.py
File metadata and controls
275 lines (222 loc) · 8.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
TiMEM Python SDK - 异步客户端使用示例
演示 TiMEM SDK 的异步功能:
1. 异步客户端基础使用
2. 并发批量操作
3. 高性能异步调用
"""
import asyncio
import logging
from timem import AsyncTiMEMClient, learn_async, recall_async
# 配置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
# 配置
API_KEY = "timem_your_api_key_here" # 替换为实际的API Key
BASE_URL = "http://localhost:8001" # 替换为实际的服务地址
async def demo_basic_async():
"""演示基础异步操作"""
print("\n" + "="*70)
print(" 示例 1: 异步客户端基础使用")
print("="*70)
# 使用异步上下文管理器
async with AsyncTiMEMClient(api_key=API_KEY, base_url=BASE_URL) as client:
# 1. 异步学习
print("\n[步骤 1] 异步学习...")
result = await client.learn(
domain="aicv",
min_case_count=2,
strategy="adaptive"
)
print(f"✓ 学习完成")
print(f" - 生成规则数: {result.get('data', {}).get('generated_rule_count', 0)}")
# 2. 异步召回
print("\n[步骤 2] 异步召回...")
rules = await client.recall(
context={"job_title": "Python工程师"},
domain="aicv",
top_k=5
)
print(f"✓ 召回完成")
print(f" - 召回规则数: {len(rules.get('data', {}).get('rules', []))}")
async def demo_concurrent_operations():
"""演示并发操作"""
print("\n" + "="*70)
print(" 示例 2: 并发操作")
print("="*70)
async with AsyncTiMEMClient(api_key=API_KEY, base_url=BASE_URL) as client:
# 并发添加多个记忆
print("\n[步骤 1] 并发添加记忆...")
# 创建多个记忆任务
tasks = []
for i in range(5):
task = client.add_memory(
user_id=99999 + i,
domain="test",
content={
"type": f"concurrent_test_{i}",
"index": i
},
layer_type="L1",
tags=["concurrent", "test"]
)
tasks.append(task)
# 并发执行
import time
start_time = time.time()
results = await asyncio.gather(*tasks, return_exceptions=True)
duration = time.time() - start_time
success_count = sum(1 for r in results if not isinstance(r, Exception))
print(f"✓ 并发添加完成")
print(f" - 成功: {success_count}/5")
print(f" - 耗时: {duration:.2f}s")
# 并发搜索
print("\n[步骤 2] 并发搜索...")
search_tasks = [
client.search_memory(domain="test", tags=["concurrent"]),
client.search_memory(domain="aicv", limit=10),
client.search_memory(user_id=99999, limit=5)
]
start_time = time.time()
search_results = await asyncio.gather(*search_tasks, return_exceptions=True)
duration = time.time() - start_time
print(f"✓ 并发搜索完成")
print(f" - 搜索任务数: {len(search_tasks)}")
print(f" - 耗时: {duration:.2f}s")
async def demo_batch_operations():
"""演示批量操作"""
print("\n" + "="*70)
print(" 示例 3: 批量操作")
print("="*70)
async with AsyncTiMEMClient(api_key=API_KEY, base_url=BASE_URL) as client:
# 批量学习
print("\n[步骤 1] 批量学习多个领域...")
domains = ["aicv", "education", "general"]
import time
start_time = time.time()
results = await client.batch_learn(
domains=domains,
min_case_count=2,
strategy="adaptive"
)
duration = time.time() - start_time
print(f"✓ 批量学习完成")
print(f" - 领域数: {len(domains)}")
print(f" - 耗时: {duration:.2f}s")
for result in results:
domain = result.get('domain', 'unknown')
success = result.get('success', False)
print(f" - {domain}: {'✓' if success else '✗'}")
# 批量添加记忆
print("\n[步骤 2] 批量添加记忆...")
memories = [
{
"user_id": 99999,
"domain": "test",
"content": {"type": "batch_test", "index": i},
"layer_type": "L1"
}
for i in range(10)
]
start_time = time.time()
results = await client.batch_add_memories(memories)
duration = time.time() - start_time
success_count = sum(1 for r in results if r.get('success', False))
print(f"✓ 批量添加完成")
print(f" - 成功: {success_count}/{len(memories)}")
print(f" - 耗时: {duration:.2f}s")
async def demo_convenience_functions():
"""演示便捷函数"""
print("\n" + "="*70)
print(" 示例 4: 便捷函数")
print("="*70)
# 使用便捷函数进行学习
print("\n[步骤 1] 使用便捷函数学习...")
result = await learn_async(
api_key=API_KEY,
base_url=BASE_URL,
domain="aicv",
strategy="adaptive"
)
print(f"✓ 学习完成")
print(f" - 生成规则数: {result.get('data', {}).get('generated_rule_count', 0)}")
# 使用便捷函数召回
print("\n[步骤 2] 使用便捷函数召回...")
rules = await recall_async(
api_key=API_KEY,
base_url=BASE_URL,
context={"job_title": "数据科学家"},
domain="aicv"
)
print(f"✓ 召回完成")
print(f" - 召回规则数: {len(rules.get('data', {}).get('rules', []))}")
async def demo_enhanced_features():
"""演示增强功能"""
print("\n" + "="*70)
print(" 示例 5: 增强功能(连接池、熔断器、监控)")
print("="*70)
# 启用所有增强功能
async with AsyncTiMEMClient(
api_key=API_KEY,
base_url=BASE_URL,
enable_connection_pool=True,
enable_circuit_breaker=True,
enable_monitoring=True
) as client:
# 执行一些操作
print("\n[步骤 1] 执行操作...")
for i in range(5):
try:
await client.health_check()
except Exception as e:
print(f" 请求 {i+1} 失败: {e}")
# 查看客户端统计
print("\n[步骤 2] 查看增强功能统计...")
stats = client.get_client_stats()
print(f"✓ 客户端统计:")
client_stats = stats.get('client_stats', {})
print(f" - 总请求数: {client_stats.get('total_requests', 0)}")
print(f" - 成功请求: {client_stats.get('successful_requests', 0)}")
print(f" - 失败请求: {client_stats.get('failed_requests', 0)}")
# 连接池状态
pool_stats = stats.get('connection_pool')
if pool_stats:
print(f"\n✓ 连接池状态:")
print(f" - 健康状态: {'健康' if pool_stats.get('is_healthy') else '不健康'}")
print(f" - 成功请求: {pool_stats.get('successful_requests', 0)}")
print(f" - 失败请求: {pool_stats.get('failed_requests', 0)}")
print(f" - 成功率: {pool_stats.get('success_rate', 0):.2%}")
# 熔断器状态
breaker_state = stats.get('circuit_breaker')
if breaker_state:
print(f"\n✓ 熔断器状态:")
print(f" - 状态: {breaker_state.get('state', 'unknown')}")
print(f" - 失败次数: {breaker_state.get('failure_count', 0)}")
print(f" - 错误率: {breaker_state.get('error_rate', 0):.2%}")
async def main():
"""主函数"""
print("\n")
print("*" * 70)
print(" TiMEM Python SDK - 异步客户端使用示例")
print("*" * 70)
try:
# 演示各个功能
await demo_basic_async()
await demo_concurrent_operations()
await demo_batch_operations()
await demo_convenience_functions()
await demo_enhanced_features()
print("\n" + "="*70)
print(" ✅ 所有示例执行完成!")
print("="*70 + "\n")
except Exception as e:
print(f"\n❌ 示例执行失败: {e}")
import traceback
traceback.print_exc()
if __name__ == "__main__":
# 运行异步主函数
asyncio.run(main())