使用说明
Agno MCP编排系统
一个基于模型上下文协议(MCP)的具有自动回退机制的全面网络抓取编排框架。
🎯 系统概述
Agno编排系统为web数据提取提供了一个强大的、生产就绪的解决方案,包括:
- 多源抓取 具有智能回退功能
- 综合录井 带有时间戳和性能指标
- MCP集成 实现无缝工具协调
- 自然语言查询 具有自动预处理功能
- 透明的反馈 关于执行状态
建筑
User Input
↓
Agno Orchestrator (preprocesses & coordinates)
↓
MCP Tools Framework (manages execution)
↓
Primary: Tavily API (fast, structured extraction)
↓ (on failure)
Fallback: Jina API (semantic understanding)
↓
Formatted Response + Execution Logs
🚀 快速开始
先决条件
安装
- 克隆存储库:
git clone https://github.com/yourusername/mcp-server.git
cd mcp-server
- 安装依赖项:
pip install -r requirements.txt
- 配置环境变量:
# Copy example environment file
cp .env.example .env
# Edit .env with your API keys
# Required:
TAVILY_API_KEY=your_tavily_api_key_here
# Optional:
JINA_API_KEY=your_jina_api_key_here
# Configuration (optional):
LOG_LEVEL=INFO
LOG_FILE=agno_system.log
MAX_RETRIES=3
TIMEOUT_SECONDS=30
用法
作为MCP服务器
作为MCP服务器运行(用于与MCP兼容客户端集成):
python -m src.server
作为CLI工具
从命令行运行独立查询:
# Basic usage
python -m src.cli "Tell me about Microsoft 2024 report"
# With custom formatting
python -m src.cli "What happened in AI in 2024?" --format markdown
# With more results
python -m src.cli "Latest climate change news" --max-results 10
# Show statistics
python -m src.cli "Search query" --stats
程序化使用
import asyncio
from src.agno_orchestrator import AgnoOrchestrator
async def main():
# Initialize orchestrator
orchestrator = AgnoOrchestrator()
# Process a request
response = await orchestrator.process_request(
user_input="Tell me about Microsoft 2024 report",
max_results=5
)
# Format and display
if response.success:
formatted = orchestrator.format_response(response, format_type="markdown")
print(formatted)
else:
print(f"Error: {response.error}")
asyncio.run(main())
📋 核心组件
1.阿格诺编曲家(src/agno_orchestrator.py)
中央控制层:
- 预处理自然语言查询
- 通过基于优先级的选择协调工具执行
- 管理自动回退机制
- 提供透明的用户反馈
- 跟踪系统统计信息
关键方法:
process_request(user_input, **kwargs)-查询的主要入口点format_response(response, format_type)-将结果格式化为结构化/JSON/Markdownget_statistics()-检索系统性能指标
2.MCP工具框架(src/mcp_tools_integration.py)
工具管理统一界面:
- 动态工具注册和发现
- 基于优先级的执行顺序
- 通过置信度评分进行结果验证
- 执行历史跟踪
- 自动故障转移处理
关键类别:
BaseTool-所有刮削工具的抽象基础ToolRegistry-工具管理中央注册表MCPToolsFramework-主要协调框架ToolResult-标准化结果容器
3.报废工具
塔维利工具(src/tools/tavily_tool.py)
- 优先: 0(最高)
- 目的: 快速、结构化的web提取
- 特征:
- 可配置的搜索深度(基本/高级)
- 域过滤(包括/排除)
- 自动置信度计算
- 丰富的结果元数据
工具 名称src/tools/jina_tool.py)
- 优先: 1(回退)
- 目的: 语义网理解
- 特征:
- 搜索API集成
- 用于内容提取的阅读器API
- 后备搜索机制
- 在没有API密钥的情况下工作(速率受限)
4.测井系统(src/logging_system.py)
全面的日志记录,包括:
- 所有事件的UTC时间戳
- 操作级别跟踪(开始/结束)
- 持续时间测量值(毫秒)
- 成功/失败状态
- 数据质量指标(置信度、完整性)
- 回退事件日志记录
日志格式:
2024-10-14 15:30:45 UTC - AgnoSystem - INFO - [Tavily_Request] Status: success | Duration: 1250.45ms | Quality: {"confidence": 0.85}
5.配置管理(src/config.py)
集中配置:
- 环境变量加载
- 配置验证
- 默认值管理
- 安全的API密钥处理
🔧 配置选项
| 变量 | 描述 | 默认值 | 必填 |
|---|---|---|---|
TAVILY_API_KEY |
Tavilly API密钥 | - | 是* |
JINA_API_KEY |
Jina API密钥 | - | 否 |
LOG_LEVEL |
日志记录级别 | 信息 | 否 |
LOG_FILE |
日志文件路径 | agno_system.Log | 否 |
TIMEOUT_SECONDS |
请求超时 | 30 | 否 |
MAX_RETRIES |
最大重试次数 | 3 | 否 |
MIN_CONFIDENCE |
最小置信阈值 | 0.5 | 否 |
*必须至少配置一个API密钥(Tavily或Jina)。
📊 系统功能
基于优先级的执行
工具按优先级顺序执行:
- 塔维利 (优先级0)-主要快速提取
- 姓名 (优先级1)-语义回退
如果失败或置信度低,系统会自动尝试下一个工具。
自动回退
# Fallback triggers when:
1. Primary tool fails (error, timeout)
2. Result confidence below threshold
3. Empty or invalid data returned
# Fallback is logged:
{
"timestamp": "2024-10-14T15:30:45.123Z",
"operation": "Fallback_Triggered",
"from": "Tavily",
"to": "Jina",
"reason": "Tavily request timeout"
}
信心评分
每个结果都包括一个基于以下因素的置信度得分(0.0-1.0):
- 找到的结果数量
- 来源的质量分数
- 摘要答案的存在
- 内容完整性
透明反馈
用户收到明确的状态消息:
- ✓ 成功: “已成功从Tavily检索到结果。”
- ✓ 使用回退: 主源不可用,已使用回退机制
- ⚠ 超时: “请求超时。请重试。”
- ✗ 失败: “无法检索结果。所有源都失败。”
📝 测井标准
每个操作日志:
- 时间戳 -UTC ISO格式
- 操作名称 -例如,“Tavily_Request”
- 持续时间 -执行时间(毫秒)
- 状态 -成功/失败/超时/进程中
- 错误信息 -如果适用
- 数据质量 -置信度和完整性指标
- 元数据 -附加上下文
日志条目示例:
{
"timestamp": "2024-10-14T15:30:45.123456Z",
"operation": "Tavily_Request_End",
"status": "success",
"duration_ms": 1250.45,
"error": null,
"data_quality": {
"confidence": 0.85
},
"metadata": {
"result_count": 5,
"search_depth": "basic"
}
}
🛠️ 发展
项目结构
mcp-server/
├── src/
│ ├── __init__.py
│ ├── server.py # MCP server entry point
│ ├── cli.py # Command-line interface
│ ├── config.py # Configuration management
│ ├── logging_system.py # Comprehensive logging
│ ├── agno_orchestrator.py # Main orchestration logic
│ ├── mcp_tools_integration.py # Tool framework
│ └── tools/
│ ├── __init__.py
│ ├── tavily_tool.py # Tavily integration
│ └── jina_tool.py # Jina integration
├── requirements.txt # Python dependencies
├── .env.example # Example environment file
├── .gitignore # Git ignore rules
└── README.md # This file
添加新工具
- 创建一个新的工具类,继承自
BaseTool:
from src.mcp_tools_integration import BaseTool, ToolResult, ToolStatus
class MyCustomTool(BaseTool):
def __init__(self, api_key=None):
super().__init__(name="MyTool", priority=2) # Lower priority = fallback
self.api_key = api_key
def is_available(self) -> bool:
return bool(self.api_key)
async def execute(self, query: str, **kwargs) -> ToolResult:
# Implement your scraping logic
try:
# ... scraping code ...
return ToolResult(
status=ToolStatus.SUCCESS,
data={"results": []},
confidence=0.8
)
except Exception as e:
return ToolResult(
status=ToolStatus.FAILURE,
error=str(e)
)
- 在编排器中注册该工具:
from src.tools.my_custom_tool import MyCustomTool
# In AgnoOrchestrator._register_tools()
custom_tool = MyCustomTool(api_key=custom_api_key)
self.framework.register_tool(custom_tool)
运行测试
# Test CLI
python -m src.cli "test query" --format json
# Test specific queries
python -m src.cli "Microsoft 2024 report" --stats
python -m src.cli "Latest AI news" --max-results 10 --format markdown
📈 系统统计
轨道系统性能:
stats = orchestrator.get_statistics()
# Returns:
{
"total_requests": 100,
"successful_requests": 95,
"success_rate": 95.0,
"fallback_count": 12,
"fallback_rate": 12.0,
"available_tools": 2,
"registered_tools": 2
}
🔒 安全
- 存储在环境变量中的API密钥
- 输出中从未记录或公开密钥
- 用于所有API通信的HTTPS
- 日志中未存储敏感数据
🐛 故障排除
“没有可用的刮削工具”
- 检查中是否至少配置了一个API密钥
.env - 验证API密钥是否有效
“请求超时”
- 增加
TIMEOUT_SECONDS在.env - 检查互联网连接
- 验证API服务是否可运行
“所有工具都失败了”
- 检查API密钥的有效性
- 查看登录
agno_system.log - 确保查询格式正确
- 尝试不同的查询
低置信度结果
- 调整
MIN_CONFIDENCE阈值 - 使用更具体的查询
- 试试看
search_depth=advanced为塔维利
📄 许可证
MIT许可证-有关详细信息,请参阅许可证文件
🤝 贡献
欢迎投稿!拜托:
- 复刻仓库
- 创建要素分支
- 进行更改
- 如果适用,添加测试
- 提交拉取请求
📞 支持
对于问题、疑问或功能请求:
- 在GitHub上打开一个问题
- 检查现有问题的解决方案
- 查看日志以获取调试信息
🎉 致谢
内置:
- MCP(模型上下文协议)
- 美味API
- 名称 AI
- Python异步和httpx
版本: 1.0.0
最后更新时间: 2025年10月