Skip to content

Kaka-cheaper/springboot-mcp

Repository files navigation

项目结构与运行说明(精简版)

本项目由三部分组成:

  • Spring Boot 应用(MCP 工具暴露、对话与转发)
  • Python 推理服务(YOLOv10 目标检测 HTTP 服务)
  • abcd 数据管线(爬取→抽取→威胁评估,可独立运行)

一、代码结构(当前精简后)

src/main/java/com/example/springbootmcp/
  controller/
    ChatController.java            # 对话入口与页面路由
    ConfigController.java          # LLM 配置管理页面/接口
    DetectController.java          # /api/detect → 转发到 Python /infer
  mcp/
    DetectToolsService.java        # MCP 工具:本地读图→调用 /api/detect
    JdbcQueryService.java          # MCP 工具:示例查询(shuaige 等)
    McpConfig.java                 # 注册 MCP 工具 Provider
  model/
    ChatMessage.java               # 消息实体
    ChatRequest.java               # 对话请求
    FunctionCallRequest.java       # 标准 Function Calling 请求体
    FunctionDefinition.java        # 函数定义模型
    LlmConfig.java                 # LLM 配置实体(H2)
    LlmType.java                   # LLM 类型(LOCAL/REMOTE)
  repository/
    LlmConfigRepository.java       # JPA 仓库
  service/
    FunctionCallingService.java    # 远程 LLM(Function Calling)调用编排
    LlmConfigService.java          # 配置 CRUD/激活
    OllamaToolCallingService.java  # 本地 LLM 智能工具调用(TOOL_CALL 协议)

资源与配置

src/main/resources/
  application.properties           # 端口/限流;Python 服务地址;H2/JPA;LLM/MCP;HTTP/日志
  templates/
    index.html                     # 首页(对话 + MCP 工具说明)
    config.html                    # 配置管理页面
  static/
    css/style.css
    js/chat.js                     # 前端交互逻辑(调用 /api/chat、展示消息)

pom.xml

  • Spring Web、Spring AI MCP(client/server)、HttpClient5、JPA/H2(测试/内存)

二、Python 推理服务

