{"repo": "aspeate/aiagentscaffold", "files": {"ai-agent-scaffold-lite-app/src/test/java/cn/bugstack/ai/test/api/model/SpringAiApiTest.java": {"94c21022d5669a8044d8480156c42c24a7cbf5d7": {"t": 1785746122.8151293, "n": 1206, "h": "ae8a5dde7f9365fb", "c": "package cn.bugstack.ai.test.api.model;\n\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.ai.chat.model.ChatModel;\nimport org.springframework.ai.openai.OpenAiChatModel;\nimport org.springframework.ai.openai.OpenAiChatOptions;\nimport org.springframework.ai.openai.api.OpenAiApi;\n\n/**\n * Spring AI Test\n * 文档:spring ai\n * @author xiaofuge bugstack.cn @小傅哥\n * 2025/12/14 09:15\n */\n@Slf4j\npublic class SpringAiApiTest {\n\n public static void main(String[] args) {\n OpenAiApi openAiApi = OpenAiApi.builder()\n .baseUrl(\"https://api.deepseek.com\")\n .apiKey(\"sk-9a0da2ca434742d9ae14066cf0e3ba96\")\n .completionsPath(\"v1/chat/completions\")\n .embeddingsPath(\"v1/embeddings\")\n .build();\n\n ChatModel chatModel = OpenAiChatModel.builder()\n .openAiApi(openAiApi)\n .defaultOptions(OpenAiChatOptions.builder()\n .model(\"deepseek-chat\")\n .build())\n .build();\n\n String call = chatModel.call(\"hi 你好哇!\");\n\n log.info(\"测试结果:{}\", call);\n }\n\n}\n"}, "3ce0f95caa32f02339add99b3177520aebecf58b": {"t": 1785760014.7091339, "n": 1206, "h": "ae8a5dde7f9365fb", "c": "package cn.bugstack.ai.test.api.model;\n\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.ai.chat.model.ChatModel;\nimport org.springframework.ai.openai.OpenAiChatModel;\nimport org.springframework.ai.openai.OpenAiChatOptions;\nimport org.springframework.ai.openai.api.OpenAiApi;\n\n/**\n * Spring AI Test\n * 文档:spring ai\n * @author xiaofuge bugstack.cn @小傅哥\n * 2025/12/14 09:15\n */\n@Slf4j\npublic class SpringAiApiTest {\n\n public static void main(String[] args) {\n OpenAiApi openAiApi = OpenAiApi.builder()\n .baseUrl(\"https://api.deepseek.com\")\n .apiKey(\"sk-9a0da2ca434742d9ae14066cf0e3ba96\")\n .completionsPath(\"v1/chat/completions\")\n .embeddingsPath(\"v1/embeddings\")\n .build();\n\n ChatModel chatModel = OpenAiChatModel.builder()\n .openAiApi(openAiApi)\n .defaultOptions(OpenAiChatOptions.builder()\n .model(\"deepseek-chat\")\n .build())\n .build();\n\n String call = chatModel.call(\"hi 你好哇!\");\n\n log.info(\"测试结果:{}\", call);\n }\n\n}\n"}}, "ai-agent-scaffold-lite-app/src/test/java/cn/bugstack/ai/test/api/tool/mcp/SpringAiToolTest.java": {"94c21022d5669a8044d8480156c42c24a7cbf5d7": {"t": 1785746123.182074, "n": 3333, "h": "242aa2bcca3a3cdc", "c": "package cn.bugstack.ai.test.api.tool.mcp;\n\nimport io.modelcontextprotocol.client.McpClient;\nimport io.modelcontextprotocol.client.McpSyncClient;\nimport io.modelcontextprotocol.client.transport.HttpClientSseClientTransport;\nimport lombok.extern.slf4j.Slf4j;\nimport org.junit.jupiter.api.Test;\nimport org.springframework.ai.chat.model.ChatModel;\nimport org.springframework.ai.mcp.SyncMcpToolCallbackProvider;\nimport org.springframework.ai.openai.OpenAiChatModel;\nimport org.springframework.ai.openai.OpenAiChatOptions;\nimport org.springframework.ai.openai.api.OpenAiApi;\n\nimport java.net.MalformedURLException;\nimport java.net.URL;\nimport java.time.Duration;\n\n/**\n * Spring Ai Tool\n *\n * @author xiaofuge bugstack.cn @小傅哥\n * 2025/12/14 09:51\n */\n@Slf4j\npublic class SpringAiToolTest {\n\n public static void main(String[] args) {\n OpenAiApi openAiApi = OpenAiApi.builder()\n .baseUrl(\"https://api.deepseek.com\")\n .apiKey(\"sk-9a0da2ca434742d9ae14066cf0e3ba96\")\n .completionsPath(\"v1/chat/completions\")\n .embeddingsPath(\"v1/embeddings\")\n .build();\n\n ChatModel chatModel = OpenAiChatModel.builder()\n .openAiApi(openAiApi)\n .defaultOptions(OpenAiChatOptions.builder()\n .model(\"deepseek-chat\")\n .toolCallbacks(SyncMcpToolCallbackProvider.builder()\n .mcpClients(sseMcpClient()).build()\n .getToolCallbacks())\n .build())\n .build();\n\n String call = chatModel.call(\"你哪有哪些工具能力\");\n\n log.info(\"测试结果:{}\", call);\n }\n\n /**\n * 百度搜索MCP服务(url);https://sai.baidu.com/zh/detail/e014c6ffd555697deabf00d058baf388\n * 百度搜索MCP服务(key);https://console.bce.baidu.com/iam/?_=1753597622044#/iam/apikey/list\n */\n public static McpSyncClient sseMcpClient() {\n\n // 自己申请 api_key\n HttpClientSseClientTransport sseClientTransport = HttpClientSseClientTransport.builder(\"http://appbuilder.baidu.com/v2/ai_search/mcp/\")\n .sseEndpoint(\"sse?api_key=bce-v3/ALTAK-9rPo5JR0wv888eaTCPv43/9fc2dbaddb06d7d78a2ae37380376c52d376f62d\")\n .build();\n\n McpSyncClient mcpSyncClient = McpClient.sync(sseClientTransport).requestTimeout(Duration.ofMinutes(360)).build();\n var init_sse = mcpSyncClient.initialize();\n log.info(\"Tool SSE MCP Initialized {}\", init_sse);\n\n return mcpSyncClient;\n }\n\n @Test\n public void test_url() throws MalformedURLException {\n String fullUrl = \"http://appbuilder.baidu.com/v2/ai_search/mcp/sse?api_key=bce-v3/ALTAK-JFZXXLpfxhAutDQvJ32Ei/4492c1879b8c2f0df4612ef5b4a52df1c1fba9f7\";\n\n fullUrl = \"http://127.0.0.1:9999/sse?apiKey=xxxx\";\n\n URL url = new URL(fullUrl);\n\n String protocol = url.getProtocol();\n String host = url.getHost();\n int port = url.getPort();\n\n String baseUrl = port == -1 ? protocol + \"://\" + host : protocol + \"://\" + host + \":\" + port;\n String endpoint = \"\";\n\n int index = fullUrl.indexOf(baseUrl);\n if (index != -1) {\n endpoint = fullUrl.substring(index + baseUrl.length());\n }\n\n log.info(\"baseUrl:{}\", baseUrl);\n log.info(\"endpoint:{}\", endpoint);\n }\n\n\n}\n"}}, "ai-agent-scaffold-lite-app/src/test/java/cn/bugstack/ai/test/api/tool/skills/SpringAiToolTest.java": {"94c21022d5669a8044d8480156c42c24a7cbf5d7": {"t": 1785746136.0332355, "n": 1876, "h": "4c4034d135094d28", "c": "package cn.bugstack.ai.test.api.tool.skills;\n\nimport lombok.extern.slf4j.Slf4j;\nimport org.springaicommunity.agent.tools.SkillsTool;\nimport org.springframework.ai.chat.model.ChatModel;\nimport org.springframework.ai.openai.OpenAiChatModel;\nimport org.springframework.ai.openai.OpenAiChatOptions;\nimport org.springframework.ai.openai.api.OpenAiApi;\nimport org.springframework.ai.tool.ToolCallback;\nimport org.springframework.core.io.ClassPathResource;\n\nimport java.util.ArrayList;\n\n/**\n * Spring Ai Tool\n *\n * @author xiaofuge bugstack.cn @小傅哥\n * 2025/12/14 09:51\n */\n@Slf4j\npublic class SpringAiToolTest {\n\n public static void main(String[] args) {\n OpenAiApi openAiApi = OpenAiApi.builder()\n .baseUrl(\"https://api.deepseek.com\")\n .apiKey(\"sk-9976f6a8a9a9487da97f738174425196\")\n .completionsPath(\"v1/chat/completions\")\n .embeddingsPath(\"v1/embeddings\")\n .build();\n\n // https://github.com/spring-ai-community/spring-ai-agent-utils\n// ToolCallback toolCallback01 = SkillsTool.builder()\n// .addSkillsDirectory(\"D:\\code\\java\\xfg\\sfg-1\\ai-agent-scaffold-lite\\docs\\dev-ops\\agent\\skills\")\n// .build();\n\n ToolCallback toolCallback02 = SkillsTool.builder()\n .addSkillsResource(new ClassPathResource(\"agent/skills\"))\n .build();\n\n ChatModel chatModel = OpenAiChatModel.builder()\n .openAiApi(openAiApi)\n .defaultOptions(OpenAiChatOptions.builder()\n .model(\"deepseek-chat\")\n .toolCallbacks(new ArrayList<>(){{\n add(toolCallback02);\n }})\n .build())\n .build();\n\n String call = chatModel.call(\"你有什么技能\");\n\n log.info(\"测试结果:{}\", call);\n }\n\n}\n"}}}}