在java中基于langchain4j实现对阿里百炼平台mcp智能体的调用

一、案例需求

  在Java项目已经设置好Ai-Agent(包括mongodb记忆库、流式聊天模型qwenStreamingChatmodel、向量数据库Pincone、工具类tools)的基础上,实现对阿里百炼平台上自定义好的智能体的调用。

  初始目录如下,搭建教程见https://www.bilibili.com/video/BV1cpLTz1EVp/?spm_id_from=333.1387.upload.video_card.click&vd_source=eb7be0f0e64df04c36a02c3fd9a240fd

二、详细步骤

1. 在阿里云百炼平台https://bailian.console.aliyun.com/?tab=app#/app-center上创建应用。

2. 选择能够调用mcp的智能体应用

  3.设置智能体的角色、任务、限制等规则。这里我想创建一个数字人生成智能体。

4. 在智能体技能处,添加mcp服务

5. mcp开通界面一般会配备好该平台的相关链接,申请完后在本界面中填入并开通。

6. 勾选mcp服务后,设置短期记忆,可在右侧文本对话中测试智能体的mcp调用能力。确认无误后右上角发布。

7.  发布后自动跳转到调用页面,我们查看API,了解如何在java项目中调用本智能体。

8. 根据使用指南,获取阿里百炼平台的API Key(建议存在系统环境变量中,命名为DASH_SCOPE_API_KEY)。并记录刚才创建好的智能体APP-ID。

9. 在java的pom.xml中添加java SDK依赖

10. 复制指南上的快速调用智能体方法,稍后我们在此基础上稍作改动,再加入java项目。

11. 在我们的tools目录里,新建bailianTool工具类。由于我们本项目已经有建立好的Ai-Agent,这里只想把百炼平台的智能体作为工具辅助已有Agent。

代码如下:

@Component
public class BailianTool {
    @Tool("当用户需要生成数字人视频时,使用本工具调用阿里百炼智能体进行生成")
    public String callBailianAgent(@P("用户传来的关于数字人生成需求的消息") String message) {
        System.out.println("=== 百炼工具被调用 ===");
        System.out.println("接收到的消息: " + message);
        System.out.println("消息长度: " + message.length());
        System.out.println("====================");
        try {
            ApplicationParam param = ApplicationParam.builder()
                    .apiKey(System.getenv("DASH_SCOPE_API_KEY"))
                    .appId("add5ccea74ee4c7bb29a6a821669fcd0")
                    .prompt(message)
                    .build();

            Application application = new Application();
            ApplicationResult result = application.call(param);

            if (result != null && result.getOutput() != null) {
//                返回mcp调用的回复信息:
                return result.getOutput().getText();
            } else {
                return "未收到有效响应";
            }
        } catch (Exception e) {
            return "调用百炼智能体失败: " + e.getMessage();
        }
    }
}

12. 给我们已有的Ai-Agent(XiaozhiAgentMCP的tools中显示指定工具类bailianTool。

13. 在Controller层注入bailianTool工具,在XiaozhiAgentMCP的基础上使用构建者模式,新增百炼Tool。

完整代码如下:

@Tag(name = "硅谷小智MCP版V2")
@RestController
@RequestMapping("/xiaozhi-mcp2")
public class XiaozhiMCPV2Controller {

    @Autowired
    private QwenStreamingChatModel qwenStreamingChatModel;

    @Autowired
    private ChatMemoryProvider chatMemoryProviderXiaozhi;

    @Autowired
    private AppointmentTools appointmentTools;

    @Autowired
    private ContentRetriever contentRetrieverXiaozhiPincone;

    @Autowired
    private BailianTool bailianTool; // 注入百炼工具

    @Operation(summary = "对话")
    @PostMapping(value = "/chat2", produces = "text/stream;charset=utf-8")
    public Flux<String> chat(@RequestBody ChatForm chatForm) {
        // 创建集成了百炼工具的Agent
        XiaozhiAgentMCP xiaozhiAgentMCP = createEnhancedAgent();
        return xiaozhiAgentMCP.chat(chatForm.getMemoryId(), chatForm.getMessage());
    }

    private XiaozhiAgentMCP createEnhancedAgent() {
        return AiServices.builder(XiaozhiAgentMCP.class)
                .streamingChatLanguageModel(qwenStreamingChatModel)
                .chatMemoryProvider(chatMemoryProviderXiaozhi)
                .tools(appointmentTools, bailianTool) // 集成百炼工具
                .contentRetriever(contentRetrieverXiaozhiPincone)
                .build();
    }
}

14. 在已有Ai-Agent的系统提示词zhaozhi-prompt-tamplate.txt中显示要求它实现智能体调用。

15. 启动springBoot,进入knife4j进行前后端联调。可以看得出来,我们的Ai-Agent保留了原有的设置。

16. 当提及“生成数字人视频”时,bailianTools被调用,可以从idea控制台看到mcp的调用情况。

17. 继续追问Ai,当mcp生成的视频完成(此处需要等待视频生成大约1min时间),会返回视频链接,发送给客户端。

三、知识点总结

1. public class bailianTool中@Tool后提示词的作用:大模型(比如我们的通义千问等模型)在处理用户请求时,会判断是否需要调用工具来辅助回答。@Tool 后的提示词,是告诉大模型 “什么时候应该调用这个工具” 以及 “这个工具能做什么”。提升工具调用的准确性。

2. @AiService中tools = {“appointmentTools","bailianTool"}的作用:明确指定当前 AI 服务可以使用的工具集合。只有被列入 tools 数组的工具,才会被大模型 “感知” 并可能被调用。未列入的工具,即使类中包含 @Tool 注解的方法,也不会被当前 AI 服务使用

3. XiaozhiMCPV2Controller的机制createEnhancedAgent() 方法中,AiServices.builder() 是 LangChain4j 提供的 “智能体组装器”,作用是把多个组件(大模型、记忆、工具、内容检索)“粘合” 成一个具备完整能力的 AI 服务(即 XiaozhiAgentMCP)。

前端调用 /xiaozhi-mcp2/chat2 接口时:@RequestBody ChatForm chatForm 接收前端传来的请求体ChatForm(包含 memoryId 和 message),当用户发送的消息触发 bailianTool 时,大模型(QwenStreamingChatModel)先 “理解” 用户消息,再结合 bailianTool 上 @Tool 的提示词(“当用户需要生成数字人视频时,使用本工具调用阿里百炼智能体进行生成”),判断需要调用 bailianTool

bailianTool 获取 MCP 返回的结果后,会将结果回传给大模型。大模型生成的最终结果,通过 Flux<String> 逐段推送给前端,完成一次交互。

4. chat方法作用: 你只需要传入chatForm中的 “对话记忆 ID” 和 “用户消息”,它就会自动完成 “理解消息→调用工具(如百炼 MCP)→结合记忆→生成流式回复Flux<String>” 的全流程,无需手动处理中间环节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值