带LangChain、LangGraph和Streamlit前端的MCP服务器
这个项目展示了组合的灵活性和力量 LangChain, LangGraph,以及 多分量协议(MCP) 构建一个具有Streamlit前端的模块化、LLM驱动的服务器。它支持多个LLM提供商(Ollama和AWS Bedrock),并集成了数学、天气、Strava活动跟踪和基于RAG的文档质量保证工具。
______________________________________________________________________
🎯 目的
此存储库展示了如何使用以下工具构建模块化、可扩展和智能的LLM驱动系统:
- LangChain用于链式逻辑。
- LangGraph用于基于图的编排。
- MCP用于分布式刀具布线。
- Streamlit用于干净和交互式的前端。
它演示了如何将多个LLM和工具集成到一个有凝聚力的解决方案中。
通过使用 MCP检查员 您可以跟踪MCP服务器中添加的工具、资源和提示的数量,以及 MCP inspector 使调试变得容易。 下面可以看到这个AI驱动的应用程序的屏幕截图。
______________________________________________________________________
🔐 通过快速工程实现安全
该应用程序通过使用系统级提示工程将严格的安全协议直接嵌入LLM的行为中,从而优先考虑数据安全和负责任的AI行为。
✅ 为什么要进行快速安全工程?
大型语言模型(LLM)功能强大,但可能会无意中暴露:
- 内部逻辑或源代码
- 异常跟踪或调试消息
- 敏感凭据或API密钥
- 为了缓解这种情况,我们实施了一个通用的系统提示,该提示控制着模型在所有工具和代理中的行为。
🧠 系统提示策略
与LLM的每次交互都以系统消息开头,响应如下。
📌 益处
防止敏感实施细节的意外泄露。 确保遵守内部安全政策。 增强LLM驱动应用程序的信任和安全性。
______________________________________________________________________
______________________________________________________________________
🧱 项目结构
.
├── documents
│ └── latest
│ ├── agents
├── main.py
├── mcp_server
│ ├── __init__.py
│ └── client.py
├── models
│ ├── __init__.py
│ ├── bedrock_model.py
│ └── ollama_model.py
├── pyproject.toml
├── README.md
├── requirements.txt
├── tools
│ ├── __init__.py
│ ├── math_tool.py
│ ├── rag_tool.py
│ ├── strava_api.py
│ └── weather_api.py
└── uv.lock
______________________________________________________________________
🚀 特性
- ✅ 流式前端 用于用户交互
- ✅ MCP客户端 将任务路由到适当的代理
- ✅ 语言链+语言图 用于编排和LLM集成
- ✅ Ollama&AWS基岩 作为LLM提供者
- ✅ 工具代理 用于:
- 数学运算 - 天气信息 - Strava活动报告 - 基于HTML的RAG QA
______________________________________________________________________
📦 安装
- 使用uv安装依赖项:
uv pip install -r requirements.txt设置环境变量:
- 将.env.example.复制到.env:
cp .env.example .env- 填充
.env使用您自己的配置:
## AWS configuration
AWS_ACCESS_KEY_ID=""
AWS_SECRET_ACCESS_KEY=""
AWS_SESSION_TOKEN=""
AWS_REGION="eu-west-1"
## Weather API configuration
WEATHER_URL="https://api.weatherapi.com/v1/current.json"
WEATHER_API_KEY=""
## Web search API configuration
WEB_SEARCH_API_KEY=""
## Strava API configuration
STRAVA_CLIENT_ID=""
STRAVA_CLIENT_SECRET=""
STRAVA_ACCESS_TOKEN=""
STRAVA_END_POINT="https://www.strava.com/api/v3/athlete"______________________________________________________________________
🧠 LLM模型
奥拉马
- llama3.2:最新(默认)
- orionstar/orion14b-q4:最新
- 提示/赫尔墨斯2-pro
AWS基岩
- 人择。claude-3-7连接-20250219-v1:0
- mistral混音器-8x7b-指令-v0:1
- 人择。claude-3-haiku-20240307-v1:0
您可以通过Streamlit UI动态切换模型。
______________________________________________________________________
🧠 MCP客户端路由
MCP_server/client.py中的MCP客户端使用以下配置来路由任务:
client = MultiServerMCPClient(
{
"math": {
"command": "python",
"args": ["tools/math_tool.py"],
"transport": "stdio",
},
"rag": {
"command": "python",
"args": ["tools/rag_tool.py"],
"transport": "stdio",
},
"strava": {
"url": "http://localhost:8001/mcp/",
"transport": "streamable_http",
},
"weather": {
"url": "http://localhost:8002/mcp/",
"transport": "streamable_http",
},
}
)______________________________________________________________________
🛠️ 工具代理
🧮 math_tool.py
- 基本算术:加、减、乘、除
- 三角函数:sin(x)
🚴 strava_api.py
- 从Strava获取运动员数据
- 提供:
- 最新活动的完整报告 - 活动列表,包括名称、距离等。 - 总结和进展要点
🌦️ weather_api.py
- 返回给定城市的天气数据:
{
"city": "Oslo",
"country": "Norway",
"latitude": 59.91,
"longitude": 10.75,
"last_updated": "2025-07-23 12:00",
"temperature_c": 22.5,
"condition": "Partly cloudy",
"wind_kph": 15.0
}______________________________________________________________________
📄 rag_tool.py
- 从文档中读取HTML/
- 使用LangChain+LangGraph RAG管道回答问题
______________________________________________________________________
🖥️ 运行应用程序
启动Streamlit前端:
streamlit run main.py- 默认LLM模型是llama3.2:最新(Ollama)
- 您可以提问,应用程序将通过MCP将问题发送给相应的代理
