Files
OpenCode 68a9071cf1 feat: reconcile local master with origin (exa/hot-platform hunters, leaks ledger, latest results)
Local branch had diverged from origin/master (sibling commits on the same base). Rewrote local history linearly on top of origin/master, folding in all local content: exa/hot-platform discovery hunters, leaks ledger, nightly sweep orchestrator, updated .gitignore and skill docs, plus the latest hunt output and vault state. Remote-only files (vault keys, channel scripts) were restored rather than dropped, so the resulting tree is a full union of both sides.
2026-08-07 12:53:47 +08:00

1 line
6.3 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"repo": "azangalan/alan", "files": {"src/main/resources/application.properties": {"40753c1cb60611ceb5ee53de861ff10e2fc39009": {"t": 1785745398.538644, "n": 357, "h": "8bf308a0717b7e0e", "c": "spring.application.group=SpringBoot\n\n# ========== 大模型配置(由 AssistantFactory 读取)==========\n# DeepSeek(OpenAI 兼容协议)\napp.llm.deepseek.api-key=${DEEPSEEK_API_KEY}\napp.llm.deepseek.model-name=deepseek-chat\napp.llm.deepseek.base-url=https://api.deepseek.com/v1\n\n# 阿里云百炼 / 通义千问\napp.llm.dashscope.api-key=${DASHSCOPE_API_KEY}\n\n#启用日志debug级别\n#logging.level.root=debug\n"}, "ac29efab1b5694eb232958e6be1c71b9c84d05c4": {"t": 1785752559.514765, "n": 423, "h": "eac05e83fec0ee32", "c": "spring.application.group=SpringBoot\n#阿里百炼平台\nlangchain4j.community.dashscope.chat-model.api-key=sk-ws-H.EDEYLMH.iGL7.MEUCIQCs8-g9feEQ__DQu9nYIW0gA_z5Ejqruy7QF8Wb78TH9QIgeNKyTN5PADwXLp4JQl-EG8HD90Z8UNJ0tG1y2q65WRE\nlangchain4j.community.dashscope.chat-model.model-name=qwen3-max\n#请求和响应日志\nlangchain4j.open-ai.chat-model.log-requests=true\nlangchain4j.open-ai.chat-model.log-responses=true\n\n#启用日志debug级别\n#logging.level.root=debug"}, "99e2bcb45febb8209f1d7bdf3db3971c0361dd2b": {"t": 1785752562.3113396, "n": 327, "h": "844c1f684831a7fa", "c": "spring.application.group=SpringBoot\n#阿里百炼平台\nlangchain4j.community.dashscope.chat-model.api-key=${DASHSCOPE_API_KEY}\nlangchain4j.community.dashscope.chat-model.model-name=qwen3-max\n#请求和响应日志\nlangchain4j.open-ai.chat-model.log-requests=true\nlangchain4j.open-ai.chat-model.log-responses=true\n\n#启用日志debug级别\n#logging.level.root=debug"}, "35d05023d0f8ec1e4ecbb890d4c1c4825f0106a5": {"t": 1785752565.7309766, "n": 312, "h": "0f103af0dde2bb0e", "c": "spring.application.group=SpringBoot\n#阿里百炼平台\nlangchain4j.community.dashscope.chat-model.api-key=<KEY>\nlangchain4j.community.dashscope.chat-model.model-name=qwen3-max\n#请求和响应日志\nlangchain4j.open-ai.chat-model.log-requests=true\nlangchain4j.open-ai.chat-model.log-responses=true\n\n#启用日志debug级别\n#logging.level.root=debug"}}, "src/main/java/com/qcby/springbootmybatis/service/AssistantFactory.java": {"40753c1cb60611ceb5ee53de861ff10e2fc39009": {"t": 1786068305.893297, "n": 3664, "h": "fc9b0c3b8eadd9e1", "c": "package com.qcby.springbootmybatis.service;\n\nimport dev.langchain4j.community.model.dashscope.QwenChatModel;\nimport dev.langchain4j.community.model.dashscope.QwenStreamingChatModel;\nimport dev.langchain4j.model.chat.ChatModel;\nimport dev.langchain4j.model.chat.StreamingChatModel;\nimport dev.langchain4j.model.openai.OpenAiChatModel;\nimport dev.langchain4j.model.openai.OpenAiStreamingChatModel;\nimport dev.langchain4j.memory.chat.ChatMemoryProvider;\nimport dev.langchain4j.service.AiServices;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.stereotype.Component;\n\nimport java.util.Map;\nimport java.util.concurrent.ConcurrentHashMap;\n\n/**\n * 多模型工厂:根据前端传入的模型名,动态构建并缓存对应的 Assistant 实例。\n * 支持:\n * - DeepSeek(OpenAI 兼容协议,deepseek-chat)\n * - 阿里云百炼 / 通义千问(qwen-plus / qwen-max / qwen-turbo ...)\n * 记忆(chatMemoryProvider)在所有模型间共享,切换模型可无缝继续同一段对话。\n */\n@Component\npublic class AssistantFactory {\n\n @Autowired\n private ChatMemoryProvider chatMemoryProvider;\n\n @Value(\"${app.llm.deepseek.api-key:${DEEPSEEK_API_KEY:}}\")\n private String deepseekApiKey;\n @Value(\"${app.llm.deepseek.model-name:deepseek-chat}\")\n private String deepseekModelName;\n @Value(\"${app.llm.deepseek.base-url:https://api.deepseek.com/v1}\")\n private String deepseekBaseUrl;\n\n @Value(\"${app.llm.dashscope.api-key:${DASHSCOPE_API_KEY:}}\")\n private String dashscopeApiKey;\n\n // 每个模型名 -> 对应的 Assistant 实例(懒加载 + 缓存,避免重复构建)\n private final Map<String, Assistant> assistantCache = new ConcurrentHashMap<>();\n\n private static final String DEFAULT_MODEL = \"deepseek-chat\";\n\n public Assistant getAssistant(String model) {\n if (model == null || model.isBlank()) {\n model = DEFAULT_MODEL;\n }\n return assistantCache.computeIfAbsent(model, this::buildAssistant);\n }\n\n private StreamingChatModel buildStreamingChatModel(String model) {\n if (model != null && model.startsWith(\"qwen\")) {\n return QwenStreamingChatModel.builder().apiKey(dashscopeApiKey).modelName(model).build();\n }\n return OpenAiStreamingChatModel.builder()\n .apiKey(deepseekApiKey).modelName(model != null ? model : \"deepseek-chat\")\n .baseUrl(deepseekBaseUrl).build();\n }\n\n private Assistant buildAssistant(String model) {\n ChatModel chatModel = buildChatModel(model);\n return AiServices.builder(Assistant.class)\n .chatModel(chatModel)\n .chatMemoryProvider(chatMemoryProvider)\n .streamingChatModel(buildStreamingChatModel(model))\n .build();\n }\n\n private ChatModel buildChatModel(String model) {\n // 阿里云百炼(通义千问)系列:以 qwen 开头\n if (model != null && model.startsWith(\"qwen\")) {\n return QwenChatModel.builder()\n .apiKey(dashscopeApiKey)\n .modelName(model)\n .build();\n }\n // 默认 / deepseek:走 OpenAI 兼容协议\n if (model == null || model.isBlank() || \"deepseek-chat\".equals(model)) {\n return OpenAiChatModel.builder()\n .apiKey(deepseekApiKey)\n .modelName(deepseekModelName)\n .baseUrl(deepseekBaseUrl)\n .logRequests(true)\n .logResponses(true)\n .build();\n }\n // 其他未知模型也走 OpenAI 兼容配置(可改 base-url 指向别家)\n return OpenAiChatModel.builder()\n .apiKey(deepseekApiKey)\n .modelName(model)\n .baseUrl(deepseekBaseUrl)\n .build();\n\n }\n}\n "}}}}