liurenchaxin/tests/test_vertex_memory_bank.py

257 lines
8.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
Vertex AI Memory Bank 测试脚本
验证稷下学宫记忆银行功能
"""
import asyncio
import sys
import os
# 添加项目根目录到路径
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from src.jixia.memory.vertex_memory_bank import VertexMemoryBank, initialize_baxian_memory_banks
from src.jixia.agents.memory_enhanced_agent import MemoryEnhancedAgent, create_memory_enhanced_council
from config.doppler_config import get_google_genai_config, validate_config
async def test_memory_bank_basic():
"""测试Memory Bank基础功能"""
print("🧪 测试 Memory Bank 基础功能...")
try:
# 验证配置
if not validate_config("google_adk"):
print("❌ Google ADK 配置验证失败")
return False
config = get_google_genai_config()
if not config.get('project_id'):
print("❌ Google Cloud Project ID 未配置")
print("请设置环境变量: GOOGLE_CLOUD_PROJECT_ID")
return False
# 创建Memory Bank实例
memory_bank = VertexMemoryBank.from_config()
print(f"✅ Memory Bank 实例创建成功")
print(f" 项目ID: {config['project_id']}")
print(f" 区域: {config['location']}")
# 测试创建记忆银行
bank_id = await memory_bank.create_memory_bank(
agent_name="tieguaili",
display_name="铁拐李测试记忆银行"
)
print(f"✅ 创建记忆银行成功: {bank_id}")
# 测试添加记忆
memory_id = await memory_bank.add_memory(
agent_name="tieguaili",
content="测试记忆在分析NVIDIA时我倾向于关注潜在的市场风险和估值泡沫。",
memory_type="preference",
debate_topic="NVIDIA投资分析",
metadata={"test": True, "priority": "high"}
)
print(f"✅ 添加记忆成功: {memory_id}")
# 测试搜索记忆
results = await memory_bank.search_memories(
agent_name="tieguaili",
query="NVIDIA 风险",
limit=5
)
print(f"✅ 搜索记忆成功,找到 {len(results)} 条结果")
for i, result in enumerate(results, 1):
print(f" {i}. {result['content'][:50]}... (相关度: {result.get('relevance_score', 'N/A')})")
# 测试获取上下文
context = await memory_bank.get_agent_context("tieguaili", "NVIDIA投资分析")
print(f"✅ 获取上下文成功,长度: {len(context)} 字符")
return True
except Exception as e:
print(f"❌ Memory Bank 基础测试失败: {e}")
return False
async def test_memory_enhanced_agent():
"""测试记忆增强智能体"""
print("\n🧪 测试记忆增强智能体...")
try:
# 创建记忆银行
memory_bank = VertexMemoryBank.from_config()
# 创建记忆增强智能体
agent = MemoryEnhancedAgent("tieguaili", memory_bank)
print(f"✅ 创建记忆增强智能体: {agent.personality.chinese_name}")
# 测试基于记忆的响应
response = await agent.respond_with_memory(
message="你对NVIDIA的最新财报有什么看法",
topic="NVIDIA投资分析"
)
print(f"✅ 智能体响应成功")
print(f" 响应长度: {len(response)} 字符")
print(f" 响应预览: {response[:100]}...")
# 测试学习偏好
await agent.learn_preference(
preference="用户偏好保守的投资策略,关注风险控制",
topic="投资偏好"
)
print("✅ 学习用户偏好成功")
# 测试保存策略洞察
await agent.save_strategy_insight(
insight="在高估值环境下,应该更加关注基本面分析和风险管理",
topic="投资策略"
)
print("✅ 保存策略洞察成功")
return True
except Exception as e:
print(f"❌ 记忆增强智能体测试失败: {e}")
return False
async def test_baxian_memory_council():
"""测试八仙记忆议会"""
print("\n🧪 测试八仙记忆议会...")
try:
# 创建记忆增强议会
council = await create_memory_enhanced_council()
print(f"✅ 创建八仙记忆议会成功,智能体数量: {len(council.agents)}")
# 列出所有智能体
for agent_name, agent in council.agents.items():
print(f" - {agent.personality.chinese_name} ({agent_name})")
# 进行简短的记忆辩论测试
print("\n🏛️ 开始记忆增强辩论测试...")
result = await council.conduct_memory_debate(
topic="比特币投资价值分析",
participants=["tieguaili", "lvdongbin"], # 只选择两个智能体进行快速测试
rounds=1
)
print(f"✅ 辩论完成")
print(f" 主题: {result['topic']}")
print(f" 参与者: {len(result['participants'])}")
print(f" 发言次数: {result['total_exchanges']}")
# 显示辩论内容
for exchange in result['conversation_history']:
print(f" {exchange['chinese_name']}: {exchange['content'][:80]}...")
# 获取集体记忆摘要
summary = await council.get_collective_memory_summary("比特币投资价值分析")
print(f"\n📚 集体记忆摘要长度: {len(summary)} 字符")
return True
except Exception as e:
print(f"❌ 八仙记忆议会测试失败: {e}")
return False
async def test_memory_bank_initialization():
"""测试Memory Bank初始化"""
print("\n🧪 测试 Memory Bank 初始化...")
try:
config = get_google_genai_config()
project_id = config.get('project_id')
location = config.get('location', 'us-central1')
if not project_id:
print("❌ 项目ID未配置跳过初始化测试")
return False
# 初始化所有八仙记忆银行
memory_bank = await initialize_baxian_memory_banks(project_id, location)
print(f"✅ 八仙记忆银行初始化成功")
print(f" 记忆银行数量: {len(memory_bank.memory_banks)}")
for agent_name, bank_name in memory_bank.memory_banks.items():
chinese_name = memory_bank.baxian_agents.get(agent_name, agent_name)
print(f" - {chinese_name}: {bank_name}")
return True
except Exception as e:
print(f"❌ Memory Bank 初始化测试失败: {e}")
return False
async def main():
"""主测试函数"""
print("🏛️ 稷下学宫 Vertex AI Memory Bank 测试")
print("=" * 50)
# 检查配置
print("🔧 检查配置...")
config = get_google_genai_config()
print(f"Google API Key: {'已配置' if config.get('api_key') else '未配置'}")
print(f"Project ID: {config.get('project_id', '未配置')}")
print(f"Location: {config.get('location', 'us-central1')}")
print(f"Memory Bank: {'启用' if config.get('memory_bank_enabled', 'TRUE') == 'TRUE' else '禁用'}")
if not config.get('project_id'):
print("\n❌ 测试需要 Google Cloud Project ID")
print("请设置环境变量: GOOGLE_CLOUD_PROJECT_ID=your-project-id")
return
# 运行测试
tests = [
("Memory Bank 基础功能", test_memory_bank_basic),
("记忆增强智能体", test_memory_enhanced_agent),
("八仙记忆议会", test_baxian_memory_council),
("Memory Bank 初始化", test_memory_bank_initialization)
]
results = []
for test_name, test_func in tests:
print(f"\n{'='*20}")
print(f"测试: {test_name}")
print(f"{'='*20}")
try:
result = await test_func()
results.append((test_name, result))
except Exception as e:
print(f"❌ 测试 {test_name} 出现异常: {e}")
results.append((test_name, False))
# 显示测试结果摘要
print(f"\n{'='*50}")
print("🏛️ 测试结果摘要")
print(f"{'='*50}")
passed = 0
total = len(results)
for test_name, result in results:
status = "✅ 通过" if result else "❌ 失败"
print(f"{status} {test_name}")
if result:
passed += 1
print(f"\n📊 总体结果: {passed}/{total} 测试通过")
if passed == total:
print("🎉 所有测试通过Vertex AI Memory Bank 集成成功!")
else:
print("⚠️ 部分测试失败,请检查配置和网络连接")
if __name__ == "__main__":
# 运行测试
asyncio.run(main())