解耦自主研究员(MCP)🔌
先进的 代理AI客户端 使用 模型上下文协议(MCP). 该项目展示了一个解耦的微服务架构,其中推理引擎(客户端)通过标准化协议(SSE)与工具(服务器)通信,在不共享凭据的情况下弥合LLM和外部数据之间的差距。
______________________________________________________________________
🚀 主要特点
1.解耦安全模型
与持有所有API密钥的传统代理不同,该系统将关注点分离:
- 客户(大脑): 掌握LLM上下文和推理逻辑。它有 不 访问Tavilly API密钥。
- 服务器(工具): 一个孤立的
FastMCP执行实际搜索的服务器。
这模拟了AI代理必须在没有直接权限的情况下访问敏感内部工具的企业场景。
2.混合接地策略
为了防止幻觉,该代理采用了双层验证:
- 合成: 使用搜索引擎提供的高级摘要。
- 原始源验证: 对照MCP工具返回的原始JSON内容摘录交叉检查事实,以确保来源。
3.实时FinOps监控
实时仪表板,用于操作可见性和跟踪:
- 令牌使用: 输入与输出令牌的精确计数。
- 成本估算: 基于Gemini 2.0定价的实时美元计算。
- 延迟时间: 请求/响应往返时间分析。
4.异步并发
实现自定义背景 asyncio 事件循环,用于在Streamlit的同步运行时内处理非阻塞MCP流,确保UI在长时间运行的研究任务中保持响应。
______________________________________________________________________
🛠️ 建筑
该系统分为两个通过HTTP/SSE通信的解耦微服务:
- 客户(大脑): Streamlit应用程序托管 LangGraph重构代理它管理对话历史、推理循环,并通过MCP连接到远程工具服务器。
- 服务器(工具): A. FastAPI+FastMCP 服务器托管在Render上。它公开了Tavily Search API作为一个标准化的MCP工具。
graph LR
subgraph "Client Side (Streamlit)"
UI[User Interface] --> Agent{LangGraph Agent}
Agent -- "Request Tool" --> MCP_Client[MCP Client]
end
subgraph "Protocol Layer"
MCP_Client MCP_Server
end
subgraph "Server Side (FastAPI)"
MCP_Server[MCP Server] --> Tool[Tavily Search Tool]
Tool --> API((Tavily API))
end______________________________________________________________________
🔧 技术栈
- 协议: 模型上下文协议(MCP)-Python SDK。
- LLM Google Gemini 2.5 Flash(通过LangChain适配器)。
- 编排: LangGraph(重动作循环)。
- 后端: FastAPI、FastMCP、Uvicorn。
- 前端: 流光灯。
- 可观察性: Redis(缓冲区)->BetterStack(云日志)。
______________________________________________________________________
⚙️ 工程亮点
MCP握手
该项目的核心是客户端和服务器之间的标准化协商。 这允许代理是“工具无关的”——它根据服务器在运行时公开的任何工具来调整其行为。
分布式测井管道
用于生产调试的强大日志架构:
- 当地: JSONL轮换用于即时检查。
- 缓冲器: 高通量
Redis异步日志记录的列表推送。 - 云: 后台工作人员将日志刷新到 BetterStack 用于警报和仪表板。
______________________________________________________________________
🧪 测试场景
验证 解耦架构 通过这些查询:
- “时事”测试:
> *“SpaceX星舰发射的最新进展是什么?”*
- *验证:* 确保代理呼叫 tavily_search 通过MCP使用该工具,并引用了最新来源(不是培训数据)。
- “事实核查”测试:
> *“推特/X的现任首席执行官是谁,他们什么时候接管的?”*
- *验证:* 观察UI中的“推理步骤”,查看发送到服务器的JSON-RPC调用和收到的结构化响应。
______________________________________________________________________
📦 安装和设置
先决条件
- Python 3.10+
- 谷歌云API密钥(Gemini)
- Tavilly API密钥(用于服务器端)
1.克隆存储库
git clone https://github.com/danielecelsa/chatbot-with-search.git
cd chatbot-with-search2.环境变量
创建 .env 根目录中的文件:
# LLM Configuration (Client)
GOOGLE_API_KEY=your_google_api_key
GENAI_MODEL=gemini-2.5-flash
# MCP Server Configuration
# Use the live demo server or run your own locally
MCP_TAVILY_URL=https://mcp-server.46.224.88.247.nip.io/tav/mcp
MCP_SERVER_NAME=tavily
# Logging (Optional)
REDIS_URL=your_redis_url
LOGTAIL_SOURCE_TOKEN=your_token3.安装依赖项
pip install -r requirements.txt4.运行客户端
streamlit run app.py______________________________________________________________________
Developed by Daniele Celsa
View Portfolio • LinkedIn
