资源(Resource)使用
资源系统使 LLM 驱动的应用能够通过统一接口访问结构化内容。每个资源通过 URI 标识,可以表示任何对 LLM 有用的内容类型。AJ MCP 客户端提供发现和访问服务器端资源的方法。
列出资源
列出所有可用资源:
List<ResourceItem> resourceList = mcpClient.listResources();
assertEquals(2, resourceList.size(), "期望恰好有两个资源");
ResourceItem blob = getResourceRef("blob", resourceList);
assertNotNull(blob, "资源 'blob' 不应为 null");
assertEquals("blob", blob.getName(), "资源名不符('blob')");
assertEquals("file:///blob", blob.getUri(), "URI 不符('blob')");
assertEquals("image/jpg", blob.getMimeType(), "MIME 类型不符('blob')");
assertEquals("A nice pic", blob.getDescription(), "描述不符('blob')");
读取资源内容
读取某个资源内容:
GetResourceResult.ResourceResultDetail response = mcpClient.readResource("file:///text");
assertEquals(1, response.getContents().size(), "期望内容数量为 1");
ResourceContent contents = response.getContents().get(0);
ResourceContentText textContents = (ResourceContentText) contents;
assertEquals("file:///text", textContents.getUri(), "URI 应为 'file:///text'");
assertEquals("text888", textContents.getText(), "文本内容应为 'text888'");
readResource()
方法返回 ResourceResultDetail
,其中包含资源内容数组。每项内容类型根据 MIME 类型决定,可能是文本内容,也可能是二进制内容。
GetResourceResult.ResourceResultDetail response = mcpClient.readResource("file:///blob");
assertEquals(1, response.getContents().size(), "期望内容数量为 1");
ResourceContent contents = response.getContents().get(0);
ResourceContentBinary blobContents = (ResourceContentBinary) contents;
assertEquals("file:///blob", blobContents.getUri(), "URI 应为 'file:///blob'");
assertEquals("blob", blobContents.getBlob(), "二进制内容应为 'blob'");
你也可以通过模板资源读取内容,即可传递参数给资源:
GetResourceResult.ResourceResultDetail response = mcpClient.readResource("file:///text-template/hello");
assertEquals(1, response.getContents().size(), "期望内容数量为 1");
ResourceContent contents = response.getContents().get(0);
ResourceContentText textContents = (ResourceContentText) contents;
assertEquals("file:///text-template/hello", textContents.getUri(), "URI 应为 'file:///text-template/hello'");
assertEquals("text hello", textContents.getText(), "文本内容应为 'text hello'");