|
|
#!/usr/bin/env python3
|
|
|
# -*- coding: utf-8 -*-
|
|
|
"""
|
|
|
代码示例 08: Agent工具集成
|
|
|
展示如何在HelloAgents框架中集成MemoryTool和RAGTool
|
|
|
"""
|
|
|
|
|
|
import time
|
|
|
from hello_agents import SimpleAgent, HelloAgentsLLM, ToolRegistry
|
|
|
from hello_agents.tools import MemoryTool, RAGTool
|
|
|
|
|
|
class AgentIntegrationDemo:
|
|
|
"""Agent工具集成演示类"""
|
|
|
|
|
|
def __init__(self):
|
|
|
self.setup_agent()
|
|
|
|
|
|
def setup_agent(self):
|
|
|
"""设置Agent和工具"""
|
|
|
print("🤖 Agent工具集成设置")
|
|
|
print("=" * 50)
|
|
|
|
|
|
# 初始化工具
|
|
|
print("1. 初始化工具...")
|
|
|
self.memory_tool = MemoryTool(
|
|
|
user_id="agent_integration_user",
|
|
|
memory_types=["working", "episodic", "semantic", "perceptual"]
|
|
|
)
|
|
|
|
|
|
self.rag_tool = RAGTool(
|
|
|
knowledge_base_path="./agent_integration_kb",
|
|
|
rag_namespace="agent_demo"
|
|
|
)
|
|
|
|
|
|
print("✅ MemoryTool和RAGTool初始化完成")
|
|
|
|
|
|
# 创建Agent
|
|
|
print("\n2. 创建Agent...")
|
|
|
self.llm = HelloAgentsLLM()
|
|
|
self.agent = SimpleAgent(
|
|
|
name="智能学习助手",
|
|
|
llm=self.llm,
|
|
|
description="集成记忆和RAG功能的智能助手"
|
|
|
)
|
|
|
|
|
|
print("✅ Agent创建完成")
|
|
|
|
|
|
# 注册工具
|
|
|
print("\n3. 注册工具...")
|
|
|
self.tool_registry = ToolRegistry()
|
|
|
self.tool_registry.register_tool(self.memory_tool)
|
|
|
self.tool_registry.register_tool(self.rag_tool)
|
|
|
self.agent.tool_registry = self.tool_registry
|
|
|
|
|
|
print("✅ 工具注册完成")
|
|
|
|
|
|
# 显示Agent状态
|
|
|
print(f"\n📊 Agent状态:")
|
|
|
print(f" 名称: {self.agent.name}")
|
|
|
print(f" 描述: {self.agent.description}")
|
|
|
print(f" 可用工具: {list(self.tool_registry.tools.keys())}")
|
|
|
|
|
|
def demonstrate_tool_registry_pattern(self):
|
|
|
"""演示工具注册模式"""
|
|
|
print("\n🔧 工具注册模式演示")
|
|
|
print("-" * 50)
|
|
|
|
|
|
print("工具注册模式特点:")
|
|
|
print("• 🔌 统一的工具接口")
|
|
|
print("• 📋 集中的工具管理")
|
|
|
print("• 🔄 动态工具加载")
|
|
|
print("• 🎯 工具能力发现")
|
|
|
|
|
|
# 演示工具注册过程
|
|
|
print(f"\n🔧 工具注册详情:")
|
|
|
|
|
|
for tool_name, tool_instance in self.tool_registry.tools.items():
|
|
|
print(f"\n工具: {tool_name}")
|
|
|
print(f" 类型: {type(tool_instance).__name__}")
|
|
|
print(f" 描述: {tool_instance.description}")
|
|
|
|
|
|
# 显示工具的主要功能
|
|
|
if tool_name == "memory":
|
|
|
print(f" 主要功能: 记忆管理、搜索、整合、遗忘")
|
|
|
print(f" 记忆类型: {tool_instance.memory_types}")
|
|
|
elif tool_name == "rag":
|
|
|
print(f" 主要功能: 文档处理、智能问答、知识检索")
|
|
|
print(f" 命名空间: {tool_instance.rag_namespace}")
|
|
|
|
|
|
# 演示工具发现机制
|
|
|
print(f"\n🔍 工具能力发现:")
|
|
|
available_tools = self.tool_registry.list_tools()
|
|
|
print(f"可用工具列表: {available_tools}")
|
|
|
|
|
|
# 演示工具获取
|
|
|
memory_tool = self.tool_registry.get_tool("memory")
|
|
|
rag_tool = self.tool_registry.get_tool("rag")
|
|
|
|
|
|
print(f"\n✅ 工具获取成功:")
|
|
|
print(f" Memory工具: {type(memory_tool).__name__}")
|
|
|
print(f" RAG工具: {type(rag_tool).__name__}")
|
|
|
|
|
|
def demonstrate_unified_interface(self):
|
|
|
"""演示统一接口模式"""
|
|
|
print("\n🔗 统一接口模式演示")
|
|
|
print("-" * 50)
|
|
|
|
|
|
print("统一接口优势:")
|
|
|
print("• 🎯 一致的调用方式")
|
|
|
print("• 📝 标准化的参数传递")
|
|
|
print("• 🛡️ 统一的错误处理")
|
|
|
print("• 🔄 简化的工具切换")
|
|
|
|
|
|
# 演示统一的execute接口
|
|
|
print(f"\n🔗 统一execute接口演示:")
|
|
|
|
|
|
# Memory工具操作
|
|
|
print(f"\n1. Memory工具操作:")
|
|
|
memory_operations = [
|
|
|
("add", {
|
|
|
"content": "学习了Agent工具集成模式",
|
|
|
"memory_type": "episodic",
|
|
|
"importance": 0.8,
|
|
|
"topic": "agent_integration"
|
|
|
}),
|
|
|
("search", {
|
|
|
"query": "Agent集成",
|
|
|
"limit": 2
|
|
|
}),
|
|
|
("stats", {})
|
|
|
]
|
|
|
|
|
|
for operation, params in memory_operations:
|
|
|
print(f" 操作: memory.execute('{operation}', {params})")
|
|
|
result = self.memory_tool.execute(operation, **params)
|
|
|
print(f" 结果: {str(result)[:100]}...")
|
|
|
|
|
|
# RAG工具操作
|
|
|
print(f"\n2. RAG工具操作:")
|
|
|
|
|
|
# 先添加一些内容
|
|
|
self.rag_tool.execute("add_text",
|
|
|
text="Agent工具集成是HelloAgents框架的核心特性,允许Agent使用多种工具来完成复杂任务。",
|
|
|
document_id="agent_integration_guide")
|
|
|
|
|
|
rag_operations = [
|
|
|
("search", {
|
|
|
"query": "Agent工具集成",
|
|
|
"limit": 2
|
|
|
}),
|
|
|
("ask", {
|
|
|
"question": "什么是Agent工具集成?",
|
|
|
"limit": 2
|
|
|
}),
|
|
|
("stats", {})
|
|
|
]
|
|
|
|
|
|
for operation, params in rag_operations:
|
|
|
print(f" 操作: rag.execute('{operation}', {params})")
|
|
|
result = self.rag_tool.execute(operation, **params)
|
|
|
print(f" 结果: {str(result)[:100]}...")
|
|
|
|
|
|
def demonstrate_collaborative_workflow(self):
|
|
|
"""演示协同工作流程"""
|
|
|
print("\n🤝 协同工作流程演示")
|
|
|
print("-" * 50)
|
|
|
|
|
|
print("协同工作场景:")
|
|
|
print("• 📚 学习新知识 → RAG存储 + Memory记录")
|
|
|
print("• 🔍 回顾学习历程 → Memory检索 + RAG补充")
|
|
|
print("• 💡 知识应用 → RAG查询 + Memory更新")
|
|
|
print("• 📊 学习分析 → 两工具统计整合")
|
|
|
|
|
|
# 场景1:学习新知识
|
|
|
print(f"\n📚 场景1:学习新知识")
|
|
|
|
|
|
# 向RAG添加学习资料
|
|
|
learning_content = """# 设计模式:观察者模式
|
|
|
|
|
|
## 定义
|
|
|
观察者模式定义了对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都会得到通知并自动更新。
|
|
|
|
|
|
## 结构
|
|
|
- Subject(主题):维护观察者列表,提供注册和删除观察者的方法
|
|
|
- Observer(观察者):定义更新接口
|
|
|
- ConcreteSubject(具体主题):实现主题接口
|
|
|
- ConcreteObserver(具体观察者):实现观察者接口
|
|
|
|
|
|
## 应用场景
|
|
|
- GUI事件处理
|
|
|
- 模型-视图架构
|
|
|
- 发布-订阅系统
|
|
|
"""
|
|
|
|
|
|
rag_result = self.rag_tool.execute("add_text",
|
|
|
text=learning_content,
|
|
|
document_id="observer_pattern")
|
|
|
print(f"RAG添加结果: {rag_result}")
|
|
|
|
|
|
# 记录学习活动到记忆系统
|
|
|
memory_result = self.memory_tool.execute("add",
|
|
|
content="学习了观察者设计模式的定义、结构和应用场景",
|
|
|
memory_type="episodic",
|
|
|
importance=0.8,
|
|
|
topic="design_patterns",
|
|
|
pattern_type="observer")
|
|
|
print(f"Memory记录结果: {memory_result}")
|
|
|
|
|
|
# 场景2:回顾学习历程
|
|
|
print(f"\n🔍 场景2:回顾学习历程")
|
|
|
|
|
|
# 从记忆系统检索学习历史
|
|
|
memory_search = self.memory_tool.execute("search",
|
|
|
query="设计模式学习",
|
|
|
limit=3)
|
|
|
print(f"学习历史回顾: {memory_search}")
|
|
|
|
|
|
# 从RAG获取相关知识补充
|
|
|
rag_search = self.rag_tool.execute("search",
|
|
|
query="观察者模式",
|
|
|
limit=2)
|
|
|
print(f"知识内容补充: {rag_search}")
|
|
|
|
|
|
# 场景3:知识应用
|
|
|
print(f"\n💡 场景3:知识应用")
|
|
|
|
|
|
# 通过RAG查询应用方法
|
|
|
application_query = self.rag_tool.execute("ask",
|
|
|
question="观察者模式适用于什么场景?",
|
|
|
limit=2)
|
|
|
print(f"应用场景查询: {application_query}")
|
|
|
|
|
|
# 记录应用实践到记忆
|
|
|
application_memory = self.memory_tool.execute("add",
|
|
|
content="查询了观察者模式的应用场景,准备在GUI项目中使用",
|
|
|
memory_type="working",
|
|
|
importance=0.7,
|
|
|
application_context="gui_project")
|
|
|
print(f"应用记录: {application_memory}")
|
|
|
|
|
|
# 场景4:学习分析
|
|
|
print(f"\n📊 场景4:学习分析")
|
|
|
|
|
|
# 获取记忆系统统计
|
|
|
memory_stats = self.memory_tool.execute("stats")
|
|
|
print(f"记忆统计: {memory_stats}")
|
|
|
|
|
|
# 获取RAG系统统计
|
|
|
rag_stats = self.rag_tool.execute("stats")
|
|
|
print(f"知识库统计: {rag_stats}")
|
|
|
|
|
|
# 生成学习摘要
|
|
|
learning_summary = self.memory_tool.execute("summary", limit=5)
|
|
|
print(f"学习摘要: {learning_summary}")
|
|
|
|
|
|
def demonstrate_agent_orchestration(self):
|
|
|
"""演示Agent编排能力"""
|
|
|
print("\n🎭 Agent编排能力演示")
|
|
|
print("-" * 50)
|
|
|
|
|
|
print("Agent编排特点:")
|
|
|
print("• 🧠 智能工具选择")
|
|
|
print("• 🔄 工具链式调用")
|
|
|
print("• 📊 结果整合分析")
|
|
|
print("• 🎯 目标导向执行")
|
|
|
|
|
|
# 模拟复杂任务的工具编排
|
|
|
print(f"\n🎭 复杂任务编排示例:")
|
|
|
print(f"任务: 创建一个关于机器学习的学习计划")
|
|
|
|
|
|
# 步骤1:从RAG获取机器学习知识结构
|
|
|
print(f"\n步骤1: 获取知识结构")
|
|
|
|
|
|
# 添加机器学习知识
|
|
|
ml_content = """# 机器学习学习路径
|
|
|
|
|
|
## 基础阶段
|
|
|
1. 数学基础:线性代数、概率统计、微积分
|
|
|
2. 编程基础:Python、NumPy、Pandas
|
|
|
3. 机器学习概念:监督学习、无监督学习、强化学习
|
|
|
|
|
|
## 进阶阶段
|
|
|
1. 算法实现:从零实现经典算法
|
|
|
2. 深度学习:神经网络、CNN、RNN、Transformer
|
|
|
3. 实践项目:端到端机器学习项目
|
|
|
|
|
|
## 高级阶段
|
|
|
1. 模型优化:超参数调优、模型压缩
|
|
|
2. 部署运维:模型部署、监控、更新
|
|
|
3. 前沿技术:最新论文、开源项目
|
|
|
"""
|
|
|
|
|
|
self.rag_tool.execute("add_text",
|
|
|
text=ml_content,
|
|
|
document_id="ml_learning_path")
|
|
|
|
|
|
knowledge_structure = self.rag_tool.execute("ask",
|
|
|
question="机器学习的学习路径是什么?",
|
|
|
limit=3)
|
|
|
print(f"知识结构: {knowledge_structure[:200]}...")
|
|
|
|
|
|
# 步骤2:记录学习计划到记忆系统
|
|
|
print(f"\n步骤2: 记录学习计划")
|
|
|
|
|
|
plan_memory = self.memory_tool.execute("add",
|
|
|
content="制定了机器学习学习计划,包括基础、进阶、高级三个阶段",
|
|
|
memory_type="episodic",
|
|
|
importance=0.9,
|
|
|
plan_type="learning",
|
|
|
subject="machine_learning")
|
|
|
print(f"计划记录: {plan_memory}")
|
|
|
|
|
|
# 步骤3:检索相关学习经验
|
|
|
print(f"\n步骤3: 检索学习经验")
|
|
|
|
|
|
experience_search = self.memory_tool.execute("search",
|
|
|
query="学习计划 学习经验",
|
|
|
limit=3)
|
|
|
print(f"相关经验: {experience_search}")
|
|
|
|
|
|
# 步骤4:整合生成最终建议
|
|
|
print(f"\n步骤4: 生成最终建议")
|
|
|
|
|
|
final_advice = self.rag_tool.execute("ask",
|
|
|
question="如何制定有效的机器学习学习计划?",
|
|
|
limit=4)
|
|
|
print(f"最终建议: {final_advice[:300]}...")
|
|
|
|
|
|
# 记录编排过程
|
|
|
orchestration_memory = self.memory_tool.execute("add",
|
|
|
content="完成了复杂的学习计划制定任务,使用了RAG和Memory的协同编排",
|
|
|
memory_type="working",
|
|
|
importance=0.8,
|
|
|
task_type="orchestration")
|
|
|
print(f"\n编排记录: {orchestration_memory}")
|
|
|
|
|
|
def demonstrate_performance_analysis(self):
|
|
|
"""演示性能分析"""
|
|
|
print("\n📊 性能分析演示")
|
|
|
print("-" * 50)
|
|
|
|
|
|
print("性能分析指标:")
|
|
|
print("• ⏱️ 工具响应时间")
|
|
|
print("• 🔄 工具切换开销")
|
|
|
print("• 💾 内存使用情况")
|
|
|
print("• 🎯 任务完成效率")
|
|
|
|
|
|
# 性能测试
|
|
|
print(f"\n📊 性能测试:")
|
|
|
|
|
|
# 单工具性能测试
|
|
|
print(f"\n1. 单工具性能:")
|
|
|
|
|
|
# Memory工具性能
|
|
|
start_time = time.time()
|
|
|
for i in range(5):
|
|
|
self.memory_tool.execute("add",
|
|
|
content=f"性能测试记忆 {i+1}",
|
|
|
memory_type="working",
|
|
|
importance=0.5)
|
|
|
memory_time = time.time() - start_time
|
|
|
print(f"Memory工具 - 5次添加操作: {memory_time:.3f}秒")
|
|
|
|
|
|
# RAG工具性能
|
|
|
start_time = time.time()
|
|
|
for i in range(3):
|
|
|
self.rag_tool.execute("search",
|
|
|
query=f"测试查询 {i+1}",
|
|
|
limit=2)
|
|
|
rag_time = time.time() - start_time
|
|
|
print(f"RAG工具 - 3次搜索操作: {rag_time:.3f}秒")
|
|
|
|
|
|
# 协同工作性能测试
|
|
|
print(f"\n2. 协同工作性能:")
|
|
|
|
|
|
start_time = time.time()
|
|
|
|
|
|
# 模拟协同工作流程
|
|
|
self.rag_tool.execute("add_text",
|
|
|
text="这是一个性能测试文档",
|
|
|
document_id="perf_test")
|
|
|
|
|
|
self.memory_tool.execute("add",
|
|
|
content="执行了性能测试",
|
|
|
memory_type="working",
|
|
|
importance=0.6)
|
|
|
|
|
|
rag_result = self.rag_tool.execute("search",
|
|
|
query="性能测试",
|
|
|
limit=1)
|
|
|
|
|
|
memory_result = self.memory_tool.execute("search",
|
|
|
query="性能测试",
|
|
|
limit=1)
|
|
|
|
|
|
collaborative_time = time.time() - start_time
|
|
|
print(f"协同工作流程: {collaborative_time:.3f}秒")
|
|
|
|
|
|
# 性能分析总结
|
|
|
print(f"\n📈 性能分析总结:")
|
|
|
print(f"Memory工具平均响应: {memory_time/5:.3f}秒/操作")
|
|
|
print(f"RAG工具平均响应: {rag_time/3:.3f}秒/操作")
|
|
|
print(f"协同工作效率: {collaborative_time:.3f}秒/流程")
|
|
|
|
|
|
# 获取最终统计
|
|
|
final_memory_stats = self.memory_tool.execute("stats")
|
|
|
final_rag_stats = self.rag_tool.execute("stats")
|
|
|
|
|
|
print(f"\n📊 最终系统状态:")
|
|
|
print(f"Memory系统: {final_memory_stats}")
|
|
|
print(f"RAG系统: {final_rag_stats}")
|
|
|
|
|
|
def main():
|
|
|
"""主函数"""
|
|
|
print("🤖 Agent工具集成演示")
|
|
|
print("展示如何在HelloAgents框架中集成MemoryTool和RAGTool")
|
|
|
print("=" * 70)
|
|
|
|
|
|
try:
|
|
|
demo = AgentIntegrationDemo()
|
|
|
|
|
|
# 1. 工具注册模式演示
|
|
|
demo.demonstrate_tool_registry_pattern()
|
|
|
|
|
|
# 2. 统一接口模式演示
|
|
|
demo.demonstrate_unified_interface()
|
|
|
|
|
|
# 3. 协同工作流程演示
|
|
|
demo.demonstrate_collaborative_workflow()
|
|
|
|
|
|
# 4. Agent编排能力演示
|
|
|
demo.demonstrate_agent_orchestration()
|
|
|
|
|
|
# 5. 性能分析演示
|
|
|
demo.demonstrate_performance_analysis()
|
|
|
|
|
|
print("\n" + "=" * 70)
|
|
|
print("🎉 Agent工具集成演示完成!")
|
|
|
print("=" * 70)
|
|
|
|
|
|
print("\n✨ Agent集成核心特性:")
|
|
|
print("1. 🔧 工具注册模式 - 统一的工具管理和发现")
|
|
|
print("2. 🔗 统一接口设计 - 一致的工具调用方式")
|
|
|
print("3. 🤝 协同工作流程 - 工具间的智能协作")
|
|
|
print("4. 🎭 智能编排能力 - 复杂任务的自动分解")
|
|
|
print("5. 📊 性能监控分析 - 全面的性能评估")
|
|
|
|
|
|
print("\n🎯 设计优势:")
|
|
|
print("• 模块化 - 工具独立开发,灵活组合")
|
|
|
print("• 可扩展 - 支持动态添加新工具")
|
|
|
print("• 高内聚 - 每个工具专注特定功能")
|
|
|
print("• 低耦合 - 工具间依赖关系最小")
|
|
|
|
|
|
print("\n💡 应用价值:")
|
|
|
print("• 智能助手 - 构建多功能智能助手")
|
|
|
print("• 知识管理 - 企业级知识管理系统")
|
|
|
print("• 学习平台 - 个性化学习支持系统")
|
|
|
print("• 决策支持 - 基于知识和经验的决策")
|
|
|
|
|
|
except Exception as e:
|
|
|
print(f"\n❌ 演示过程中发生错误: {e}")
|
|
|
import traceback
|
|
|
traceback.print_exc()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
main() |