产品搜索对话服务器

一个基于大型语言模型的智能对话接口,用于搜索产品数据并提供相似产品推荐、食谱生成等功能。

  • by braveenth
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 braveenth/noname-mcp-server

使用说明

无名称MCP服务器

概述

该项目实现了一个模型上下文协议(MCP)服务器,该服务器为搜索产品数据提供了一个智能的对话界面。服务器利用大型语言模型(LLM)来理解自然语言查询,与存储在CSV文件中的产品数据库进行交互,并返回结构化的相关信息。它使用FastAPI和LangGraph构建,为产品发现创建了一个强大的基于代理的系统。

特性

  • 自然语言产品搜索:用简单的英语询问产品(例如,“给我找些牛奶”)。
  • 类似产品推荐:发现同一过道中的其他产品(例如,“什么与黄油相似?”)。
  • 配方生成:根据配料清单获得食谱创意。
  • 产品链接检索:立即获得产品页面的直接链接。
  • 营养信息:访问产品的模拟营养数据。
  • 可扩展工具集:通过添加新工具,可以轻松扩展服务器的功能。

建筑

服务器使用基于LangGraph的代理来处理传入的请求。代理根据用户的查询决定使用哪个工具,执行该工具,然后制定最终响应。

数据源

  • noname_products.csv:此文件包含核心产品数据,它是从Kaggle获得的。它包括以下列 Name, aisle, brand, price,以及 Code (用于生成链接的产品标识符)。该数据基于加拿大一家超市的产品。
  • OpenAI API:The get_recipe 工具利用 gpt-4 OpenAI的模型,根据给定的配料列表动态生成食谱。

可用工具

工具 说明 输入参数
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.

设置和运行服务器

  1. 克隆存储库:

    git clone <repository-url>
    cd mcp_server
    
  2. 安装依赖项:

    pip install -r requirements.txt
    
  3. 设置环境变量: 创建一个 .env 文件,并添加您的OpenAI API密钥:

    OPENAI_API_KEY="your-api-key-here"
    
  4. 运行服务器:

    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

贡献

欢迎投稿!如果您有改进建议或发现任何问题,请随时:

  1. 打开一个问题:描述问题或功能建议。
  2. 提交拉取请求:分叉存储库,进行更改,并提交一份PR,明确描述您的工作。