文件:python/server.py

  • 端点:GET /healthPOST /infer(multipart 字段 file
  • 环境变量:YOLO_HTTP_HOSTYOLO_HTTP_PORTYOLO_MODEL
  • 依赖:见 python/requirements.txt(PyTorch/YOLOv10 需按环境安装)
  • 启动:
python python\server.py
# 或 PowerShell 脚本
.\python\start-server.ps1 -Host 127.0.0.1 -Port 8001 -Model yolov10n.pt

三、MCP 工具与对话流程

  • 本地 LLM:OllamaToolCallingService
    • 通过提示词协议 TOOL_CALL: detectImage("…")/shuaige() 触发工具
    • 工具执行后结果回注给模型生成答复
  • 远程 LLM:FunctionCallingService
    • 构建标准 Function Calling(FunctionDefinition
    • 执行工具后将结果拼入对话再次调用模型
  • 工具实现:
    • DetectToolsService.detectFromPath(imagePath) → 调用当前应用 /api/detect → 转发到 Python /infer
    • JdbcQueryService.shuaige() 返回固定演示字符串

四、abcd 数据管线(独立运行)

  • a_crawl:crawler.py(Crawl4AI + DeepSeek 提取结构化字段)、download_images.py(图片下载+更新 JSON)
  • b_extract:info_extract.py(jionlp 摘要、RAG 召回、Qwen2.5-VL 生成描述,输出 CSV)
  • c_threat:threat_val.py(TF-IDF + XGBoost 训练/预测,生成 c_threat/threat_model/xgb_threat_model.json

五、运行步骤

  1. 启动 Python 推理服务
python python\server.py
# 验证
curl http://127.0.0.1:8001/health
  1. 启动 Spring Boot
mvn spring-boot:run
  1. 自测检测
curl -X POST http://localhost:8080/api/detect -F "file=@D:/images/test.jpg"
  1. Web 界面
  • 访问 http://localhost:8080/
  • 配置管理 页面添加/激活 LLM 配置(本地/远程)
  • 在首页对话框输入 “检测 D:\图片\test.jpg” 触发图片检测

六、注意事项

  • application.properties 中的示例 API Key 与直连 Host 仅用于调试,请改为环境变量并谨慎使用。
  • Python 端 YOLOv10 模型文件路径需存在,确保可信来源;若使用 GPU,自行匹配 PyTorch/CUDA 版本。
  • abcd 管线使用到的第三方 API/网站请遵守服务条款(请替换示例密钥)。

新增:信息抽取与威胁评估(b/c)集成

本次在保持 abcd/ 目录不变的前提下,将 b(信息抽取)与 c(威胁评估)两类算法以封装形式整合进 python/,并通过 Spring Boot 转发与 MCP 工具对外暴露。

Python 侧

  • 目录与封装
python/algorithms/
  __init__.py
  info_extractor.py      # 封装 abcd/b_extract/info_extract.main → extract_info()
  threat_eval.py         # 封装 abcd/c_threat/threat_val → train()/predict()
  • 服务端新增端点(位于 python/server.py
POST /extract-info          # 入参: { json_str?, csv_save_path? }  返回: {results, csv_path}
POST /threat/train          # 入参: { input_list? }                返回: {model_dir}
POST /threat/predict        # 入参: { input_list? }                返回: {predictions}
  • 依赖
    • 已在 python/requirements.txt 增补:jionlp、transformers、chromadb、sentence-transformers、pypdf、pandas、jieba、scikit-learn、scipy、xgboost 等。

Spring Boot 侧

  • 新增/修改接口(controller/DetectController.java
POST /api/extract-info   -> 转发到 Python /extract-info
POST /api/threat/train   -> 转发到 Python /threat/train
POST /api/threat/predict -> 转发到 Python /threat/predict
  • MCP 工具(mcp/
AbcdToolsService.java
  - extractInfo(jsonStr, csvSavePath)
  - threatTrain(inputListJson)
  - threatPredict(inputListJson)
McpConfig.java
  - 注册 AbcdToolsService 与既有工具

运行与自测

  1. 启动 Python 服务
python python\server.py
# 健康检查
curl http://127.0.0.1:8001/health
  1. 启动 Spring Boot
mvn spring-boot:run
  1. HTTP 自测
# 信息抽取(示例:仅指定 CSV 路径)
curl -X POST http://localhost:8080/api/extract-info \
  -H "Content-Type: application/json" \
  -d "{\"json_str\": null, \"csv_save_path\": \"D:\\out.csv\"}"

# 威胁评估训练(传入或留空均可)
curl -X POST http://localhost:8080/api/threat/train \
  -H "Content-Type: application/json" \
  -d "{\"input_list\":[[0,\"这是摘要\",\"这是图像描述\"]]}"

# 威胁评估预测
curl -X POST http://localhost:8080/api/threat/predict \
  -H "Content-Type: application/json" \
  -d "{\"input_list\":[[0,\"这是摘要\",\"这是图像描述\"]]}"
  1. MCP 工具
  • 在 MCP 客户端中可直接调用:
    • extractInfo(jsonStr?, csvSavePath?)
    • threatTrain(inputListJson?)
    • threatPredict(inputListJson?)

注意事项

  • GPU/模型依赖:abcd/b_extract/info_extract.py 使用 Qwen2.5-VL(默认 CUDA),无 GPU 时可能失败;可在后续封装中加入 CPU 降级开关。
  • RAG 模型与索引:信息抽取使用的向量模型与 Chroma 索引路径可能需要根据你的环境调整(b_extract/rag/build_db)。
  • YOLOv10 模型路径:python/server.pyMODEL_PATH 为绝对路径,请确保存在或改为环境变量。

七、让大模型调用 b/c 算法的完整流程(Function Calling & MCP)

目标:让支持 Function Calling 的远程大模型,或本地 LLM(通过 MCP 工具)调用“信息抽取(b)”与“威胁评估(c)”

前置条件

  1. Python 服务已启动,且包含端点:/extract-info/threat/train/threat/predict
  2. Spring Boot 已启动:/api/extract-info/api/threat/train/api/threat/predict 能正常转发
  3. 配置管理 中已配置并激活一个 LLM:
    • 远程 LLM(支持 Function Calling,例如 OpenAI 兼容接口):填写 baseUrlapiKeymodelName
    • 本地 LLM(Ollama 等):填写模型名称,例如 llama3

A. 使用 Function Calling(远程 LLM)

  1. Function 定义(系统自动注入,无需手工配置)
  • extractInfo(jsonStr?, csvSavePath?)
  • threatTrain(inputList?)
  • threatPredict(inputList?)
  1. 触发方式
  • 在首页“对话界面”输入自然语言,例如:
    • “请做一次信息抽取,结果保存到 D:\out.csv”
    • “用以下数据训练威胁模型:[[0,"摘要1","图像描述1"]],然后预测同一批输入”
  • 服务会自动将你的话语与函数定义一起发送给远程 LLM;当 LLM 选择调用函数时,后端会:
    • 将调用路由到 AbcdToolsService → 调用 Spring /api/... → Python 端对应 /extract-info/threat/*
    • 获取结果后再次发给 LLM,让其生成最终回答
  1. 显式测试(HTTP)
  • 可直接用 curl 调用 Spring Boot 转发端点(见“运行与自测”一节)

B. 使用 MCP 工具(本地 LLM 或支持 MCP 的客户端)

  1. MCP 工具列表(mcp/AbcdToolsService 暴露)
  • extractInfo(jsonStr?, csvSavePath?)
  • threatTrain(inputListJson?)
  • threatPredict(inputListJson?)
  1. 触发方式
  • 在你的 MCP 客户端(例如 Dify 或本地集成)连接本应用的 MCP 服务器后,直接调用上述工具:
    • extractInfo(null, "D:\\out.csv")
    • threatTrain("[[0, \"摘要\", \"图像描述\"]]")
    • threatPredict("[[0, \"摘要\", \"图像描述\"]]")
  • 工具执行链路:MCP 工具 → Spring /api/... → Python 端 /extract-info/threat/* → 返回结果

C. 推荐话术(给大模型的提示)

  • 信息抽取
    • “如果需要进行信息抽取,请调用 extractInfo 函数。当我提供 json 字符串时用 jsonStr,需要落盘时设置 csvSavePath(以 .csv 结尾)。”
    • “示例:请对上一步的 json 做信息抽取,CSV 存到 D:\out.csv。”
  • 威胁评估
    • “如果需要训练/预测威胁模型,请分别调用 threatTrainthreatPredict 函数。输入为二维数组 [[label, text_summary, image_caption], ...]。”
    • “示例:用 [[0,"这是摘要","这是图像描述"]] 训练,然后对同一批数据做预测。”

D. 常见问题

  • GPU 环境:信息抽取默认使用 Qwen2.5-VL(CUDA),无 GPU 可能失败。可考虑在后续增加 CPU 降级参数(保持 abcd 不变)。
  • 向量/索引:RAG 模型与 Chroma 索引路径根据你的环境准备;未准备时会自动降级为纯文本描述(若算法内支持)。
  • 路径与编码:Windows 下路径用双反斜杠转义;中文参数请使用 UTF-8 编码。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors