MCP卡殼了?MIP讓Java AI飛起來!
Java服務與AI集成的傳統(tǒng)方案模型上下文協(xié)議(MCP),需構建獨立服務器、編寫大量冗余代碼,給開發(fā)帶來困擾。本文給大家介紹更輕量的替代方案——模型集成協(xié)議(MIP),詳解其如何通過注解與反射機制,簡化Spring下Java工具與AI的集成,讓現(xiàn)有Java類無需復雜改造即可轉為AI可調用工具。
MIP核心優(yōu)勢是“零額外API層”與“自動化格式轉換”:能自動將Java方法、類(含嵌套對象等復雜結構)轉為JSON-RPC規(guī)范格式,適配Spring生態(tài)且兼容各類LLM,解決MCP開發(fā)效率低、維護成本高的問題。
一、MIP主要特性
模型集成協(xié)議(MIP)是一套框架,通過修改后的JSON-RPC格式將Java方法、類和服務轉換為人工智能(AI)可調用工具,從而實現(xiàn)Java服務與AI系統(tǒng)的無縫集成。MIP能自動處理現(xiàn)有Java對象(包括其字段、數(shù)組、映射表及嵌套對象)的格式轉換,將其轉為AI系統(tǒng)可理解和使用的標準化格式。
1. Java服務自動轉為JSON-RPC工具
- MIP借助反射與注解機制,自動將Java方法和類作為AI可調用工具暴露出來。
 - 轉換后符合 JSON-RPC 規(guī)范,兼容 AI 系統(tǒng)與 LLM。
 
2. 基于注解的映射配置
- Java類和方法需添加特定注解(如
@Action、@Prompt、@ListType、@MapKeyType),以定義它們在JSON-RPC轉換過程中的處理規(guī)則。 - 這些注解可用于指定字段類型、數(shù)組處理方式、日期格式化等行為。
 
3. 便捷的AI集成能力
- 轉換后的JSON-RPC格式可被AI系統(tǒng)輕松調用,使AI模型能夠與實際的Java應用程序進行交互并控制其運行。
 - AI可通過簡單的JSON-RPC請求,直接訪問并調用基于Java開發(fā)的功能。
 
4. 支持復雜數(shù)據(jù)結構
- MIP可處理復雜數(shù)據(jù)類型,包括嵌套對象、數(shù)組、映射表及自定義日期格式,確保與AI系統(tǒng)的完全兼容。
 
5. 無需手動序列化/反序列化
- 無需手動將Java對象轉換為AI系統(tǒng)可理解的格式(例如編寫自定義序列化器),MIP通過內置的反射機制和注解自動完成這一過程。
 
6. 跨平臺兼容性
- 經(jīng)過修改的JSON-RPC格式具有廣泛的通用性,可在多平臺上使用,便于將AI與各類基于Java的后端系統(tǒng)集成。
 
二、MIP工作原理
1. 輸入注解配置
- 為Java類和方法添加MIP專屬注解(如
@Action、@ListType、@MapKeyType等),定義它們集成到AI系統(tǒng)后的行為規(guī)則。 
2. 反射機制調用
- MIP通過反射機制檢查Java類及其注解,自動提取類的關鍵信息,包括字段、類型和方法。
 
3. JSON-RPC格式轉換
- 將Java類或方法轉換為修改后的JSON-RPC格式,該格式會明確定義字段、類型及預期的輸入/輸出規(guī)則。
 - 這使得AI系統(tǒng)可通過JSON-RPC請求直接調用這些方法,無需編寫自定義API處理代碼。
 
4. AI調用消費
- AI系統(tǒng)或大型語言模型(LLM)可直接使用轉換后的JSON-RPC格式,從而訪問Java功能并執(zhí)行所需操作。
 
示例:Java類的自動轉換
以下Java類:
@Service
@Log
@Agent
publicclass CompareMiniVanService {
    public CompareMiniVanService() {
        log.info("created compare car service");
    }
    @Action(description = "compare two minivan")
    public String compareMiniVan(String car1, String car2) {
        log.info(car2);
        log.info(car1);
        // 此處實現(xiàn)比較邏輯
        return"this is better - " + car2;
    }
}會自動轉換為以下JSON-RPC格式:
{
  "actionType": "JAVAMETHOD",
"actionParameters": {
    "methodName": "compareMiniVan",
    "parameters": [
      {
        "name": "car1",
        "type": "String",
        "fieldValue": ""
      },
      {
        "name": "car2",
        "type": "String",
        "fieldValue": ""
      }
    ],
    "returnType": "String"
  },
"actionClass": "io.github.vishalmysore.service.CompareMiniVanService",
"description": "compare two minivan",
"actionGroup": "No Group",
"actionName": "compareMiniVan",
"expanded": true
}三、MIP核心優(yōu)勢
1. 基于注解的工具化配置
- 只需為Java類添加
@Agent、@Action、@Prompt等注解,即可自動將其暴露為AI可調用工具。 - MIP會檢查Java類,并將其方法和參數(shù)轉換為JSON-RPC模式,無需編寫自定義序列化邏輯或新建API。
 
2. 無感知集成體驗
- 無需構建獨立的API層或新的REST服務器。
 - 可直接將現(xiàn)有的Spring服務、HTTP調用及Shell腳本作為AI交互工具暴露。
 
3. 跨LLM兼容性
- MIP具有平臺無關性,可與任何支持JSON-RPC的LLM(如OpenAI、Claude、Gemini等)配合使用。
 
4. 簡化參數(shù)處理
- MIP通過注解自動處理復雜嵌套參數(shù)(如列表、映射表、日期格式、數(shù)組),常用注解包括:
 
@ListType:用于列表類型參數(shù)@MapValueType與@MapKeyType:用于映射表類型參數(shù)@Prompt:用于上下文提示和格式定義
5. 減少冗余代碼
- 與模型上下文協(xié)議(MCP)不同,MCP需要創(chuàng)建獨立服務器并編寫大量代碼,而MIP通過反射和注解自動生成模式。
 - 這使得MIP在維護、擴展和規(guī)?;瘧梅矫娓邇?yōu)勢。
 
四、當前實現(xiàn)成果
1. 服務端:Neurocaster-Server
MIP 的參考實現(xiàn),極少配置即可將 Java 類暴露為 JSON-RPC 工具;Spring Boot 項目引入該庫后,工具自動在http://localhost:8081/actuator/tools4ai-tools暴露。
啟用 WebSocket 實現(xiàn)工具調用的代碼:
@Configuration
@EnableWebSocket
publicclass NeuroCasterWebSocketConfig implements WebSocketConfigurer {
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(webSocketHandler(), "/chat")
                .addInterceptors(new HttpSessionHandshakeInterceptor())
                .setAllowedOrigins("*");  // 允許所有來源或指定來源
    }
    @Bean
    public WebSocketHandler webSocketHandler() {
        returnnew NeuroCasterChatEndpoint(); // 將ChatEndpoint類用作WebSocket處理器
    }
    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        returnnew ServerEndpointExporter();
    }
}2. 客戶端:Neurocaster-Client
基于 Angular 開發(fā),支持通過 WebSocket 與服務器交互、調用 MIP 工具(界面含服務器 URL 配置、工具列表、聊天輸入框、參數(shù)配置區(qū)域)。
3. 工具組件:Tools4AI
負責將 Java 方法、類轉為 AI 兼容的 JSON-RPC 模式,并處理工具調用邏輯。
4. 實際應用場景
已演示復雜類層次(Organization、Employee)、映射表(Dictionary)、帶日期格式化的日記條目的自動轉換。
五、MIP重要意義
- 簡化AI集成流程 MIP無需編寫獨立API層,即可使任何現(xiàn)有Java服務或類具備AI兼容性。
 - 降低開發(fā)成本 無需額外搭建服務器,只需添加注解即可完成工具暴露,大幅減少開發(fā)開銷。
 - 具備未來適應性 由于基于JSON-RPC標準,MIP可與任何AI模型配合使用,具有良好的靈活性和未來適應性。
 - 巨大應用潛力 MIP支持通過最少的重構工作,實現(xiàn)基于LLM的遺留Java系統(tǒng)自動化,這對大型企業(yè)而言可能具有突破性意義。
 
六、MIP實際應用示例
以下為具體示例,展示如何使用模型集成協(xié)議(MIP)將現(xiàn)有Java類自動暴露為AI可調用工具(基于JSON-RPC格式)。
示例1:簡單日記服務(MyDiary Service)
Java實體類
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class MyDiary {
    @Prompt(dateFormat = "ddMMyyyy")
    Date[] allTheDatesOfAppointment;
    String[] friendsNames;
    Customer customer;
    Employee employee;
}帶MIP注解的Java服務
@Service
@Log
@Agent
public class MyDiaryAction {
    @Action(description = "Add new diary entry")
    public MyDiary buildMyDiary(MyDiary diary) {
        log.info("Diary entry: " + diary);
        return diary;
    }
}自動轉換后的JSON-RPC格式
{
  "methodName": "buildMyDiary",
"parameters": [
    {
      "name": "diary",
      "fields": [
        {
          "fieldName": "allTheDatesOfAppointment",
          "dateFormat": "ddMMyyyy",
          "isArray": true,
          "className": "java.util.Date",
          "type": "Date[]",
          "fieldValue": ["class java.util.Date"]
        },
        {
          "fieldName": "friendsNames",
          "isArray": true,
          "className": "java.lang.String",
          "type": "String[]",
          "fieldValue": ["class java.lang.String"]
        },
        {
          "fieldName": "customer",
          "fields": [
            {
              "fieldName": "firstName",
              "fieldType": "String",
              "fieldValue": ""
            },
            {
              "fieldName": "lastName",
              "fieldType": "String",
              "fieldValue": ""
            }
          ],
          "fieldType": "Customer"
        },
        {
          "fieldName": "employee",
          "fields": [
            {
              "fieldName": "name",
              "fieldType": "String",
              "fieldValue": ""
            },
            {
              "fieldName": "department",
              "fieldType": "String",
              "fieldValue": ""
            }
          ],
          "fieldType": "Employee"
        }
      ],
      "type": "MyDiary"
    }
  ],
"returnType": "MyDiary"
}說明
- MIP可自動處理嵌套對象、數(shù)組及自定義日期格式。
 - 無需編寫自定義序列化代碼。
 
示例2:帶復雜數(shù)據(jù)的組織服務(Organization Service)
Java實體類
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Organization {
    String name;
    @ListType(Employee.class)
    List<Employee> employees;
    @ListType(String.class)
    List<String> locations;
    Customer[] customers;
}帶MIP注解的Java服務
@Service
@Log
@Agent
public class OrganizationService {
    @Action(description = "Add to my organization")
    public String addToMyOrganization(Organization organization, String newOrgName) {
        log.info("New Org: " + newOrgName);
        return "Updated Organization: " + organization;
    }
}自動轉換后的JSON-RPC格式
{
  "actionType": "JAVAMETHOD",
"actionParameters": {
    "methodName": "addToMyOrganization",
    "parameters": [
      {
        "name": "organization",
        "fields": [
          {
            "fieldName": "name",
            "fieldType": "String",
            "fieldValue": ""
          },
          {
            "fieldName": "employees",
            "className": "io.github.vishalmysore.service.Employee",
            "fieldType": "list",
            "fieldValue": [
              {
                "fieldName": "name",
                "fieldType": "String",
                "fieldValue": ""
              },
              {
                "fieldName": "department",
                "fieldType": "String",
                "fieldValue": ""
              }
            ]
          },
          {
            "fieldName": "locations",
            "className": "java.lang.String",
            "fieldType": "list",
            "fieldValue": ["java.lang.String"]
          },
          {
            "fieldName": "customers",
            "isArray": true,
            "className": "io.github.vishalmysore.service.Customer",
            "fieldType": "Customer[]",
            "fieldValue": [
              {
                "fieldName": "firstName",
                "fieldType": "String",
                "fieldValue": ""
              },
              {
                "fieldName": "lastName",
                "fieldType": "String",
                "fieldValue": ""
              }
            ]
          }
        ],
        "type": "Organization"
      },
      {
        "name": "newOrgName",
        "type": "String",
        "fieldValue": ""
      }
    ],
    "returnType": "String"
  },
"actionClass": "io.github.vishalmysore.service.OrganizationService",
"description": "Add to my organization"
}說明
- MIP可自動識別嵌套列表、數(shù)組和對象。
 - 無需額外編碼,即可處理復雜字段類型。
 
示例3:帶映射表處理的字典服務(Dictionary Service)
Java實體類
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class Dictionary {
    String nameOfDictionary;
    @MapValueType(String.class)
    @MapKeyType(String.class)
    Map<String, String> wordMeanings;
    String[] locations;
}帶MIP注解的Java服務
@Service
@Log
@Agent
public class DictionaryService {
    @Action(description = "Add new words to dictionary")
    public String addToDictionary(Dictionary dictionary, String newWord) {
        log.info("Dictionary update: " + newWord);
        return "Updated Dictionary: " + dictionary;
    }
}自動轉換后的JSON-RPC格式
{
  "actionType": "JAVAMETHOD",
"actionParameters": {
    "methodName": "addToDictionary",
    "parameters": [
      {
        "name": "dictionary",
        "fields": [
          {
            "fieldName": "nameOfDictionary",
            "fieldType": "String",
            "fieldValue": ""
          },
          {
            "fieldName": "wordMeanings",
            "fields": [],
            "fieldType": "java.util.Map"
          },
          {
            "fieldName": "locations",
            "isArray": true,
            "className": "java.lang.String",
            "type": "String[]",
            "fieldValue": [
              "class java.lang.String"
            ]
          }
        ],
        "type": "Dictionary"
      },
      {
        "name": "newWord",
        "type": "String",
        "fieldValue": ""
      }
    ],
    "returnType": "String"
  },
"actionClass": "io.github.vishalmysore.service.DictionaryService",
"description": "Add new words to dictionary"
}說明
- MIP可自動處理帶鍵值對的映射表。
 - 能識別
@MapValueType和@MapKeyType注解,并將其轉換為標準JSON-RPC格式。 
七、MIP的顛覆性價值
- 無需自定義API:無需編寫新API或序列化代碼,即可將現(xiàn)有Java類作為工具暴露。
 - AI就緒的JSON-RPC格式:所有類和服務均自動轉換為LLM可調用的模式。
 - 支持復雜結構:無需手動生成模式,MIP可處理嵌套對象、映射表、列表及日期格式。
 - 擴展便捷:新增Java服務時,只需添加
@Agent和@Action注解即可完成集成。 
通過MIP,僅需極少工作量,就能將現(xiàn)有Java應用程序轉化為功能強大的AI兼容工具!















 
 
 












 
 
 
 