245 lines
8.9 KiB
Python
245 lines
8.9 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
Vertex AI Memory Bank 演示脚本
|
||
展示稷下学宫记忆增强AI辩论系统
|
||
"""
|
||
|
||
import asyncio
|
||
import sys
|
||
import os
|
||
|
||
# 添加项目根目录到路径
|
||
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||
|
||
from src.jixia.agents.memory_enhanced_agent import create_memory_enhanced_council
|
||
from config.doppler_config import validate_config
|
||
|
||
|
||
async def demo_memory_enhanced_debate():
|
||
"""演示记忆增强的AI辩论"""
|
||
|
||
print("🏛️ 稷下学宫 Vertex AI Memory Bank 演示")
|
||
print("=" * 60)
|
||
|
||
# 验证配置
|
||
print("🔧 验证配置...")
|
||
if not validate_config("google_adk"):
|
||
print("❌ 配置验证失败,请检查环境变量")
|
||
return
|
||
|
||
try:
|
||
# 创建记忆增强议会
|
||
print("\n🎭 创建八仙记忆增强议会...")
|
||
council = await create_memory_enhanced_council()
|
||
|
||
# 演示主题
|
||
topics = [
|
||
"特斯拉股票投资价值分析",
|
||
"人工智能行业投资机会",
|
||
"加密货币市场前景展望"
|
||
]
|
||
|
||
# 选择参与的仙人(为了演示,只选择几位)
|
||
participants = ["tieguaili", "lvdongbin", "hexiangu", "zhangguolao"]
|
||
|
||
for i, topic in enumerate(topics, 1):
|
||
print(f"\n{'='*40}")
|
||
print(f"🎯 第 {i} 场辩论: {topic}")
|
||
print(f"{'='*40}")
|
||
|
||
# 进行记忆增强辩论
|
||
result = await council.conduct_memory_debate(
|
||
topic=topic,
|
||
participants=participants,
|
||
rounds=2 # 每场2轮,保持演示简洁
|
||
)
|
||
|
||
print(f"\n📊 辩论结果:")
|
||
print(f" 主题: {result['topic']}")
|
||
print(f" 参与者: {len(result['participants'])} 位仙人")
|
||
print(f" 总发言: {result['total_exchanges']} 次")
|
||
|
||
# 显示部分对话内容
|
||
print(f"\n💬 精彩观点摘录:")
|
||
for exchange in result['conversation_history'][:4]: # 只显示前4条
|
||
content_preview = exchange['content'][:120] + "..." if len(exchange['content']) > 120 else exchange['content']
|
||
print(f" 🗣️ {exchange['chinese_name']}: {content_preview}")
|
||
|
||
# 获取集体记忆摘要
|
||
print(f"\n📚 获取集体记忆...")
|
||
summary = await council.get_collective_memory_summary(topic)
|
||
|
||
if "暂无相关集体记忆" not in summary:
|
||
print(f" ✅ 已生成 {len(summary)} 字符的记忆摘要")
|
||
else:
|
||
print(f" ℹ️ 这是新主题,正在建立记忆")
|
||
|
||
# 演示间隔
|
||
if i < len(topics):
|
||
print(f"\n⏳ 准备下一场辩论...")
|
||
await asyncio.sleep(1)
|
||
|
||
# 最终演示:展示记忆的累积效果
|
||
print(f"\n{'='*60}")
|
||
print("🧠 记忆累积效果演示")
|
||
print(f"{'='*60}")
|
||
|
||
# 让铁拐李基于所有记忆回答一个综合问题
|
||
tieguaili = council.agents.get("tieguaili")
|
||
if tieguaili:
|
||
print(f"\n🤔 向铁拐李提问: '基于你的所有记忆,总结一下当前市场的主要风险'")
|
||
|
||
comprehensive_response = await tieguaili.respond_with_memory(
|
||
message="基于你参与的所有辩论和积累的记忆,总结一下当前市场的主要风险和你的投资建议。",
|
||
topic="综合市场分析"
|
||
)
|
||
|
||
print(f"\n🧙♂️ 铁拐李的综合分析:")
|
||
print(f" {comprehensive_response}")
|
||
|
||
# 展示记忆学习功能
|
||
print(f"\n🎓 演示记忆学习功能...")
|
||
|
||
# 让何仙姑学习一个用户偏好
|
||
hexiangu = council.agents.get("hexiangu")
|
||
if hexiangu:
|
||
await hexiangu.learn_preference(
|
||
preference="用户偏好ESG投资,关注环境和社会责任",
|
||
topic="投资偏好"
|
||
)
|
||
print(f" ✅ 何仙姑学习了ESG投资偏好")
|
||
|
||
# 基于新学到的偏好回答问题
|
||
esg_response = await hexiangu.respond_with_memory(
|
||
message="推荐一些符合ESG标准的投资标的",
|
||
topic="ESG投资"
|
||
)
|
||
|
||
print(f"\n👸 何仙姑基于学习的偏好回应:")
|
||
print(f" {esg_response[:200]}...")
|
||
|
||
print(f"\n🎉 演示完成!")
|
||
print(f"\n💡 Memory Bank 的优势:")
|
||
print(f" ✅ 智能体能记住历史对话和分析")
|
||
print(f" ✅ 学习用户偏好,提供个性化建议")
|
||
print(f" ✅ 积累投资策略和市场洞察")
|
||
print(f" ✅ 跨会话保持一致的人格和观点")
|
||
print(f" ✅ 基于历史经验做出更好的决策")
|
||
|
||
except Exception as e:
|
||
print(f"❌ 演示过程中出现错误: {e}")
|
||
print(f"💡 请检查:")
|
||
print(f" - Google Cloud Project ID 是否正确配置")
|
||
print(f" - Vertex AI API 是否已启用")
|
||
print(f" - 网络连接是否正常")
|
||
|
||
|
||
async def demo_individual_memory_features():
|
||
"""演示个体记忆功能"""
|
||
|
||
print(f"\n{'='*60}")
|
||
print("🔍 个体记忆功能详细演示")
|
||
print(f"{'='*60}")
|
||
|
||
try:
|
||
from src.jixia.memory.vertex_memory_bank import VertexMemoryBank
|
||
from src.jixia.agents.memory_enhanced_agent import MemoryEnhancedAgent
|
||
|
||
# 创建记忆银行
|
||
memory_bank = VertexMemoryBank.from_config()
|
||
|
||
# 创建单个智能体进行详细演示
|
||
agent = MemoryEnhancedAgent("tieguaili", memory_bank)
|
||
|
||
print(f"\n🧙♂️ 与 {agent.personality.chinese_name} 的记忆互动演示")
|
||
|
||
# 1. 添加不同类型的记忆
|
||
print(f"\n📝 添加不同类型的记忆...")
|
||
|
||
memories_to_add = [
|
||
{
|
||
"content": "在2008年金融危机中,逆向投资者获得了丰厚回报",
|
||
"memory_type": "knowledge",
|
||
"topic": "历史教训"
|
||
},
|
||
{
|
||
"content": "用户偏好价值投资,不喜欢高风险的成长股",
|
||
"memory_type": "preference",
|
||
"topic": "用户偏好"
|
||
},
|
||
{
|
||
"content": "当市场过度乐观时,应该保持谨慎并寻找反向机会",
|
||
"memory_type": "strategy",
|
||
"topic": "投资策略"
|
||
}
|
||
]
|
||
|
||
for memory in memories_to_add:
|
||
await memory_bank.add_memory(
|
||
agent_name="tieguaili",
|
||
content=memory["content"],
|
||
memory_type=memory["memory_type"],
|
||
debate_topic=memory["topic"]
|
||
)
|
||
print(f" ✅ 添加{memory['memory_type']}记忆: {memory['content'][:50]}...")
|
||
|
||
# 2. 搜索记忆
|
||
print(f"\n🔍 搜索相关记忆...")
|
||
|
||
search_queries = ["金融危机", "价值投资", "投资策略"]
|
||
|
||
for query in search_queries:
|
||
results = await memory_bank.search_memories(
|
||
agent_name="tieguaili",
|
||
query=query,
|
||
limit=3
|
||
)
|
||
print(f" 🔎 搜索 '{query}': 找到 {len(results)} 条相关记忆")
|
||
|
||
for result in results:
|
||
relevance = result.get('relevance_score', 'N/A')
|
||
print(f" - {result['content'][:60]}... (相关度: {relevance})")
|
||
|
||
# 3. 基于记忆的智能回应
|
||
print(f"\n🤖 基于记忆的智能回应演示...")
|
||
|
||
questions = [
|
||
"现在市场很乐观,你有什么建议?",
|
||
"推荐一些适合保守投资者的标的",
|
||
"历史上有哪些值得借鉴的投资教训?"
|
||
]
|
||
|
||
for question in questions:
|
||
print(f"\n❓ 问题: {question}")
|
||
|
||
response = await agent.respond_with_memory(
|
||
message=question,
|
||
topic="投资咨询"
|
||
)
|
||
|
||
print(f"🧙♂️ 铁拐李: {response[:150]}...")
|
||
|
||
print(f"\n✨ 个体记忆功能演示完成!")
|
||
|
||
except Exception as e:
|
||
print(f"❌ 个体记忆演示失败: {e}")
|
||
|
||
|
||
async def main():
|
||
"""主演示函数"""
|
||
|
||
print("🚀 启动 Vertex AI Memory Bank 完整演示")
|
||
|
||
# 主要演示:记忆增强辩论
|
||
await demo_memory_enhanced_debate()
|
||
|
||
# 详细演示:个体记忆功能
|
||
await demo_individual_memory_features()
|
||
|
||
print(f"\n🏛️ 稷下学宫 Memory Bank 演示结束")
|
||
print(f"📖 更多信息请参考: docs/VERTEX_MEMORY_BANK_SETUP.md")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
# 运行演示
|
||
asyncio.run(main()) |