MCP卡殼了?MIP讓Java AI飛起來!
Java服務與AI集成的傳統方案模型上下文協議(MCP),需構建獨立服務器、編寫大量冗余代碼,給開發帶來困擾。本文給大家介紹更輕量的替代方案——模型集成協議(MIP),詳解其如何通過注解與反射機制,簡化Spring下Java工具與AI的集成,讓現有Java類無需復雜改造即可轉為AI可調用工具。
MIP核心優勢是“零額外API層”與“自動化格式轉換”:能自動將Java方法、類(含嵌套對象等復雜結構)轉為JSON-RPC規范格式,適配Spring生態且兼容各類LLM,解決MCP開發效率低、維護成本高的問題。
一、MIP主要特性
模型集成協議(MIP)是一套框架,通過修改后的JSON-RPC格式將Java方法、類和服務轉換為人工智能(AI)可調用工具,從而實現Java服務與AI系統的無縫集成。MIP能自動處理現有Java對象(包括其字段、數組、映射表及嵌套對象)的格式轉換,將其轉為AI系統可理解和使用的標準化格式。
1. Java服務自動轉為JSON-RPC工具
- MIP借助反射與注解機制,自動將Java方法和類作為AI可調用工具暴露出來。
- 轉換后符合 JSON-RPC 規范,兼容 AI 系統與 LLM。
2. 基于注解的映射配置
- Java類和方法需添加特定注解(如
@Action、@Prompt、@ListType、@MapKeyType),以定義它們在JSON-RPC轉換過程中的處理規則。 - 這些注解可用于指定字段類型、數組處理方式、日期格式化等行為。
3. 便捷的AI集成能力
- 轉換后的JSON-RPC格式可被AI系統輕松調用,使AI模型能夠與實際的Java應用程序進行交互并控制其運行。
- AI可通過簡單的JSON-RPC請求,直接訪問并調用基于Java開發的功能。
4. 支持復雜數據結構
- MIP可處理復雜數據類型,包括嵌套對象、數組、映射表及自定義日期格式,確保與AI系統的完全兼容。
5. 無需手動序列化/反序列化
- 無需手動將Java對象轉換為AI系統可理解的格式(例如編寫自定義序列化器),MIP通過內置的反射機制和注解自動完成這一過程。
6. 跨平臺兼容性
- 經過修改的JSON-RPC格式具有廣泛的通用性,可在多平臺上使用,便于將AI與各類基于Java的后端系統集成。
二、MIP工作原理
1. 輸入注解配置
- 為Java類和方法添加MIP專屬注解(如
@Action、@ListType、@MapKeyType等),定義它們集成到AI系統后的行為規則。
2. 反射機制調用
- MIP通過反射機制檢查Java類及其注解,自動提取類的關鍵信息,包括字段、類型和方法。
3. JSON-RPC格式轉換
- 將Java類或方法轉換為修改后的JSON-RPC格式,該格式會明確定義字段、類型及預期的輸入/輸出規則。
- 這使得AI系統可通過JSON-RPC請求直接調用這些方法,無需編寫自定義API處理代碼。
4. AI調用消費
- AI系統或大型語言模型(LLM)可直接使用轉換后的JSON-RPC格式,從而訪問Java功能并執行所需操作。
示例: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);
// 此處實現比較邏輯
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核心優勢
1. 基于注解的工具化配置
- 只需為Java類添加
@Agent、@Action、@Prompt等注解,即可自動將其暴露為AI可調用工具。 - MIP會檢查Java類,并將其方法和參數轉換為JSON-RPC模式,無需編寫自定義序列化邏輯或新建API。
2. 無感知集成體驗
- 無需構建獨立的API層或新的REST服務器。
- 可直接將現有的Spring服務、HTTP調用及Shell腳本作為AI交互工具暴露。
3. 跨LLM兼容性
- MIP具有平臺無關性,可與任何支持JSON-RPC的LLM(如OpenAI、Claude、Gemini等)配合使用。
4. 簡化參數處理
- MIP通過注解自動處理復雜嵌套參數(如列表、映射表、日期格式、數組),常用注解包括:
@ListType:用于列表類型參數@MapValueType與@MapKeyType:用于映射表類型參數@Prompt:用于上下文提示和格式定義
5. 減少冗余代碼
- 與模型上下文協議(MCP)不同,MCP需要創建獨立服務器并編寫大量代碼,而MIP通過反射和注解自動生成模式。
- 這使得MIP在維護、擴展和規模化應用方面更具優勢。
四、當前實現成果
1. 服務端:Neurocaster-Server
MIP 的參考實現,極少配置即可將 Java 類暴露為 JSON-RPC 工具;Spring Boot 項目引入該庫后,工具自動在http://localhost:8081/actuator/tools4ai-tools暴露。
啟用 WebSocket 實現工具調用的代碼:
@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 開發,支持通過 WebSocket 與服務器交互、調用 MIP 工具(界面含服務器 URL 配置、工具列表、聊天輸入框、參數配置區域)。
3. 工具組件:Tools4AI
負責將 Java 方法、類轉為 AI 兼容的 JSON-RPC 模式,并處理工具調用邏輯。
4. 實際應用場景
已演示復雜類層次(Organization、Employee)、映射表(Dictionary)、帶日期格式化的日記條目的自動轉換。
五、MIP重要意義
- 簡化AI集成流程 MIP無需編寫獨立API層,即可使任何現有Java服務或類具備AI兼容性。
- 降低開發成本 無需額外搭建服務器,只需添加注解即可完成工具暴露,大幅減少開發開銷。
- 具備未來適應性 由于基于JSON-RPC標準,MIP可與任何AI模型配合使用,具有良好的靈活性和未來適應性。
- 巨大應用潛力 MIP支持通過最少的重構工作,實現基于LLM的遺留Java系統自動化,這對大型企業而言可能具有突破性意義。
六、MIP實際應用示例
以下為具體示例,展示如何使用模型集成協議(MIP)將現有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可自動處理嵌套對象、數組及自定義日期格式。
- 無需編寫自定義序列化代碼。
示例2:帶復雜數據的組織服務(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可自動識別嵌套列表、數組和對象。
- 無需額外編碼,即可處理復雜字段類型。
示例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或序列化代碼,即可將現有Java類作為工具暴露。
- AI就緒的JSON-RPC格式:所有類和服務均自動轉換為LLM可調用的模式。
- 支持復雜結構:無需手動生成模式,MIP可處理嵌套對象、映射表、列表及日期格式。
- 擴展便捷:新增Java服務時,只需添加
@Agent和@Action注解即可完成集成。
通過MIP,僅需極少工作量,就能將現有Java應用程序轉化為功能強大的AI兼容工具!





























