无名称MCP服务器
概述
该项目实现了一个模型上下文协议(MCP)服务器,该服务器为搜索产品数据提供了一个智能的对话界面。服务器利用大型语言模型(LLM)来理解自然语言查询,与存储在CSV文件中的产品数据库进行交互,并返回结构化的相关信息。它使用FastAPI和LangGraph构建,为产品发现创建了一个强大的基于代理的系统。
特性
- 自然语言产品搜索:用简单的英语询问产品(例如,“给我找些牛奶”)。
- 类似产品推荐:发现同一过道中的其他产品(例如,“什么与黄油相似?”)。
- 配方生成:根据配料清单获得食谱创意。
- 产品链接检索:立即获得产品页面的直接链接。
- 营养信息:访问产品的模拟营养数据。
- 可扩展工具集:通过添加新工具,可以轻松扩展服务器的功能。
建筑
服务器使用基于LangGraph的代理来处理传入的请求。代理根据用户的查询决定使用哪个工具,执行该工具,然后制定最终响应。
数据源
noname_products.csv:此文件包含核心产品数据,它是从Kaggle获得的。它包括以下列Name,aisle,brand,price,以及Code(用于生成链接的产品标识符)。该数据基于加拿大一家超市的产品。- OpenAI API:The
get_recipe工具利用gpt-4OpenAI的模型,根据给定的配料列表动态生成食谱。
可用工具
| 工具 | 说明 | 输入参数 |
|---|---|---|
get_products | 按名称搜索产品。 | query (字符串) |
get_similar_products | 查找与给定产品位于同一过道中的产品。 | product_name (字符串) |
get_recipe | 根据配料列表生成食谱。 | ingredients (字符串列表) |
get_nutritional_info | 返回(模拟)产品的营养信息。 | product_name (字符串) |
get_products_with_links | 搜索产品,并为每个产品提供一个网络链接。 | query (字符串) |
get_similar_products_with_links | 查找类似的产品,并为每个产品提供一个网络链接。 | product_name (字符串) |
API终点
列出可用工具
GET /tools/list- 描述:检索所有可用工具的列表,包括它们的名称、描述和输入模式。
- 响应:JSON数组
ToolDefinition物体。
运行代理
POST /mcp- 描述:向MCP代理发送查询以进行处理。
- 请求正文:
{
"query": "your natural language query here"
}- 响应一
MCPResponse包含代理结构的对象SearchResponse.
设置和运行服务器
- 克隆存储库:
git clone
cd mcp_server- 安装依赖项:
pip install -r requirements.txt- 设置环境变量:
创建一个 .env 文件,并添加您的OpenAI API密钥:
OPENAI_API_KEY="your-api-key-here"- 运行服务器:
uvicorn app:app --host 0.0.0.0 --port 8000服务器将可在以下位置访问 http://localhost:8000.
使用示例
获取工具列表
curl -X GET http://localhost:8000/tools/list搜索产品
curl -X POST http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-d '{
"query": "find me some eggs"
}'查找带有链接的类似产品
curl -X POST http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-d '{
"query": "find products similar to milk and give me links"
}'项目结构
.
├── CSVs/
│ └── noname_products.csv # Product data
├── product_search/
│ ├── __init__.py
│ ├── agent.py # Defines the LangGraph agent
│ ├── graph.py # Wires up the tools for the agent
│ ├── schema.py # Pydantic models for data structures
│ └── tools.py # Core tool implementations
├── .env # Environment variables (needs to be created)
├── app.py # FastAPI application and endpoints
├── Dockerfile # Containerization configuration
└── requirements.txt # Python dependencies贡献
欢迎投稿!如果您有改进建议或发现任何问题,请随时:
- 打开一个问题:描述问题或功能建议。
- 提交拉取请求:分叉存储库,进行更改,并提交一份PR,明确描述您的工作。
