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.
1 line
2.8 MiB
Plaintext
1 line
2.8 MiB
Plaintext
{"repo": "bytedesk/bytedesk", "files": {"modules/ai/src/main/resources/ai/providers.json": {"affe883cb26b5fd3e33902ae54e2bd31c3fa2ade": {"t": 1785674186.816933, "n": 5499, "h": "5788d141b0edebee", "c": "{\n \"ollama\": {\n \"nickname\": \"Ollama\",\n \"logo\": \"ollama.png\",\n \"baseUrl\": \"http://127.0.0.1:11434\",\n \"webUrl\": \"https://ollama.com/\",\n \"status\": \"PRODUCTION\"\n },\n \"zhipuai\": {\n \"nickname\": \"智谱\",\n \"logo\": \"zhipu.png\", \n \"baseUrl\": \"https://open.bigmodel.cn/api/paas\",\n \"webUrl\": \"https://open.bigmodel.cn/\",\n \"status\": \"PRODUCTION\"\n },\n \"deepseek\": {\n \"nickname\": \"DeepSeek\",\n \"logo\": \"deepseek.png\",\n \"baseUrl\": \"https://api.deepseek.com\",\n \"webUrl\": \"https://deepseek.com/\",\n \"status\": \"PRODUCTION\"\n },\n \"dashscope\": {\n \"nickname\": \"通义千问\",\n \"logo\": \"dashscope.png\",\n \"baseUrl\": \"https://dashscope.aliyuncs.com\",\n \"webUrl\": \"https://dashscope.aliyun.com/\",\n \"status\": \"PRODUCTION\"\n },\n \"siliconflow\": {\n \"nickname\": \"硅基流动\",\n \"logo\": \"siliconflow.png\",\n \"baseUrl\": \"https://api.siliconflow.cn\",\n \"webUrl\": \"https://www.siliconflow.cn/\",\n \"status\": \"PRODUCTION\"\n },\n \"gitee\": {\n \"nickname\": \"Gitee魔力方舟\",\n \"logo\": \"gitee.png\",\n \"baseUrl\": \"https://ai.gitee.com\",\n \"webUrl\": \"https://ai.gitee.com/\",\n \"status\": \"PRODUCTION\"\n },\n \"tencent\": {\n \"nickname\": \"腾讯混元\",\n \"logo\": \"hunyuan.png\",\n \"baseUrl\": \"https://api.hunyuan.cloud.tencent.com\",\n \"webUrl\": \"https://hunyuan.tencent.com/\",\n \"status\": \"PRODUCTION\"\n },\n \"baidu\": {\n \"nickname\": \"百度千帆\",\n \"logo\": \"yiyan.png\",\n \"baseUrl\": \"https://qianfan.baidubce.com/v2\",\n \"webUrl\": \"https://console.bce.baidu.com/iam/#/iam/apikey/list\",\n \"status\": \"PRODUCTION\"\n },\n \"volcengine\": {\n \"nickname\": \"火山引擎\",\n \"logo\": \"doubao.png\",\n \"baseUrl\": \"https://ark.cn-beijing.volces.com/api/v3\",\n \"webUrl\": \"https://console.volcengine.com/ark/\",\n \"status\": \"PRODUCTION\"\n },\n \"minimax\": {\n \"nickname\": \"Minimax\",\n \"logo\": \"minimax.png\",\n \"baseUrl\": \"https://api.minimax.chat\",\n \"webUrl\": \"https://platform.minimaxi.com/\",\n \"status\": \"PRODUCTION\"\n },\n \"openai\": {\n \"nickname\": \"OpenAI\",\n \"logo\": \"openai.png\",\n \"baseUrl\": \"https://api.openai.com\",\n \"webUrl\": \"https://openai.com/\",\n \"status\": \"PRODUCTION\"\n },\n \"coze\": {\n \"nickname\": \"Coze\",\n \"logo\": \"coze.png\",\n \"baseUrl\": \"https://api.coze.cn\",\n \"webUrl\": \"https://www.coze.cn/\",\n \"status\": \"PRODUCTION\"\n },\n \"dify\": {\n \"nickname\": \"Dify\",\n \"logo\": \"dify.png\",\n \"baseUrl\": \"https://api.dify.ai/v1\",\n \"webUrl\": \"https://www.dify.ai/\",\n \"status\": \"PRODUCTION\"\n },\n \"maxkb\": {\n \"nickname\": \"MaxKB\",\n \"logo\": \"maxkb.png\",\n \"baseUrl\": \"https://api.maxkb.cn\",\n \"webUrl\": \"https://www.maxkb.cn/\",\n \"status\": \"PRODUCTION\"\n },\n \"n8n\": {\n \"nickname\": \"n8n\",\n \"logo\": \"n8n.png\",\n \"baseUrl\": \"https://api.n8n.io\",\n \"webUrl\": \"https://n8n.io/\",\n \"status\": \"PRODUCTION\"\n },\n \"ragflow\": {\n \"nickname\": \"Ragflow\",\n \"logo\": \"ragflow.png\",\n \"baseUrl\": \"https://api.ragflow.io\",\n \"webUrl\": \"https://www.ragflow.io/\",\n \"status\": \"PRODUCTION\"\n },\n \"openrouter\": {\n \"nickname\": \"OpenRouter\",\n \"logo\": \"openrouter.png\",\n \"baseUrl\": \"https://openrouter.ai/api\",\n \"webUrl\": \"https://openrouter.ai/\",\n \"status\": \"PRODUCTION\"\n },\n \"moonshot\": {\n \"nickname\": \"Moonshot\",\n \"logo\": \"moonshot.png\",\n \"baseUrl\": \"https://api.moonshot.cn\",\n \"webUrl\": \"https://moonshot.ai/\",\n \"status\": \"PRODUCTION\"\n },\n \"xinghuo\": {\n \"nickname\": \"讯飞星火\",\n \"logo\": \"xinghuo.png\",\n \"baseUrl\": \"https://xinghuo.xfyun.cn/sparkapi\",\n \"webUrl\": \"https://xinghuo.xfyun.cn/sparkapi\",\n \"status\": \"DEVELOPMENT\"\n },\n \"baichuan\": {\n \"nickname\": \"百小应\",\n \"logo\": \"baichuan.png\",\n \"baseUrl\": \"https://api.baichuan-ai.com\",\n \"webUrl\": \"https://www.baichuan-ai.com/\",\n \"status\": \"DEVELOPMENT\"\n },\n \"yi\": {\n \"nickname\": \"Yi\",\n \"logo\": \"yi.png\",\n \"baseUrl\": \"https://api.lingyiwanwu.com\",\n \"webUrl\": \"https://platform.lingyiwanwu.com/\",\n \"status\": \"DEVELOPMENT\"\n },\n \"stepfun\": {\n \"nickname\": \"StepFun\",\n \"logo\": \"stepfun.png\",\n \"baseUrl\": \"https://api.stepfun.com\",\n \"webUrl\": \"https://platform.stepfun.com/\",\n \"status\": \"DEVELOPMENT\"\n },\n \"groq\": {\n \"nickname\": \"Groq\",\n \"logo\": \"groq.png\",\n \"baseUrl\": \"https://api.groq.com/openai\",\n \"webUrl\": \"https://groq.com/\",\n \"status\": \"DEVELOPMENT\"\n },\n \"anthropic\": {\n \"nickname\": \"Anthropic\",\n \"logo\": \"anthropic.png\",\n \"baseUrl\": \"https://api.anthropic.com/\",\n \"webUrl\": \"https://anthropic.com/\",\n \"status\": \"DEVELOPMENT\"\n },\n \"gemini\": {\n \"nickname\": \"Gemini\",\n \"logo\": \"gemini.png\",\n \"baseUrl\": \"https://generativelanguage.googleapis.com\",\n \"webUrl\": \"https://gemini.google.com/\",\n \"status\": \"DEVELOPMENT\"\n },\n \"aihubmix\": {\n \"nickname\": \"AIHubMix\",\n \"logo\": \"aihubmix.png\",\n \"baseUrl\": \"https://aihubmix.com\",\n \"webUrl\": \"https://aihubmix.com/\",\n \"status\": \"DEVELOPMENT\"\n }\n}"}}, "modules/ai/src/main/java/com/bytedesk/ai/springai/providers/baidu/SpringAIBaiduChatConfig.java": {"affe883cb26b5fd3e33902ae54e2bd31c3fa2ade": {"t": 1785674663.681017, "n": 2618, "h": "b5f173f7ce7f4d95", "c": "/*\n * @Author: jackning 270580156@qq.com\n * @Date: 2025-02-17 11:17:28\n * @LastEditors: jackning 270580156@qq.com\n * @LastEditTime: 2025-07-18 11:45:52\n * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk\n * Please be aware of the BSL license restrictions before installing Bytedesk IM – \n * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. \n * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE \n * contact: 270580156@qq.com \n * \n * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. \n */\npackage com.bytedesk.ai.springai.providers.baidu;\n\nimport org.springframework.ai.chat.client.ChatClient;\nimport org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;\nimport org.springframework.ai.openai.OpenAiChatModel;\nimport org.springframework.ai.openai.OpenAiChatOptions;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n/**\n * 百度智能云配置\n * https://console.bce.baidu.com/iam/#/iam/apikey/list\n * https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n * 百度智能云聊天配置\n */\n@Configuration\n@ConditionalOnProperty(prefix = \"spring.ai.baidu.chat\", name = \"enabled\", havingValue = \"true\", matchIfMissing = false)\npublic class SpringAIBaiduChatConfig {\n\n @Value(\"${spring.ai.baidu.base-url:https://qianfan.baidubce.com/v2}\")\n private String baseUrl;\n\n @Value(\"${spring.ai.baidu.api-key:sk-xxx}\")\n private String apiKey;\n\n @Value(\"${spring.ai.baidu.chat.options.model:ernie-x1-32k-preview}\")\n private String model;\n\n @Value(\"${spring.ai.baidu.chat.options.temperature:0.7}\")\n private Double temperature;\n\n @Bean(\"baiduChatOptions\")\n OpenAiChatOptions baiduChatOptions() {\n return OpenAiChatOptions.builder()\n .baseUrl(baseUrl)\n .apiKey(apiKey)\n .model(model)\n .temperature(temperature)\n .build();\n }\n\n @Bean(\"baiduChatModel\")\n OpenAiChatModel baiduChatModel() {\n return OpenAiChatModel.builder()\n .options(baiduChatOptions())\n .build();\n }\n\n @Bean(\"baiduChatClient\")\n ChatClient baiduChatClient() {\n return ChatClient.builder(baiduChatModel())\n .defaultOptions(baiduChatOptions().mutate())\n .defaultAdvisors(new SimpleLoggerAdvisor())\n .build();\n }\n\n} "}}, "deploy/docker/one/docker-compose-ollama.yaml": {"affe883cb26b5fd3e33902ae54e2bd31c3fa2ade": {"t": 1785745203.0528994, "n": 27977, "h": "75acd59f355bccc7", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk-ollama:\n image: ollama/ollama:latest\n container_name: ollama-bytedesk\n ports:\n - \"21434:11434\"\n volumes:\n - ollama_models:/root/.ollama\n environment:\n - OLLAMA_MODELS=qwen3:0.6b\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:11434/api/version\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:9.4.2\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"IK_PLUGIN_DIR=/tmp/ik-plugin-cache; IK_PLUGIN_FILE=$$IK_PLUGIN_DIR/elasticsearch-analysis-ik-9.4.2.zip; IK_PLUGIN_TMP=$$IK_PLUGIN_FILE.tmp; mkdir -p $$IK_PLUGIN_DIR; if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; curl -fsSL -o $$IK_PLUGIN_TMP https://www.weiyuai.cn/download/elasticsearch-analysis-ik-9.4.2.zip && mv $$IK_PLUGIN_TMP $$IK_PLUGIN_FILE; /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file://$$IK_PLUGIN_FILE; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(缓存目录中的 zip 文件)\n # 如缓存目录中无 zip 文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-9.4.2.zip 下载\n - ./elasticsearch-analysis-ik-9.4.2.zip:/tmp/ik-plugin-cache\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-ollama\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-ollama:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n BYTEDESK_CALL_MRCP_ENABLED: \"false\"\n BYTEDESK_CALL_MRCP_PROFILE: java-mrcp\n BYTEDESK_CALL_MRCP_HOST: 0.0.0.0\n BYTEDESK_CALL_MRCP_PORT: 1544\n BYTEDESK_CALL_MRCP_TTS_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_MODE: recording-file\n BYTEDESK_CALL_MRCP_TTS_VOICE: longanhuan\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: false\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: true\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ===============================\n # Spring Boot Admin Client (bytedesk-monitor)\n # Uncomment to register this instance with a monitor server. 取消注释以注册到监控服务端。\n # ===============================\n # SPRING_BOOT_ADMIN_CLIENT_URL: http://bytedesk-monitor:9103\n # SPRING_BOOT_ADMIN_CLIENT_USERNAME: admin\n # SPRING_BOOT_ADMIN_CLIENT_PASSWORD: admin\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_NAME: bytedesk-starter\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_SERVICE_BASE_URL: http://127.0.0.1:9003\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: ollama\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: ollama\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: ollama\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: ollama\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: ollama\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://ollama-bytedesk:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"true\"\n # SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: deepseek-r1:1.5b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"true\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # SPRING_AI_OPENAI_CHAT_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: false\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n\n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n\n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: false\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n ollama_models:\n name: bytedesk_ollama_models\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "b887c4d8832c822f205c0f2cbbc97b26ebd41d84": {"t": 1785748606.4101083, "n": 27982, "h": "24547c06eb015df0", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk-ollama:\n image: ollama/ollama:latest\n container_name: ollama-bytedesk\n ports:\n - \"21434:11434\"\n volumes:\n - ollama_models:/root/.ollama\n environment:\n - OLLAMA_MODELS=qwen3:0.6b\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:11434/api/version\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"IK_PLUGIN_DIR=/tmp/ik-plugin-cache; IK_PLUGIN_FILE=$$IK_PLUGIN_DIR/elasticsearch-analysis-ik-8.18.0.zip; IK_PLUGIN_TMP=$$IK_PLUGIN_FILE.tmp; mkdir -p $$IK_PLUGIN_DIR; if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; curl -fsSL -o $$IK_PLUGIN_TMP https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && mv $$IK_PLUGIN_TMP $$IK_PLUGIN_FILE; /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file://$$IK_PLUGIN_FILE; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(缓存目录中的 zip 文件)\n # 如缓存目录中无 zip 文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/ik-plugin-cache\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-ollama\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-ollama:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n BYTEDESK_CALL_MRCP_ENABLED: \"false\"\n BYTEDESK_CALL_MRCP_PROFILE: java-mrcp\n BYTEDESK_CALL_MRCP_HOST: 0.0.0.0\n BYTEDESK_CALL_MRCP_PORT: 1544\n BYTEDESK_CALL_MRCP_TTS_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_MODE: recording-file\n BYTEDESK_CALL_MRCP_TTS_VOICE: longanhuan\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: false\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: true\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ===============================\n # Spring Boot Admin Client (bytedesk-monitor)\n # Uncomment to register this instance with a monitor server. 取消注释以注册到监控服务端。\n # ===============================\n # SPRING_BOOT_ADMIN_CLIENT_URL: http://bytedesk-monitor:9103\n # SPRING_BOOT_ADMIN_CLIENT_USERNAME: admin\n # SPRING_BOOT_ADMIN_CLIENT_PASSWORD: admin\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_NAME: bytedesk-starter\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_SERVICE_BASE_URL: http://127.0.0.1:9003\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: ollama\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: ollama\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: ollama\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: ollama\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: ollama\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://ollama-bytedesk:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"true\"\n # SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: deepseek-r1:1.5b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"true\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # SPRING_AI_OPENAI_CHAT_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: false\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n\n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n\n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: false\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n ollama_models:\n name: bytedesk_ollama_models\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "797fc307db5d99f05be7654a91259d1e76ad03bc": {"t": 1785748607.609558, "n": 27626, "h": "0202aa46459fb2e5", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk-ollama:\n image: ollama/ollama:latest\n container_name: ollama-bytedesk\n ports:\n - \"21434:11434\"\n volumes:\n - ollama_models:/root/.ollama\n environment:\n - OLLAMA_MODELS=qwen3:0.6b\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:11434/api/version\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"IK_PLUGIN_DIR=/tmp/ik-plugin-cache; IK_PLUGIN_FILE=$$IK_PLUGIN_DIR/elasticsearch-analysis-ik-8.18.0.zip; IK_PLUGIN_TMP=$$IK_PLUGIN_FILE.tmp; mkdir -p $$IK_PLUGIN_DIR; if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; curl -fsSL -o $$IK_PLUGIN_TMP https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && mv $$IK_PLUGIN_TMP $$IK_PLUGIN_FILE; /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file://$$IK_PLUGIN_FILE; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(缓存目录中的 zip 文件)\n # 如缓存目录中无 zip 文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/ik-plugin-cache\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-ollama\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-ollama:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: false\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: true\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ===============================\n # Spring Boot Admin Client (bytedesk-monitor)\n # Uncomment to register this instance with a monitor server. 取消注释以注册到监控服务端。\n # ===============================\n # SPRING_BOOT_ADMIN_CLIENT_URL: http://bytedesk-monitor:9103\n # SPRING_BOOT_ADMIN_CLIENT_USERNAME: admin\n # SPRING_BOOT_ADMIN_CLIENT_PASSWORD: admin\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_NAME: bytedesk-starter\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_SERVICE_BASE_URL: http://127.0.0.1:9003\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: ollama\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: ollama\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: ollama\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: ollama\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: ollama\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://ollama-bytedesk:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"true\"\n # SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: deepseek-r1:1.5b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"true\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # SPRING_AI_OPENAI_CHAT_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: false\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n\n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n\n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: false\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n ollama_models:\n name: bytedesk_ollama_models\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "7ef9159f723f12427bb03ecb9b23fe9090ae0e34": {"t": 1785748608.8757014, "n": 27137, "h": "1c45d42265c480bb", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk-ollama:\n image: ollama/ollama:latest\n container_name: ollama-bytedesk\n ports:\n - \"21434:11434\"\n volumes:\n - ollama_models:/root/.ollama\n environment:\n - OLLAMA_MODELS=qwen3:0.6b\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:11434/api/version\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-ollama\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-ollama:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: false\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: true\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: ollama\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: ollama\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: ollama\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: ollama\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: ollama\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://ollama-bytedesk:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"true\"\n # SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: deepseek-r1:1.5b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"true\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # SPRING_AI_OPENAI_CHAT_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: false\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n\n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n\n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: false\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n ollama_models:\n name: bytedesk_ollama_models\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "12eb4359662371740e80b49a3d86e8cc4101cee5": {"t": 1785748610.1178052, "n": 26972, "h": "832f72cad5281282", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk-ollama:\n image: ollama/ollama:latest\n container_name: ollama-bytedesk\n ports:\n - \"21434:11434\"\n volumes:\n - ollama_models:/root/.ollama\n environment:\n - OLLAMA_MODELS=qwen3:0.6b\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:11434/api/version\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-ollama\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-ollama:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: false\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: true\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: ollama\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: ollama\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: ollama\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: ollama\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: ollama\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://ollama-bytedesk:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"true\"\n # SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: deepseek-r1:1.5b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"true\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # SPRING_AI_OPENAI_CHAT_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: false\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n\n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n\n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: false\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n ollama_models:\n name: bytedesk_ollama_models\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "0ffefc7867ec55721497e0f90769901fa12a42f2": {"t": 1785748611.4975822, "n": 26833, "h": "6dfdcf58f188db35", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk-ollama:\n image: ollama/ollama:latest\n container_name: ollama-bytedesk\n ports:\n - \"21434:11434\"\n volumes:\n - ollama_models:/root/.ollama\n environment:\n - OLLAMA_MODELS=qwen3:0.6b\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:11434/api/version\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-ollama\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-ollama:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: false\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: true\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: ollama\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: ollama\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: ollama\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: ollama\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: ollama\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://ollama-bytedesk:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"true\"\n # SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: deepseek-r1:1.5b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"true\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # SPRING_AI_OPENAI_CHAT_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: false\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n\n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n\n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: false\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n ollama_models:\n name: bytedesk_ollama_models\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "cfcd4fe31454c60261f28951de5ec33377e115ab": {"t": 1785748612.784167, "n": 26784, "h": "a2c49311d398bcab", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk-ollama:\n image: ollama/ollama:latest\n container_name: ollama-bytedesk\n ports:\n - \"21434:11434\"\n volumes:\n - ollama_models:/root/.ollama\n environment:\n - OLLAMA_MODELS=qwen3:0.6b\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:11434/api/version\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-ollama\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-ollama:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: false\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: true\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: ollama\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: ollama\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: ollama\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: ollama\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: ollama\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://ollama-bytedesk:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"true\"\n # SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: deepseek-r1:1.5b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"true\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # SPRING_AI_OPENAI_CHAT_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: false\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n\n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n\n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: false\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n ollama_models:\n name: bytedesk_ollama_models\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "93bce581a29a77e71b563d7783c957a0c8ca4d2b": {"t": 1785748614.0440412, "n": 25651, "h": "3f468266b2c77f4e", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk-ollama:\n image: ollama/ollama:latest\n container_name: ollama-bytedesk\n ports:\n - \"21434:11434\"\n volumes:\n - ollama_models:/root/.ollama\n environment:\n - OLLAMA_MODELS=qwen3:0.6b\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:11434/api/version\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-ollama\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-ollama:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.7.0\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: false\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: true\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: ollama\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: ollama\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: ollama\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: ollama\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: ollama\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://ollama-bytedesk:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"true\"\n # SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: deepseek-r1:1.5b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"true\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # SPRING_AI_OPENAI_CHAT_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: false\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n\n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n\n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: false\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n ollama_models:\n name: bytedesk_ollama_models\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "7b3acbe6b6df8fbe01ae2b19b26dc787b5285037": {"t": 1785748615.4617834, "n": 25651, "h": "ce2a21ef19e3b25b", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk-ollama:\n image: ollama/ollama:latest\n container_name: ollama-bytedesk\n ports:\n - \"21434:11434\"\n volumes:\n - ollama_models:/root/.ollama\n environment:\n - OLLAMA_MODELS=qwen3:0.6b\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:11434/api/version\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-ollama\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-ollama:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.6.0\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: false\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: true\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: ollama\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: ollama\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: ollama\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: ollama\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: ollama\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://ollama-bytedesk:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"true\"\n # SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: deepseek-r1:1.5b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"true\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # SPRING_AI_OPENAI_CHAT_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: false\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n\n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n\n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: false\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n ollama_models:\n name: bytedesk_ollama_models\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "dc2c12166af8ccdb5e6f22248dd783b794644ab6": {"t": 1785748616.7025337, "n": 25637, "h": "e3f0d90979993023", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis/redis-stack-server:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n environment:\n - REDIS_ARGS=--requirepass qfRxz3tVT8Nh\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk-ollama:\n image: ollama/ollama:latest\n container_name: ollama-bytedesk\n ports:\n - \"21434:11434\"\n volumes:\n - ollama_models:/root/.ollama\n environment:\n - OLLAMA_MODELS=qwen3:0.6b\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:11434/api/version\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-ollama\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-ollama:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.6.0\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: false\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: true\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: ollama\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: ollama\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: ollama\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: ollama\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: ollama\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://ollama-bytedesk:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"true\"\n # SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: deepseek-r1:1.5b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"true\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # SPRING_AI_OPENAI_CHAT_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: false\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n\n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n\n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: false\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n ollama_models:\n name: bytedesk_ollama_models\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "d363dfa388e3ada7b7e8ec12d1628c560b23ab61": {"t": 1785748618.111118, "n": 25646, "h": "b3ee3bd9deecd38e", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis/redis-stack-server:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n environment:\n - REDIS_ARGS=--requirepass qfRxz3tVT8Nh\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk-ollama:\n image: ollama/ollama:latest\n container_name: ollama-bytedesk\n ports:\n - \"21434:11434\"\n volumes:\n - ollama_models:/root/.ollama\n environment:\n - OLLAMA_MODELS=qwen3:0.6b\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:11434/api/version\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-ollama\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-ollama:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.5.1\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_LOCK_TIME_MINUTES: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HELPCENTER_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: false\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: true\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: ollama\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: ollama\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: ollama\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: ollama\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: ollama\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://ollama-bytedesk:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"true\"\n # SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: deepseek-r1:1.5b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"true\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # SPRING_AI_OPENAI_CHAT_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: false\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n\n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n\n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: false\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n ollama_models:\n name: bytedesk_ollama_models\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "a6b37c539838b97d2c6616946d1f47ee8e07ea06": {"t": 1785748619.3645456, "n": 25646, "h": "12f8a198183d6aa5", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis/redis-stack-server:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n environment:\n - REDIS_ARGS=--requirepass qfRxz3tVT8Nh\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk-ollama:\n image: ollama/ollama:latest\n container_name: ollama-bytedesk\n ports:\n - \"21434:11434\"\n volumes:\n - ollama_models:/root/.ollama\n environment:\n - OLLAMA_MODELS=qwen3:0.6b\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:11434/api/version\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-ollama\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-ollama:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.5.0\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_LOCK_TIME_MINUTES: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HELPCENTER_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: false\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: true\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: ollama\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: ollama\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: ollama\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: ollama\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: ollama\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://ollama-bytedesk:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"true\"\n # SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: deepseek-r1:1.5b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"true\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # SPRING_AI_OPENAI_CHAT_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: false\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n\n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n\n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: false\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n ollama_models:\n name: bytedesk_ollama_models\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "5ffbeba3e9fb263f2a3fc41a8fe4cfafe20452f1": {"t": 1785748620.7396054, "n": 25646, "h": "52a88500f2b209dd", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis/redis-stack-server:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n environment:\n - REDIS_ARGS=--requirepass qfRxz3tVT8Nh\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk-ollama:\n image: ollama/ollama:latest\n container_name: ollama-bytedesk\n ports:\n - \"21434:11434\"\n volumes:\n - ollama_models:/root/.ollama\n environment:\n - OLLAMA_MODELS=qwen3:0.6b\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:11434/api/version\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-ollama\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-ollama:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.0.0\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_LOCK_TIME_MINUTES: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HELPCENTER_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: false\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: true\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: ollama\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: ollama\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: ollama\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: ollama\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: ollama\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://ollama-bytedesk:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"true\"\n # SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: deepseek-r1:1.5b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"true\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # SPRING_AI_OPENAI_CHAT_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: false\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n\n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n\n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: false\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n ollama_models:\n name: bytedesk_ollama_models\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "b73297ad66d3f7bbaf79c808c12a3bcbad053435": {"t": 1785748622.0195055, "n": 25535, "h": "6f352f3c76462206", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis/redis-stack-server:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n environment:\n - REDIS_ARGS=--requirepass qfRxz3tVT8Nh\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk-ollama:\n image: ollama/ollama:latest\n container_name: ollama-bytedesk\n ports:\n - \"21434:11434\"\n volumes:\n - ollama_models:/root/.ollama\n environment:\n - OLLAMA_MODELS=qwen3:0.6b\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:11434/api/version\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-ollama\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-ollama:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.0.0\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_LOCK_TIME_MINUTES: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HELPCENTER_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: false\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: true\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: ollama\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: ollama\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: ollama\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: ollama\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: ollama\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://ollama-bytedesk:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"true\"\n # SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: deepseek-r1:1.5b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"true\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # SPRING_AI_OPENAI_CHAT_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: false\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n\n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n\n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n # SPRING_ARTEMIS_MODE: embedded\n SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: false\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n ollama_models:\n name: bytedesk_ollama_models\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "976193668c0e76c76b3f7ba8d9522c7fc2692a06": {"t": 1786067997.938758, "n": 27982, "h": "24547c06eb015df0", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk-ollama:\n image: ollama/ollama:latest\n container_name: ollama-bytedesk\n ports:\n - \"21434:11434\"\n volumes:\n - ollama_models:/root/.ollama\n environment:\n - OLLAMA_MODELS=qwen3:0.6b\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:11434/api/version\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"IK_PLUGIN_DIR=/tmp/ik-plugin-cache; IK_PLUGIN_FILE=$$IK_PLUGIN_DIR/elasticsearch-analysis-ik-8.18.0.zip; IK_PLUGIN_TMP=$$IK_PLUGIN_FILE.tmp; mkdir -p $$IK_PLUGIN_DIR; if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; curl -fsSL -o $$IK_PLUGIN_TMP https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && mv $$IK_PLUGIN_TMP $$IK_PLUGIN_FILE; /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file://$$IK_PLUGIN_FILE; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(缓存目录中的 zip 文件)\n # 如缓存目录中无 zip 文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/ik-plugin-cache\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-ollama\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-ollama:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n BYTEDESK_CALL_MRCP_ENABLED: \"false\"\n BYTEDESK_CALL_MRCP_PROFILE: java-mrcp\n BYTEDESK_CALL_MRCP_HOST: 0.0.0.0\n BYTEDESK_CALL_MRCP_PORT: 1544\n BYTEDESK_CALL_MRCP_TTS_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_MODE: recording-file\n BYTEDESK_CALL_MRCP_TTS_VOICE: longanhuan\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: false\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: true\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ===============================\n # Spring Boot Admin Client (bytedesk-monitor)\n # Uncomment to register this instance with a monitor server. 取消注释以注册到监控服务端。\n # ===============================\n # SPRING_BOOT_ADMIN_CLIENT_URL: http://bytedesk-monitor:9103\n # SPRING_BOOT_ADMIN_CLIENT_USERNAME: admin\n # SPRING_BOOT_ADMIN_CLIENT_PASSWORD: admin\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_NAME: bytedesk-starter\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_SERVICE_BASE_URL: http://127.0.0.1:9003\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: ollama\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: ollama\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: ollama\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: ollama\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: ollama\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://ollama-bytedesk:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"true\"\n # SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: deepseek-r1:1.5b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"true\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # SPRING_AI_OPENAI_CHAT_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: false\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n\n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n\n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: false\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n ollama_models:\n name: bytedesk_ollama_models\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}}, "modules/ai/pom.xml": {"affe883cb26b5fd3e33902ae54e2bd31c3fa2ade": {"t": 1785746445.439062, "n": 16402, "h": "175c4e74082c6e0e", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.1.7</ollama4j.version>\n\t\t<jsonp.version>1.22.2</jsonp.version>\n\t\t<okhttp.version>4.12.0</okhttp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<spring-ai-minimax.version>1.0.0</spring-ai-minimax.version>\n\t\t<spring-ai-zhipuai.version>1.0.0</spring-ai-zhipuai.version>\n\t\t<zai-sdk.version>0.3.3</zai-sdk.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-vector-store-advisor -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-vector-store-advisor</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- openai sdk Official -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-sdk-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai-sdk -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai-sdk</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai-minimax.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai-zhipuai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- moonshot 已 vendor 到 modules/ai/src/main/java/org/springaicommunity/moonshot -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/anthropic-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-anthropic -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-anthropic</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/vertexai-gemini-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-vertex-ai-gemini -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-vertex-ai-gemini</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/google-genai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-google-genai -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-google-genai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.elasticsearch.client</groupId>\n\t\t\t<artifactId>elasticsearch-rest-client</artifactId>\n\t\t\t<version>8.18.8</version>\n\t\t</dependency>\n\n\t\t<!-- https://spring.io/blog/2025/12/11/spring-ai-tool-search-tools-tzolov -->\n\t\t<!-- 智能工具选择:通过 Spring AI 的动态工具发现实现 34-64%的 Token 节省 -->\n\t\t<!-- https://github.com/spring-ai-community/spring-ai-tool-search-tool/tree/1.0.x -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-search-tool -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-search-tool</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\t\t<!-- Choose a search strategy -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-searcher-lucene -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-searcher-lucene</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-call</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<!-- https://github.com/zai-org/z-ai-sdk-java -->\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<!-- 已将 zai-sdk 源码 vendor 到 modules/ai/src/main/java/ai/z/openapi,\n\t\t\t为避免与项目内同包源码重复,禁用外部二进制依赖。\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>${zai-sdk.version}</version>\n\t\t</dependency>\n\t\t-->\n\n\t\t<!-- vendored zai-sdk 运行/编译所需基础依赖 -->\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>retrofit</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>converter-jackson</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>adapter-rxjava3</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.reactivex.rxjava3</groupId>\n\t\t\t<artifactId>rxjava</artifactId>\n\t\t\t<version>3.1.12</version>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>okhttp</artifactId>\n\t\t\t<version>${okhttp.version}</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>okhttp-sse</artifactId>\n\t\t\t<version>${okhttp.version}</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>logging-interceptor</artifactId>\n\t\t\t<version>${okhttp.version}</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.auth0</groupId>\n\t\t\t<artifactId>java-jwt</artifactId>\n\t\t\t<version>4.4.0</version>\n\t\t</dependency>\n\n\t\t<!-- Google Gemini Java SDK -->\n\t\t <!-- https://mvnrepository.com/artifact/com.google.genai/google-genai -->\n <dependency>\n <groupId>com.google.genai</groupId>\n <artifactId>google-genai</artifactId>\n\t\t\t<version>1.56.0</version>\n </dependency>\n\n <!-- Anthropic Java SDK -->\n\t\t<!-- https://mvnrepository.com/artifact/com.anthropic/anthropic-java -->\n <dependency>\n <groupId>com.anthropic</groupId>\n <artifactId>anthropic-java</artifactId>\n\t\t\t<version>2.35.0</version>\n </dependency>\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server-webmvc -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/io.fabric8/kubernetes-client -->\n\t\t<dependency>\n <groupId>io.fabric8</groupId>\n <artifactId>kubernetes-client</artifactId>\n\t\t\t<version>7.7.0</version>\n </dependency>\n\n\t\t<!-- https://github.com/dashscope/dashscope-sdk-java -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java -->\n\t\t <dependency>\n\t\t\t<groupId>com.alibaba</groupId>\n\t\t\t<artifactId>dashscope-sdk-java</artifactId>\n\t\t\t<version>${dashscope-sdk-java.version}</version>\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>com.github.victools</groupId>\n\t\t\t\t\t<artifactId>jsonschema-generator</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>org.slf4j</groupId>\n\t\t\t\t\t<artifactId>slf4j-api</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>org.slf4j</groupId>\n\t\t\t\t\t<artifactId>slf4j-simple</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- https://java2ai.com/docs/quick-start -->\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!-- https://github.com/spring-ai-alibaba/spring-ai-extensions -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-dashscope -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<!-- 阶段 1:已由 BytedeskDashScopeChatModel / BytedeskDashScopeEmbeddingModel 替代,暂时注释保留便于回滚。\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t-->\n\t\t<!-- Spring AI Alibaba Agent Framework -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-agent-framework -->\n\t\t<!-- 阶段 2:Agent Framework 仅服务已停用演示代码,暂时注释保留便于回滚。\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-agent-framework</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t-->\n\t\t\n\t\t<!-- https://github.com/ollama4j/ollama4j -->\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t\t<exclusions>\n\t\t\t\t<!-- 排除旧版 MCP SDK,避免与 spring-ai-mcp 2.0.0 的 mcp-core 冲突 -->\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t\t\t<artifactId>*</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<!-- 阶段 2:spring-ai-alibaba 依赖已停用,BOM 暂时注释保留便于回滚。\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t-->\n\t\t\t<!-- https://github.com/spring-ai-alibaba/spring-ai-extensions -->\n\t\t\t<!-- <dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-extensions-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba-extensions.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency> -->\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t\n\n</project>"}, "976193668c0e76c76b3f7ba8d9522c7fc2692a06": {"t": 1785748606.9848597, "n": 15777, "h": "0a02e193d770be48", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<okhttp.version>4.12.0</okhttp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zai-sdk.version>0.3.3</zai-sdk.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- openai sdk Official -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-sdk-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai-sdk -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai-sdk</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- moonshot 已 vendor 到 modules/ai/src/main/java/org/springaicommunity/moonshot -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/anthropic-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-anthropic -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-anthropic</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/vertexai-gemini-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-vertex-ai-gemini -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-vertex-ai-gemini</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/google-genai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-google-genai -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-google-genai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://spring.io/blog/2025/12/11/spring-ai-tool-search-tools-tzolov -->\n\t\t<!-- 智能工具选择:通过 Spring AI 的动态工具发现实现 34-64%的 Token 节省 -->\n\t\t<!-- https://github.com/spring-ai-community/spring-ai-tool-search-tool/tree/1.0.x -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-search-tool -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-search-tool</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\t\t<!-- Choose a search strategy -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-searcher-lucene -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-searcher-lucene</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-call</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<!-- https://github.com/zai-org/z-ai-sdk-java -->\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<!-- 已将 zai-sdk 源码 vendor 到 modules/ai/src/main/java/ai/z/openapi,\n\t\t\t为避免与项目内同包源码重复,禁用外部二进制依赖。\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>${zai-sdk.version}</version>\n\t\t</dependency>\n\t\t-->\n\n\t\t<!-- vendored zai-sdk 运行/编译所需基础依赖 -->\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>retrofit</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>converter-jackson</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>adapter-rxjava3</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.reactivex.rxjava3</groupId>\n\t\t\t<artifactId>rxjava</artifactId>\n\t\t\t<version>3.1.12</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>okhttp</artifactId>\n\t\t\t<version>${okhttp.version}</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>okhttp-sse</artifactId>\n\t\t\t<version>${okhttp.version}</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>logging-interceptor</artifactId>\n\t\t\t<version>${okhttp.version}</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.auth0</groupId>\n\t\t\t<artifactId>java-jwt</artifactId>\n\t\t\t<version>4.4.0</version>\n\t\t</dependency>\n\n\t\t<!-- Google Gemini Java SDK -->\n\t\t <!-- https://mvnrepository.com/artifact/com.google.genai/google-genai -->\n <dependency>\n <groupId>com.google.genai</groupId>\n <artifactId>google-genai</artifactId>\n\t\t\t<version>1.56.0</version>\n </dependency>\n\n <!-- Anthropic Java SDK -->\n\t\t<!-- https://mvnrepository.com/artifact/com.anthropic/anthropic-java -->\n <dependency>\n <groupId>com.anthropic</groupId>\n <artifactId>anthropic-java</artifactId>\n\t\t\t<version>2.35.0</version>\n </dependency>\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server-webmvc -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/io.fabric8/kubernetes-client -->\n\t\t<dependency>\n <groupId>io.fabric8</groupId>\n <artifactId>kubernetes-client</artifactId>\n\t\t\t<version>7.7.0</version>\n </dependency>\n\n\t\t<!-- https://github.com/dashscope/dashscope-sdk-java -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java -->\n\t\t <dependency>\n\t\t\t<groupId>com.alibaba</groupId>\n\t\t\t<artifactId>dashscope-sdk-java</artifactId>\n\t\t\t<version>${dashscope-sdk-java.version}</version>\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>com.github.victools</groupId>\n\t\t\t\t\t<artifactId>jsonschema-generator</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>org.slf4j</groupId>\n\t\t\t\t\t<artifactId>slf4j-api</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>org.slf4j</groupId>\n\t\t\t\t\t<artifactId>slf4j-simple</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- https://java2ai.com/docs/quick-start -->\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!-- https://github.com/spring-ai-alibaba/spring-ai-extensions -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-dashscope -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<!-- 阶段 1:已由 BytedeskDashScopeChatModel / BytedeskDashScopeEmbeddingModel 替代,暂时注释保留便于回滚。\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t-->\n\t\t<!-- Spring AI Alibaba Agent Framework -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-agent-framework -->\n\t\t<!-- 阶段 2:Agent Framework 仅服务已停用演示代码,暂时注释保留便于回滚。\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-agent-framework</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t-->\n\t\t\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<!-- 阶段 2:spring-ai-alibaba 依赖已停用,BOM 暂时注释保留便于回滚。\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t-->\n\t\t\t<!-- https://github.com/spring-ai-alibaba/spring-ai-extensions -->\n\t\t\t<!-- <dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-extensions-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba-extensions.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency> -->\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t\n\n</project>"}, "7018186bb2f554cb4a369fb9598b7c6dc7c7874e": {"t": 1785748608.0911963, "n": 16344, "h": "aa674efe01e12c41", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<okhttp.version>4.12.0</okhttp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zai-sdk.version>0.3.3</zai-sdk.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- openai sdk Official -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-sdk-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai-sdk -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai-sdk</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- moonshot 已 vendor 到 modules/ai/src/main/java/org/springaicommunity/moonshot -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/anthropic-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-anthropic -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-anthropic</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/vertexai-gemini-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-vertex-ai-gemini -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-vertex-ai-gemini</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/google-genai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-google-genai -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-google-genai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://spring.io/blog/2025/12/11/spring-ai-tool-search-tools-tzolov -->\n\t\t<!-- 智能工具选择:通过 Spring AI 的动态工具发现实现 34-64%的 Token 节省 -->\n\t\t<!-- https://github.com/spring-ai-community/spring-ai-tool-search-tool/tree/1.0.x -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-search-tool -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-search-tool</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\t\t<!-- Choose a search strategy -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-searcher-lucene -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-searcher-lucene</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-call</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<!-- https://github.com/zai-org/z-ai-sdk-java -->\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<!-- 已将 zai-sdk 源码 vendor 到 modules/ai/src/main/java/ai/z/openapi,\n\t\t\t为避免与项目内同包源码重复,禁用外部二进制依赖。\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>${zai-sdk.version}</version>\n\t\t</dependency>\n\t\t-->\n\n\t\t<!-- vendored zai-sdk 运行/编译所需基础依赖 -->\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>retrofit</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>converter-jackson</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>adapter-rxjava3</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.reactivex.rxjava3</groupId>\n\t\t\t<artifactId>rxjava</artifactId>\n\t\t\t<version>3.1.12</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>okhttp</artifactId>\n\t\t\t<version>${okhttp.version}</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>okhttp-sse</artifactId>\n\t\t\t<version>${okhttp.version}</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>logging-interceptor</artifactId>\n\t\t\t<version>${okhttp.version}</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.auth0</groupId>\n\t\t\t<artifactId>java-jwt</artifactId>\n\t\t\t<version>4.4.0</version>\n\t\t</dependency>\n\n\t\t<!-- Google Gemini Java SDK -->\n\t\t <!-- https://mvnrepository.com/artifact/com.google.genai/google-genai -->\n <dependency>\n <groupId>com.google.genai</groupId>\n <artifactId>google-genai</artifactId>\n\t\t\t<version>1.56.0</version>\n </dependency>\n\n <!-- Anthropic Java SDK -->\n\t\t<!-- https://mvnrepository.com/artifact/com.anthropic/anthropic-java -->\n <dependency>\n <groupId>com.anthropic</groupId>\n <artifactId>anthropic-java</artifactId>\n\t\t\t<version>2.35.0</version>\n </dependency>\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server-webmvc -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/io.fabric8/kubernetes-client -->\n\t\t<dependency>\n <groupId>io.fabric8</groupId>\n <artifactId>kubernetes-client</artifactId>\n\t\t\t<version>7.7.0</version>\n </dependency>\n\n\t\t<!-- 暂时使用直接集成源码替代 -->\n\t\t<!-- https://java.agentscope.io/zh/intro.html -->\n\t\t<!-- https://github.com/agentscope-ai/agentscope-java -->\n\t\t<!-- https://mvnrepository.com/artifact/io.agentscope/agentscope-core -->\n\t\t<!-- <dependency>\n <groupId>io.agentscope</groupId>\n <artifactId>agentscope-core</artifactId>\n\t\t\t<version>1.0.12</version>\n </dependency> -->\n\n\t\t<!-- 暂时使用直接集成源码替代 -->\n\t\t<!-- https://java.agentscope.io/zh/intro.html -->\n\t\t<!-- https://github.com/agentscope-ai/agentscope-java -->\n\t\t<!-- https://mvnrepository.com/artifact/io.agentscope/agentscope-harness -->\n\t\t<!-- <dependency>\n <groupId>io.agentscope</groupId>\n <artifactId>agentscope-harness</artifactId>\n\t\t\t<version>1.1.0-RC2</version>\n </dependency> -->\n\n\t\t<!-- https://github.com/dashscope/dashscope-sdk-java -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java -->\n\t\t <dependency>\n\t\t\t<groupId>com.alibaba</groupId>\n\t\t\t<artifactId>dashscope-sdk-java</artifactId>\n\t\t\t<version>${dashscope-sdk-java.version}</version>\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>com.github.victools</groupId>\n\t\t\t\t\t<artifactId>jsonschema-generator</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>org.slf4j</groupId>\n\t\t\t\t\t<artifactId>slf4j-api</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>org.slf4j</groupId>\n\t\t\t\t\t<artifactId>slf4j-simple</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- https://java2ai.com/docs/quick-start -->\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!-- https://github.com/spring-ai-alibaba/spring-ai-extensions -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-dashscope -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- Spring AI Alibaba Agent Framework -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-agent-framework -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-agent-framework</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/spring-ai-alibaba/spring-ai-extensions -->\n\t\t\t<!-- <dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-extensions-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba-extensions.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency> -->\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t\n\n</project>"}, "797fc307db5d99f05be7654a91259d1e76ad03bc": {"t": 1785748609.2011182, "n": 16269, "h": "ecdfef393063641b", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zai-sdk.version>0.3.3</zai-sdk.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- openai sdk Official -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-sdk-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai-sdk -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai-sdk</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- moonshot 已 vendor 到 modules/ai/src/main/java/org/springaicommunity/moonshot -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/anthropic-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-anthropic -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-anthropic</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/vertexai-gemini-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-vertex-ai-gemini -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-vertex-ai-gemini</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/google-genai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-google-genai -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-google-genai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://spring.io/blog/2025/12/11/spring-ai-tool-search-tools-tzolov -->\n\t\t<!-- 智能工具选择:通过 Spring AI 的动态工具发现实现 34-64%的 Token 节省 -->\n\t\t<!-- https://github.com/spring-ai-community/spring-ai-tool-search-tool/tree/1.0.x -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-search-tool -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-search-tool</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\t\t<!-- Choose a search strategy -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-searcher-lucene -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-searcher-lucene</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-call</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<!-- https://github.com/zai-org/z-ai-sdk-java -->\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<!-- 已将 zai-sdk 源码 vendor 到 modules/ai/src/main/java/ai/z/openapi,\n\t\t\t为避免与项目内同包源码重复,禁用外部二进制依赖。\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>${zai-sdk.version}</version>\n\t\t</dependency>\n\t\t-->\n\n\t\t<!-- vendored zai-sdk 运行/编译所需基础依赖 -->\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>retrofit</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>converter-jackson</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>adapter-rxjava3</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.reactivex.rxjava3</groupId>\n\t\t\t<artifactId>rxjava</artifactId>\n\t\t\t<version>3.1.12</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>okhttp</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>okhttp-sse</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>logging-interceptor</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.auth0</groupId>\n\t\t\t<artifactId>java-jwt</artifactId>\n\t\t\t<version>4.4.0</version>\n\t\t</dependency>\n\n\t\t<!-- Google Gemini Java SDK -->\n\t\t <!-- https://mvnrepository.com/artifact/com.google.genai/google-genai -->\n <dependency>\n <groupId>com.google.genai</groupId>\n <artifactId>google-genai</artifactId>\n\t\t\t<version>1.56.0</version>\n </dependency>\n\n <!-- Anthropic Java SDK -->\n\t\t<!-- https://mvnrepository.com/artifact/com.anthropic/anthropic-java -->\n <dependency>\n <groupId>com.anthropic</groupId>\n <artifactId>anthropic-java</artifactId>\n\t\t\t<version>2.35.0</version>\n </dependency>\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server-webmvc -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/io.fabric8/kubernetes-client -->\n\t\t<dependency>\n <groupId>io.fabric8</groupId>\n <artifactId>kubernetes-client</artifactId>\n\t\t\t<version>7.7.0</version>\n </dependency>\n\n\t\t<!-- 暂时使用直接集成源码替代 -->\n\t\t<!-- https://java.agentscope.io/zh/intro.html -->\n\t\t<!-- https://github.com/agentscope-ai/agentscope-java -->\n\t\t<!-- https://mvnrepository.com/artifact/io.agentscope/agentscope-core -->\n\t\t<!-- <dependency>\n <groupId>io.agentscope</groupId>\n <artifactId>agentscope-core</artifactId>\n\t\t\t<version>1.0.12</version>\n </dependency> -->\n\n\t\t<!-- 暂时使用直接集成源码替代 -->\n\t\t<!-- https://java.agentscope.io/zh/intro.html -->\n\t\t<!-- https://github.com/agentscope-ai/agentscope-java -->\n\t\t<!-- https://mvnrepository.com/artifact/io.agentscope/agentscope-harness -->\n\t\t<!-- <dependency>\n <groupId>io.agentscope</groupId>\n <artifactId>agentscope-harness</artifactId>\n\t\t\t<version>1.1.0-RC2</version>\n </dependency> -->\n\n\t\t<!-- https://github.com/dashscope/dashscope-sdk-java -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java -->\n\t\t <dependency>\n\t\t\t<groupId>com.alibaba</groupId>\n\t\t\t<artifactId>dashscope-sdk-java</artifactId>\n\t\t\t<version>${dashscope-sdk-java.version}</version>\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>com.github.victools</groupId>\n\t\t\t\t\t<artifactId>jsonschema-generator</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>org.slf4j</groupId>\n\t\t\t\t\t<artifactId>slf4j-api</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>org.slf4j</groupId>\n\t\t\t\t\t<artifactId>slf4j-simple</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- https://java2ai.com/docs/quick-start -->\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!-- https://github.com/spring-ai-alibaba/spring-ai-extensions -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-dashscope -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- Spring AI Alibaba Agent Framework -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-agent-framework -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-agent-framework</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/spring-ai-alibaba/spring-ai-extensions -->\n\t\t\t<!-- <dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-extensions-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba-extensions.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency> -->\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t\n\n</project>"}, "7a91cfcbce365a105ab548ed6a0c0a2bac0524fd": {"t": 1785748610.522756, "n": 16821, "h": "99bb21ee813f8665", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zai-sdk.version>0.3.3</zai-sdk.version>\n\t\t<mcp.version>0.18.2</mcp.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- openai sdk Official -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-sdk-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai-sdk -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai-sdk</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- moonshot 已 vendor 到 modules/ai/src/main/java/org/springaicommunity/moonshot -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/anthropic-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-anthropic -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-anthropic</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/vertexai-gemini-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-vertex-ai-gemini -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-vertex-ai-gemini</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/google-genai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-google-genai -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-google-genai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\n\t\t<!-- https://spring.io/blog/2025/12/11/spring-ai-tool-search-tools-tzolov -->\n\t\t<!-- 智能工具选择:通过 Spring AI 的动态工具发现实现 34-64%的 Token 节省 -->\n\t\t<!-- https://github.com/spring-ai-community/spring-ai-tool-search-tool/tree/1.0.x -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-search-tool -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-search-tool</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\t\t<!-- Choose a search strategy -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-searcher-lucene -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-searcher-lucene</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-call</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<!-- https://github.com/zai-org/z-ai-sdk-java -->\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<!-- 已将 zai-sdk 源码 vendor 到 modules/ai/src/main/java/ai/z/openapi,\n\t\t\t为避免与项目内同包源码重复,禁用外部二进制依赖。\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>${zai-sdk.version}</version>\n\t\t</dependency>\n\t\t-->\n\n\t\t<!-- vendored zai-sdk 运行/编译所需基础依赖 -->\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>retrofit</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>converter-jackson</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>adapter-rxjava3</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.reactivex.rxjava3</groupId>\n\t\t\t<artifactId>rxjava</artifactId>\n\t\t\t<version>3.1.12</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>okhttp</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>okhttp-sse</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>logging-interceptor</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.auth0</groupId>\n\t\t\t<artifactId>java-jwt</artifactId>\n\t\t\t<version>4.4.0</version>\n\t\t</dependency>\n\n\t\t<!-- Google Gemini Java SDK -->\n\t\t <!-- https://mvnrepository.com/artifact/com.google.genai/google-genai -->\n <dependency>\n <groupId>com.google.genai</groupId>\n <artifactId>google-genai</artifactId>\n\t\t\t<version>1.56.0</version>\n </dependency>\n\n <!-- Anthropic Java SDK -->\n\t\t<!-- https://mvnrepository.com/artifact/com.anthropic/anthropic-java -->\n <dependency>\n <groupId>com.anthropic</groupId>\n <artifactId>anthropic-java</artifactId>\n\t\t\t<version>2.35.0</version>\n </dependency>\n\n <!-- Model Context Protocol (MCP) SDK -->\n\t\t<!-- https://mvnrepository.com/artifact/io.modelcontextprotocol.sdk/mcp -->\n <dependency>\n <groupId>io.modelcontextprotocol.sdk</groupId>\n <artifactId>mcp</artifactId>\n\t\t\t<version>${mcp.version}</version>\n </dependency>\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server-webmvc -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/io.fabric8/kubernetes-client -->\n\t\t<dependency>\n <groupId>io.fabric8</groupId>\n <artifactId>kubernetes-client</artifactId>\n\t\t\t<version>7.7.0</version>\n </dependency>\n\n\t\t<!-- 暂时使用直接集成源码替代 -->\n\t\t<!-- https://java.agentscope.io/zh/intro.html -->\n\t\t<!-- https://github.com/agentscope-ai/agentscope-java -->\n\t\t<!-- https://mvnrepository.com/artifact/io.agentscope/agentscope-core -->\n\t\t<!-- <dependency>\n <groupId>io.agentscope</groupId>\n <artifactId>agentscope-core</artifactId>\n\t\t\t<version>1.0.12</version>\n </dependency> -->\n\n\t\t<!-- 暂时使用直接集成源码替代 -->\n\t\t<!-- https://java.agentscope.io/zh/intro.html -->\n\t\t<!-- https://github.com/agentscope-ai/agentscope-java -->\n\t\t<!-- https://mvnrepository.com/artifact/io.agentscope/agentscope-harness -->\n\t\t<!-- <dependency>\n <groupId>io.agentscope</groupId>\n <artifactId>agentscope-harness</artifactId>\n\t\t\t<version>1.1.0-RC2</version>\n </dependency> -->\n\n\t\t<!-- https://github.com/dashscope/dashscope-sdk-java -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java -->\n\t\t <dependency>\n\t\t\t<groupId>com.alibaba</groupId>\n\t\t\t<artifactId>dashscope-sdk-java</artifactId>\n\t\t\t<version>${dashscope-sdk-java.version}</version>\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>com.github.victools</groupId>\n\t\t\t\t\t<artifactId>jsonschema-generator</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>org.slf4j</groupId>\n\t\t\t\t\t<artifactId>slf4j-api</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>org.slf4j</groupId>\n\t\t\t\t\t<artifactId>slf4j-simple</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- https://java2ai.com/docs/quick-start -->\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!-- https://github.com/spring-ai-alibaba/spring-ai-extensions -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-dashscope -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- Spring AI Alibaba Agent Framework -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-agent-framework -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-agent-framework</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<dependency>\n\t\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t\t<artifactId>mcp-bom</artifactId>\n\t\t\t\t<version>${mcp.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/spring-ai-alibaba/spring-ai-extensions -->\n\t\t\t<!-- <dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-extensions-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba-extensions.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency> -->\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t\n\n</project>"}, "c17d41e4f68587d71918047754dc6aaf17b04f2e": {"t": 1785748611.8887713, "n": 16230, "h": "6988afbb1b91af8c", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zai-sdk.version>0.3.3</zai-sdk.version>\n\t\t<mcp.version>0.18.2</mcp.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- openai sdk Official -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-sdk-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai-sdk -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai-sdk</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- moonshot 已 vendor 到 modules/ai/src/main/java/org/springaicommunity/moonshot -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/anthropic-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-anthropic -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-anthropic</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/vertexai-gemini-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-vertex-ai-gemini -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-vertex-ai-gemini</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/google-genai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-google-genai -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-google-genai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\n\t\t<!-- https://spring.io/blog/2025/12/11/spring-ai-tool-search-tools-tzolov -->\n\t\t<!-- 智能工具选择:通过 Spring AI 的动态工具发现实现 34-64%的 Token 节省 -->\n\t\t<!-- https://github.com/spring-ai-community/spring-ai-tool-search-tool/tree/1.0.x -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-search-tool -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-search-tool</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\t\t<!-- Choose a search strategy -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-searcher-lucene -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-searcher-lucene</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-call</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<!-- https://github.com/zai-org/z-ai-sdk-java -->\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<!-- 已将 zai-sdk 源码 vendor 到 modules/ai/src/main/java/ai/z/openapi,\n\t\t\t为避免与项目内同包源码重复,禁用外部二进制依赖。\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>${zai-sdk.version}</version>\n\t\t</dependency>\n\t\t-->\n\n\t\t<!-- vendored zai-sdk 运行/编译所需基础依赖 -->\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>retrofit</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>converter-jackson</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>adapter-rxjava3</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.reactivex.rxjava3</groupId>\n\t\t\t<artifactId>rxjava</artifactId>\n\t\t\t<version>3.1.12</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>okhttp</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>okhttp-sse</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>logging-interceptor</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.auth0</groupId>\n\t\t\t<artifactId>java-jwt</artifactId>\n\t\t\t<version>4.4.0</version>\n\t\t</dependency>\n\n\t\t<!-- Google Gemini Java SDK -->\n\t\t <!-- https://mvnrepository.com/artifact/com.google.genai/google-genai -->\n <dependency>\n <groupId>com.google.genai</groupId>\n <artifactId>google-genai</artifactId>\n\t\t\t<version>1.56.0</version>\n </dependency>\n\n <!-- Anthropic Java SDK -->\n\t\t<!-- https://mvnrepository.com/artifact/com.anthropic/anthropic-java -->\n <dependency>\n <groupId>com.anthropic</groupId>\n <artifactId>anthropic-java</artifactId>\n\t\t\t<version>2.35.0</version>\n </dependency>\n\n <!-- Model Context Protocol (MCP) SDK -->\n\t\t<!-- https://mvnrepository.com/artifact/io.modelcontextprotocol.sdk/mcp -->\n <dependency>\n <groupId>io.modelcontextprotocol.sdk</groupId>\n <artifactId>mcp</artifactId>\n\t\t\t<version>${mcp.version}</version>\n </dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/io.fabric8/kubernetes-client -->\n\t\t<dependency>\n <groupId>io.fabric8</groupId>\n <artifactId>kubernetes-client</artifactId>\n\t\t\t<version>7.7.0</version>\n </dependency>\n\n\t\t<!-- 暂时使用直接集成源码替代 -->\n\t\t<!-- https://java.agentscope.io/zh/intro.html -->\n\t\t<!-- https://github.com/agentscope-ai/agentscope-java -->\n\t\t<!-- https://mvnrepository.com/artifact/io.agentscope/agentscope-core -->\n\t\t<!-- <dependency>\n <groupId>io.agentscope</groupId>\n <artifactId>agentscope-core</artifactId>\n\t\t\t<version>1.0.12</version>\n </dependency> -->\n\n\t\t<!-- 暂时使用直接集成源码替代 -->\n\t\t<!-- https://java.agentscope.io/zh/intro.html -->\n\t\t<!-- https://github.com/agentscope-ai/agentscope-java -->\n\t\t<!-- https://mvnrepository.com/artifact/io.agentscope/agentscope-harness -->\n\t\t<!-- <dependency>\n <groupId>io.agentscope</groupId>\n <artifactId>agentscope-harness</artifactId>\n\t\t\t<version>1.1.0-RC2</version>\n </dependency> -->\n\n\t\t<!-- https://github.com/dashscope/dashscope-sdk-java -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java -->\n\t\t <dependency>\n\t\t\t<groupId>com.alibaba</groupId>\n\t\t\t<artifactId>dashscope-sdk-java</artifactId>\n\t\t\t<version>${dashscope-sdk-java.version}</version>\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>com.github.victools</groupId>\n\t\t\t\t\t<artifactId>jsonschema-generator</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>org.slf4j</groupId>\n\t\t\t\t\t<artifactId>slf4j-api</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>org.slf4j</groupId>\n\t\t\t\t\t<artifactId>slf4j-simple</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- https://java2ai.com/docs/quick-start -->\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!-- https://github.com/spring-ai-alibaba/spring-ai-extensions -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-dashscope -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- Spring AI Alibaba Agent Framework -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-agent-framework -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-agent-framework</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/spring-ai-alibaba/spring-ai-extensions -->\n\t\t\t<!-- <dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-extensions-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba-extensions.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency> -->\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t\n\n</project>"}, "1d986d98a6163b5cac1ea11887ee62a5d981c35a": {"t": 1785748613.1103976, "n": 13759, "h": "1dbfa75786a33023", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zai-sdk.version>0.3.3</zai-sdk.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- openai sdk Official -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-sdk-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai-sdk -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai-sdk</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- moonshot 已 vendor 到 modules/ai/src/main/java/org/springaicommunity/moonshot -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/anthropic-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-anthropic -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-anthropic</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/vertexai-gemini-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-vertex-ai-gemini -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-vertex-ai-gemini</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/google-genai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-google-genai -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-google-genai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\n\t\t<!-- https://spring.io/blog/2025/12/11/spring-ai-tool-search-tools-tzolov -->\n\t\t<!-- 智能工具选择:通过 Spring AI 的动态工具发现实现 34-64%的 Token 节省 -->\n\t\t<!-- https://github.com/spring-ai-community/spring-ai-tool-search-tool/tree/1.0.x -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-search-tool -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-search-tool</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\t\t<!-- Choose a search strategy -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-searcher-lucene -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-searcher-lucene</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-call</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<!-- https://github.com/zai-org/z-ai-sdk-java -->\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<!-- 已将 zai-sdk 源码 vendor 到 modules/ai/src/main/java/ai/z/openapi,\n\t\t\t为避免与项目内同包源码重复,禁用外部二进制依赖。\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>${zai-sdk.version}</version>\n\t\t</dependency>\n\t\t-->\n\n\t\t<!-- vendored zai-sdk 运行/编译所需基础依赖 -->\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>retrofit</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>converter-jackson</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>adapter-rxjava3</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.reactivex.rxjava3</groupId>\n\t\t\t<artifactId>rxjava</artifactId>\n\t\t\t<version>3.1.12</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>okhttp</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>okhttp-sse</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>logging-interceptor</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.auth0</groupId>\n\t\t\t<artifactId>java-jwt</artifactId>\n\t\t\t<version>4.4.0</version>\n\t\t</dependency>\n\n\t\t<!-- https://java2ai.com/docs/quick-start -->\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!-- https://github.com/spring-ai-alibaba/spring-ai-extensions -->\n\t\t<!-- https://github.com/dashscope/dashscope-sdk-java -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-dashscope -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- Spring AI Alibaba Agent Framework -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-agent-framework -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-agent-framework</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/spring-ai-alibaba/spring-ai-extensions -->\n\t\t\t<!-- <dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-extensions-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba-extensions.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency> -->\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t\n\n</project>"}, "4a548b3f2585f0b025558e215545c145bfb4da7a": {"t": 1785748614.2894564, "n": 13750, "h": "5a667a7d9997eab8", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zai-sdk.version>0.3.3</zai-sdk.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- openai sdk Official -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-sdk-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai-sdk -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai-sdk</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- moonshot 已 vendor 到 modules/ai/src/main/java/org/springaicommunity/moonshot -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/anthropic-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-anthropic -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-anthropic</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/vertexai-gemini-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-vertex-ai-gemini -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-vertex-ai-gemini</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/google-genai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-google-genai -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-google-genai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\n\t\t<!-- https://spring.io/blog/2025/12/11/spring-ai-tool-search-tools-tzolov -->\n\t\t<!-- 智能工具选择:通过 Spring AI 的动态工具发现实现 34-64%的 Token 节省 -->\n\t\t<!-- https://github.com/spring-ai-community/spring-ai-tool-search-tool/tree/1.0.x -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-search-tool -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-search-tool</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\t\t<!-- Choose a search strategy -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-searcher-lucene -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-searcher-lucene</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-call</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<!-- https://github.com/zai-org/z-ai-sdk-java -->\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<!-- 已将 zai-sdk 源码 vendor 到 modules/ai/src/main/java/ai/z/openapi,\n\t\t\t为避免与项目内同包源码重复,禁用外部二进制依赖。\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>${zai-sdk.version}</version>\n\t\t</dependency>\n\t\t-->\n\n\t\t<!-- vendored zai-sdk 运行/编译所需基础依赖 -->\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>retrofit</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>converter-jackson</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>adapter-rxjava3</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.reactivex.rxjava3</groupId>\n\t\t\t<artifactId>rxjava</artifactId>\n\t\t\t<version>3.1.12</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>okhttp</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>okhttp-sse</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>logging-interceptor</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.auth0</groupId>\n\t\t\t<artifactId>java-jwt</artifactId>\n\t\t\t<version>4.4.0</version>\n\t\t</dependency>\n\n\t\t<!-- https://java2ai.com/docs/quick-start -->\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!-- https://github.com/spring-ai-alibaba/spring-ai-extensions -->\n\t\t<!-- https://github.com/dashscope/dashscope-sdk-java -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-dashscope -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- Spring AI Alibaba Agent Framework -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-agent-framework -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-agent-framework</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/spring-ai-alibaba/spring-ai-extensions -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-extensions-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba-extensions.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t\n\n</project>"}, "1bd96f129b26e37c579bf738b340840be2b7a415": {"t": 1785748615.5202436, "n": 13131, "h": "1c5ca6abfef27f90", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zai-sdk.version>0.3.3</zai-sdk.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- openai sdk Official -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-sdk-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai-sdk -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai-sdk</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- moonshot 已 vendor 到 modules/ai/src/main/java/org/springaicommunity/moonshot -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/anthropic-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-anthropic -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-anthropic</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/vertexai-gemini-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-vertex-ai-gemini -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-vertex-ai-gemini</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/google-genai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-google-genai -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-google-genai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\n\t\t<!-- https://spring.io/blog/2025/12/11/spring-ai-tool-search-tools-tzolov -->\n\t\t<!-- 智能工具选择:通过 Spring AI 的动态工具发现实现 34-64%的 Token 节省 -->\n\t\t<!-- https://github.com/spring-ai-community/spring-ai-tool-search-tool/tree/1.0.x -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-search-tool -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-search-tool</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\t\t<!-- Choose a search strategy -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-searcher-lucene -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-searcher-lucene</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-call</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<!-- https://github.com/zai-org/z-ai-sdk-java -->\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<!-- 已将 zai-sdk 源码 vendor 到 modules/ai/src/main/java/ai/z/openapi,\n\t\t\t为避免与项目内同包源码重复,禁用外部二进制依赖。\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>${zai-sdk.version}</version>\n\t\t</dependency>\n\t\t-->\n\n\t\t<!-- vendored zai-sdk 运行/编译所需基础依赖 -->\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>retrofit</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>converter-jackson</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>adapter-rxjava3</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.reactivex.rxjava3</groupId>\n\t\t\t<artifactId>rxjava</artifactId>\n\t\t\t<version>3.1.12</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>okhttp</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>okhttp-sse</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>logging-interceptor</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.auth0</groupId>\n\t\t\t<artifactId>java-jwt</artifactId>\n\t\t\t<version>4.4.0</version>\n\t\t</dependency>\n\n\t\t<!-- https://java2ai.com/docs/quick-start -->\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- Spring AI Alibaba Agent Framework -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-agent-framework -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-agent-framework</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t\n\n</project>"}, "8782dc9cdcf36269c8a7a263661b025b7a629ecf": {"t": 1785748616.7677925, "n": 13134, "h": "5a21f1f790cba9e7", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zai-sdk.version>0.3.3</zai-sdk.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- openai sdk Official -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-sdk-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai-sdk -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai-sdk</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- moonshot 已 vendor 到 modules/ai/src/main/java/org/springaicommunity/moonshot -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/anthropic-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-anthropic -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-anthropic</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/vertexai-gemini-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-vertex-ai-gemini -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-vertex-ai-gemini</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/google-genai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-google-genai -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-google-genai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\n\t\t<!-- https://spring.io/blog/2025/12/11/spring-ai-tool-search-tools-tzolov -->\n\t\t<!-- 智能工具选择:通过 Spring AI 的动态工具发现实现 34-64%的 Token 节省 -->\n\t\t<!-- https://github.com/spring-ai-community/spring-ai-tool-search-tool/tree/1.0.x -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-search-tool -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-search-tool</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\t\t<!-- Choose a search strategy -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-searcher-lucene -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-searcher-lucene</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-call</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<!-- https://github.com/zai-org/z-ai-sdk-java -->\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<!-- 已将 zai-sdk 源码 vendor 到 modules/ai/src/main/java/ai/z/openapi,\n\t\t\t为避免与项目内同包源码重复,禁用外部二进制依赖。\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>${zai-sdk.version}</version>\n\t\t</dependency>\n\t\t-->\n\n\t\t<!-- vendored zai-sdk 运行/编译所需基础依赖 -->\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>retrofit</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>converter-jackson</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>adapter-rxjava3</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.reactivex.rxjava3</groupId>\n\t\t\t<artifactId>rxjava</artifactId>\n\t\t\t<version>3.1.12</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>okhttp</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>okhttp-sse</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>logging-interceptor</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.auth0</groupId>\n\t\t\t<artifactId>java-jwt</artifactId>\n\t\t\t<version>4.4.0</version>\n\t\t</dependency>\n\n\t\t<!-- https://java2ai.com/docs/quick-start -->\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- Spring AI Alibaba Agent Framework -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-agent-framework -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-agent-framework</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t\n\t\t\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t\n\n</project>"}, "e7d879bce5e1218bf6ce9448b123a12846f11727": {"t": 1785748617.8972576, "n": 13046, "h": "b27c6488ed1028b2", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zai-sdk.version>0.3.3</zai-sdk.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- openai sdk Official -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-sdk-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai-sdk -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai-sdk</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/anthropic-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-anthropic -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-anthropic</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/vertexai-gemini-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-vertex-ai-gemini -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-vertex-ai-gemini</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/google-genai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-google-genai -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-google-genai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\n\t\t<!-- https://spring.io/blog/2025/12/11/spring-ai-tool-search-tools-tzolov -->\n\t\t<!-- 智能工具选择:通过 Spring AI 的动态工具发现实现 34-64%的 Token 节省 -->\n\t\t<!-- https://github.com/spring-ai-community/spring-ai-tool-search-tool/tree/1.0.x -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-search-tool -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-search-tool</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\t\t<!-- Choose a search strategy -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-searcher-lucene -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-searcher-lucene</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-call</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<!-- https://github.com/zai-org/z-ai-sdk-java -->\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<!-- 已将 zai-sdk 源码 vendor 到 modules/ai/src/main/java/ai/z/openapi,\n\t\t\t为避免与项目内同包源码重复,禁用外部二进制依赖。\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>${zai-sdk.version}</version>\n\t\t</dependency>\n\t\t-->\n\n\t\t<!-- vendored zai-sdk 运行/编译所需基础依赖 -->\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>retrofit</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>converter-jackson</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>adapter-rxjava3</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.reactivex.rxjava3</groupId>\n\t\t\t<artifactId>rxjava</artifactId>\n\t\t\t<version>3.1.12</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>okhttp</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>okhttp-sse</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>logging-interceptor</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.auth0</groupId>\n\t\t\t<artifactId>java-jwt</artifactId>\n\t\t\t<version>4.4.0</version>\n\t\t</dependency>\n\n\t\t<!-- https://java2ai.com/docs/quick-start -->\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- Spring AI Alibaba Agent Framework -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-agent-framework -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-agent-framework</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t\n\t\t\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t\n\n</project>"}, "93bce581a29a77e71b563d7783c957a0c8ca4d2b": {"t": 1785748619.0262568, "n": 13569, "h": "7e331d323ecd2e66", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zai-sdk.version>0.3.3</zai-sdk.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- openai sdk Official -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-sdk-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai-sdk -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai-sdk</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/anthropic-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-anthropic -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-anthropic</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/vertexai-gemini-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-vertex-ai-gemini -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-vertex-ai-gemini</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/google-genai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-google-genai -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-google-genai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\n\t\t<!-- https://spring.io/blog/2025/12/11/spring-ai-tool-search-tools-tzolov -->\n\t\t<!-- 智能工具选择:通过 Spring AI 的动态工具发现实现 34-64%的 Token 节省 -->\n\t\t<!-- https://github.com/spring-ai-community/spring-ai-tool-search-tool/tree/1.0.x -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-search-tool -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-search-tool</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\t\t<!-- Choose a search strategy -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-searcher-lucene -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-searcher-lucene</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-call</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<!-- https://github.com/zai-org/z-ai-sdk-java -->\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<!-- 已将 zai-sdk 源码 vendor 到 modules/ai/src/main/java/ai/z/openapi,\n\t\t\t为避免与项目内同包源码重复,禁用外部二进制依赖。\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>${zai-sdk.version}</version>\n\t\t</dependency>\n\t\t-->\n\n\t\t<!-- vendored zai-sdk 运行/编译所需基础依赖 -->\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>retrofit</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>converter-jackson</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.retrofit2</groupId>\n\t\t\t<artifactId>adapter-rxjava3</artifactId>\n\t\t\t<version>2.9.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.reactivex.rxjava3</groupId>\n\t\t\t<artifactId>rxjava</artifactId>\n\t\t\t<version>3.1.12</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>okhttp</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>okhttp-sse</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.squareup.okhttp3</groupId>\n\t\t\t<artifactId>logging-interceptor</artifactId>\n\t\t\t<version>3.14.9</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.auth0</groupId>\n\t\t\t<artifactId>java-jwt</artifactId>\n\t\t\t<version>4.4.0</version>\n\t\t</dependency>\n\n\t\t<!-- https://java2ai.com/docs/quick-start -->\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- Spring AI Alibaba Agent Framework -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-agent-framework -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-agent-framework</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-graph-core -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-graph-core</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency> -->\n\t\t<!-- <dependency>\n <groupId>com.alibaba.cloud.ai</groupId>\n <artifactId>spring-ai-alibaba-starter-graph-observation</artifactId>\n <version>${spring-ai-alibaba.version}</version>\n </dependency> -->\n\t\t\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t\n\n</project>"}, "dc2c12166af8ccdb5e6f22248dd783b794644ab6": {"t": 1785748620.1282368, "n": 12796, "h": "f0963957b78d723b", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zhipuai.oapi-java-sdk.version>release-V4-2.4.3</zhipuai.oapi-java-sdk.version>\n\t\t<zai-sdk.version>0.3.2</zai-sdk.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- openai sdk Official -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-sdk-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai-sdk -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai-sdk</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/anthropic-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-anthropic -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-anthropic</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/vertexai-gemini-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-vertex-ai-gemini -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-vertex-ai-gemini</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/google-genai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-google-genai -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-google-genai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\n\t\t<!-- https://spring.io/blog/2025/12/11/spring-ai-tool-search-tools-tzolov -->\n\t\t<!-- 智能工具选择:通过 Spring AI 的动态工具发现实现 34-64%的 Token 节省 -->\n\t\t<!-- https://github.com/spring-ai-community/spring-ai-tool-search-tool/tree/1.0.x -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-search-tool -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-search-tool</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\t\t<!-- Choose a search strategy -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-searcher-lucene -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-searcher-lucene</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-call</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<!-- spring ai 官方无法正常统计 token 使用量,使用这个zhipuai 官方库 -->\n\t\t<!-- https://github.com/MetaGLM/zhipuai-sdk-java-v4 -->\n\t\t<!-- https://bigmodel.cn/dev/api/devguide/sdk-install -->\n\t\t<!-- https://mvnrepository.com/artifact/cn.bigmodel.openapi/oapi-java-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>cn.bigmodel.openapi</groupId>\n\t\t\t<artifactId>oapi-java-sdk</artifactId>\n\t\t\t<version>${zhipuai.oapi-java-sdk.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://github.com/zai-org/z-ai-sdk-java -->\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>${zai-sdk.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://java2ai.com/docs/quick-start -->\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- Spring AI Alibaba Agent Framework -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-agent-framework -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-agent-framework</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-graph-core -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-graph-core</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency> -->\n\t\t<!-- <dependency>\n <groupId>com.alibaba.cloud.ai</groupId>\n <artifactId>spring-ai-alibaba-starter-graph-observation</artifactId>\n <version>${spring-ai-alibaba.version}</version>\n </dependency> -->\n\t\t\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t\n\n</project>"}, "8fd161bd695378b7cfec44a6371db476fc84c542": {"t": 1785748621.3440766, "n": 12619, "h": "58ef54b95bdc9625", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zhipuai.oapi-java-sdk.version>release-V4-2.4.3</zhipuai.oapi-java-sdk.version>\n\t\t<zai-sdk.version>0.3.2</zai-sdk.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- openai sdk Official -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-sdk-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai-sdk -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai-sdk</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/anthropic-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-anthropic -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-anthropic</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/vertexai-gemini-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-vertex-ai-gemini -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-vertex-ai-gemini</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/google-genai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-google-genai -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-google-genai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\n\t\t<!-- https://spring.io/blog/2025/12/11/spring-ai-tool-search-tools-tzolov -->\n\t\t<!-- 智能工具选择:通过 Spring AI 的动态工具发现实现 34-64%的 Token 节省 -->\n\t\t<!-- https://github.com/spring-ai-community/spring-ai-tool-search-tool/tree/1.0.x -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-search-tool -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-search-tool</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\t\t<!-- Choose a search strategy -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springaicommunity/tool-searcher-lucene -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springaicommunity</groupId>\n\t\t\t<artifactId>tool-searcher-lucene</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency> -->\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<!-- spring ai 官方无法正常统计 token 使用量,使用这个zhipuai 官方库 -->\n\t\t<!-- https://github.com/MetaGLM/zhipuai-sdk-java-v4 -->\n\t\t<!-- https://bigmodel.cn/dev/api/devguide/sdk-install -->\n\t\t<!-- https://mvnrepository.com/artifact/cn.bigmodel.openapi/oapi-java-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>cn.bigmodel.openapi</groupId>\n\t\t\t<artifactId>oapi-java-sdk</artifactId>\n\t\t\t<version>${zhipuai.oapi-java-sdk.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://github.com/zai-org/z-ai-sdk-java -->\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>${zai-sdk.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://java2ai.com/docs/quick-start -->\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- Spring AI Alibaba Agent Framework -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-agent-framework -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-agent-framework</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-graph-core -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-graph-core</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency> -->\n\t\t<!-- <dependency>\n <groupId>com.alibaba.cloud.ai</groupId>\n <artifactId>spring-ai-alibaba-starter-graph-observation</artifactId>\n <version>${spring-ai-alibaba.version}</version>\n </dependency> -->\n\t\t\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t\n\n</project>"}, "02dad19e24a4470ed4bd96896bb8d833f421192a": {"t": 1785748622.5412188, "n": 11865, "h": "c56e01486c843d2b", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zhipuai.oapi-java-sdk.version>release-V4-2.4.3</zhipuai.oapi-java-sdk.version>\n\t\t<zai-sdk.version>0.3.2</zai-sdk.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- openai sdk Official -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-sdk-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai-sdk -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai-sdk</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/anthropic-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-anthropic -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-anthropic</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/vertexai-gemini-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-vertex-ai-gemini -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-vertex-ai-gemini</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/google-genai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-google-genai -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-google-genai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<!-- spring ai 官方无法正常统计 token 使用量,使用这个zhipuai 官方库 -->\n\t\t<!-- https://github.com/MetaGLM/zhipuai-sdk-java-v4 -->\n\t\t<!-- https://bigmodel.cn/dev/api/devguide/sdk-install -->\n\t\t<!-- https://mvnrepository.com/artifact/cn.bigmodel.openapi/oapi-java-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>cn.bigmodel.openapi</groupId>\n\t\t\t<artifactId>oapi-java-sdk</artifactId>\n\t\t\t<version>${zhipuai.oapi-java-sdk.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://github.com/zai-org/z-ai-sdk-java -->\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>${zai-sdk.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://java2ai.com/docs/quick-start -->\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- Spring AI Alibaba Agent Framework -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-agent-framework -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-agent-framework</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-graph-core -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-graph-core</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency> -->\n\t\t<!-- <dependency>\n <groupId>com.alibaba.cloud.ai</groupId>\n <artifactId>spring-ai-alibaba-starter-graph-observation</artifactId>\n <version>${spring-ai-alibaba.version}</version>\n </dependency> -->\n\t\t\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t\n\n</project>"}, "2c526703e92cdd6f20d425058f136ea99d3890e7": {"t": 1785748623.6742113, "n": 11457, "h": "aa9172f0d3dcd5fb", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zhipuai.oapi-java-sdk.version>release-V4-2.4.3</zhipuai.oapi-java-sdk.version>\n\t\t<zai-sdk.version>0.3.2</zai-sdk.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/anthropic-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-anthropic -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-anthropic</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/vertexai-gemini-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-vertex-ai-gemini -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-vertex-ai-gemini</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/google-genai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-google-genai -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-google-genai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<!-- spring ai 官方无法正常统计 token 使用量,使用这个zhipuai 官方库 -->\n\t\t<!-- https://github.com/MetaGLM/zhipuai-sdk-java-v4 -->\n\t\t<!-- https://bigmodel.cn/dev/api/devguide/sdk-install -->\n\t\t<!-- https://mvnrepository.com/artifact/cn.bigmodel.openapi/oapi-java-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>cn.bigmodel.openapi</groupId>\n\t\t\t<artifactId>oapi-java-sdk</artifactId>\n\t\t\t<version>${zhipuai.oapi-java-sdk.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://github.com/zai-org/z-ai-sdk-java -->\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>${zai-sdk.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://java2ai.com/docs/quick-start -->\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- Spring AI Alibaba Agent Framework -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-agent-framework -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-agent-framework</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-graph-core -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-graph-core</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency> -->\n\t\t<!-- <dependency>\n <groupId>com.alibaba.cloud.ai</groupId>\n <artifactId>spring-ai-alibaba-starter-graph-observation</artifactId>\n <version>${spring-ai-alibaba.version}</version>\n </dependency> -->\n\t\t\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t\n\n</project>"}, "fb8802c598ba371b03bb679e71fccf2105bf0b36": {"t": 1785748624.8849263, "n": 11022, "h": "7e4e78b35afc3be4", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zhipuai.oapi-java-sdk.version>release-V4-2.4.3</zhipuai.oapi-java-sdk.version>\n\t\t<zai-sdk.version>0.1.3</zai-sdk.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/anthropic-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-anthropic -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-anthropic</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/vertexai-gemini-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-vertex-ai-gemini -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-vertex-ai-gemini</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/google-genai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-google-genai -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-google-genai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- spring ai 官方无法正常统计 token 使用量,使用这个zhipuai 官方库 -->\n\t\t<!-- https://github.com/MetaGLM/zhipuai-sdk-java-v4 -->\n\t\t<!-- https://bigmodel.cn/dev/api/devguide/sdk-install -->\n\t\t<!-- https://mvnrepository.com/artifact/cn.bigmodel.openapi/oapi-java-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>cn.bigmodel.openapi</groupId>\n\t\t\t<artifactId>oapi-java-sdk</artifactId>\n\t\t\t<version>${zhipuai.oapi-java-sdk.version}</version>\n\t\t</dependency>\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>${zai-sdk.version}</version>\n\t\t</dependency>\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-graph-core -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-graph-core</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency> -->\n\t\t<!-- <dependency>\n <groupId>com.alibaba.cloud.ai</groupId>\n <artifactId>spring-ai-alibaba-starter-graph-observation</artifactId>\n <version>${spring-ai-alibaba.version}</version>\n </dependency> -->\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t\n\n</project>"}, "a6e03d2d72ed563a84617a9507fbefaf8001ddcb": {"t": 1785748626.1180174, "n": 10566, "h": "9a83991b33eb54a2", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zhipuai.oapi-java-sdk.version>release-V4-2.4.3</zhipuai.oapi-java-sdk.version>\n\t\t<zai-sdk.version>0.1.3</zai-sdk.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/vertexai-gemini-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-vertex-ai-gemini -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-vertex-ai-gemini</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/google-genai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-google-genai -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-google-genai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- spring ai 官方无法正常统计 token 使用量,使用这个zhipuai 官方库 -->\n\t\t<!-- https://github.com/MetaGLM/zhipuai-sdk-java-v4 -->\n\t\t<!-- https://bigmodel.cn/dev/api/devguide/sdk-install -->\n\t\t<!-- https://mvnrepository.com/artifact/cn.bigmodel.openapi/oapi-java-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>cn.bigmodel.openapi</groupId>\n\t\t\t<artifactId>oapi-java-sdk</artifactId>\n\t\t\t<version>${zhipuai.oapi-java-sdk.version}</version>\n\t\t</dependency>\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>${zai-sdk.version}</version>\n\t\t</dependency>\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-graph-core -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-graph-core</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency> -->\n\t\t<!-- <dependency>\n <groupId>com.alibaba.cloud.ai</groupId>\n <artifactId>spring-ai-alibaba-starter-graph-observation</artifactId>\n <version>${spring-ai-alibaba.version}</version>\n </dependency> -->\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t\n\n</project>"}, "f6409f9fe8750ae61108ebf274ebc49ca842a265": {"t": 1785748627.2463012, "n": 10557, "h": "ab7aeb169c624fa1", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zhipuai.oapi-java-sdk.version>release-V4-2.4.3</zhipuai.oapi-java-sdk.version>\n\t\t<zai-sdk.version>0.1.3</zai-sdk.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/vertexai-gemini-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-vertex-ai-gemini -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-vertex-ai-gemini</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/google-genai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-google-genai -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-google-genai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- spring ai 官方无法正常统计 token 使用量,使用这个zhipuai 官方库 -->\n\t\t<!-- https://github.com/MetaGLM/zhipuai-sdk-java-v4 -->\n\t\t<!-- https://bigmodel.cn/dev/api/devguide/sdk-install -->\n\t\t<!-- https://mvnrepository.com/artifact/cn.bigmodel.openapi/oapi-java-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>cn.bigmodel.openapi</groupId>\n\t\t\t<artifactId>oapi-java-sdk</artifactId>\n\t\t\t<version>${zhipuai.oapi-java-sdk.version}</version>\n\t\t</dependency>\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>${zai-sdk.version}</version>\n\t\t</dependency>\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-graph-core -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-graph-core</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- <dependency>\n <groupId>com.alibaba.cloud.ai</groupId>\n <artifactId>spring-ai-alibaba-starter-graph-observation</artifactId>\n <version>${spring-ai-alibaba.version}</version>\n </dependency> -->\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t\n\n</project>"}, "9af4c18d20c76d1f54887f701fa2b38cb3e036c6": {"t": 1785748628.8360682, "n": 13152, "h": "eec8fefddf0aae7b", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zhipuai.oapi-java-sdk.version>release-V4-2.4.3</zhipuai.oapi-java-sdk.version>\n\t\t<mcp.version>0.14.1</mcp.version>\n\t\t<zai-sdk.version>0.1.3</zai-sdk.version>\n\t</properties>\n\n\t<dependencies>\n\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/vertexai-gemini-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-vertex-ai-gemini -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-vertex-ai-gemini</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/google-genai-chat.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-google-genai -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-google-genai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- spring ai 官方无法正常统计 token 使用量,使用这个zhipuai 官方库 -->\n\t\t<!-- https://github.com/MetaGLM/zhipuai-sdk-java-v4 -->\n\t\t<!-- https://bigmodel.cn/dev/api/devguide/sdk-install -->\n\t\t<!-- https://mvnrepository.com/artifact/cn.bigmodel.openapi/oapi-java-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>cn.bigmodel.openapi</groupId>\n\t\t\t<artifactId>oapi-java-sdk</artifactId>\n\t\t\t<version>${zhipuai.oapi-java-sdk.version}</version>\n\t\t</dependency>\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>${zai-sdk.version}</version>\n\t\t</dependency>\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t\n\t\t<!-- mcp -->\n\t\t<!-- https://modelcontextprotocol.io/sdk/java/mcp-overview -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/mcp/mcp-client-boot-starter-docs.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-client -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-client</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t <!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!-- 生产环境,spring ai 官方推荐使用 webflux 版本 client:\n\t\t For production deployment, we recommend using the WebFlux-based SSE connection with the\n\t\tspring-ai-starter-mcp-client-webflux-->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-client-webflux -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-client-webflux</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server-webflux</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://modelcontextprotocol.io/sdk/java/mcp-overview -->\n\t\t<!-- https://mvnrepository.com/artifact/io.modelcontextprotocol.sdk/mcp -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t<artifactId>mcp</artifactId>\n\t\t\t<version>${mcp.version}</version>\n\t\t</dependency> -->\n\t\t<!-- https://mvnrepository.com/artifact/io.modelcontextprotocol.sdk/mcp-spring-webflux -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t<artifactId>mcp-spring-webflux</artifactId>\n\t\t\t<version>${mcp.version}</version>\n\t\t</dependency> -->\n\t\t<!-- https://mvnrepository.com/artifact/io.modelcontextprotocol.sdk/mcp-spring-webmvc -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t<artifactId>mcp-spring-webmvc</artifactId>\n\t\t\t<version>${mcp.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-graph-core -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-graph-core</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- <dependency>\n <groupId>com.alibaba.cloud.ai</groupId>\n <artifactId>spring-ai-alibaba-starter-graph-observation</artifactId>\n <version>${spring-ai-alibaba.version}</version>\n </dependency> -->\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<dependency>\n\t\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t\t<artifactId>mcp-bom</artifactId>\n\t\t\t\t<version>${mcp.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t\n\n</project>"}, "6cc81160ae5de820b937ac32b7368c95053c7a25": {"t": 1785748630.0143726, "n": 12316, "h": "537eca7a51403f3c", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zhipuai.oapi-java-sdk.version>release-V4-2.4.3</zhipuai.oapi-java-sdk.version>\n\t\t<mcp.version>0.14.1</mcp.version>\n\t</properties>\n\n\t<dependencies>\n\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!-- spring ai 官方无法正常统计 token 使用量,使用这个zhipuai 官方库 -->\n\t\t<!-- https://github.com/MetaGLM/zhipuai-sdk-java-v4 -->\n\t\t<!-- https://bigmodel.cn/dev/api/devguide/sdk-install -->\n\t\t<!-- https://mvnrepository.com/artifact/cn.bigmodel.openapi/oapi-java-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>cn.bigmodel.openapi</groupId>\n\t\t\t<artifactId>oapi-java-sdk</artifactId>\n\t\t\t<version>${zhipuai.oapi-java-sdk.version}</version>\n\t\t</dependency>\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>0.0.5.1</version>\n\t\t</dependency>\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t\n\t\t<!-- mcp -->\n\t\t<!-- https://modelcontextprotocol.io/sdk/java/mcp-overview -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/mcp/mcp-client-boot-starter-docs.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-client -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-client</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t <!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!-- 生产环境,spring ai 官方推荐使用 webflux 版本 client:\n\t\t For production deployment, we recommend using the WebFlux-based SSE connection with the\n\t\tspring-ai-starter-mcp-client-webflux-->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-client-webflux -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-client-webflux</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server-webflux</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://modelcontextprotocol.io/sdk/java/mcp-overview -->\n\t\t<!-- https://mvnrepository.com/artifact/io.modelcontextprotocol.sdk/mcp -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t<artifactId>mcp</artifactId>\n\t\t\t<version>${mcp.version}</version>\n\t\t</dependency> -->\n\t\t<!-- https://mvnrepository.com/artifact/io.modelcontextprotocol.sdk/mcp-spring-webflux -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t<artifactId>mcp-spring-webflux</artifactId>\n\t\t\t<version>${mcp.version}</version>\n\t\t</dependency> -->\n\t\t<!-- https://mvnrepository.com/artifact/io.modelcontextprotocol.sdk/mcp-spring-webmvc -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t<artifactId>mcp-spring-webmvc</artifactId>\n\t\t\t<version>${mcp.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-graph-core -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-graph-core</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- <dependency>\n <groupId>com.alibaba.cloud.ai</groupId>\n <artifactId>spring-ai-alibaba-starter-graph-observation</artifactId>\n <version>${spring-ai-alibaba.version}</version>\n </dependency> -->\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<dependency>\n\t\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t\t<artifactId>mcp-bom</artifactId>\n\t\t\t\t<version>${mcp.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t\n\n</project>"}, "383f82721841430d513862b9aa9f24852f0fbbd5": {"t": 1785748631.2476583, "n": 12533, "h": "c37001fe21fd8b6b", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zhipuai.oapi-java-sdk.version>release-V4-2.4.3</zhipuai.oapi-java-sdk.version>\n\t\t<mcp.version>0.14.1</mcp.version>\n\t</properties>\n\n\t<dependencies>\n\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!-- spring ai 官方无法正常统计 token 使用量,使用这个zhipuai 官方库 -->\n\t\t<!-- https://github.com/MetaGLM/zhipuai-sdk-java-v4 -->\n\t\t<!-- https://bigmodel.cn/dev/api/devguide/sdk-install -->\n\t\t<!-- https://mvnrepository.com/artifact/cn.bigmodel.openapi/oapi-java-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>cn.bigmodel.openapi</groupId>\n\t\t\t<artifactId>oapi-java-sdk</artifactId>\n\t\t\t<version>${zhipuai.oapi-java-sdk.version}</version>\n\t\t</dependency>\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>0.0.5.1</version>\n\t\t</dependency>\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t\n\t\t<!-- mcp -->\n\t\t<!-- https://modelcontextprotocol.io/sdk/java/mcp-overview -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/mcp/mcp-client-boot-starter-docs.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-client -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-client</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t <!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!-- 生产环境,spring ai 官方推荐使用 webflux 版本 client:\n\t\t For production deployment, we recommend using the WebFlux-based SSE connection with the\n\t\tspring-ai-starter-mcp-client-webflux-->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-client-webflux -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-client-webflux</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server-webflux</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://modelcontextprotocol.io/sdk/java/mcp-overview -->\n\t\t<!-- https://mvnrepository.com/artifact/io.modelcontextprotocol.sdk/mcp -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t<artifactId>mcp</artifactId>\n\t\t\t<version>${mcp.version}</version>\n\t\t</dependency> -->\n\t\t<!-- https://mvnrepository.com/artifact/io.modelcontextprotocol.sdk/mcp-spring-webflux -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t<artifactId>mcp-spring-webflux</artifactId>\n\t\t\t<version>${mcp.version}</version>\n\t\t</dependency> -->\n\t\t<!-- https://mvnrepository.com/artifact/io.modelcontextprotocol.sdk/mcp-spring-webmvc -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t<artifactId>mcp-spring-webmvc</artifactId>\n\t\t\t<version>${mcp.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-graph-core -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-graph-core</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- <dependency>\n <groupId>com.alibaba.cloud.ai</groupId>\n <artifactId>spring-ai-alibaba-starter-graph-observation</artifactId>\n <version>${spring-ai-alibaba.version}</version>\n </dependency> -->\n\t\t<!-- 规则引擎 -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba/qlexpress4 -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba</groupId>\n\t\t\t<artifactId>qlexpress4</artifactId>\n\t\t\t<version>4.0.4</version>\n\t\t</dependency>\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<dependency>\n\t\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t\t<artifactId>mcp-bom</artifactId>\n\t\t\t\t<version>${mcp.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t\n\n</project>"}, "0d5a50be887f5d8c7898d89983f431c19a03be3e": {"t": 1785748632.398997, "n": 12536, "h": "5528938f7937b802", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zhipuai.oapi-java-sdk.version>release-V4-2.4.3</zhipuai.oapi-java-sdk.version>\n\t\t<mcp.version>0.14.1</mcp.version>\n\t</properties>\n\n\t<dependencies>\n\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!-- spring ai 官方无法正常统计 token 使用量,使用这个zhipuai 官方库 -->\n\t\t<!-- https://github.com/MetaGLM/zhipuai-sdk-java-v4 -->\n\t\t<!-- https://bigmodel.cn/dev/api/devguide/sdk-install -->\n\t\t<!-- https://mvnrepository.com/artifact/cn.bigmodel.openapi/oapi-java-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>cn.bigmodel.openapi</groupId>\n\t\t\t<artifactId>oapi-java-sdk</artifactId>\n\t\t\t<version>${zhipuai.oapi-java-sdk.version}</version>\n\t\t</dependency>\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>0.0.5.1</version>\n\t\t</dependency>\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t\n\t\t<!-- mcp -->\n\t\t<!-- https://modelcontextprotocol.io/sdk/java/mcp-overview -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/mcp/mcp-client-boot-starter-docs.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-client -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-client</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t <!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!-- 生产环境,spring ai 官方推荐使用 webflux 版本 client:\n\t\t For production deployment, we recommend using the WebFlux-based SSE connection with the\n\t\tspring-ai-starter-mcp-client-webflux-->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-client-webflux -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-client-webflux</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server-webflux</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://modelcontextprotocol.io/sdk/java/mcp-overview -->\n\t\t<!-- https://mvnrepository.com/artifact/io.modelcontextprotocol.sdk/mcp -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t<artifactId>mcp</artifactId>\n\t\t\t<version>${mcp.version}</version>\n\t\t</dependency> -->\n\t\t<!-- https://mvnrepository.com/artifact/io.modelcontextprotocol.sdk/mcp-spring-webflux -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t<artifactId>mcp-spring-webflux</artifactId>\n\t\t\t<version>${mcp.version}</version>\n\t\t</dependency> -->\n\t\t<!-- https://mvnrepository.com/artifact/io.modelcontextprotocol.sdk/mcp-spring-webmvc -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t<artifactId>mcp-spring-webmvc</artifactId>\n\t\t\t<version>${mcp.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-graph-core -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-graph-core</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- <dependency>\n <groupId>com.alibaba.cloud.ai</groupId>\n <artifactId>spring-ai-alibaba-starter-graph-observation</artifactId>\n <version>${spring-ai-alibaba.version}</version>\n </dependency> -->\n\t\t<!-- 规则引擎 -->\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba/qlexpress4 -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba</groupId>\n\t\t\t<artifactId>qlexpress4</artifactId>\n\t\t\t<version>4.0.4</version>\n\t\t</dependency>\n\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<dependency>\n\t\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t\t<artifactId>mcp-bom</artifactId>\n\t\t\t\t<version>${mcp.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t\n\n</project>"}, "d5ad91ebdd27529c07b3e640595735e215b8b701": {"t": 1785748633.6713681, "n": 12319, "h": "14ac6b30d2bab855", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zhipuai.oapi-java-sdk.version>release-V4-2.4.3</zhipuai.oapi-java-sdk.version>\n\t\t<mcp.version>0.14.1</mcp.version>\n\t</properties>\n\n\t<dependencies>\n\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!-- spring ai 官方无法正常统计 token 使用量,使用这个zhipuai 官方库 -->\n\t\t<!-- https://github.com/MetaGLM/zhipuai-sdk-java-v4 -->\n\t\t<!-- https://bigmodel.cn/dev/api/devguide/sdk-install -->\n\t\t<!-- https://mvnrepository.com/artifact/cn.bigmodel.openapi/oapi-java-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>cn.bigmodel.openapi</groupId>\n\t\t\t<artifactId>oapi-java-sdk</artifactId>\n\t\t\t<version>${zhipuai.oapi-java-sdk.version}</version>\n\t\t</dependency>\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>0.0.5.1</version>\n\t\t</dependency>\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t\n\t\t<!-- mcp -->\n\t\t<!-- https://modelcontextprotocol.io/sdk/java/mcp-overview -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/mcp/mcp-client-boot-starter-docs.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-client -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-client</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t <!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!-- 生产环境,spring ai 官方推荐使用 webflux 版本 client:\n\t\t For production deployment, we recommend using the WebFlux-based SSE connection with the\n\t\tspring-ai-starter-mcp-client-webflux-->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-client-webflux -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-client-webflux</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server-webflux</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- https://modelcontextprotocol.io/sdk/java/mcp-overview -->\n\t\t<!-- https://mvnrepository.com/artifact/io.modelcontextprotocol.sdk/mcp -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t<artifactId>mcp</artifactId>\n\t\t\t<version>${mcp.version}</version>\n\t\t</dependency> -->\n\t\t<!-- https://mvnrepository.com/artifact/io.modelcontextprotocol.sdk/mcp-spring-webflux -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t<artifactId>mcp-spring-webflux</artifactId>\n\t\t\t<version>${mcp.version}</version>\n\t\t</dependency> -->\n\t\t<!-- https://mvnrepository.com/artifact/io.modelcontextprotocol.sdk/mcp-spring-webmvc -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t<artifactId>mcp-spring-webmvc</artifactId>\n\t\t\t<version>${mcp.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-graph-core -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-graph-core</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- <dependency>\n <groupId>com.alibaba.cloud.ai</groupId>\n <artifactId>spring-ai-alibaba-starter-graph-observation</artifactId>\n <version>${spring-ai-alibaba.version}</version>\n </dependency> -->\n\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<dependency>\n\t\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t\t<artifactId>mcp-bom</artifactId>\n\t\t\t\t<version>${mcp.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t\n\n</project>"}, "43e32af5ed404e7b25bf286876a470b6f3b062db": {"t": 1785748634.9642224, "n": 12283, "h": "0dceb7e98022bb5e", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zhipuai.oapi-java-sdk.version>release-V4-2.4.3</zhipuai.oapi-java-sdk.version>\n\t\t<mcp.version>0.13.1</mcp.version>\n\t</properties>\n\n\t<dependencies>\n\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!-- spring ai 官方无法正常统计 token 使用量,使用这个zhipuai 官方库 -->\n\t\t<!-- https://github.com/MetaGLM/zhipuai-sdk-java-v4 -->\n\t\t<!-- https://bigmodel.cn/dev/api/devguide/sdk-install -->\n\t\t<!-- https://mvnrepository.com/artifact/cn.bigmodel.openapi/oapi-java-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>cn.bigmodel.openapi</groupId>\n\t\t\t<artifactId>oapi-java-sdk</artifactId>\n\t\t\t<version>${zhipuai.oapi-java-sdk.version}</version>\n\t\t</dependency>\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>0.0.5.1</version>\n\t\t</dependency>\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t\n\t\t<!-- mcp -->\n\t\t<!-- https://modelcontextprotocol.io/sdk/java/mcp-overview -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/mcp/mcp-client-boot-starter-docs.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-client -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-client</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t <!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!-- 生产环境,spring ai 官方推荐使用 webflux 版本 client:\n\t\t For production deployment, we recommend using the WebFlux-based SSE connection with the\n\t\tspring-ai-starter-mcp-client-webflux-->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-client-webflux -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-client-webflux</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server-webflux</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://modelcontextprotocol.io/sdk/java/mcp-overview -->\n\t\t<!-- https://mvnrepository.com/artifact/io.modelcontextprotocol.sdk/mcp -->\n\t\t<dependency>\n\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t<artifactId>mcp</artifactId>\n\t\t\t<version>${mcp.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/io.modelcontextprotocol.sdk/mcp-spring-webflux -->\n\t\t<dependency>\n\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t<artifactId>mcp-spring-webflux</artifactId>\n\t\t\t<version>${mcp.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/io.modelcontextprotocol.sdk/mcp-spring-webmvc -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t<artifactId>mcp-spring-webmvc</artifactId>\n\t\t\t<version>${mcp.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-graph-core -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-graph-core</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- <dependency>\n <groupId>com.alibaba.cloud.ai</groupId>\n <artifactId>spring-ai-alibaba-starter-graph-observation</artifactId>\n <version>${spring-ai-alibaba.version}</version>\n </dependency> -->\n\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<dependency>\n\t\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t\t<artifactId>mcp-bom</artifactId>\n\t\t\t\t<version>${mcp.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t\n\n</project>"}, "460ca0ce73c47ab62e202e2aa92a1736d5793df4": {"t": 1785748636.0740097, "n": 13420, "h": "a07b66230c7890af", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zhipuai.oapi-java-sdk.version>release-V4-2.4.3</zhipuai.oapi-java-sdk.version>\n\t\t<mcp.version>0.13.1</mcp.version>\n\t</properties>\n\n\t<dependencies>\n\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!-- spring ai 官方无法正常统计 token 使用量,使用这个zhipuai 官方库 -->\n\t\t<!-- https://github.com/MetaGLM/zhipuai-sdk-java-v4 -->\n\t\t<!-- https://bigmodel.cn/dev/api/devguide/sdk-install -->\n\t\t<!-- https://mvnrepository.com/artifact/cn.bigmodel.openapi/oapi-java-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>cn.bigmodel.openapi</groupId>\n\t\t\t<artifactId>oapi-java-sdk</artifactId>\n\t\t\t<version>${zhipuai.oapi-java-sdk.version}</version>\n\t\t</dependency>\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>0.0.5.1</version>\n\t\t</dependency>\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t\n\t\t<!-- mcp -->\n\t\t<!-- https://modelcontextprotocol.io/sdk/java/mcp-overview -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/mcp/mcp-client-boot-starter-docs.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-client -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-client</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t <!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!-- 生产环境,spring ai 官方推荐使用 webflux 版本 client:\n\t\t For production deployment, we recommend using the WebFlux-based SSE connection with the\n\t\tspring-ai-starter-mcp-client-webflux-->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-client-webflux -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-client-webflux</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server-webflux</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://modelcontextprotocol.io/sdk/java/mcp-overview -->\n\t\t<!-- https://mvnrepository.com/artifact/io.modelcontextprotocol.sdk/mcp -->\n\t\t<dependency>\n\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t<artifactId>mcp</artifactId>\n\t\t\t<version>${mcp.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/io.modelcontextprotocol.sdk/mcp-spring-webflux -->\n\t\t<dependency>\n\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t<artifactId>mcp-spring-webflux</artifactId>\n\t\t\t<version>${mcp.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/io.modelcontextprotocol.sdk/mcp-spring-webmvc -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t<artifactId>mcp-spring-webmvc</artifactId>\n\t\t\t<version>${mcp.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-graph-core -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-graph-core</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- <dependency>\n <groupId>com.alibaba.cloud.ai</groupId>\n <artifactId>spring-ai-alibaba-starter-graph-observation</artifactId>\n <version>${spring-ai-alibaba.version}</version>\n </dependency> -->\n\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<dependency>\n\t\t\t\t<groupId>io.modelcontextprotocol.sdk</groupId>\n\t\t\t\t<artifactId>mcp-bom</artifactId>\n\t\t\t\t<version>${mcp.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t<repositories>\n\t\t<!-- https://java2ai.com/docs/dev/get-started/ -->\n\t\t<repository>\n\t\t\t<id>spring-milestones</id>\n\t\t\t<name>Spring Milestones</name>\n\t\t\t<url>https://repo.spring.io/milestone</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t\t<!-- https://repo.spring.io/ui/native/snapshot/org/springframework/ai/ -->\n\t\t<repository>\n\t\t\t<id>spring-snapshots</id>\n\t\t\t<name>Spring Snapshots</name>\n\t\t\t<url>https://repo.spring.io/snapshot</url>\n\t\t\t<releases>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</releases>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>true</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t\t<!-- https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/cloud/ai/spring-ai-alibaba-bom/1.0.0.3-SNAPSHOT/maven-metadata.xml -->\n\t\t<repository>\n\t\t\t<name>Central Portal Snapshots</name>\n\t\t\t<id>central-portal-snapshots</id>\n\t\t\t<url>https://oss.sonatype.org/content/repositories/snapshots/</url>\n\t\t\t<releases>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</releases>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>true</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t</repositories>\n\n</project>"}, "426ca1dae7b3e6ba137d9901d796e9fa6a31ef9a": {"t": 1785748637.6964884, "n": 12363, "h": "59e4b3de0ff0eb63", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zhipuai.oapi-java-sdk.version>release-V4-2.4.3</zhipuai.oapi-java-sdk.version>\n\t</properties>\n\n\t<dependencies>\n\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!-- spring ai 官方无法正常统计 token 使用量,使用这个zhipuai 官方库 -->\n\t\t<!-- https://github.com/MetaGLM/zhipuai-sdk-java-v4 -->\n\t\t<!-- https://bigmodel.cn/dev/api/devguide/sdk-install -->\n\t\t<!-- https://mvnrepository.com/artifact/cn.bigmodel.openapi/oapi-java-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>cn.bigmodel.openapi</groupId>\n\t\t\t<artifactId>oapi-java-sdk</artifactId>\n\t\t\t<version>${zhipuai.oapi-java-sdk.version}</version>\n\t\t</dependency>\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>0.0.5.1</version>\n\t\t</dependency>\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t\n\t\t<!-- mcp -->\n\t\t<!-- https://modelcontextprotocol.io/sdk/java/mcp-overview -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/mcp/mcp-client-boot-starter-docs.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-client -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-client</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t <!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!-- 生产环境,spring ai 官方推荐使用 webflux 版本 client:\n\t\t For production deployment, we recommend using the WebFlux-based SSE connection with the\n\t\tspring-ai-starter-mcp-client-webflux-->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-client-webflux -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-client-webflux</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server-webflux</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-graph-core -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-graph-core</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- <dependency>\n <groupId>com.alibaba.cloud.ai</groupId>\n <artifactId>spring-ai-alibaba-starter-graph-observation</artifactId>\n <version>${spring-ai-alibaba.version}</version>\n </dependency> -->\n\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t<repositories>\n\t\t<!-- https://java2ai.com/docs/dev/get-started/ -->\n\t\t<repository>\n\t\t\t<id>spring-milestones</id>\n\t\t\t<name>Spring Milestones</name>\n\t\t\t<url>https://repo.spring.io/milestone</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t\t<!-- https://repo.spring.io/ui/native/snapshot/org/springframework/ai/ -->\n\t\t<repository>\n\t\t\t<id>spring-snapshots</id>\n\t\t\t<name>Spring Snapshots</name>\n\t\t\t<url>https://repo.spring.io/snapshot</url>\n\t\t\t<releases>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</releases>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>true</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t\t<!-- https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/cloud/ai/spring-ai-alibaba-bom/1.0.0.3-SNAPSHOT/maven-metadata.xml -->\n\t\t<repository>\n\t\t\t<name>Central Portal Snapshots</name>\n\t\t\t<id>central-portal-snapshots</id>\n\t\t\t<url>https://oss.sonatype.org/content/repositories/snapshots/</url>\n\t\t\t<releases>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</releases>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>true</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t</repositories>\n\n</project>"}, "1bdf9f56755664c13bbcd8b7a93f221ecf956153": {"t": 1785748638.8233464, "n": 12083, "h": "864a4e99caea0e42", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zhipuai.oapi-java-sdk.version>release-V4-2.4.3</zhipuai.oapi-java-sdk.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!-- spring ai 官方无法正常统计 token 使用量,使用这个zhipuai 官方库 -->\n\t\t<!-- https://github.com/MetaGLM/zhipuai-sdk-java-v4 -->\n\t\t<!-- https://bigmodel.cn/dev/api/devguide/sdk-install -->\n\t\t<!-- https://mvnrepository.com/artifact/cn.bigmodel.openapi/oapi-java-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>cn.bigmodel.openapi</groupId>\n\t\t\t<artifactId>oapi-java-sdk</artifactId>\n\t\t\t<version>${zhipuai.oapi-java-sdk.version}</version>\n\t\t</dependency>\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>0.0.5.1</version>\n\t\t</dependency>\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t\n\t\t<!-- mcp -->\n\t\t<!-- https://modelcontextprotocol.io/sdk/java/mcp-overview -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/mcp/mcp-client-boot-starter-docs.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-client -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-client</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t <!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!-- 生产环境,spring ai 官方推荐使用 webflux 版本 client:\n\t\t For production deployment, we recommend using the WebFlux-based SSE connection with the\n\t\tspring-ai-starter-mcp-client-webflux-->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-client-webflux -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-client-webflux</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server-webflux</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-graph-core -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-graph-core</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- <dependency>\n <groupId>com.alibaba.cloud.ai</groupId>\n <artifactId>spring-ai-alibaba-starter-graph-observation</artifactId>\n <version>${spring-ai-alibaba.version}</version>\n </dependency> -->\n\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t\t<!-- OCR 图像文字识别 -->\n\t\t<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>net.sourceforge.tess4j</groupId>\n\t\t\t<artifactId>tess4j</artifactId>\n\t\t\t<version>5.16.0</version>\n\t\t</dependency> -->\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t<repositories>\n\t\t<!-- https://java2ai.com/docs/dev/get-started/ -->\n\t\t<repository>\n\t\t\t<id>spring-milestones</id>\n\t\t\t<name>Spring Milestones</name>\n\t\t\t<url>https://repo.spring.io/milestone</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t\t<!-- https://repo.spring.io/ui/native/snapshot/org/springframework/ai/ -->\n\t\t<repository>\n\t\t\t<id>spring-snapshots</id>\n\t\t\t<name>Spring Snapshots</name>\n\t\t\t<url>https://repo.spring.io/snapshot</url>\n\t\t\t<releases>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</releases>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>true</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t\t<!-- https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/cloud/ai/spring-ai-alibaba-bom/1.0.0.3-SNAPSHOT/maven-metadata.xml -->\n\t\t<repository>\n\t\t\t<name>Central Portal Snapshots</name>\n\t\t\t<id>central-portal-snapshots</id>\n\t\t\t<url>https://oss.sonatype.org/content/repositories/snapshots/</url>\n\t\t\t<releases>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</releases>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>true</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t</repositories>\n\n</project>"}, "e6721bf507abb50d64b1778de539078c83f397bc": {"t": 1785748639.9641519, "n": 11835, "h": "e61a8ffa4abb9f06", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zhipuai.oapi-java-sdk.version>release-V4-2.4.3</zhipuai.oapi-java-sdk.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!-- spring ai 官方无法正常统计 token 使用量,使用这个zhipuai 官方库 -->\n\t\t<!-- https://github.com/MetaGLM/zhipuai-sdk-java-v4 -->\n\t\t<!-- https://bigmodel.cn/dev/api/devguide/sdk-install -->\n\t\t<!-- https://mvnrepository.com/artifact/cn.bigmodel.openapi/oapi-java-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>cn.bigmodel.openapi</groupId>\n\t\t\t<artifactId>oapi-java-sdk</artifactId>\n\t\t\t<version>${zhipuai.oapi-java-sdk.version}</version>\n\t\t</dependency>\n\t\t<!-- https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v#java -->\n\t\t<!-- https://mvnrepository.com/artifact/ai.z.openapi/zai-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>ai.z.openapi</groupId>\n\t\t\t<artifactId>zai-sdk</artifactId>\n\t\t\t<version>0.0.5.1</version>\n\t\t</dependency>\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t\n\t\t<!-- mcp -->\n\t\t<!-- https://modelcontextprotocol.io/sdk/java/mcp-overview -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/mcp/mcp-client-boot-starter-docs.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-client -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-client</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t <!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!-- 生产环境,spring ai 官方推荐使用 webflux 版本 client:\n\t\t For production deployment, we recommend using the WebFlux-based SSE connection with the\n\t\tspring-ai-starter-mcp-client-webflux-->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-client-webflux -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-client-webflux</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server-webflux</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-graph-core -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-graph-core</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- <dependency>\n <groupId>com.alibaba.cloud.ai</groupId>\n <artifactId>spring-ai-alibaba-starter-graph-observation</artifactId>\n <version>${spring-ai-alibaba.version}</version>\n </dependency> -->\n\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t<repositories>\n\t\t<!-- https://java2ai.com/docs/dev/get-started/ -->\n\t\t<repository>\n\t\t\t<id>spring-milestones</id>\n\t\t\t<name>Spring Milestones</name>\n\t\t\t<url>https://repo.spring.io/milestone</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t\t<!-- https://repo.spring.io/ui/native/snapshot/org/springframework/ai/ -->\n\t\t<repository>\n\t\t\t<id>spring-snapshots</id>\n\t\t\t<name>Spring Snapshots</name>\n\t\t\t<url>https://repo.spring.io/snapshot</url>\n\t\t\t<releases>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</releases>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>true</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t\t<!-- https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/cloud/ai/spring-ai-alibaba-bom/1.0.0.3-SNAPSHOT/maven-metadata.xml -->\n\t\t<repository>\n\t\t\t<name>Central Portal Snapshots</name>\n\t\t\t<id>central-portal-snapshots</id>\n\t\t\t<url>https://oss.sonatype.org/content/repositories/snapshots/</url>\n\t\t\t<releases>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</releases>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>true</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t</repositories>\n\n</project>"}, "2e9456c94b30b9d0568e327011da9b50c96b70ef": {"t": 1785748641.5001624, "n": 11566, "h": "4bf5853ae9aca03e", "c": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>com.bytedesk</groupId>\n\t\t<artifactId>modules</artifactId>\n\t\t<version>${revision}</version>\n\t</parent>\n\n\t<groupId>com.bytedesk</groupId>\n\t<artifactId>bytedesk-module-ai</artifactId>\n\t<version>${revision}</version>\n\n\t<name>bytedesk-module-ai</name>\n\t<description>https://www.bytedesk.com</description>\n\n\t<properties>\n\t\t<ollama4j.version>1.0.100</ollama4j.version>\n\t\t<jsonp.version>1.18.3</jsonp.version>\n\t\t<!-- <selenium.version>4.30.0</selenium.version> -->\n\t\t<!-- <ai.djl.version>0.32.0</ai.djl.version> -->\n\t\t<zhipuai.oapi-java-sdk.version>release-V4-2.4.3</zhipuai.oapi-java-sdk.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-retry -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-retry</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\n\t\t<!-- rag -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-advisors-vector-store -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-advisors-vector-store</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t\t<!-- 排除 io.swagger.core.v3:swagger-annotations 依赖 -->\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>io.swagger.core.v3</groupId>\n\t\t\t\t\t<artifactId>swagger-annotations-jakarta</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-rag -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-rag</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- llm -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-openai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-openai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-ollama -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-ollama</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-deepseek -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-deepseek</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-minimax -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-minimax</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-model-zhipuai -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-model-zhipuai</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!-- spring ai 官方无法正常统计 token 使用量,使用这个zhipuai 官方库 -->\n\t\t<!-- https://github.com/MetaGLM/zhipuai-sdk-java-v4 -->\n\t\t<!-- https://bigmodel.cn/dev/api/devguide/sdk-install -->\n\t\t<!-- https://mvnrepository.com/artifact/cn.bigmodel.openapi/oapi-java-sdk -->\n\t\t<dependency>\n\t\t\t<groupId>cn.bigmodel.openapi</groupId>\n\t\t\t<artifactId>oapi-java-sdk</artifactId>\n\t\t\t<version>${zhipuai.oapi-java-sdk.version}</version>\n\t\t</dependency>\n\n\t\t<!-- vector store -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-vector-store-elasticsearch -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t\n\t\t<!-- mcp -->\n\t\t<!-- https://modelcontextprotocol.io/sdk/java/mcp-overview -->\n\t\t<!-- https://docs.spring.io/spring-ai/reference/api/mcp/mcp-client-boot-starter-docs.html -->\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-client -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-client</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t <!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\t\t<!-- 生产环境,spring ai 官方推荐使用 webflux 版本 client:\n\t\t For production deployment, we recommend using the WebFlux-based SSE connection with the\n\t\tspring-ai-starter-mcp-client-webflux-->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-client-webflux -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-client-webflux</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-starter-mcp-server -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-starter-mcp-server-webflux</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-core</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.bytedesk</groupId>\n\t\t\t<artifactId>bytedesk-module-kbase</artifactId>\n\t\t\t<version>${revision}</version>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\n\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-starter-dashscope -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- https://mvnrepository.com/artifact/com.alibaba.cloud.ai/spring-ai-alibaba-graph-core -->\n\t\t<dependency>\n\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t<artifactId>spring-ai-alibaba-graph-core</artifactId>\n\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t</dependency>\n\t\t<!-- <dependency>\n <groupId>com.alibaba.cloud.ai</groupId>\n <artifactId>spring-ai-alibaba-starter-graph-observation</artifactId>\n <version>${spring-ai-alibaba.version}</version>\n </dependency> -->\n\n\t\t<!-- https://ollama4j.github.io/ollama4j/intro -->\n\t\t<!-- https://mvnrepository.com/artifact/io.github.ollama4j/ollama4j -->\n\t\t<dependency>\n\t\t\t<groupId>io.github.ollama4j</groupId>\n\t\t\t<artifactId>ollama4j</artifactId>\n\t\t\t<version>${ollama4j.version}</version>\n\t\t</dependency>\n\n\t\t<!-- 抓取网页时使用 -->\n\t\t<!-- https://jsoup.org/download -->\n\t\t<dependency>\n\t\t\t<groupId>org.jsoup</groupId>\n\t\t\t<artifactId>jsoup</artifactId>\n\t\t\t<version>${jsonp.version}</version>\n\t\t</dependency>\n\n\t\t<!-- ///////////////////////////////////////////////////////////////////////////// -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<!-- 添加Spring AI Chat Observation依赖 -->\n\t\t<!--\n\t\thttps://mvnrepository.com/artifact/org.springframework.ai/spring-ai-autoconfigure-model-chat-observation -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t<artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId>\n\t\t\t<version>${spring-ai.version}</version>\n\t\t</dependency> -->\n\n\t\t<!-- 添加Micrometer依赖 -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-observation</artifactId>\n\t\t</dependency> -->\n\n\t\t<!-- Observability -->\n\t\t<dependency>\n\t\t\t<groupId>io.micrometer</groupId>\n\t\t\t<artifactId>micrometer-tracing-bridge-brave</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>io.zipkin.reporter2</groupId>\n\t\t\t<artifactId>zipkin-reporter-brave</artifactId>\n\t\t</dependency>\n\n\t\t<!-- 分词、词频分析 -->\n\t\t<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->\n\t\t<!-- https://github.com/NLPchina/ansj_seg -->\n\t\t<!-- <dependency>\n\t\t\t<groupId>org.ansj</groupId>\n\t\t\t<artifactId>ansj_seg</artifactId>\n\t\t\t<version>5.1.6</version>\n\t\t</dependency> -->\n\n\t\t<!-- 中文分词 -->\n\t\t<!-- https://github.com/houbb/segment -->\n\t\t<!-- https://mvnrepository.com/artifact/com.github.houbb/segment -->\n\t\t<dependency>\n\t\t\t<groupId>com.github.houbb</groupId>\n\t\t\t<artifactId>segment</artifactId>\n\t\t\t<version>0.3.1</version>\n\t\t</dependency>\n\n\t</dependencies>\n\n\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t<dependencyManagement>\n\t\t<dependencies>\n\t\t\t<dependency>\n\t\t\t\t<groupId>org.springframework.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-bom</artifactId>\n\t\t\t\t<version>${spring-ai.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t\t<!-- https://github.com/alibaba/spring-ai-alibaba -->\n\t\t\t<dependency>\n\t\t\t\t<groupId>com.alibaba.cloud.ai</groupId>\n\t\t\t\t<artifactId>spring-ai-alibaba-bom</artifactId>\n\t\t\t\t<version>${spring-ai-alibaba.version}</version>\n\t\t\t\t<type>pom</type>\n\t\t\t\t<scope>import</scope>\n\t\t\t</dependency>\n\t\t</dependencies>\n\t</dependencyManagement>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<!-- <plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin> -->\n\t\t</plugins>\n\t</build>\n\n\t<repositories>\n\t\t<!-- https://java2ai.com/docs/dev/get-started/ -->\n\t\t<repository>\n\t\t\t<id>spring-milestones</id>\n\t\t\t<name>Spring Milestones</name>\n\t\t\t<url>https://repo.spring.io/milestone</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t\t<!-- https://docs.spring.io/spring-ai/reference/getting-started.html -->\n\t\t<!-- https://repo.spring.io/ui/native/snapshot/org/springframework/ai/ -->\n\t\t<repository>\n\t\t\t<id>spring-snapshots</id>\n\t\t\t<name>Spring Snapshots</name>\n\t\t\t<url>https://repo.spring.io/snapshot</url>\n\t\t\t<releases>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</releases>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>true</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t\t<!-- https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/cloud/ai/spring-ai-alibaba-bom/1.0.0.3-SNAPSHOT/maven-metadata.xml -->\n\t\t<repository>\n\t\t\t<name>Central Portal Snapshots</name>\n\t\t\t<id>central-portal-snapshots</id>\n\t\t\t<url>https://oss.sonatype.org/content/repositories/snapshots/</url>\n\t\t\t<releases>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</releases>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>true</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t</repositories>\n\n</project>"}}, "deploy/k8s/configmap.yaml": {"affe883cb26b5fd3e33902ae54e2bd31c3fa2ade": {"t": 1785747058.2485175, "n": 10344, "h": "08cb2a86f1167f88", "c": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n name: bytedesk-config\n namespace: bytedesk\ndata:\n # 基础配置\n TZ: \"Asia/Shanghai\"\n SERVER_PORT: \"9003\"\n \n # 微语配置\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: \"1.0.0\"\n BYTEDESK_LICENSE_KEY: \"\"\n \n # 自定义配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n BYTEDESK_CUSTOM_NAME: \"\"\n BYTEDESK_CUSTOM_LOGO: \"\"\n BYTEDESK_CUSTOM_DESCRIPTION: \"\"\n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: \"https://www.weiyuai.cn/privacy.html\"\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: \"https://www.weiyuai.cn/terms.html\"\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: \"https://www.weiyuai.cn/docs/zh-CN/\"\n BYTEDESK_CUSTOM_LANG: \"zh-CN\"\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n \n # 管理员配置\n BYTEDESK_ADMIN_EMAIL: \"admin@email.com\"\n BYTEDESK_ADMIN_PASSWORD: \"admin\"\n BYTEDESK_ADMIN_NICKNAME: \"SuperAdmin\"\n BYTEDESK_ADMIN_MOBILE: \"13345678000\"\n BYTEDESK_ADMIN_VALIDATE_CODE: \"123456\"\n \n # 管理员白名单配置\n BYTEDESK_ADMIN_MOBILE_WHITELIST: \"18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\"\n BYTEDESK_ADMIN_EMAIL_WHITELIST: \"100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\"\n \n # 会员配置\n BYTEDESK_MEMBER_PASSWORD: \"123456\"\n \n # 性能测试配置\n BYTEDESK_TESTING_ENABLED: \"false\"\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"false\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"false\"\n \n # 组织配置\n BYTEDESK_ORGANIZATION_NAME: \"MyCompany\"\n BYTEDESK_ORGANIZATION_CODE: \"bytedesk\"\n \n # 功能配置\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: \"javamail\"\n BYTEDESK_FEATURES_AVATAR_BASE_URL: \"http://127.0.0.1:9003\"\n \n # CORS 配置\n BYTEDESK_CORS_ALLOWED_ORIGINS: \"*\"\n \n # JWT 配置\n BYTEDESK_JWT_EXPIRATION: \"2592000000\"\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: \"5184000000\"\n \n # 数据库配置\n SPRING_JPA_HIBERNATE_DDL_AUTO: \"update\"\n SPRING_DATASOURCE_URL: \"jdbc:mysql://mysql-service:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\"\n \n # 数据库连接池配置\n SPRING_DATASOURCE_HIKARI_CONNECTION_TIMEOUT: \"60000\"\n SPRING_DATASOURCE_HIKARI_MAXIMUM_POOL_SIZE: \"10\"\n \n # Druid 配置\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: \"admin@email.com\"\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: \"admin\"\n \n # Actuator 配置\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: \"\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: \"*\"\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: \"/management\"\n \n # Zipkin 追踪配置\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: \"0.0\"\n \n # Spring Security 配置\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n \n # 微信支付配置\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: \"\"\n \n # 阿里云短信配置\n ALIYUN_SMS_SIGNNAME: \"\"\n ALIYUN_SMS_TEMPLATECODE: \"\"\n \n # Redis 配置\n SPRING_DATA_REDIS_DATABASE: \"0\"\n SPRING_DATA_REDIS_HOST: \"redis-service\"\n SPRING_DATA_REDIS_PORT: \"6379\"\n SPRING_DATA_REDIS_TIMEOUT: \"10000\"\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n \n # 缓存配置\n BYTEDESK_CACHE_LEVEL: \"0\"\n BYTEDESK_CACHE_PREFIX: \"bytedeskim\"\n BYTEDESK_CACHE_REDIS_STREAM_KEY: \"bytedeskim:stream\"\n \n # 上传配置\n BYTEDESK_UPLOAD_TYPE: \"local\"\n BYTEDESK_UPLOAD_DIR: \"/app/uploads\"\n BYTEDESK_UPLOAD_URL: \"http://127.0.0.1:9003\"\n \n # 知识库配置\n BYTEDESK_KBASE_THEME: \"default\"\n BYTEDESK_KBASE_HTML_PATH: \"helpcenter\"\n BYTEDESK_KBASE_API_URL: \"http://127.0.0.1:9003\"\n \n # Socket 配置\n BYTEDESK_SOCKET_HOST: \"0.0.0.0\"\n BYTEDESK_SOCKET_WEBSOCKET_PORT: \"9885\"\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: \"SIMPLE\"\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: \"1\"\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: \"8\"\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: \"10240\"\n \n # 集群配置\n BYTEDESK_CLUSTER_ENABLED: \"false\"\n \n # 日志配置\n LOGGING_LEVEL_COM_BYTEDESK_AI: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_CORE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: \"DEBUG\"\n \n # Swagger 配置\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n SPRINGDOC_SWAGGER_UI_ENABLED: \"true\"\n SPRINGDOC_SWAGGER_UI_PATH: \"/index.html\"\n SPRINGDOC_API_DOCS_ENABLED: \"true\"\n SPRINGDOC_API_DOCS_PATH: \"/v3/api-docs\"\n KNIFE4J_ENABLED: \"true\"\n \n # Elasticsearch 配置\n SPRING_ELASTICSEARCH_URIS: \"http://elasticsearch-service:9200\"\n \n # Elasticsearch 向量存储配置\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: \"bytedesk_vs_index\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: \"1024\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: \"cosine\"\n \n # Artemis 配置\n SPRING_ARTEMIS_MODE: \"native\"\n SPRING_ARTEMIS_BROKER_URL: \"tcp://artemis-service:61616\"\n \n # JMS 配置\n SPRING_JMS_LISTENER_CONCURRENCY: \"1\"\n SPRING_JMS_LISTENER_MAX_CONCURRENCY: \"10\"\n SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: \"client\"\n SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n SPRING_JMS_LISTENER_MAX_ATTEMPTS: \"5\"\n SPRING_JMS_LISTENER_INITIAL_INTERVAL: \"1000\"\n SPRING_JMS_LISTENER_MAX_INTERVAL: \"10000\"\n SPRING_JMS_LISTENER_MULTIPLIER: \"2.0\"\n SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: \"1000\"\n SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n SPRING_ARTEMIS_EMBEDDED_QUEUES: \"DLQ\"\n \n # Zipkin 配置\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: \"http://zipkin-service:9411/api/v2/spans\"\n \n # MinIO 配置\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: \"http://minio-service:9000\"\n BYTEDESK_MINIO_BUCKET_NAME: \"bytedesk\"\n BYTEDESK_MINIO_REGION: \"us-east-1\"\n BYTEDESK_MINIO_SECURE: \"false\"\n \n # 推送配置\n BYTEDESK_PUSH_APNS_BUNDLE_ID: \"com.kefux.im\"\n BYTEDESK_PUSH_APNS_P12_URL: \"123.p12\"\n BYTEDESK_PUSH_APNS_P12_PASSWORD: \"123456\"\n \n # AI 配置\n SPRING_AI_MODEL_CHAT: \"zhipuai\"\n SPRING_AI_MODEL_EMBEDDING: \"zhipuai\"\n SPRING_AI_MODEL_VISION: \"zhipuai\"\n SPRING_AI_MODEL_AUDIO: \"zhipuai\"\n SPRING_AI_MODEL_RERANK: \"dashscope\"\n \n # ZhipuAI 配置\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: \"glm-4.5-flash\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: \"0.9\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: \"4096\"\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: \"30\"\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_PING_INTERVAL: \"10\"\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: \"8\"\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: \"1\"\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: \"embedding-2\"\n \n # Ollama 配置\n SPRING_AI_OLLAMA_BASE_URL: \"http://host.docker.internal:11434\"\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: \"qwen3:0.6b\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: \"bge-m3:latest\"\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: \"when_missing\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: \"bge-reranker-v2-m3:latest\"\n \n # DeepSeek 配置\n SPRING_AI_DEEPSEEK_BASE_URL: \"https://api.deepseek.com\"\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: \"deepseek-chat\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n \n # OpenAI 配置\n SPRING_AI_OPENAI_BASE_URL: \"https://api.openai.com\"\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: \"gpt-4o\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n \n # 阿里云百炼配置\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: \"https://dashscope.aliyuncs.com\"\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: \"qwen-max\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: \"3\"\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: \"text-embedding-v1\"\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n \n # SiliconFlow 配置\n SPRING_AI_SILICONFLOW_BASE_URL: \"https://api.siliconflow.cn\"\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # Gitee 配置\n SPRING_AI_GITEE_BASE_URL: \"https://ai.gitee.com\"\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 腾讯配置\n SPRING_AI_TENCENT_BASE_URL: \"https://api.hunyuan.cloud.tencent.com\"\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: \"hunyuan-t1-latest\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 百度配置\n SPRING_AI_BAIDU_BASE_URL: \"https://qianfan.baidubce.com/v2\"\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: \"ernie-x1-32k-preview\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 火山引擎配置\n SPRING_AI_VOLCENGINE_BASE_URL: \"https://ark.cn-beijing.volces.com/api/v3\"\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: \"doubao-1-5-pro-32k-250115\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 向量存储配置\n SPRING_AI_VECTORSTORE_REDIS_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_REDIS_INDEX_NAME: \"bytedesk_vs_index\"\n \n # MCP 配置\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: \"SYNC\"\n \n # Weaviate 配置\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\" "}, "38b82e86ba7e1beb7ddb7d41300fc3f04539c368": {"t": 1785748606.8275077, "n": 10344, "h": "08cb2a86f1167f88", "c": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n name: bytedesk-config\n namespace: bytedesk\ndata:\n # 基础配置\n TZ: \"Asia/Shanghai\"\n SERVER_PORT: \"9003\"\n \n # 微语配置\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: \"1.0.0\"\n BYTEDESK_LICENSE_KEY: \"\"\n \n # 自定义配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n BYTEDESK_CUSTOM_NAME: \"\"\n BYTEDESK_CUSTOM_LOGO: \"\"\n BYTEDESK_CUSTOM_DESCRIPTION: \"\"\n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: \"https://www.weiyuai.cn/privacy.html\"\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: \"https://www.weiyuai.cn/terms.html\"\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: \"https://www.weiyuai.cn/docs/zh-CN/\"\n BYTEDESK_CUSTOM_LANG: \"zh-CN\"\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n \n # 管理员配置\n BYTEDESK_ADMIN_EMAIL: \"admin@email.com\"\n BYTEDESK_ADMIN_PASSWORD: \"admin\"\n BYTEDESK_ADMIN_NICKNAME: \"SuperAdmin\"\n BYTEDESK_ADMIN_MOBILE: \"13345678000\"\n BYTEDESK_ADMIN_VALIDATE_CODE: \"123456\"\n \n # 管理员白名单配置\n BYTEDESK_ADMIN_MOBILE_WHITELIST: \"18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\"\n BYTEDESK_ADMIN_EMAIL_WHITELIST: \"100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\"\n \n # 会员配置\n BYTEDESK_MEMBER_PASSWORD: \"123456\"\n \n # 性能测试配置\n BYTEDESK_TESTING_ENABLED: \"false\"\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"false\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"false\"\n \n # 组织配置\n BYTEDESK_ORGANIZATION_NAME: \"MyCompany\"\n BYTEDESK_ORGANIZATION_CODE: \"bytedesk\"\n \n # 功能配置\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: \"javamail\"\n BYTEDESK_FEATURES_AVATAR_BASE_URL: \"http://127.0.0.1:9003\"\n \n # CORS 配置\n BYTEDESK_CORS_ALLOWED_ORIGINS: \"*\"\n \n # JWT 配置\n BYTEDESK_JWT_EXPIRATION: \"2592000000\"\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: \"5184000000\"\n \n # 数据库配置\n SPRING_JPA_HIBERNATE_DDL_AUTO: \"update\"\n SPRING_DATASOURCE_URL: \"jdbc:mysql://mysql-service:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\"\n \n # 数据库连接池配置\n SPRING_DATASOURCE_HIKARI_CONNECTION_TIMEOUT: \"60000\"\n SPRING_DATASOURCE_HIKARI_MAXIMUM_POOL_SIZE: \"10\"\n \n # Druid 配置\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: \"admin@email.com\"\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: \"admin\"\n \n # Actuator 配置\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: \"\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: \"*\"\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: \"/management\"\n \n # Zipkin 追踪配置\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: \"0.0\"\n \n # Spring Security 配置\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n \n # 微信支付配置\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: \"\"\n \n # 阿里云短信配置\n ALIYUN_SMS_SIGNNAME: \"\"\n ALIYUN_SMS_TEMPLATECODE: \"\"\n \n # Redis 配置\n SPRING_DATA_REDIS_DATABASE: \"0\"\n SPRING_DATA_REDIS_HOST: \"redis-service\"\n SPRING_DATA_REDIS_PORT: \"6379\"\n SPRING_DATA_REDIS_TIMEOUT: \"10000\"\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n \n # 缓存配置\n BYTEDESK_CACHE_LEVEL: \"0\"\n BYTEDESK_CACHE_PREFIX: \"bytedeskim\"\n BYTEDESK_CACHE_REDIS_STREAM_KEY: \"bytedeskim:stream\"\n \n # 上传配置\n BYTEDESK_UPLOAD_TYPE: \"local\"\n BYTEDESK_UPLOAD_DIR: \"/app/uploads\"\n BYTEDESK_UPLOAD_URL: \"http://127.0.0.1:9003\"\n \n # 知识库配置\n BYTEDESK_KBASE_THEME: \"default\"\n BYTEDESK_KBASE_HTML_PATH: \"helpcenter\"\n BYTEDESK_KBASE_API_URL: \"http://127.0.0.1:9003\"\n \n # Socket 配置\n BYTEDESK_SOCKET_HOST: \"0.0.0.0\"\n BYTEDESK_SOCKET_WEBSOCKET_PORT: \"9885\"\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: \"SIMPLE\"\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: \"1\"\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: \"8\"\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: \"10240\"\n \n # 集群配置\n BYTEDESK_CLUSTER_ENABLED: \"false\"\n \n # 日志配置\n LOGGING_LEVEL_COM_BYTEDESK_AI: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_CORE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: \"DEBUG\"\n \n # Swagger 配置\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n SPRINGDOC_SWAGGER_UI_ENABLED: \"true\"\n SPRINGDOC_SWAGGER_UI_PATH: \"/index.html\"\n SPRINGDOC_API_DOCS_ENABLED: \"true\"\n SPRINGDOC_API_DOCS_PATH: \"/v3/api-docs\"\n KNIFE4J_ENABLED: \"true\"\n \n # Elasticsearch 配置\n SPRING_ELASTICSEARCH_URIS: \"http://elasticsearch-service:9200\"\n \n # Elasticsearch 向量存储配置\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: \"bytedesk_vs_index\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: \"1024\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: \"cosine\"\n \n # Artemis 配置\n SPRING_ARTEMIS_MODE: \"native\"\n SPRING_ARTEMIS_BROKER_URL: \"tcp://artemis-service:61616\"\n \n # JMS 配置\n SPRING_JMS_LISTENER_CONCURRENCY: \"1\"\n SPRING_JMS_LISTENER_MAX_CONCURRENCY: \"10\"\n SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: \"client\"\n SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n SPRING_JMS_LISTENER_MAX_ATTEMPTS: \"5\"\n SPRING_JMS_LISTENER_INITIAL_INTERVAL: \"1000\"\n SPRING_JMS_LISTENER_MAX_INTERVAL: \"10000\"\n SPRING_JMS_LISTENER_MULTIPLIER: \"2.0\"\n SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: \"1000\"\n SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n SPRING_ARTEMIS_EMBEDDED_QUEUES: \"DLQ\"\n \n # Zipkin 配置\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: \"http://zipkin-service:9411/api/v2/spans\"\n \n # MinIO 配置\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: \"http://minio-service:9000\"\n BYTEDESK_MINIO_BUCKET_NAME: \"bytedesk\"\n BYTEDESK_MINIO_REGION: \"us-east-1\"\n BYTEDESK_MINIO_SECURE: \"false\"\n \n # 推送配置\n BYTEDESK_PUSH_APNS_BUNDLE_ID: \"com.kefux.im\"\n BYTEDESK_PUSH_APNS_P12_URL: \"123.p12\"\n BYTEDESK_PUSH_APNS_P12_PASSWORD: \"123456\"\n \n # AI 配置\n SPRING_AI_MODEL_CHAT: \"zhipuai\"\n SPRING_AI_MODEL_EMBEDDING: \"zhipuai\"\n SPRING_AI_MODEL_VISION: \"zhipuai\"\n SPRING_AI_MODEL_AUDIO: \"zhipuai\"\n SPRING_AI_MODEL_RERANK: \"dashscope\"\n \n # ZhipuAI 配置\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: \"glm-4.5-flash\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: \"0.9\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: \"4096\"\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: \"30\"\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_PING_INTERVAL: \"10\"\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: \"8\"\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: \"1\"\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: \"embedding-2\"\n \n # Ollama 配置\n SPRING_AI_OLLAMA_BASE_URL: \"http://host.docker.internal:11434\"\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: \"qwen3:0.6b\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: \"bge-m3:latest\"\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: \"when_missing\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: \"bge-reranker-v2-m3:latest\"\n \n # DeepSeek 配置\n SPRING_AI_DEEPSEEK_BASE_URL: \"https://api.deepseek.com\"\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: \"deepseek-chat\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n \n # OpenAI 配置\n SPRING_AI_OPENAI_BASE_URL: \"https://api.openai.com\"\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: \"gpt-4o\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n \n # 阿里云百炼配置\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: \"https://dashscope.aliyuncs.com\"\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: \"qwen-max\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: \"3\"\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: \"text-embedding-v1\"\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n \n # SiliconFlow 配置\n SPRING_AI_SILICONFLOW_BASE_URL: \"https://api.siliconflow.cn\"\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # Gitee 配置\n SPRING_AI_GITEE_BASE_URL: \"https://ai.gitee.com\"\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 腾讯配置\n SPRING_AI_TENCENT_BASE_URL: \"https://api.hunyuan.cloud.tencent.com\"\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: \"hunyuan-t1-latest\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 百度配置\n SPRING_AI_BAIDU_BASE_URL: \"https://qianfan.baidubce.com/v2\"\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: \"ernie-x1-32k-preview\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 火山引擎配置\n SPRING_AI_VOLCENGINE_BASE_URL: \"https://ark.cn-beijing.volces.com/api/v3\"\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: \"doubao-1-5-pro-32k-250115\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 向量存储配置\n SPRING_AI_VECTORSTORE_REDIS_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_REDIS_INDEX_NAME: \"bytedesk_vs_index\"\n \n # MCP 配置\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: \"SYNC\"\n \n # Weaviate 配置\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\" "}, "4445905084d4c867bfb3bada9275e683e08eba64": {"t": 1785748607.9517825, "n": 10344, "h": "5ad8958bc5293b7d", "c": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n name: bytedesk-config\n namespace: bytedesk\ndata:\n # 基础配置\n TZ: \"Asia/Shanghai\"\n SERVER_PORT: \"9003\"\n \n # 微语配置\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: \"0.9.9\"\n BYTEDESK_LICENSE_KEY: \"\"\n \n # 自定义配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n BYTEDESK_CUSTOM_NAME: \"\"\n BYTEDESK_CUSTOM_LOGO: \"\"\n BYTEDESK_CUSTOM_DESCRIPTION: \"\"\n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: \"https://www.weiyuai.cn/privacy.html\"\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: \"https://www.weiyuai.cn/terms.html\"\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: \"https://www.weiyuai.cn/docs/zh-CN/\"\n BYTEDESK_CUSTOM_LANG: \"zh-CN\"\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n \n # 管理员配置\n BYTEDESK_ADMIN_EMAIL: \"admin@email.com\"\n BYTEDESK_ADMIN_PASSWORD: \"admin\"\n BYTEDESK_ADMIN_NICKNAME: \"SuperAdmin\"\n BYTEDESK_ADMIN_MOBILE: \"13345678000\"\n BYTEDESK_ADMIN_VALIDATE_CODE: \"123456\"\n \n # 管理员白名单配置\n BYTEDESK_ADMIN_MOBILE_WHITELIST: \"18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\"\n BYTEDESK_ADMIN_EMAIL_WHITELIST: \"100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\"\n \n # 会员配置\n BYTEDESK_MEMBER_PASSWORD: \"123456\"\n \n # 性能测试配置\n BYTEDESK_TESTING_ENABLED: \"false\"\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"false\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"false\"\n \n # 组织配置\n BYTEDESK_ORGANIZATION_NAME: \"MyCompany\"\n BYTEDESK_ORGANIZATION_CODE: \"bytedesk\"\n \n # 功能配置\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: \"javamail\"\n BYTEDESK_FEATURES_AVATAR_BASE_URL: \"http://127.0.0.1:9003\"\n \n # CORS 配置\n BYTEDESK_CORS_ALLOWED_ORIGINS: \"*\"\n \n # JWT 配置\n BYTEDESK_JWT_EXPIRATION: \"2592000000\"\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: \"5184000000\"\n \n # 数据库配置\n SPRING_JPA_HIBERNATE_DDL_AUTO: \"update\"\n SPRING_DATASOURCE_URL: \"jdbc:mysql://mysql-service:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\"\n \n # 数据库连接池配置\n SPRING_DATASOURCE_HIKARI_CONNECTION_TIMEOUT: \"60000\"\n SPRING_DATASOURCE_HIKARI_MAXIMUM_POOL_SIZE: \"10\"\n \n # Druid 配置\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: \"admin@email.com\"\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: \"admin\"\n \n # Actuator 配置\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: \"\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: \"*\"\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: \"/management\"\n \n # Zipkin 追踪配置\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: \"0.0\"\n \n # Spring Security 配置\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n \n # 微信支付配置\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: \"\"\n \n # 阿里云短信配置\n ALIYUN_SMS_SIGNNAME: \"\"\n ALIYUN_SMS_TEMPLATECODE: \"\"\n \n # Redis 配置\n SPRING_DATA_REDIS_DATABASE: \"0\"\n SPRING_DATA_REDIS_HOST: \"redis-service\"\n SPRING_DATA_REDIS_PORT: \"6379\"\n SPRING_DATA_REDIS_TIMEOUT: \"10000\"\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n \n # 缓存配置\n BYTEDESK_CACHE_LEVEL: \"0\"\n BYTEDESK_CACHE_PREFIX: \"bytedeskim\"\n BYTEDESK_CACHE_REDIS_STREAM_KEY: \"bytedeskim:stream\"\n \n # 上传配置\n BYTEDESK_UPLOAD_TYPE: \"local\"\n BYTEDESK_UPLOAD_DIR: \"/app/uploads\"\n BYTEDESK_UPLOAD_URL: \"http://127.0.0.1:9003\"\n \n # 知识库配置\n BYTEDESK_KBASE_THEME: \"default\"\n BYTEDESK_KBASE_HTML_PATH: \"helpcenter\"\n BYTEDESK_KBASE_API_URL: \"http://127.0.0.1:9003\"\n \n # Socket 配置\n BYTEDESK_SOCKET_HOST: \"0.0.0.0\"\n BYTEDESK_SOCKET_WEBSOCKET_PORT: \"9885\"\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: \"SIMPLE\"\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: \"1\"\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: \"8\"\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: \"10240\"\n \n # 集群配置\n BYTEDESK_CLUSTER_ENABLED: \"false\"\n \n # 日志配置\n LOGGING_LEVEL_COM_BYTEDESK_AI: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_CORE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: \"DEBUG\"\n \n # Swagger 配置\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n SPRINGDOC_SWAGGER_UI_ENABLED: \"true\"\n SPRINGDOC_SWAGGER_UI_PATH: \"/index.html\"\n SPRINGDOC_API_DOCS_ENABLED: \"true\"\n SPRINGDOC_API_DOCS_PATH: \"/v3/api-docs\"\n KNIFE4J_ENABLED: \"true\"\n \n # Elasticsearch 配置\n SPRING_ELASTICSEARCH_URIS: \"http://elasticsearch-service:9200\"\n \n # Elasticsearch 向量存储配置\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: \"bytedesk_vs_index\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: \"1024\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: \"cosine\"\n \n # Artemis 配置\n SPRING_ARTEMIS_MODE: \"native\"\n SPRING_ARTEMIS_BROKER_URL: \"tcp://artemis-service:61616\"\n \n # JMS 配置\n SPRING_JMS_LISTENER_CONCURRENCY: \"1\"\n SPRING_JMS_LISTENER_MAX_CONCURRENCY: \"10\"\n SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: \"client\"\n SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n SPRING_JMS_LISTENER_MAX_ATTEMPTS: \"5\"\n SPRING_JMS_LISTENER_INITIAL_INTERVAL: \"1000\"\n SPRING_JMS_LISTENER_MAX_INTERVAL: \"10000\"\n SPRING_JMS_LISTENER_MULTIPLIER: \"2.0\"\n SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: \"1000\"\n SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n SPRING_ARTEMIS_EMBEDDED_QUEUES: \"DLQ\"\n \n # Zipkin 配置\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: \"http://zipkin-service:9411/api/v2/spans\"\n \n # MinIO 配置\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: \"http://minio-service:9000\"\n BYTEDESK_MINIO_BUCKET_NAME: \"bytedesk\"\n BYTEDESK_MINIO_REGION: \"us-east-1\"\n BYTEDESK_MINIO_SECURE: \"false\"\n \n # 推送配置\n BYTEDESK_PUSH_APNS_BUNDLE_ID: \"com.kefux.im\"\n BYTEDESK_PUSH_APNS_P12_URL: \"123.p12\"\n BYTEDESK_PUSH_APNS_P12_PASSWORD: \"123456\"\n \n # AI 配置\n SPRING_AI_MODEL_CHAT: \"zhipuai\"\n SPRING_AI_MODEL_EMBEDDING: \"zhipuai\"\n SPRING_AI_MODEL_VISION: \"zhipuai\"\n SPRING_AI_MODEL_AUDIO: \"zhipuai\"\n SPRING_AI_MODEL_RERANK: \"dashscope\"\n \n # ZhipuAI 配置\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: \"glm-4.5-flash\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: \"0.9\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: \"4096\"\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: \"30\"\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_PING_INTERVAL: \"10\"\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: \"8\"\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: \"1\"\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: \"embedding-2\"\n \n # Ollama 配置\n SPRING_AI_OLLAMA_BASE_URL: \"http://host.docker.internal:11434\"\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: \"qwen3:0.6b\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: \"bge-m3:latest\"\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: \"when_missing\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: \"bge-reranker-v2-m3:latest\"\n \n # DeepSeek 配置\n SPRING_AI_DEEPSEEK_BASE_URL: \"https://api.deepseek.com\"\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: \"deepseek-chat\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n \n # OpenAI 配置\n SPRING_AI_OPENAI_BASE_URL: \"https://api.openai.com\"\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: \"gpt-4o\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n \n # 阿里云百炼配置\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: \"https://dashscope.aliyuncs.com\"\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: \"qwen-max\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: \"3\"\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: \"text-embedding-v1\"\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n \n # SiliconFlow 配置\n SPRING_AI_SILICONFLOW_BASE_URL: \"https://api.siliconflow.cn\"\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # Gitee 配置\n SPRING_AI_GITEE_BASE_URL: \"https://ai.gitee.com\"\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 腾讯配置\n SPRING_AI_TENCENT_BASE_URL: \"https://api.hunyuan.cloud.tencent.com\"\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: \"hunyuan-t1-latest\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 百度配置\n SPRING_AI_BAIDU_BASE_URL: \"https://qianfan.baidubce.com/v2\"\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: \"ernie-x1-32k-preview\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 火山引擎配置\n SPRING_AI_VOLCENGINE_BASE_URL: \"https://ark.cn-beijing.volces.com/api/v3\"\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: \"doubao-1-5-pro-32k-250115\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 向量存储配置\n SPRING_AI_VECTORSTORE_REDIS_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_REDIS_INDEX_NAME: \"bytedesk_vs_index\"\n \n # MCP 配置\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: \"SYNC\"\n \n # Weaviate 配置\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\" "}, "c1c9d086f5ec7b0d972702bf4e28b651b2334a04": {"t": 1785748609.0524979, "n": 10344, "h": "c9caa18cb08e9dc4", "c": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n name: bytedesk-config\n namespace: bytedesk\ndata:\n # 基础配置\n TZ: \"Asia/Shanghai\"\n SERVER_PORT: \"9003\"\n \n # 微语配置\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: \"0.9.8\"\n BYTEDESK_LICENSE_KEY: \"\"\n \n # 自定义配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n BYTEDESK_CUSTOM_NAME: \"\"\n BYTEDESK_CUSTOM_LOGO: \"\"\n BYTEDESK_CUSTOM_DESCRIPTION: \"\"\n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: \"https://www.weiyuai.cn/privacy.html\"\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: \"https://www.weiyuai.cn/terms.html\"\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: \"https://www.weiyuai.cn/docs/zh-CN/\"\n BYTEDESK_CUSTOM_LANG: \"zh-CN\"\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n \n # 管理员配置\n BYTEDESK_ADMIN_EMAIL: \"admin@email.com\"\n BYTEDESK_ADMIN_PASSWORD: \"admin\"\n BYTEDESK_ADMIN_NICKNAME: \"SuperAdmin\"\n BYTEDESK_ADMIN_MOBILE: \"13345678000\"\n BYTEDESK_ADMIN_VALIDATE_CODE: \"123456\"\n \n # 管理员白名单配置\n BYTEDESK_ADMIN_MOBILE_WHITELIST: \"18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\"\n BYTEDESK_ADMIN_EMAIL_WHITELIST: \"100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\"\n \n # 会员配置\n BYTEDESK_MEMBER_PASSWORD: \"123456\"\n \n # 性能测试配置\n BYTEDESK_TESTING_ENABLED: \"false\"\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"false\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"false\"\n \n # 组织配置\n BYTEDESK_ORGANIZATION_NAME: \"MyCompany\"\n BYTEDESK_ORGANIZATION_CODE: \"bytedesk\"\n \n # 功能配置\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: \"javamail\"\n BYTEDESK_FEATURES_AVATAR_BASE_URL: \"http://127.0.0.1:9003\"\n \n # CORS 配置\n BYTEDESK_CORS_ALLOWED_ORIGINS: \"*\"\n \n # JWT 配置\n BYTEDESK_JWT_EXPIRATION: \"2592000000\"\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: \"5184000000\"\n \n # 数据库配置\n SPRING_JPA_HIBERNATE_DDL_AUTO: \"update\"\n SPRING_DATASOURCE_URL: \"jdbc:mysql://mysql-service:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\"\n \n # 数据库连接池配置\n SPRING_DATASOURCE_HIKARI_CONNECTION_TIMEOUT: \"60000\"\n SPRING_DATASOURCE_HIKARI_MAXIMUM_POOL_SIZE: \"10\"\n \n # Druid 配置\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: \"admin@email.com\"\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: \"admin\"\n \n # Actuator 配置\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: \"\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: \"*\"\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: \"/management\"\n \n # Zipkin 追踪配置\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: \"0.0\"\n \n # Spring Security 配置\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n \n # 微信支付配置\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: \"\"\n \n # 阿里云短信配置\n ALIYUN_SMS_SIGNNAME: \"\"\n ALIYUN_SMS_TEMPLATECODE: \"\"\n \n # Redis 配置\n SPRING_DATA_REDIS_DATABASE: \"0\"\n SPRING_DATA_REDIS_HOST: \"redis-service\"\n SPRING_DATA_REDIS_PORT: \"6379\"\n SPRING_DATA_REDIS_TIMEOUT: \"10000\"\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n \n # 缓存配置\n BYTEDESK_CACHE_LEVEL: \"0\"\n BYTEDESK_CACHE_PREFIX: \"bytedeskim\"\n BYTEDESK_CACHE_REDIS_STREAM_KEY: \"bytedeskim:stream\"\n \n # 上传配置\n BYTEDESK_UPLOAD_TYPE: \"local\"\n BYTEDESK_UPLOAD_DIR: \"/app/uploads\"\n BYTEDESK_UPLOAD_URL: \"http://127.0.0.1:9003\"\n \n # 知识库配置\n BYTEDESK_KBASE_THEME: \"default\"\n BYTEDESK_KBASE_HTML_PATH: \"helpcenter\"\n BYTEDESK_KBASE_API_URL: \"http://127.0.0.1:9003\"\n \n # Socket 配置\n BYTEDESK_SOCKET_HOST: \"0.0.0.0\"\n BYTEDESK_SOCKET_WEBSOCKET_PORT: \"9885\"\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: \"SIMPLE\"\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: \"1\"\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: \"8\"\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: \"10240\"\n \n # 集群配置\n BYTEDESK_CLUSTER_ENABLED: \"false\"\n \n # 日志配置\n LOGGING_LEVEL_COM_BYTEDESK_AI: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_CORE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: \"DEBUG\"\n \n # Swagger 配置\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n SPRINGDOC_SWAGGER_UI_ENABLED: \"true\"\n SPRINGDOC_SWAGGER_UI_PATH: \"/index.html\"\n SPRINGDOC_API_DOCS_ENABLED: \"true\"\n SPRINGDOC_API_DOCS_PATH: \"/v3/api-docs\"\n KNIFE4J_ENABLED: \"true\"\n \n # Elasticsearch 配置\n SPRING_ELASTICSEARCH_URIS: \"http://elasticsearch-service:9200\"\n \n # Elasticsearch 向量存储配置\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: \"bytedesk_vs_index\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: \"1024\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: \"cosine\"\n \n # Artemis 配置\n SPRING_ARTEMIS_MODE: \"native\"\n SPRING_ARTEMIS_BROKER_URL: \"tcp://artemis-service:61616\"\n \n # JMS 配置\n SPRING_JMS_LISTENER_CONCURRENCY: \"1\"\n SPRING_JMS_LISTENER_MAX_CONCURRENCY: \"10\"\n SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: \"client\"\n SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n SPRING_JMS_LISTENER_MAX_ATTEMPTS: \"5\"\n SPRING_JMS_LISTENER_INITIAL_INTERVAL: \"1000\"\n SPRING_JMS_LISTENER_MAX_INTERVAL: \"10000\"\n SPRING_JMS_LISTENER_MULTIPLIER: \"2.0\"\n SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: \"1000\"\n SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n SPRING_ARTEMIS_EMBEDDED_QUEUES: \"DLQ\"\n \n # Zipkin 配置\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: \"http://zipkin-service:9411/api/v2/spans\"\n \n # MinIO 配置\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: \"http://minio-service:9000\"\n BYTEDESK_MINIO_BUCKET_NAME: \"bytedesk\"\n BYTEDESK_MINIO_REGION: \"us-east-1\"\n BYTEDESK_MINIO_SECURE: \"false\"\n \n # 推送配置\n BYTEDESK_PUSH_APNS_BUNDLE_ID: \"com.kefux.im\"\n BYTEDESK_PUSH_APNS_P12_URL: \"123.p12\"\n BYTEDESK_PUSH_APNS_P12_PASSWORD: \"123456\"\n \n # AI 配置\n SPRING_AI_MODEL_CHAT: \"zhipuai\"\n SPRING_AI_MODEL_EMBEDDING: \"zhipuai\"\n SPRING_AI_MODEL_VISION: \"zhipuai\"\n SPRING_AI_MODEL_AUDIO: \"zhipuai\"\n SPRING_AI_MODEL_RERANK: \"dashscope\"\n \n # ZhipuAI 配置\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: \"glm-4.5-flash\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: \"0.9\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: \"4096\"\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: \"30\"\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_PING_INTERVAL: \"10\"\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: \"8\"\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: \"1\"\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: \"embedding-2\"\n \n # Ollama 配置\n SPRING_AI_OLLAMA_BASE_URL: \"http://host.docker.internal:11434\"\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: \"qwen3:0.6b\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: \"bge-m3:latest\"\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: \"when_missing\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: \"bge-reranker-v2-m3:latest\"\n \n # DeepSeek 配置\n SPRING_AI_DEEPSEEK_BASE_URL: \"https://api.deepseek.com\"\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: \"deepseek-chat\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n \n # OpenAI 配置\n SPRING_AI_OPENAI_BASE_URL: \"https://api.openai.com\"\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: \"gpt-4o\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n \n # 阿里云百炼配置\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: \"https://dashscope.aliyuncs.com\"\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: \"qwen-max\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: \"3\"\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: \"text-embedding-v1\"\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n \n # SiliconFlow 配置\n SPRING_AI_SILICONFLOW_BASE_URL: \"https://api.siliconflow.cn\"\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # Gitee 配置\n SPRING_AI_GITEE_BASE_URL: \"https://ai.gitee.com\"\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 腾讯配置\n SPRING_AI_TENCENT_BASE_URL: \"https://api.hunyuan.cloud.tencent.com\"\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: \"hunyuan-t1-latest\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 百度配置\n SPRING_AI_BAIDU_BASE_URL: \"https://qianfan.baidubce.com/v2\"\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: \"ernie-x1-32k-preview\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 火山引擎配置\n SPRING_AI_VOLCENGINE_BASE_URL: \"https://ark.cn-beijing.volces.com/api/v3\"\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: \"doubao-1-5-pro-32k-250115\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 向量存储配置\n SPRING_AI_VECTORSTORE_REDIS_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_REDIS_INDEX_NAME: \"bytedesk_vs_index\"\n \n # MCP 配置\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: \"SYNC\"\n \n # Weaviate 配置\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\" "}, "9b46304d5b7a2e23046e9432447ea8a050a922da": {"t": 1785748610.148402, "n": 10344, "h": "c2e5a3e85adc55cb", "c": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n name: bytedesk-config\n namespace: bytedesk\ndata:\n # 基础配置\n TZ: \"Asia/Shanghai\"\n SERVER_PORT: \"9003\"\n \n # 微语配置\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: \"0.9.7\"\n BYTEDESK_LICENSE_KEY: \"\"\n \n # 自定义配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n BYTEDESK_CUSTOM_NAME: \"\"\n BYTEDESK_CUSTOM_LOGO: \"\"\n BYTEDESK_CUSTOM_DESCRIPTION: \"\"\n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: \"https://www.weiyuai.cn/privacy.html\"\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: \"https://www.weiyuai.cn/terms.html\"\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: \"https://www.weiyuai.cn/docs/zh-CN/\"\n BYTEDESK_CUSTOM_LANG: \"zh-CN\"\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n \n # 管理员配置\n BYTEDESK_ADMIN_EMAIL: \"admin@email.com\"\n BYTEDESK_ADMIN_PASSWORD: \"admin\"\n BYTEDESK_ADMIN_NICKNAME: \"SuperAdmin\"\n BYTEDESK_ADMIN_MOBILE: \"13345678000\"\n BYTEDESK_ADMIN_VALIDATE_CODE: \"123456\"\n \n # 管理员白名单配置\n BYTEDESK_ADMIN_MOBILE_WHITELIST: \"18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\"\n BYTEDESK_ADMIN_EMAIL_WHITELIST: \"100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\"\n \n # 会员配置\n BYTEDESK_MEMBER_PASSWORD: \"123456\"\n \n # 性能测试配置\n BYTEDESK_TESTING_ENABLED: \"false\"\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"false\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"false\"\n \n # 组织配置\n BYTEDESK_ORGANIZATION_NAME: \"MyCompany\"\n BYTEDESK_ORGANIZATION_CODE: \"bytedesk\"\n \n # 功能配置\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: \"javamail\"\n BYTEDESK_FEATURES_AVATAR_BASE_URL: \"http://127.0.0.1:9003\"\n \n # CORS 配置\n BYTEDESK_CORS_ALLOWED_ORIGINS: \"*\"\n \n # JWT 配置\n BYTEDESK_JWT_EXPIRATION: \"2592000000\"\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: \"5184000000\"\n \n # 数据库配置\n SPRING_JPA_HIBERNATE_DDL_AUTO: \"update\"\n SPRING_DATASOURCE_URL: \"jdbc:mysql://mysql-service:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\"\n \n # 数据库连接池配置\n SPRING_DATASOURCE_HIKARI_CONNECTION_TIMEOUT: \"60000\"\n SPRING_DATASOURCE_HIKARI_MAXIMUM_POOL_SIZE: \"10\"\n \n # Druid 配置\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: \"admin@email.com\"\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: \"admin\"\n \n # Actuator 配置\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: \"\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: \"*\"\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: \"/management\"\n \n # Zipkin 追踪配置\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: \"0.0\"\n \n # Spring Security 配置\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n \n # 微信支付配置\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: \"\"\n \n # 阿里云短信配置\n ALIYUN_SMS_SIGNNAME: \"\"\n ALIYUN_SMS_TEMPLATECODE: \"\"\n \n # Redis 配置\n SPRING_DATA_REDIS_DATABASE: \"0\"\n SPRING_DATA_REDIS_HOST: \"redis-service\"\n SPRING_DATA_REDIS_PORT: \"6379\"\n SPRING_DATA_REDIS_TIMEOUT: \"10000\"\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n \n # 缓存配置\n BYTEDESK_CACHE_LEVEL: \"0\"\n BYTEDESK_CACHE_PREFIX: \"bytedeskim\"\n BYTEDESK_CACHE_REDIS_STREAM_KEY: \"bytedeskim:stream\"\n \n # 上传配置\n BYTEDESK_UPLOAD_TYPE: \"local\"\n BYTEDESK_UPLOAD_DIR: \"/app/uploads\"\n BYTEDESK_UPLOAD_URL: \"http://127.0.0.1:9003\"\n \n # 知识库配置\n BYTEDESK_KBASE_THEME: \"default\"\n BYTEDESK_KBASE_HTML_PATH: \"helpcenter\"\n BYTEDESK_KBASE_API_URL: \"http://127.0.0.1:9003\"\n \n # Socket 配置\n BYTEDESK_SOCKET_HOST: \"0.0.0.0\"\n BYTEDESK_SOCKET_WEBSOCKET_PORT: \"9885\"\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: \"SIMPLE\"\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: \"1\"\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: \"8\"\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: \"10240\"\n \n # 集群配置\n BYTEDESK_CLUSTER_ENABLED: \"false\"\n \n # 日志配置\n LOGGING_LEVEL_COM_BYTEDESK_AI: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_CORE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: \"DEBUG\"\n \n # Swagger 配置\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n SPRINGDOC_SWAGGER_UI_ENABLED: \"true\"\n SPRINGDOC_SWAGGER_UI_PATH: \"/index.html\"\n SPRINGDOC_API_DOCS_ENABLED: \"true\"\n SPRINGDOC_API_DOCS_PATH: \"/v3/api-docs\"\n KNIFE4J_ENABLED: \"true\"\n \n # Elasticsearch 配置\n SPRING_ELASTICSEARCH_URIS: \"http://elasticsearch-service:9200\"\n \n # Elasticsearch 向量存储配置\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: \"bytedesk_vs_index\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: \"1024\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: \"cosine\"\n \n # Artemis 配置\n SPRING_ARTEMIS_MODE: \"native\"\n SPRING_ARTEMIS_BROKER_URL: \"tcp://artemis-service:61616\"\n \n # JMS 配置\n SPRING_JMS_LISTENER_CONCURRENCY: \"1\"\n SPRING_JMS_LISTENER_MAX_CONCURRENCY: \"10\"\n SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: \"client\"\n SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n SPRING_JMS_LISTENER_MAX_ATTEMPTS: \"5\"\n SPRING_JMS_LISTENER_INITIAL_INTERVAL: \"1000\"\n SPRING_JMS_LISTENER_MAX_INTERVAL: \"10000\"\n SPRING_JMS_LISTENER_MULTIPLIER: \"2.0\"\n SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: \"1000\"\n SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n SPRING_ARTEMIS_EMBEDDED_QUEUES: \"DLQ\"\n \n # Zipkin 配置\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: \"http://zipkin-service:9411/api/v2/spans\"\n \n # MinIO 配置\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: \"http://minio-service:9000\"\n BYTEDESK_MINIO_BUCKET_NAME: \"bytedesk\"\n BYTEDESK_MINIO_REGION: \"us-east-1\"\n BYTEDESK_MINIO_SECURE: \"false\"\n \n # 推送配置\n BYTEDESK_PUSH_APNS_BUNDLE_ID: \"com.kefux.im\"\n BYTEDESK_PUSH_APNS_P12_URL: \"123.p12\"\n BYTEDESK_PUSH_APNS_P12_PASSWORD: \"123456\"\n \n # AI 配置\n SPRING_AI_MODEL_CHAT: \"zhipuai\"\n SPRING_AI_MODEL_EMBEDDING: \"zhipuai\"\n SPRING_AI_MODEL_VISION: \"zhipuai\"\n SPRING_AI_MODEL_AUDIO: \"zhipuai\"\n SPRING_AI_MODEL_RERANK: \"dashscope\"\n \n # ZhipuAI 配置\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: \"glm-4.5-flash\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: \"0.9\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: \"4096\"\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: \"30\"\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_PING_INTERVAL: \"10\"\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: \"8\"\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: \"1\"\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: \"embedding-2\"\n \n # Ollama 配置\n SPRING_AI_OLLAMA_BASE_URL: \"http://host.docker.internal:11434\"\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: \"qwen3:0.6b\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: \"bge-m3:latest\"\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: \"when_missing\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: \"bge-reranker-v2-m3:latest\"\n \n # DeepSeek 配置\n SPRING_AI_DEEPSEEK_BASE_URL: \"https://api.deepseek.com\"\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: \"deepseek-chat\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n \n # OpenAI 配置\n SPRING_AI_OPENAI_BASE_URL: \"https://api.openai.com\"\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: \"gpt-4o\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n \n # 阿里云百炼配置\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: \"https://dashscope.aliyuncs.com\"\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: \"qwen-max\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: \"3\"\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: \"text-embedding-v1\"\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n \n # SiliconFlow 配置\n SPRING_AI_SILICONFLOW_BASE_URL: \"https://api.siliconflow.cn\"\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # Gitee 配置\n SPRING_AI_GITEE_BASE_URL: \"https://ai.gitee.com\"\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 腾讯配置\n SPRING_AI_TENCENT_BASE_URL: \"https://api.hunyuan.cloud.tencent.com\"\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: \"hunyuan-t1-latest\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 百度配置\n SPRING_AI_BAIDU_BASE_URL: \"https://qianfan.baidubce.com/v2\"\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: \"ernie-x1-32k-preview\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 火山引擎配置\n SPRING_AI_VOLCENGINE_BASE_URL: \"https://ark.cn-beijing.volces.com/api/v3\"\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: \"doubao-1-5-pro-32k-250115\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 向量存储配置\n SPRING_AI_VECTORSTORE_REDIS_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_REDIS_INDEX_NAME: \"bytedesk_vs_index\"\n \n # MCP 配置\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: \"SYNC\"\n \n # Weaviate 配置\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\" "}, "a69efcae9236fbc99359f604843b41a2c3a35dc8": {"t": 1785748611.3121045, "n": 10342, "h": "58287fa29461729a", "c": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n name: bytedesk-config\n namespace: bytedesk\ndata:\n # 基础配置\n TZ: \"Asia/Shanghai\"\n SERVER_PORT: \"9003\"\n \n # 微语配置\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: \"0.9.7\"\n BYTEDESK_LICENSE_KEY: \"\"\n \n # 自定义配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n BYTEDESK_CUSTOM_NAME: \"\"\n BYTEDESK_CUSTOM_LOGO: \"\"\n BYTEDESK_CUSTOM_DESCRIPTION: \"\"\n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: \"https://www.weiyuai.cn/privacy.html\"\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: \"https://www.weiyuai.cn/terms.html\"\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: \"https://www.weiyuai.cn/docs/zh-CN/\"\n BYTEDESK_CUSTOM_LANG: \"zh-CN\"\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n \n # 管理员配置\n BYTEDESK_ADMIN_EMAIL: \"admin@email.com\"\n BYTEDESK_ADMIN_PASSWORD: \"admin\"\n BYTEDESK_ADMIN_NICKNAME: \"SuperAdmin\"\n BYTEDESK_ADMIN_MOBILE: \"13345678000\"\n BYTEDESK_ADMIN_VALIDATE_CODE: \"123456\"\n \n # 管理员白名单配置\n BYTEDESK_ADMIN_MOBILE_WHITELIST: \"18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\"\n BYTEDESK_ADMIN_EMAIL_WHITELIST: \"100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\"\n \n # 会员配置\n BYTEDESK_MEMBER_PASSWORD: \"123456\"\n \n # 性能测试配置\n BYTEDESK_TESTING_ENABLED: \"false\"\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"false\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"false\"\n \n # 组织配置\n BYTEDESK_ORGANIZATION_NAME: \"MyCompany\"\n BYTEDESK_ORGANIZATION_CODE: \"bytedesk\"\n \n # 功能配置\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: \"javamail\"\n BYTEDESK_FEATURES_AVATAR_BASE_URL: \"http://127.0.0.1:9003\"\n \n # CORS 配置\n BYTEDESK_CORS_ALLOWED_ORIGINS: \"*\"\n \n # JWT 配置\n BYTEDESK_JWT_EXPIRATION: \"2592000000\"\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: \"5184000000\"\n \n # 数据库配置\n SPRING_JPA_HIBERNATE_DDL_AUTO: \"update\"\n SPRING_DATASOURCE_URL: \"jdbc:mysql://mysql-service:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\"\n \n # 数据库连接池配置\n SPRING_DATASOURCE_HIKARI_CONNECTION_TIMEOUT: \"60000\"\n SPRING_DATASOURCE_HIKARI_MAXIMUM_POOL_SIZE: \"10\"\n \n # Druid 配置\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: \"admin@email.com\"\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: \"admin\"\n \n # Actuator 配置\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: \"\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: \"*\"\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: \"/management\"\n \n # Zipkin 追踪配置\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: \"0.0\"\n \n # Spring Security 配置\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n \n # 微信支付配置\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: \"\"\n \n # 阿里云短信配置\n ALIYUN_SMS_SIGNNAME: \"\"\n ALIYUN_SMS_TEMPLATECODE: \"\"\n \n # Redis 配置\n SPRING_DATA_REDIS_DATABASE: \"0\"\n SPRING_DATA_REDIS_HOST: \"redis-service\"\n SPRING_DATA_REDIS_PORT: \"6379\"\n SPRING_DATA_REDIS_TIMEOUT: \"10000\"\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n \n # 缓存配置\n BYTEDESK_CACHE_LEVEL: \"0\"\n BYTEDESK_CACHE_PREFIX: \"bytedeskim\"\n BYTEDESK_CACHE_REDIS_STREAM_KEY: \"bytedeskim:stream\"\n \n # 上传配置\n BYTEDESK_UPLOAD_TYPE: \"local\"\n BYTEDESK_UPLOAD_DIR: \"/app/uploads\"\n BYTEDESK_UPLOAD_URL: \"http://127.0.0.1:9003\"\n \n # 知识库配置\n BYTEDESK_KBASE_THEME: \"default\"\n BYTEDESK_KBASE_HTML_PATH: \"helpcenter\"\n BYTEDESK_KBASE_API_URL: \"http://127.0.0.1:9003\"\n \n # Socket 配置\n BYTEDESK_SOCKET_HOST: \"0.0.0.0\"\n BYTEDESK_SOCKET_WEBSOCKET_PORT: \"9885\"\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: \"SIMPLE\"\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: \"1\"\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: \"8\"\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: \"10240\"\n \n # 集群配置\n BYTEDESK_CLUSTER_ENABLED: \"false\"\n \n # 日志配置\n LOGGING_LEVEL_COM_BYTEDESK_AI: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_CORE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: \"DEBUG\"\n \n # Swagger 配置\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n SPRINGDOC_SWAGGER_UI_ENABLED: \"true\"\n SPRINGDOC_SWAGGER_UI_PATH: \"/index.html\"\n SPRINGDOC_API_DOCS_ENABLED: \"true\"\n SPRINGDOC_API_DOCS_PATH: \"/v3/api-docs\"\n KNIFE4J_ENABLED: \"true\"\n \n # Elasticsearch 配置\n SPRING_ELASTICSEARCH_URIS: \"http://elasticsearch-service:9200\"\n \n # Elasticsearch 向量存储配置\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: \"bytedesk_vs_index\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: \"1024\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: \"cosine\"\n \n # Artemis 配置\n SPRING_ARTEMIS_MODE: \"native\"\n SPRING_ARTEMIS_BROKER_URL: \"tcp://artemis-service:61616\"\n \n # JMS 配置\n SPRING_JMS_LISTENER_CONCURRENCY: \"1\"\n SPRING_JMS_LISTENER_MAX_CONCURRENCY: \"10\"\n SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: \"client\"\n SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n SPRING_JMS_LISTENER_MAX_ATTEMPTS: \"5\"\n SPRING_JMS_LISTENER_INITIAL_INTERVAL: \"1000\"\n SPRING_JMS_LISTENER_MAX_INTERVAL: \"10000\"\n SPRING_JMS_LISTENER_MULTIPLIER: \"2.0\"\n SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: \"1000\"\n SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n SPRING_ARTEMIS_EMBEDDED_QUEUES: \"DLQ\"\n \n # Zipkin 配置\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: \"http://zipkin-service:9411/api/v2/spans\"\n \n # MinIO 配置\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: \"http://minio-service:9000\"\n BYTEDESK_MINIO_BUCKET_NAME: \"bytedesk\"\n BYTEDESK_MINIO_REGION: \"us-east-1\"\n BYTEDESK_MINIO_SECURE: \"false\"\n \n # 推送配置\n BYTEDESK_PUSH_APNS_BUNDLE_ID: \"com.kefux.im\"\n BYTEDESK_PUSH_APNS_P12_URL: \"123.p12\"\n BYTEDESK_PUSH_APNS_P12_PASSWORD: \"123456\"\n \n # AI 配置\n SPRING_AI_MODEL_CHAT: \"zhipuai\"\n SPRING_AI_MODEL_EMBEDDING: \"zhipuai\"\n SPRING_AI_MODEL_VISION: \"zhipuai\"\n SPRING_AI_MODEL_AUDIO: \"zhipuai\"\n SPRING_AI_MODEL_RERANK: \"dashscope\"\n \n # ZhipuAI 配置\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: \"glm-4-flash\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: \"0.9\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: \"4096\"\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: \"30\"\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_PING_INTERVAL: \"10\"\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: \"8\"\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: \"1\"\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: \"embedding-2\"\n \n # Ollama 配置\n SPRING_AI_OLLAMA_BASE_URL: \"http://host.docker.internal:11434\"\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: \"qwen3:0.6b\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: \"bge-m3:latest\"\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: \"when_missing\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: \"bge-reranker-v2-m3:latest\"\n \n # DeepSeek 配置\n SPRING_AI_DEEPSEEK_BASE_URL: \"https://api.deepseek.com\"\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: \"deepseek-chat\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n \n # OpenAI 配置\n SPRING_AI_OPENAI_BASE_URL: \"https://api.openai.com\"\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: \"gpt-4o\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n \n # 阿里云百炼配置\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: \"https://dashscope.aliyuncs.com\"\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: \"qwen-max\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: \"3\"\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: \"text-embedding-v1\"\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n \n # SiliconFlow 配置\n SPRING_AI_SILICONFLOW_BASE_URL: \"https://api.siliconflow.cn\"\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # Gitee 配置\n SPRING_AI_GITEE_BASE_URL: \"https://ai.gitee.com\"\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 腾讯配置\n SPRING_AI_TENCENT_BASE_URL: \"https://api.hunyuan.cloud.tencent.com\"\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: \"hunyuan-t1-latest\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 百度配置\n SPRING_AI_BAIDU_BASE_URL: \"https://qianfan.baidubce.com/v2\"\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: \"ernie-x1-32k-preview\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 火山引擎配置\n SPRING_AI_VOLCENGINE_BASE_URL: \"https://ark.cn-beijing.volces.com/api/v3\"\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: \"doubao-1-5-pro-32k-250115\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 向量存储配置\n SPRING_AI_VECTORSTORE_REDIS_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_REDIS_INDEX_NAME: \"bytedesk_vs_index\"\n \n # MCP 配置\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: \"SYNC\"\n \n # Weaviate 配置\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\" "}, "1db78fe332d979f59b195699500798f03b0121d7": {"t": 1785748612.4393716, "n": 10342, "h": "a11ffb09ed9c4a9f", "c": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n name: bytedesk-config\n namespace: bytedesk\ndata:\n # 基础配置\n TZ: \"Asia/Shanghai\"\n SERVER_PORT: \"9003\"\n \n # 微语配置\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: \"0.9.6\"\n BYTEDESK_LICENSE_KEY: \"\"\n \n # 自定义配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n BYTEDESK_CUSTOM_NAME: \"\"\n BYTEDESK_CUSTOM_LOGO: \"\"\n BYTEDESK_CUSTOM_DESCRIPTION: \"\"\n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: \"https://www.weiyuai.cn/privacy.html\"\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: \"https://www.weiyuai.cn/terms.html\"\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: \"https://www.weiyuai.cn/docs/zh-CN/\"\n BYTEDESK_CUSTOM_LANG: \"zh-CN\"\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n \n # 管理员配置\n BYTEDESK_ADMIN_EMAIL: \"admin@email.com\"\n BYTEDESK_ADMIN_PASSWORD: \"admin\"\n BYTEDESK_ADMIN_NICKNAME: \"SuperAdmin\"\n BYTEDESK_ADMIN_MOBILE: \"13345678000\"\n BYTEDESK_ADMIN_VALIDATE_CODE: \"123456\"\n \n # 管理员白名单配置\n BYTEDESK_ADMIN_MOBILE_WHITELIST: \"18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\"\n BYTEDESK_ADMIN_EMAIL_WHITELIST: \"100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\"\n \n # 会员配置\n BYTEDESK_MEMBER_PASSWORD: \"123456\"\n \n # 性能测试配置\n BYTEDESK_TESTING_ENABLED: \"false\"\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"false\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"false\"\n \n # 组织配置\n BYTEDESK_ORGANIZATION_NAME: \"MyCompany\"\n BYTEDESK_ORGANIZATION_CODE: \"bytedesk\"\n \n # 功能配置\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: \"javamail\"\n BYTEDESK_FEATURES_AVATAR_BASE_URL: \"http://127.0.0.1:9003\"\n \n # CORS 配置\n BYTEDESK_CORS_ALLOWED_ORIGINS: \"*\"\n \n # JWT 配置\n BYTEDESK_JWT_EXPIRATION: \"2592000000\"\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: \"5184000000\"\n \n # 数据库配置\n SPRING_JPA_HIBERNATE_DDL_AUTO: \"update\"\n SPRING_DATASOURCE_URL: \"jdbc:mysql://mysql-service:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\"\n \n # 数据库连接池配置\n SPRING_DATASOURCE_HIKARI_CONNECTION_TIMEOUT: \"60000\"\n SPRING_DATASOURCE_HIKARI_MAXIMUM_POOL_SIZE: \"10\"\n \n # Druid 配置\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: \"admin@email.com\"\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: \"admin\"\n \n # Actuator 配置\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: \"\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: \"*\"\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: \"/management\"\n \n # Zipkin 追踪配置\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: \"0.0\"\n \n # Spring Security 配置\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n \n # 微信支付配置\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: \"\"\n \n # 阿里云短信配置\n ALIYUN_SMS_SIGNNAME: \"\"\n ALIYUN_SMS_TEMPLATECODE: \"\"\n \n # Redis 配置\n SPRING_DATA_REDIS_DATABASE: \"0\"\n SPRING_DATA_REDIS_HOST: \"redis-service\"\n SPRING_DATA_REDIS_PORT: \"6379\"\n SPRING_DATA_REDIS_TIMEOUT: \"10000\"\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n \n # 缓存配置\n BYTEDESK_CACHE_LEVEL: \"0\"\n BYTEDESK_CACHE_PREFIX: \"bytedeskim\"\n BYTEDESK_CACHE_REDIS_STREAM_KEY: \"bytedeskim:stream\"\n \n # 上传配置\n BYTEDESK_UPLOAD_TYPE: \"local\"\n BYTEDESK_UPLOAD_DIR: \"/app/uploads\"\n BYTEDESK_UPLOAD_URL: \"http://127.0.0.1:9003\"\n \n # 知识库配置\n BYTEDESK_KBASE_THEME: \"default\"\n BYTEDESK_KBASE_HTML_PATH: \"helpcenter\"\n BYTEDESK_KBASE_API_URL: \"http://127.0.0.1:9003\"\n \n # Socket 配置\n BYTEDESK_SOCKET_HOST: \"0.0.0.0\"\n BYTEDESK_SOCKET_WEBSOCKET_PORT: \"9885\"\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: \"SIMPLE\"\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: \"1\"\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: \"8\"\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: \"10240\"\n \n # 集群配置\n BYTEDESK_CLUSTER_ENABLED: \"false\"\n \n # 日志配置\n LOGGING_LEVEL_COM_BYTEDESK_AI: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_CORE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: \"DEBUG\"\n \n # Swagger 配置\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n SPRINGDOC_SWAGGER_UI_ENABLED: \"true\"\n SPRINGDOC_SWAGGER_UI_PATH: \"/index.html\"\n SPRINGDOC_API_DOCS_ENABLED: \"true\"\n SPRINGDOC_API_DOCS_PATH: \"/v3/api-docs\"\n KNIFE4J_ENABLED: \"true\"\n \n # Elasticsearch 配置\n SPRING_ELASTICSEARCH_URIS: \"http://elasticsearch-service:9200\"\n \n # Elasticsearch 向量存储配置\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: \"bytedesk_vs_index\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: \"1024\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: \"cosine\"\n \n # Artemis 配置\n SPRING_ARTEMIS_MODE: \"native\"\n SPRING_ARTEMIS_BROKER_URL: \"tcp://artemis-service:61616\"\n \n # JMS 配置\n SPRING_JMS_LISTENER_CONCURRENCY: \"1\"\n SPRING_JMS_LISTENER_MAX_CONCURRENCY: \"10\"\n SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: \"client\"\n SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n SPRING_JMS_LISTENER_MAX_ATTEMPTS: \"5\"\n SPRING_JMS_LISTENER_INITIAL_INTERVAL: \"1000\"\n SPRING_JMS_LISTENER_MAX_INTERVAL: \"10000\"\n SPRING_JMS_LISTENER_MULTIPLIER: \"2.0\"\n SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: \"1000\"\n SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n SPRING_ARTEMIS_EMBEDDED_QUEUES: \"DLQ\"\n \n # Zipkin 配置\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: \"http://zipkin-service:9411/api/v2/spans\"\n \n # MinIO 配置\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: \"http://minio-service:9000\"\n BYTEDESK_MINIO_BUCKET_NAME: \"bytedesk\"\n BYTEDESK_MINIO_REGION: \"us-east-1\"\n BYTEDESK_MINIO_SECURE: \"false\"\n \n # 推送配置\n BYTEDESK_PUSH_APNS_BUNDLE_ID: \"com.kefux.im\"\n BYTEDESK_PUSH_APNS_P12_URL: \"123.p12\"\n BYTEDESK_PUSH_APNS_P12_PASSWORD: \"123456\"\n \n # AI 配置\n SPRING_AI_MODEL_CHAT: \"zhipuai\"\n SPRING_AI_MODEL_EMBEDDING: \"zhipuai\"\n SPRING_AI_MODEL_VISION: \"zhipuai\"\n SPRING_AI_MODEL_AUDIO: \"zhipuai\"\n SPRING_AI_MODEL_RERANK: \"dashscope\"\n \n # ZhipuAI 配置\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: \"glm-4-flash\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: \"0.9\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: \"4096\"\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: \"30\"\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_PING_INTERVAL: \"10\"\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: \"8\"\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: \"1\"\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: \"embedding-2\"\n \n # Ollama 配置\n SPRING_AI_OLLAMA_BASE_URL: \"http://host.docker.internal:11434\"\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: \"qwen3:0.6b\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: \"bge-m3:latest\"\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: \"when_missing\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: \"bge-reranker-v2-m3:latest\"\n \n # DeepSeek 配置\n SPRING_AI_DEEPSEEK_BASE_URL: \"https://api.deepseek.com\"\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: \"deepseek-chat\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n \n # OpenAI 配置\n SPRING_AI_OPENAI_BASE_URL: \"https://api.openai.com\"\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: \"gpt-4o\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n \n # 阿里云百炼配置\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: \"https://dashscope.aliyuncs.com\"\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: \"qwen-max\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: \"3\"\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: \"text-embedding-v1\"\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n \n # SiliconFlow 配置\n SPRING_AI_SILICONFLOW_BASE_URL: \"https://api.siliconflow.cn\"\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # Gitee 配置\n SPRING_AI_GITEE_BASE_URL: \"https://ai.gitee.com\"\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 腾讯配置\n SPRING_AI_TENCENT_BASE_URL: \"https://api.hunyuan.cloud.tencent.com\"\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: \"hunyuan-t1-latest\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 百度配置\n SPRING_AI_BAIDU_BASE_URL: \"https://qianfan.baidubce.com/v2\"\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: \"ernie-x1-32k-preview\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 火山引擎配置\n SPRING_AI_VOLCENGINE_BASE_URL: \"https://ark.cn-beijing.volces.com/api/v3\"\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: \"doubao-1-5-pro-32k-250115\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 向量存储配置\n SPRING_AI_VECTORSTORE_REDIS_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_REDIS_INDEX_NAME: \"bytedesk_vs_index\"\n \n # MCP 配置\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: \"SYNC\"\n \n # Weaviate 配置\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\" "}, "9db839aae311c6de7229c50f1b75370d5048e6a6": {"t": 1785748613.8747463, "n": 10342, "h": "2e16bfee9a8e0ac0", "c": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n name: bytedesk-config\n namespace: bytedesk\ndata:\n # 基础配置\n TZ: \"Asia/Shanghai\"\n SERVER_PORT: \"9003\"\n \n # 微语配置\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: \"0.9.5\"\n BYTEDESK_LICENSE_KEY: \"\"\n \n # 自定义配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n BYTEDESK_CUSTOM_NAME: \"\"\n BYTEDESK_CUSTOM_LOGO: \"\"\n BYTEDESK_CUSTOM_DESCRIPTION: \"\"\n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: \"https://www.weiyuai.cn/privacy.html\"\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: \"https://www.weiyuai.cn/terms.html\"\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: \"https://www.weiyuai.cn/docs/zh-CN/\"\n BYTEDESK_CUSTOM_LANG: \"zh-CN\"\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n \n # 管理员配置\n BYTEDESK_ADMIN_EMAIL: \"admin@email.com\"\n BYTEDESK_ADMIN_PASSWORD: \"admin\"\n BYTEDESK_ADMIN_NICKNAME: \"SuperAdmin\"\n BYTEDESK_ADMIN_MOBILE: \"13345678000\"\n BYTEDESK_ADMIN_VALIDATE_CODE: \"123456\"\n \n # 管理员白名单配置\n BYTEDESK_ADMIN_MOBILE_WHITELIST: \"18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\"\n BYTEDESK_ADMIN_EMAIL_WHITELIST: \"100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\"\n \n # 会员配置\n BYTEDESK_MEMBER_PASSWORD: \"123456\"\n \n # 性能测试配置\n BYTEDESK_TESTING_ENABLED: \"false\"\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"false\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"false\"\n \n # 组织配置\n BYTEDESK_ORGANIZATION_NAME: \"MyCompany\"\n BYTEDESK_ORGANIZATION_CODE: \"bytedesk\"\n \n # 功能配置\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: \"javamail\"\n BYTEDESK_FEATURES_AVATAR_BASE_URL: \"http://127.0.0.1:9003\"\n \n # CORS 配置\n BYTEDESK_CORS_ALLOWED_ORIGINS: \"*\"\n \n # JWT 配置\n BYTEDESK_JWT_EXPIRATION: \"2592000000\"\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: \"5184000000\"\n \n # 数据库配置\n SPRING_JPA_HIBERNATE_DDL_AUTO: \"update\"\n SPRING_DATASOURCE_URL: \"jdbc:mysql://mysql-service:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\"\n \n # 数据库连接池配置\n SPRING_DATASOURCE_HIKARI_CONNECTION_TIMEOUT: \"60000\"\n SPRING_DATASOURCE_HIKARI_MAXIMUM_POOL_SIZE: \"10\"\n \n # Druid 配置\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: \"admin@email.com\"\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: \"admin\"\n \n # Actuator 配置\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: \"\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: \"*\"\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: \"/management\"\n \n # Zipkin 追踪配置\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: \"0.0\"\n \n # Spring Security 配置\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n \n # 微信支付配置\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: \"\"\n \n # 阿里云短信配置\n ALIYUN_SMS_SIGNNAME: \"\"\n ALIYUN_SMS_TEMPLATECODE: \"\"\n \n # Redis 配置\n SPRING_DATA_REDIS_DATABASE: \"0\"\n SPRING_DATA_REDIS_HOST: \"redis-service\"\n SPRING_DATA_REDIS_PORT: \"6379\"\n SPRING_DATA_REDIS_TIMEOUT: \"10000\"\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n \n # 缓存配置\n BYTEDESK_CACHE_LEVEL: \"0\"\n BYTEDESK_CACHE_PREFIX: \"bytedeskim\"\n BYTEDESK_CACHE_REDIS_STREAM_KEY: \"bytedeskim:stream\"\n \n # 上传配置\n BYTEDESK_UPLOAD_TYPE: \"local\"\n BYTEDESK_UPLOAD_DIR: \"/app/uploads\"\n BYTEDESK_UPLOAD_URL: \"http://127.0.0.1:9003\"\n \n # 知识库配置\n BYTEDESK_KBASE_THEME: \"default\"\n BYTEDESK_KBASE_HTML_PATH: \"helpcenter\"\n BYTEDESK_KBASE_API_URL: \"http://127.0.0.1:9003\"\n \n # Socket 配置\n BYTEDESK_SOCKET_HOST: \"0.0.0.0\"\n BYTEDESK_SOCKET_WEBSOCKET_PORT: \"9885\"\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: \"SIMPLE\"\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: \"1\"\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: \"8\"\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: \"10240\"\n \n # 集群配置\n BYTEDESK_CLUSTER_ENABLED: \"false\"\n \n # 日志配置\n LOGGING_LEVEL_COM_BYTEDESK_AI: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_CORE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: \"DEBUG\"\n \n # Swagger 配置\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n SPRINGDOC_SWAGGER_UI_ENABLED: \"true\"\n SPRINGDOC_SWAGGER_UI_PATH: \"/index.html\"\n SPRINGDOC_API_DOCS_ENABLED: \"true\"\n SPRINGDOC_API_DOCS_PATH: \"/v3/api-docs\"\n KNIFE4J_ENABLED: \"true\"\n \n # Elasticsearch 配置\n SPRING_ELASTICSEARCH_URIS: \"http://elasticsearch-service:9200\"\n \n # Elasticsearch 向量存储配置\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: \"bytedesk_vs_index\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: \"1024\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: \"cosine\"\n \n # Artemis 配置\n SPRING_ARTEMIS_MODE: \"native\"\n SPRING_ARTEMIS_BROKER_URL: \"tcp://artemis-service:61616\"\n \n # JMS 配置\n SPRING_JMS_LISTENER_CONCURRENCY: \"1\"\n SPRING_JMS_LISTENER_MAX_CONCURRENCY: \"10\"\n SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: \"client\"\n SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n SPRING_JMS_LISTENER_MAX_ATTEMPTS: \"5\"\n SPRING_JMS_LISTENER_INITIAL_INTERVAL: \"1000\"\n SPRING_JMS_LISTENER_MAX_INTERVAL: \"10000\"\n SPRING_JMS_LISTENER_MULTIPLIER: \"2.0\"\n SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: \"1000\"\n SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n SPRING_ARTEMIS_EMBEDDED_QUEUES: \"DLQ\"\n \n # Zipkin 配置\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: \"http://zipkin-service:9411/api/v2/spans\"\n \n # MinIO 配置\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: \"http://minio-service:9000\"\n BYTEDESK_MINIO_BUCKET_NAME: \"bytedesk\"\n BYTEDESK_MINIO_REGION: \"us-east-1\"\n BYTEDESK_MINIO_SECURE: \"false\"\n \n # 推送配置\n BYTEDESK_PUSH_APNS_BUNDLE_ID: \"com.kefux.im\"\n BYTEDESK_PUSH_APNS_P12_URL: \"123.p12\"\n BYTEDESK_PUSH_APNS_P12_PASSWORD: \"123456\"\n \n # AI 配置\n SPRING_AI_MODEL_CHAT: \"zhipuai\"\n SPRING_AI_MODEL_EMBEDDING: \"zhipuai\"\n SPRING_AI_MODEL_VISION: \"zhipuai\"\n SPRING_AI_MODEL_AUDIO: \"zhipuai\"\n SPRING_AI_MODEL_RERANK: \"dashscope\"\n \n # ZhipuAI 配置\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: \"glm-4-flash\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: \"0.9\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: \"4096\"\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: \"30\"\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_PING_INTERVAL: \"10\"\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: \"8\"\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: \"1\"\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: \"embedding-2\"\n \n # Ollama 配置\n SPRING_AI_OLLAMA_BASE_URL: \"http://host.docker.internal:11434\"\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: \"qwen3:0.6b\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: \"bge-m3:latest\"\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: \"when_missing\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: \"bge-reranker-v2-m3:latest\"\n \n # DeepSeek 配置\n SPRING_AI_DEEPSEEK_BASE_URL: \"https://api.deepseek.com\"\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: \"deepseek-chat\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n \n # OpenAI 配置\n SPRING_AI_OPENAI_BASE_URL: \"https://api.openai.com\"\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: \"gpt-4o\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n \n # 阿里云百炼配置\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: \"https://dashscope.aliyuncs.com\"\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: \"qwen-max\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: \"3\"\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: \"text-embedding-v1\"\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n \n # SiliconFlow 配置\n SPRING_AI_SILICONFLOW_BASE_URL: \"https://api.siliconflow.cn\"\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # Gitee 配置\n SPRING_AI_GITEE_BASE_URL: \"https://ai.gitee.com\"\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 腾讯配置\n SPRING_AI_TENCENT_BASE_URL: \"https://api.hunyuan.cloud.tencent.com\"\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: \"hunyuan-t1-latest\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 百度配置\n SPRING_AI_BAIDU_BASE_URL: \"https://qianfan.baidubce.com/v2\"\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: \"ernie-x1-32k-preview\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 火山引擎配置\n SPRING_AI_VOLCENGINE_BASE_URL: \"https://ark.cn-beijing.volces.com/api/v3\"\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: \"doubao-1-5-pro-32k-250115\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 向量存储配置\n SPRING_AI_VECTORSTORE_REDIS_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_REDIS_INDEX_NAME: \"bytedesk_vs_index\"\n \n # MCP 配置\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: \"SYNC\"\n \n # Weaviate 配置\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\" "}, "fb95c92de88dd1e423043bc0e00120e52c79f156": {"t": 1785748615.0016773, "n": 10342, "h": "8f1105c742e1b522", "c": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n name: bytedesk-config\n namespace: bytedesk\ndata:\n # 基础配置\n TZ: \"Asia/Shanghai\"\n SERVER_PORT: \"9003\"\n \n # 微语配置\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: \"0.9.4\"\n BYTEDESK_LICENSE_KEY: \"\"\n \n # 自定义配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n BYTEDESK_CUSTOM_NAME: \"\"\n BYTEDESK_CUSTOM_LOGO: \"\"\n BYTEDESK_CUSTOM_DESCRIPTION: \"\"\n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: \"https://www.weiyuai.cn/privacy.html\"\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: \"https://www.weiyuai.cn/terms.html\"\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: \"https://www.weiyuai.cn/docs/zh-CN/\"\n BYTEDESK_CUSTOM_LANG: \"zh-CN\"\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n \n # 管理员配置\n BYTEDESK_ADMIN_EMAIL: \"admin@email.com\"\n BYTEDESK_ADMIN_PASSWORD: \"admin\"\n BYTEDESK_ADMIN_NICKNAME: \"SuperAdmin\"\n BYTEDESK_ADMIN_MOBILE: \"13345678000\"\n BYTEDESK_ADMIN_VALIDATE_CODE: \"123456\"\n \n # 管理员白名单配置\n BYTEDESK_ADMIN_MOBILE_WHITELIST: \"18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\"\n BYTEDESK_ADMIN_EMAIL_WHITELIST: \"100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\"\n \n # 会员配置\n BYTEDESK_MEMBER_PASSWORD: \"123456\"\n \n # 性能测试配置\n BYTEDESK_TESTING_ENABLED: \"false\"\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"false\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"false\"\n \n # 组织配置\n BYTEDESK_ORGANIZATION_NAME: \"MyCompany\"\n BYTEDESK_ORGANIZATION_CODE: \"bytedesk\"\n \n # 功能配置\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: \"javamail\"\n BYTEDESK_FEATURES_AVATAR_BASE_URL: \"http://127.0.0.1:9003\"\n \n # CORS 配置\n BYTEDESK_CORS_ALLOWED_ORIGINS: \"*\"\n \n # JWT 配置\n BYTEDESK_JWT_EXPIRATION: \"2592000000\"\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: \"5184000000\"\n \n # 数据库配置\n SPRING_JPA_HIBERNATE_DDL_AUTO: \"update\"\n SPRING_DATASOURCE_URL: \"jdbc:mysql://mysql-service:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\"\n \n # 数据库连接池配置\n SPRING_DATASOURCE_HIKARI_CONNECTION_TIMEOUT: \"60000\"\n SPRING_DATASOURCE_HIKARI_MAXIMUM_POOL_SIZE: \"10\"\n \n # Druid 配置\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: \"admin@email.com\"\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: \"admin\"\n \n # Actuator 配置\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: \"\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: \"*\"\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: \"/management\"\n \n # Zipkin 追踪配置\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: \"0.0\"\n \n # Spring Security 配置\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n \n # 微信支付配置\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: \"\"\n \n # 阿里云短信配置\n ALIYUN_SMS_SIGNNAME: \"\"\n ALIYUN_SMS_TEMPLATECODE: \"\"\n \n # Redis 配置\n SPRING_DATA_REDIS_DATABASE: \"0\"\n SPRING_DATA_REDIS_HOST: \"redis-service\"\n SPRING_DATA_REDIS_PORT: \"6379\"\n SPRING_DATA_REDIS_TIMEOUT: \"10000\"\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n \n # 缓存配置\n BYTEDESK_CACHE_LEVEL: \"0\"\n BYTEDESK_CACHE_PREFIX: \"bytedeskim\"\n BYTEDESK_CACHE_REDIS_STREAM_KEY: \"bytedeskim:stream\"\n \n # 上传配置\n BYTEDESK_UPLOAD_TYPE: \"local\"\n BYTEDESK_UPLOAD_DIR: \"/app/uploads\"\n BYTEDESK_UPLOAD_URL: \"http://127.0.0.1:9003\"\n \n # 知识库配置\n BYTEDESK_KBASE_THEME: \"default\"\n BYTEDESK_KBASE_HTML_PATH: \"helpcenter\"\n BYTEDESK_KBASE_API_URL: \"http://127.0.0.1:9003\"\n \n # Socket 配置\n BYTEDESK_SOCKET_HOST: \"0.0.0.0\"\n BYTEDESK_SOCKET_WEBSOCKET_PORT: \"9885\"\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: \"SIMPLE\"\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: \"1\"\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: \"8\"\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: \"10240\"\n \n # 集群配置\n BYTEDESK_CLUSTER_ENABLED: \"false\"\n \n # 日志配置\n LOGGING_LEVEL_COM_BYTEDESK_AI: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_CORE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: \"DEBUG\"\n \n # Swagger 配置\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n SPRINGDOC_SWAGGER_UI_ENABLED: \"true\"\n SPRINGDOC_SWAGGER_UI_PATH: \"/index.html\"\n SPRINGDOC_API_DOCS_ENABLED: \"true\"\n SPRINGDOC_API_DOCS_PATH: \"/v3/api-docs\"\n KNIFE4J_ENABLED: \"true\"\n \n # Elasticsearch 配置\n SPRING_ELASTICSEARCH_URIS: \"http://elasticsearch-service:9200\"\n \n # Elasticsearch 向量存储配置\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: \"bytedesk_vs_index\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: \"1024\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: \"cosine\"\n \n # Artemis 配置\n SPRING_ARTEMIS_MODE: \"native\"\n SPRING_ARTEMIS_BROKER_URL: \"tcp://artemis-service:61616\"\n \n # JMS 配置\n SPRING_JMS_LISTENER_CONCURRENCY: \"1\"\n SPRING_JMS_LISTENER_MAX_CONCURRENCY: \"10\"\n SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: \"client\"\n SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n SPRING_JMS_LISTENER_MAX_ATTEMPTS: \"5\"\n SPRING_JMS_LISTENER_INITIAL_INTERVAL: \"1000\"\n SPRING_JMS_LISTENER_MAX_INTERVAL: \"10000\"\n SPRING_JMS_LISTENER_MULTIPLIER: \"2.0\"\n SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: \"1000\"\n SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n SPRING_ARTEMIS_EMBEDDED_QUEUES: \"DLQ\"\n \n # Zipkin 配置\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: \"http://zipkin-service:9411/api/v2/spans\"\n \n # MinIO 配置\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: \"http://minio-service:9000\"\n BYTEDESK_MINIO_BUCKET_NAME: \"bytedesk\"\n BYTEDESK_MINIO_REGION: \"us-east-1\"\n BYTEDESK_MINIO_SECURE: \"false\"\n \n # 推送配置\n BYTEDESK_PUSH_APNS_BUNDLE_ID: \"com.kefux.im\"\n BYTEDESK_PUSH_APNS_P12_URL: \"123.p12\"\n BYTEDESK_PUSH_APNS_P12_PASSWORD: \"123456\"\n \n # AI 配置\n SPRING_AI_MODEL_CHAT: \"zhipuai\"\n SPRING_AI_MODEL_EMBEDDING: \"zhipuai\"\n SPRING_AI_MODEL_VISION: \"zhipuai\"\n SPRING_AI_MODEL_AUDIO: \"zhipuai\"\n SPRING_AI_MODEL_RERANK: \"dashscope\"\n \n # ZhipuAI 配置\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: \"glm-4-flash\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: \"0.9\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: \"4096\"\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: \"30\"\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_PING_INTERVAL: \"10\"\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: \"8\"\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: \"1\"\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: \"embedding-2\"\n \n # Ollama 配置\n SPRING_AI_OLLAMA_BASE_URL: \"http://host.docker.internal:11434\"\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: \"qwen3:0.6b\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: \"bge-m3:latest\"\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: \"when_missing\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: \"bge-reranker-v2-m3:latest\"\n \n # DeepSeek 配置\n SPRING_AI_DEEPSEEK_BASE_URL: \"https://api.deepseek.com\"\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: \"deepseek-chat\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n \n # OpenAI 配置\n SPRING_AI_OPENAI_BASE_URL: \"https://api.openai.com\"\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: \"gpt-4o\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n \n # 阿里云百炼配置\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: \"https://dashscope.aliyuncs.com\"\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: \"qwen-max\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: \"3\"\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: \"text-embedding-v1\"\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n \n # SiliconFlow 配置\n SPRING_AI_SILICONFLOW_BASE_URL: \"https://api.siliconflow.cn\"\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # Gitee 配置\n SPRING_AI_GITEE_BASE_URL: \"https://ai.gitee.com\"\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 腾讯配置\n SPRING_AI_TENCENT_BASE_URL: \"https://api.hunyuan.cloud.tencent.com\"\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: \"hunyuan-t1-latest\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 百度配置\n SPRING_AI_BAIDU_BASE_URL: \"https://qianfan.baidubce.com/v2\"\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: \"ernie-x1-32k-preview\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 火山引擎配置\n SPRING_AI_VOLCENGINE_BASE_URL: \"https://ark.cn-beijing.volces.com/api/v3\"\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: \"doubao-1-5-pro-32k-250115\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 向量存储配置\n SPRING_AI_VECTORSTORE_REDIS_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_REDIS_INDEX_NAME: \"bytedesk_vs_index\"\n \n # MCP 配置\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: \"SYNC\"\n \n # Weaviate 配置\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\" "}, "5b68e9b37100541256df18bdc54d9783011fff98": {"t": 1785748616.2439156, "n": 10342, "h": "4f6b9b9221591fa6", "c": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n name: bytedesk-config\n namespace: bytedesk\ndata:\n # 基础配置\n TZ: \"Asia/Shanghai\"\n SERVER_PORT: \"9003\"\n \n # 微语配置\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: \"0.9.3\"\n BYTEDESK_LICENSE_KEY: \"\"\n \n # 自定义配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n BYTEDESK_CUSTOM_NAME: \"\"\n BYTEDESK_CUSTOM_LOGO: \"\"\n BYTEDESK_CUSTOM_DESCRIPTION: \"\"\n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: \"https://www.weiyuai.cn/privacy.html\"\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: \"https://www.weiyuai.cn/terms.html\"\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: \"https://www.weiyuai.cn/docs/zh-CN/\"\n BYTEDESK_CUSTOM_LANG: \"zh-CN\"\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n \n # 管理员配置\n BYTEDESK_ADMIN_EMAIL: \"admin@email.com\"\n BYTEDESK_ADMIN_PASSWORD: \"admin\"\n BYTEDESK_ADMIN_NICKNAME: \"SuperAdmin\"\n BYTEDESK_ADMIN_MOBILE: \"13345678000\"\n BYTEDESK_ADMIN_VALIDATE_CODE: \"123456\"\n \n # 管理员白名单配置\n BYTEDESK_ADMIN_MOBILE_WHITELIST: \"18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\"\n BYTEDESK_ADMIN_EMAIL_WHITELIST: \"100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\"\n \n # 会员配置\n BYTEDESK_MEMBER_PASSWORD: \"123456\"\n \n # 性能测试配置\n BYTEDESK_TESTING_ENABLED: \"false\"\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"false\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"false\"\n \n # 组织配置\n BYTEDESK_ORGANIZATION_NAME: \"MyCompany\"\n BYTEDESK_ORGANIZATION_CODE: \"bytedesk\"\n \n # 功能配置\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: \"javamail\"\n BYTEDESK_FEATURES_AVATAR_BASE_URL: \"http://127.0.0.1:9003\"\n \n # CORS 配置\n BYTEDESK_CORS_ALLOWED_ORIGINS: \"*\"\n \n # JWT 配置\n BYTEDESK_JWT_EXPIRATION: \"2592000000\"\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: \"5184000000\"\n \n # 数据库配置\n SPRING_JPA_HIBERNATE_DDL_AUTO: \"update\"\n SPRING_DATASOURCE_URL: \"jdbc:mysql://mysql-service:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\"\n \n # 数据库连接池配置\n SPRING_DATASOURCE_HIKARI_CONNECTION_TIMEOUT: \"60000\"\n SPRING_DATASOURCE_HIKARI_MAXIMUM_POOL_SIZE: \"10\"\n \n # Druid 配置\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: \"admin@email.com\"\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: \"admin\"\n \n # Actuator 配置\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: \"\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: \"*\"\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: \"/management\"\n \n # Zipkin 追踪配置\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: \"0.0\"\n \n # Spring Security 配置\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n \n # 微信支付配置\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: \"\"\n \n # 阿里云短信配置\n ALIYUN_SMS_SIGNNAME: \"\"\n ALIYUN_SMS_TEMPLATECODE: \"\"\n \n # Redis 配置\n SPRING_DATA_REDIS_DATABASE: \"0\"\n SPRING_DATA_REDIS_HOST: \"redis-service\"\n SPRING_DATA_REDIS_PORT: \"6379\"\n SPRING_DATA_REDIS_TIMEOUT: \"10000\"\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n \n # 缓存配置\n BYTEDESK_CACHE_LEVEL: \"0\"\n BYTEDESK_CACHE_PREFIX: \"bytedeskim\"\n BYTEDESK_CACHE_REDIS_STREAM_KEY: \"bytedeskim:stream\"\n \n # 上传配置\n BYTEDESK_UPLOAD_TYPE: \"local\"\n BYTEDESK_UPLOAD_DIR: \"/app/uploads\"\n BYTEDESK_UPLOAD_URL: \"http://127.0.0.1:9003\"\n \n # 知识库配置\n BYTEDESK_KBASE_THEME: \"default\"\n BYTEDESK_KBASE_HTML_PATH: \"helpcenter\"\n BYTEDESK_KBASE_API_URL: \"http://127.0.0.1:9003\"\n \n # Socket 配置\n BYTEDESK_SOCKET_HOST: \"0.0.0.0\"\n BYTEDESK_SOCKET_WEBSOCKET_PORT: \"9885\"\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: \"SIMPLE\"\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: \"1\"\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: \"8\"\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: \"10240\"\n \n # 集群配置\n BYTEDESK_CLUSTER_ENABLED: \"false\"\n \n # 日志配置\n LOGGING_LEVEL_COM_BYTEDESK_AI: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_CORE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: \"DEBUG\"\n \n # Swagger 配置\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n SPRINGDOC_SWAGGER_UI_ENABLED: \"true\"\n SPRINGDOC_SWAGGER_UI_PATH: \"/index.html\"\n SPRINGDOC_API_DOCS_ENABLED: \"true\"\n SPRINGDOC_API_DOCS_PATH: \"/v3/api-docs\"\n KNIFE4J_ENABLED: \"true\"\n \n # Elasticsearch 配置\n SPRING_ELASTICSEARCH_URIS: \"http://elasticsearch-service:9200\"\n \n # Elasticsearch 向量存储配置\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: \"bytedesk_vs_index\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: \"1024\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: \"cosine\"\n \n # Artemis 配置\n SPRING_ARTEMIS_MODE: \"native\"\n SPRING_ARTEMIS_BROKER_URL: \"tcp://artemis-service:61616\"\n \n # JMS 配置\n SPRING_JMS_LISTENER_CONCURRENCY: \"1\"\n SPRING_JMS_LISTENER_MAX_CONCURRENCY: \"10\"\n SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: \"client\"\n SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n SPRING_JMS_LISTENER_MAX_ATTEMPTS: \"5\"\n SPRING_JMS_LISTENER_INITIAL_INTERVAL: \"1000\"\n SPRING_JMS_LISTENER_MAX_INTERVAL: \"10000\"\n SPRING_JMS_LISTENER_MULTIPLIER: \"2.0\"\n SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: \"1000\"\n SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n SPRING_ARTEMIS_EMBEDDED_QUEUES: \"DLQ\"\n \n # Zipkin 配置\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: \"http://zipkin-service:9411/api/v2/spans\"\n \n # MinIO 配置\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: \"http://minio-service:9000\"\n BYTEDESK_MINIO_BUCKET_NAME: \"bytedesk\"\n BYTEDESK_MINIO_REGION: \"us-east-1\"\n BYTEDESK_MINIO_SECURE: \"false\"\n \n # 推送配置\n BYTEDESK_PUSH_APNS_BUNDLE_ID: \"com.kefux.im\"\n BYTEDESK_PUSH_APNS_P12_URL: \"123.p12\"\n BYTEDESK_PUSH_APNS_P12_PASSWORD: \"123456\"\n \n # AI 配置\n SPRING_AI_MODEL_CHAT: \"zhipuai\"\n SPRING_AI_MODEL_EMBEDDING: \"zhipuai\"\n SPRING_AI_MODEL_VISION: \"zhipuai\"\n SPRING_AI_MODEL_AUDIO: \"zhipuai\"\n SPRING_AI_MODEL_RERANK: \"dashscope\"\n \n # ZhipuAI 配置\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: \"glm-4-flash\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: \"0.9\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: \"4096\"\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: \"30\"\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_PING_INTERVAL: \"10\"\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: \"8\"\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: \"1\"\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: \"embedding-2\"\n \n # Ollama 配置\n SPRING_AI_OLLAMA_BASE_URL: \"http://host.docker.internal:11434\"\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: \"qwen3:0.6b\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: \"bge-m3:latest\"\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: \"when_missing\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: \"bge-reranker-v2-m3:latest\"\n \n # DeepSeek 配置\n SPRING_AI_DEEPSEEK_BASE_URL: \"https://api.deepseek.com\"\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: \"deepseek-chat\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n \n # OpenAI 配置\n SPRING_AI_OPENAI_BASE_URL: \"https://api.openai.com\"\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: \"gpt-4o\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n \n # 阿里云百炼配置\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: \"https://dashscope.aliyuncs.com\"\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: \"qwen-max\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: \"3\"\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: \"text-embedding-v1\"\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n \n # SiliconFlow 配置\n SPRING_AI_SILICONFLOW_BASE_URL: \"https://api.siliconflow.cn\"\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # Gitee 配置\n SPRING_AI_GITEE_BASE_URL: \"https://ai.gitee.com\"\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 腾讯配置\n SPRING_AI_TENCENT_BASE_URL: \"https://api.hunyuan.cloud.tencent.com\"\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: \"hunyuan-t1-latest\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 百度配置\n SPRING_AI_BAIDU_BASE_URL: \"https://qianfan.baidubce.com/v2\"\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: \"ernie-x1-32k-preview\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 火山引擎配置\n SPRING_AI_VOLCENGINE_BASE_URL: \"https://ark.cn-beijing.volces.com/api/v3\"\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: \"doubao-1-5-pro-32k-250115\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 向量存储配置\n SPRING_AI_VECTORSTORE_REDIS_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_REDIS_INDEX_NAME: \"bytedesk_vs_index\"\n \n # MCP 配置\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: \"SYNC\"\n \n # Weaviate 配置\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\" "}, "47618f882ddbf37a3e22f561c60c30654b6a4d45": {"t": 1785748617.4675508, "n": 10342, "h": "8acdbc0e00f280cf", "c": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n name: bytedesk-config\n namespace: bytedesk\ndata:\n # 基础配置\n TZ: \"Asia/Shanghai\"\n SERVER_PORT: \"9003\"\n \n # 微语配置\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: \"0.9.2\"\n BYTEDESK_LICENSE_KEY: \"\"\n \n # 自定义配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n BYTEDESK_CUSTOM_NAME: \"\"\n BYTEDESK_CUSTOM_LOGO: \"\"\n BYTEDESK_CUSTOM_DESCRIPTION: \"\"\n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: \"https://www.weiyuai.cn/privacy.html\"\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: \"https://www.weiyuai.cn/terms.html\"\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: \"https://www.weiyuai.cn/docs/zh-CN/\"\n BYTEDESK_CUSTOM_LANG: \"zh-CN\"\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n \n # 管理员配置\n BYTEDESK_ADMIN_EMAIL: \"admin@email.com\"\n BYTEDESK_ADMIN_PASSWORD: \"admin\"\n BYTEDESK_ADMIN_NICKNAME: \"SuperAdmin\"\n BYTEDESK_ADMIN_MOBILE: \"13345678000\"\n BYTEDESK_ADMIN_VALIDATE_CODE: \"123456\"\n \n # 管理员白名单配置\n BYTEDESK_ADMIN_MOBILE_WHITELIST: \"18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\"\n BYTEDESK_ADMIN_EMAIL_WHITELIST: \"100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\"\n \n # 会员配置\n BYTEDESK_MEMBER_PASSWORD: \"123456\"\n \n # 性能测试配置\n BYTEDESK_TESTING_ENABLED: \"false\"\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"false\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"false\"\n \n # 组织配置\n BYTEDESK_ORGANIZATION_NAME: \"MyCompany\"\n BYTEDESK_ORGANIZATION_CODE: \"bytedesk\"\n \n # 功能配置\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: \"javamail\"\n BYTEDESK_FEATURES_AVATAR_BASE_URL: \"http://127.0.0.1:9003\"\n \n # CORS 配置\n BYTEDESK_CORS_ALLOWED_ORIGINS: \"*\"\n \n # JWT 配置\n BYTEDESK_JWT_EXPIRATION: \"2592000000\"\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: \"5184000000\"\n \n # 数据库配置\n SPRING_JPA_HIBERNATE_DDL_AUTO: \"update\"\n SPRING_DATASOURCE_URL: \"jdbc:mysql://mysql-service:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\"\n \n # 数据库连接池配置\n SPRING_DATASOURCE_HIKARI_CONNECTION_TIMEOUT: \"60000\"\n SPRING_DATASOURCE_HIKARI_MAXIMUM_POOL_SIZE: \"10\"\n \n # Druid 配置\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: \"admin@email.com\"\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: \"admin\"\n \n # Actuator 配置\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: \"\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: \"*\"\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: \"/management\"\n \n # Zipkin 追踪配置\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: \"0.0\"\n \n # Spring Security 配置\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n \n # 微信支付配置\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: \"\"\n \n # 阿里云短信配置\n ALIYUN_SMS_SIGNNAME: \"\"\n ALIYUN_SMS_TEMPLATECODE: \"\"\n \n # Redis 配置\n SPRING_DATA_REDIS_DATABASE: \"0\"\n SPRING_DATA_REDIS_HOST: \"redis-service\"\n SPRING_DATA_REDIS_PORT: \"6379\"\n SPRING_DATA_REDIS_TIMEOUT: \"10000\"\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n \n # 缓存配置\n BYTEDESK_CACHE_LEVEL: \"0\"\n BYTEDESK_CACHE_PREFIX: \"bytedeskim\"\n BYTEDESK_CACHE_REDIS_STREAM_KEY: \"bytedeskim:stream\"\n \n # 上传配置\n BYTEDESK_UPLOAD_TYPE: \"local\"\n BYTEDESK_UPLOAD_DIR: \"/app/uploads\"\n BYTEDESK_UPLOAD_URL: \"http://127.0.0.1:9003\"\n \n # 知识库配置\n BYTEDESK_KBASE_THEME: \"default\"\n BYTEDESK_KBASE_HTML_PATH: \"helpcenter\"\n BYTEDESK_KBASE_API_URL: \"http://127.0.0.1:9003\"\n \n # Socket 配置\n BYTEDESK_SOCKET_HOST: \"0.0.0.0\"\n BYTEDESK_SOCKET_WEBSOCKET_PORT: \"9885\"\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: \"SIMPLE\"\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: \"1\"\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: \"8\"\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: \"10240\"\n \n # 集群配置\n BYTEDESK_CLUSTER_ENABLED: \"false\"\n \n # 日志配置\n LOGGING_LEVEL_COM_BYTEDESK_AI: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_CORE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: \"DEBUG\"\n \n # Swagger 配置\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n SPRINGDOC_SWAGGER_UI_ENABLED: \"true\"\n SPRINGDOC_SWAGGER_UI_PATH: \"/index.html\"\n SPRINGDOC_API_DOCS_ENABLED: \"true\"\n SPRINGDOC_API_DOCS_PATH: \"/v3/api-docs\"\n KNIFE4J_ENABLED: \"true\"\n \n # Elasticsearch 配置\n SPRING_ELASTICSEARCH_URIS: \"http://elasticsearch-service:9200\"\n \n # Elasticsearch 向量存储配置\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: \"bytedesk_vs_index\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: \"1024\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: \"cosine\"\n \n # Artemis 配置\n SPRING_ARTEMIS_MODE: \"native\"\n SPRING_ARTEMIS_BROKER_URL: \"tcp://artemis-service:61616\"\n \n # JMS 配置\n SPRING_JMS_LISTENER_CONCURRENCY: \"1\"\n SPRING_JMS_LISTENER_MAX_CONCURRENCY: \"10\"\n SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: \"client\"\n SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n SPRING_JMS_LISTENER_MAX_ATTEMPTS: \"5\"\n SPRING_JMS_LISTENER_INITIAL_INTERVAL: \"1000\"\n SPRING_JMS_LISTENER_MAX_INTERVAL: \"10000\"\n SPRING_JMS_LISTENER_MULTIPLIER: \"2.0\"\n SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: \"1000\"\n SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n SPRING_ARTEMIS_EMBEDDED_QUEUES: \"DLQ\"\n \n # Zipkin 配置\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: \"http://zipkin-service:9411/api/v2/spans\"\n \n # MinIO 配置\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: \"http://minio-service:9000\"\n BYTEDESK_MINIO_BUCKET_NAME: \"bytedesk\"\n BYTEDESK_MINIO_REGION: \"us-east-1\"\n BYTEDESK_MINIO_SECURE: \"false\"\n \n # 推送配置\n BYTEDESK_PUSH_APNS_BUNDLE_ID: \"com.kefux.im\"\n BYTEDESK_PUSH_APNS_P12_URL: \"123.p12\"\n BYTEDESK_PUSH_APNS_P12_PASSWORD: \"123456\"\n \n # AI 配置\n SPRING_AI_MODEL_CHAT: \"zhipuai\"\n SPRING_AI_MODEL_EMBEDDING: \"zhipuai\"\n SPRING_AI_MODEL_VISION: \"zhipuai\"\n SPRING_AI_MODEL_AUDIO: \"zhipuai\"\n SPRING_AI_MODEL_RERANK: \"dashscope\"\n \n # ZhipuAI 配置\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: \"glm-4-flash\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: \"0.9\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: \"4096\"\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: \"30\"\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_PING_INTERVAL: \"10\"\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: \"8\"\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: \"1\"\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: \"embedding-2\"\n \n # Ollama 配置\n SPRING_AI_OLLAMA_BASE_URL: \"http://host.docker.internal:11434\"\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: \"qwen3:0.6b\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: \"bge-m3:latest\"\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: \"when_missing\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: \"bge-reranker-v2-m3:latest\"\n \n # DeepSeek 配置\n SPRING_AI_DEEPSEEK_BASE_URL: \"https://api.deepseek.com\"\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: \"deepseek-chat\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n \n # OpenAI 配置\n SPRING_AI_OPENAI_BASE_URL: \"https://api.openai.com\"\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: \"gpt-4o\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n \n # 阿里云百炼配置\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: \"https://dashscope.aliyuncs.com\"\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: \"qwen-max\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: \"3\"\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: \"text-embedding-v1\"\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n \n # SiliconFlow 配置\n SPRING_AI_SILICONFLOW_BASE_URL: \"https://api.siliconflow.cn\"\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # Gitee 配置\n SPRING_AI_GITEE_BASE_URL: \"https://ai.gitee.com\"\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 腾讯配置\n SPRING_AI_TENCENT_BASE_URL: \"https://api.hunyuan.cloud.tencent.com\"\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: \"hunyuan-t1-latest\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 百度配置\n SPRING_AI_BAIDU_BASE_URL: \"https://qianfan.baidubce.com/v2\"\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: \"ernie-x1-32k-preview\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 火山引擎配置\n SPRING_AI_VOLCENGINE_BASE_URL: \"https://ark.cn-beijing.volces.com/api/v3\"\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: \"doubao-1-5-pro-32k-250115\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 向量存储配置\n SPRING_AI_VECTORSTORE_REDIS_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_REDIS_INDEX_NAME: \"bytedesk_vs_index\"\n \n # MCP 配置\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: \"SYNC\"\n \n # Weaviate 配置\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\" "}, "828fd1bc9dde006b9b178989ca614a23e86e6f46": {"t": 1785748618.6009476, "n": 10342, "h": "9e841319900f3899", "c": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n name: bytedesk-config\n namespace: bytedesk\ndata:\n # 基础配置\n TZ: \"Asia/Shanghai\"\n SERVER_PORT: \"9003\"\n \n # 微语配置\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: \"0.9.1\"\n BYTEDESK_LICENSE_KEY: \"\"\n \n # 自定义配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n BYTEDESK_CUSTOM_NAME: \"\"\n BYTEDESK_CUSTOM_LOGO: \"\"\n BYTEDESK_CUSTOM_DESCRIPTION: \"\"\n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: \"https://www.weiyuai.cn/privacy.html\"\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: \"https://www.weiyuai.cn/terms.html\"\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: \"https://www.weiyuai.cn/docs/zh-CN/\"\n BYTEDESK_CUSTOM_LANG: \"zh-CN\"\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n \n # 管理员配置\n BYTEDESK_ADMIN_EMAIL: \"admin@email.com\"\n BYTEDESK_ADMIN_PASSWORD: \"admin\"\n BYTEDESK_ADMIN_NICKNAME: \"SuperAdmin\"\n BYTEDESK_ADMIN_MOBILE: \"13345678000\"\n BYTEDESK_ADMIN_VALIDATE_CODE: \"123456\"\n \n # 管理员白名单配置\n BYTEDESK_ADMIN_MOBILE_WHITELIST: \"18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\"\n BYTEDESK_ADMIN_EMAIL_WHITELIST: \"100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\"\n \n # 会员配置\n BYTEDESK_MEMBER_PASSWORD: \"123456\"\n \n # 性能测试配置\n BYTEDESK_TESTING_ENABLED: \"false\"\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"false\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"false\"\n \n # 组织配置\n BYTEDESK_ORGANIZATION_NAME: \"MyCompany\"\n BYTEDESK_ORGANIZATION_CODE: \"bytedesk\"\n \n # 功能配置\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: \"javamail\"\n BYTEDESK_FEATURES_AVATAR_BASE_URL: \"http://127.0.0.1:9003\"\n \n # CORS 配置\n BYTEDESK_CORS_ALLOWED_ORIGINS: \"*\"\n \n # JWT 配置\n BYTEDESK_JWT_EXPIRATION: \"2592000000\"\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: \"5184000000\"\n \n # 数据库配置\n SPRING_JPA_HIBERNATE_DDL_AUTO: \"update\"\n SPRING_DATASOURCE_URL: \"jdbc:mysql://mysql-service:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\"\n \n # 数据库连接池配置\n SPRING_DATASOURCE_HIKARI_CONNECTION_TIMEOUT: \"60000\"\n SPRING_DATASOURCE_HIKARI_MAXIMUM_POOL_SIZE: \"10\"\n \n # Druid 配置\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: \"admin@email.com\"\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: \"admin\"\n \n # Actuator 配置\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: \"\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: \"*\"\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: \"/management\"\n \n # Zipkin 追踪配置\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: \"0.0\"\n \n # Spring Security 配置\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n \n # 微信支付配置\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: \"\"\n \n # 阿里云短信配置\n ALIYUN_SMS_SIGNNAME: \"\"\n ALIYUN_SMS_TEMPLATECODE: \"\"\n \n # Redis 配置\n SPRING_DATA_REDIS_DATABASE: \"0\"\n SPRING_DATA_REDIS_HOST: \"redis-service\"\n SPRING_DATA_REDIS_PORT: \"6379\"\n SPRING_DATA_REDIS_TIMEOUT: \"10000\"\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n \n # 缓存配置\n BYTEDESK_CACHE_LEVEL: \"0\"\n BYTEDESK_CACHE_PREFIX: \"bytedeskim\"\n BYTEDESK_CACHE_REDIS_STREAM_KEY: \"bytedeskim:stream\"\n \n # 上传配置\n BYTEDESK_UPLOAD_TYPE: \"local\"\n BYTEDESK_UPLOAD_DIR: \"/app/uploads\"\n BYTEDESK_UPLOAD_URL: \"http://127.0.0.1:9003\"\n \n # 知识库配置\n BYTEDESK_KBASE_THEME: \"default\"\n BYTEDESK_KBASE_HTML_PATH: \"helpcenter\"\n BYTEDESK_KBASE_API_URL: \"http://127.0.0.1:9003\"\n \n # Socket 配置\n BYTEDESK_SOCKET_HOST: \"0.0.0.0\"\n BYTEDESK_SOCKET_WEBSOCKET_PORT: \"9885\"\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: \"SIMPLE\"\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: \"1\"\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: \"8\"\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: \"10240\"\n \n # 集群配置\n BYTEDESK_CLUSTER_ENABLED: \"false\"\n \n # 日志配置\n LOGGING_LEVEL_COM_BYTEDESK_AI: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_CORE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: \"DEBUG\"\n \n # Swagger 配置\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n SPRINGDOC_SWAGGER_UI_ENABLED: \"true\"\n SPRINGDOC_SWAGGER_UI_PATH: \"/index.html\"\n SPRINGDOC_API_DOCS_ENABLED: \"true\"\n SPRINGDOC_API_DOCS_PATH: \"/v3/api-docs\"\n KNIFE4J_ENABLED: \"true\"\n \n # Elasticsearch 配置\n SPRING_ELASTICSEARCH_URIS: \"http://elasticsearch-service:9200\"\n \n # Elasticsearch 向量存储配置\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: \"bytedesk_vs_index\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: \"1024\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: \"cosine\"\n \n # Artemis 配置\n SPRING_ARTEMIS_MODE: \"native\"\n SPRING_ARTEMIS_BROKER_URL: \"tcp://artemis-service:61616\"\n \n # JMS 配置\n SPRING_JMS_LISTENER_CONCURRENCY: \"1\"\n SPRING_JMS_LISTENER_MAX_CONCURRENCY: \"10\"\n SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: \"client\"\n SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n SPRING_JMS_LISTENER_MAX_ATTEMPTS: \"5\"\n SPRING_JMS_LISTENER_INITIAL_INTERVAL: \"1000\"\n SPRING_JMS_LISTENER_MAX_INTERVAL: \"10000\"\n SPRING_JMS_LISTENER_MULTIPLIER: \"2.0\"\n SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: \"1000\"\n SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n SPRING_ARTEMIS_EMBEDDED_QUEUES: \"DLQ\"\n \n # Zipkin 配置\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: \"http://zipkin-service:9411/api/v2/spans\"\n \n # MinIO 配置\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: \"http://minio-service:9000\"\n BYTEDESK_MINIO_BUCKET_NAME: \"bytedesk\"\n BYTEDESK_MINIO_REGION: \"us-east-1\"\n BYTEDESK_MINIO_SECURE: \"false\"\n \n # 推送配置\n BYTEDESK_PUSH_APNS_BUNDLE_ID: \"com.kefux.im\"\n BYTEDESK_PUSH_APNS_P12_URL: \"123.p12\"\n BYTEDESK_PUSH_APNS_P12_PASSWORD: \"123456\"\n \n # AI 配置\n SPRING_AI_MODEL_CHAT: \"zhipuai\"\n SPRING_AI_MODEL_EMBEDDING: \"zhipuai\"\n SPRING_AI_MODEL_VISION: \"zhipuai\"\n SPRING_AI_MODEL_AUDIO: \"zhipuai\"\n SPRING_AI_MODEL_RERANK: \"dashscope\"\n \n # ZhipuAI 配置\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: \"glm-4-flash\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: \"0.9\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: \"4096\"\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: \"30\"\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_PING_INTERVAL: \"10\"\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: \"8\"\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: \"1\"\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: \"embedding-2\"\n \n # Ollama 配置\n SPRING_AI_OLLAMA_BASE_URL: \"http://host.docker.internal:11434\"\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: \"qwen3:0.6b\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: \"bge-m3:latest\"\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: \"when_missing\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: \"bge-reranker-v2-m3:latest\"\n \n # DeepSeek 配置\n SPRING_AI_DEEPSEEK_BASE_URL: \"https://api.deepseek.com\"\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: \"deepseek-chat\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n \n # OpenAI 配置\n SPRING_AI_OPENAI_BASE_URL: \"https://api.openai.com\"\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: \"gpt-4o\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n \n # 阿里云百炼配置\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: \"https://dashscope.aliyuncs.com\"\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: \"qwen-max\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: \"3\"\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: \"text-embedding-v1\"\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n \n # SiliconFlow 配置\n SPRING_AI_SILICONFLOW_BASE_URL: \"https://api.siliconflow.cn\"\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # Gitee 配置\n SPRING_AI_GITEE_BASE_URL: \"https://ai.gitee.com\"\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 腾讯配置\n SPRING_AI_TENCENT_BASE_URL: \"https://api.hunyuan.cloud.tencent.com\"\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: \"hunyuan-t1-latest\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 百度配置\n SPRING_AI_BAIDU_BASE_URL: \"https://qianfan.baidubce.com/v2\"\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: \"ernie-x1-32k-preview\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 火山引擎配置\n SPRING_AI_VOLCENGINE_BASE_URL: \"https://ark.cn-beijing.volces.com/api/v3\"\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: \"doubao-1-5-pro-32k-250115\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 向量存储配置\n SPRING_AI_VECTORSTORE_REDIS_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_REDIS_INDEX_NAME: \"bytedesk_vs_index\"\n \n # MCP 配置\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: \"SYNC\"\n \n # Weaviate 配置\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\" "}, "6450a16572932437282b1e427c4b3d05be2ae7b0": {"t": 1785748619.8449972, "n": 10342, "h": "e06c0991e2b7b6b9", "c": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n name: bytedesk-config\n namespace: bytedesk\ndata:\n # 基础配置\n TZ: \"Asia/Shanghai\"\n SERVER_PORT: \"9003\"\n \n # 微语配置\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: \"0.9.0\"\n BYTEDESK_LICENSE_KEY: \"\"\n \n # 自定义配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n BYTEDESK_CUSTOM_NAME: \"\"\n BYTEDESK_CUSTOM_LOGO: \"\"\n BYTEDESK_CUSTOM_DESCRIPTION: \"\"\n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: \"https://www.weiyuai.cn/privacy.html\"\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: \"https://www.weiyuai.cn/terms.html\"\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: \"https://www.weiyuai.cn/docs/zh-CN/\"\n BYTEDESK_CUSTOM_LANG: \"zh-CN\"\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n \n # 管理员配置\n BYTEDESK_ADMIN_EMAIL: \"admin@email.com\"\n BYTEDESK_ADMIN_PASSWORD: \"admin\"\n BYTEDESK_ADMIN_NICKNAME: \"SuperAdmin\"\n BYTEDESK_ADMIN_MOBILE: \"13345678000\"\n BYTEDESK_ADMIN_VALIDATE_CODE: \"123456\"\n \n # 管理员白名单配置\n BYTEDESK_ADMIN_MOBILE_WHITELIST: \"18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\"\n BYTEDESK_ADMIN_EMAIL_WHITELIST: \"100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\"\n \n # 会员配置\n BYTEDESK_MEMBER_PASSWORD: \"123456\"\n \n # 性能测试配置\n BYTEDESK_TESTING_ENABLED: \"false\"\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"false\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"false\"\n \n # 组织配置\n BYTEDESK_ORGANIZATION_NAME: \"MyCompany\"\n BYTEDESK_ORGANIZATION_CODE: \"bytedesk\"\n \n # 功能配置\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: \"javamail\"\n BYTEDESK_FEATURES_AVATAR_BASE_URL: \"http://127.0.0.1:9003\"\n \n # CORS 配置\n BYTEDESK_CORS_ALLOWED_ORIGINS: \"*\"\n \n # JWT 配置\n BYTEDESK_JWT_EXPIRATION: \"2592000000\"\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: \"5184000000\"\n \n # 数据库配置\n SPRING_JPA_HIBERNATE_DDL_AUTO: \"update\"\n SPRING_DATASOURCE_URL: \"jdbc:mysql://mysql-service:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\"\n \n # 数据库连接池配置\n SPRING_DATASOURCE_HIKARI_CONNECTION_TIMEOUT: \"60000\"\n SPRING_DATASOURCE_HIKARI_MAXIMUM_POOL_SIZE: \"10\"\n \n # Druid 配置\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: \"admin@email.com\"\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: \"admin\"\n \n # Actuator 配置\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: \"\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: \"*\"\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: \"/management\"\n \n # Zipkin 追踪配置\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: \"0.0\"\n \n # Spring Security 配置\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n \n # 微信支付配置\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: \"\"\n \n # 阿里云短信配置\n ALIYUN_SMS_SIGNNAME: \"\"\n ALIYUN_SMS_TEMPLATECODE: \"\"\n \n # Redis 配置\n SPRING_DATA_REDIS_DATABASE: \"0\"\n SPRING_DATA_REDIS_HOST: \"redis-service\"\n SPRING_DATA_REDIS_PORT: \"6379\"\n SPRING_DATA_REDIS_TIMEOUT: \"10000\"\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n \n # 缓存配置\n BYTEDESK_CACHE_LEVEL: \"0\"\n BYTEDESK_CACHE_PREFIX: \"bytedeskim\"\n BYTEDESK_CACHE_REDIS_STREAM_KEY: \"bytedeskim:stream\"\n \n # 上传配置\n BYTEDESK_UPLOAD_TYPE: \"local\"\n BYTEDESK_UPLOAD_DIR: \"/app/uploads\"\n BYTEDESK_UPLOAD_URL: \"http://127.0.0.1:9003\"\n \n # 知识库配置\n BYTEDESK_KBASE_THEME: \"default\"\n BYTEDESK_KBASE_HTML_PATH: \"helpcenter\"\n BYTEDESK_KBASE_API_URL: \"http://127.0.0.1:9003\"\n \n # Socket 配置\n BYTEDESK_SOCKET_HOST: \"0.0.0.0\"\n BYTEDESK_SOCKET_WEBSOCKET_PORT: \"9885\"\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: \"SIMPLE\"\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: \"1\"\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: \"8\"\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: \"10240\"\n \n # 集群配置\n BYTEDESK_CLUSTER_ENABLED: \"false\"\n \n # 日志配置\n LOGGING_LEVEL_COM_BYTEDESK_AI: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_CORE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: \"DEBUG\"\n \n # Swagger 配置\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n SPRINGDOC_SWAGGER_UI_ENABLED: \"true\"\n SPRINGDOC_SWAGGER_UI_PATH: \"/index.html\"\n SPRINGDOC_API_DOCS_ENABLED: \"true\"\n SPRINGDOC_API_DOCS_PATH: \"/v3/api-docs\"\n KNIFE4J_ENABLED: \"true\"\n \n # Elasticsearch 配置\n SPRING_ELASTICSEARCH_URIS: \"http://elasticsearch-service:9200\"\n \n # Elasticsearch 向量存储配置\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: \"bytedesk_vs_index\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: \"1024\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: \"cosine\"\n \n # Artemis 配置\n SPRING_ARTEMIS_MODE: \"native\"\n SPRING_ARTEMIS_BROKER_URL: \"tcp://artemis-service:61616\"\n \n # JMS 配置\n SPRING_JMS_LISTENER_CONCURRENCY: \"1\"\n SPRING_JMS_LISTENER_MAX_CONCURRENCY: \"10\"\n SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: \"client\"\n SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n SPRING_JMS_LISTENER_MAX_ATTEMPTS: \"5\"\n SPRING_JMS_LISTENER_INITIAL_INTERVAL: \"1000\"\n SPRING_JMS_LISTENER_MAX_INTERVAL: \"10000\"\n SPRING_JMS_LISTENER_MULTIPLIER: \"2.0\"\n SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: \"1000\"\n SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n SPRING_ARTEMIS_EMBEDDED_QUEUES: \"DLQ\"\n \n # Zipkin 配置\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: \"http://zipkin-service:9411/api/v2/spans\"\n \n # MinIO 配置\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: \"http://minio-service:9000\"\n BYTEDESK_MINIO_BUCKET_NAME: \"bytedesk\"\n BYTEDESK_MINIO_REGION: \"us-east-1\"\n BYTEDESK_MINIO_SECURE: \"false\"\n \n # 推送配置\n BYTEDESK_PUSH_APNS_BUNDLE_ID: \"com.kefux.im\"\n BYTEDESK_PUSH_APNS_P12_URL: \"123.p12\"\n BYTEDESK_PUSH_APNS_P12_PASSWORD: \"123456\"\n \n # AI 配置\n SPRING_AI_MODEL_CHAT: \"zhipuai\"\n SPRING_AI_MODEL_EMBEDDING: \"zhipuai\"\n SPRING_AI_MODEL_VISION: \"zhipuai\"\n SPRING_AI_MODEL_AUDIO: \"zhipuai\"\n SPRING_AI_MODEL_RERANK: \"dashscope\"\n \n # ZhipuAI 配置\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: \"glm-4-flash\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: \"0.9\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: \"4096\"\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: \"30\"\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_PING_INTERVAL: \"10\"\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: \"8\"\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: \"1\"\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: \"embedding-2\"\n \n # Ollama 配置\n SPRING_AI_OLLAMA_BASE_URL: \"http://host.docker.internal:11434\"\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: \"qwen3:0.6b\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: \"bge-m3:latest\"\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: \"when_missing\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: \"bge-reranker-v2-m3:latest\"\n \n # DeepSeek 配置\n SPRING_AI_DEEPSEEK_BASE_URL: \"https://api.deepseek.com\"\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: \"deepseek-chat\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n \n # OpenAI 配置\n SPRING_AI_OPENAI_BASE_URL: \"https://api.openai.com\"\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: \"gpt-4o\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n \n # 阿里云百炼配置\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: \"https://dashscope.aliyuncs.com\"\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: \"qwen-max\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: \"3\"\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: \"text-embedding-v1\"\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n \n # SiliconFlow 配置\n SPRING_AI_SILICONFLOW_BASE_URL: \"https://api.siliconflow.cn\"\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # Gitee 配置\n SPRING_AI_GITEE_BASE_URL: \"https://ai.gitee.com\"\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 腾讯配置\n SPRING_AI_TENCENT_BASE_URL: \"https://api.hunyuan.cloud.tencent.com\"\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: \"hunyuan-t1-latest\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 百度配置\n SPRING_AI_BAIDU_BASE_URL: \"https://qianfan.baidubce.com/v2\"\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: \"ernie-x1-32k-preview\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 火山引擎配置\n SPRING_AI_VOLCENGINE_BASE_URL: \"https://ark.cn-beijing.volces.com/api/v3\"\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: \"doubao-1-5-pro-32k-250115\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 向量存储配置\n SPRING_AI_VECTORSTORE_REDIS_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_REDIS_INDEX_NAME: \"bytedesk_vs_index\"\n \n # MCP 配置\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: \"SYNC\"\n \n # Weaviate 配置\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\" "}, "d903397506b2340d3121daac9ce568b094b14d85": {"t": 1785748621.0520153, "n": 777, "h": "b780b21c9c4bf364", "c": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n name: bytedesk-config\n namespace: bytedesk\ndata:\n # 基础配置\n TZ: \"Asia/Shanghai\"\n SERVER_PORT: \"9003\"\n \n # 微语配置\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: \"0.9.0\"\n BYTEDESK_LICENSE_KEY: \"\"\n \n # 管理员配置\n BYTEDESK_ADMIN_EMAIL: \"admin@email.com\"\n BYTEDESK_ADMIN_PASSWORD: \"admin\"\n BYTEDESK_ADMIN_NICKNAME: \"SuperAdmin\"\n BYTEDESK_ADMIN_MOBILE: \"13345678000\"\n BYTEDESK_ADMIN_VALIDATE_CODE: \"123456\"\n \n # JWT 配置\n BYTEDESK_JWT_EXPIRATION: \"2592000000\"\n \n # 数据库配置\n SPRING_JPA_HIBERNATE_DDL_AUTO: \"update\"\n \n # AI 配置\n SPRING_AI_MODEL_CHAT: \"zhipuai\"\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: \"glm-4-flash\"\n \n # 文档配置\n SPRINGDOC_SWAGGER_UI_ENABLED: \"true\"\n KNIFE4J_ENABLED: \"true\" "}, "976193668c0e76c76b3f7ba8d9522c7fc2692a06": {"t": 1786068035.1986856, "n": 10344, "h": "08cb2a86f1167f88", "c": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n name: bytedesk-config\n namespace: bytedesk\ndata:\n # 基础配置\n TZ: \"Asia/Shanghai\"\n SERVER_PORT: \"9003\"\n \n # 微语配置\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: \"1.0.0\"\n BYTEDESK_LICENSE_KEY: \"\"\n \n # 自定义配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n BYTEDESK_CUSTOM_NAME: \"\"\n BYTEDESK_CUSTOM_LOGO: \"\"\n BYTEDESK_CUSTOM_DESCRIPTION: \"\"\n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: \"https://www.weiyuai.cn/privacy.html\"\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: \"https://www.weiyuai.cn/terms.html\"\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: \"https://www.weiyuai.cn/docs/zh-CN/\"\n BYTEDESK_CUSTOM_LANG: \"zh-CN\"\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n \n # 管理员配置\n BYTEDESK_ADMIN_EMAIL: \"admin@email.com\"\n BYTEDESK_ADMIN_PASSWORD: \"admin\"\n BYTEDESK_ADMIN_NICKNAME: \"SuperAdmin\"\n BYTEDESK_ADMIN_MOBILE: \"13345678000\"\n BYTEDESK_ADMIN_VALIDATE_CODE: \"123456\"\n \n # 管理员白名单配置\n BYTEDESK_ADMIN_MOBILE_WHITELIST: \"18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\"\n BYTEDESK_ADMIN_EMAIL_WHITELIST: \"100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\"\n \n # 会员配置\n BYTEDESK_MEMBER_PASSWORD: \"123456\"\n \n # 性能测试配置\n BYTEDESK_TESTING_ENABLED: \"false\"\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"false\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"false\"\n \n # 组织配置\n BYTEDESK_ORGANIZATION_NAME: \"MyCompany\"\n BYTEDESK_ORGANIZATION_CODE: \"bytedesk\"\n \n # 功能配置\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: \"javamail\"\n BYTEDESK_FEATURES_AVATAR_BASE_URL: \"http://127.0.0.1:9003\"\n \n # CORS 配置\n BYTEDESK_CORS_ALLOWED_ORIGINS: \"*\"\n \n # JWT 配置\n BYTEDESK_JWT_EXPIRATION: \"2592000000\"\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: \"5184000000\"\n \n # 数据库配置\n SPRING_JPA_HIBERNATE_DDL_AUTO: \"update\"\n SPRING_DATASOURCE_URL: \"jdbc:mysql://mysql-service:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\"\n \n # 数据库连接池配置\n SPRING_DATASOURCE_HIKARI_CONNECTION_TIMEOUT: \"60000\"\n SPRING_DATASOURCE_HIKARI_MAXIMUM_POOL_SIZE: \"10\"\n \n # Druid 配置\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: \"admin@email.com\"\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: \"admin\"\n \n # Actuator 配置\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: \"\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: \"*\"\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: \"/management\"\n \n # Zipkin 追踪配置\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: \"0.0\"\n \n # Spring Security 配置\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n \n # 微信支付配置\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: \"\"\n \n # 阿里云短信配置\n ALIYUN_SMS_SIGNNAME: \"\"\n ALIYUN_SMS_TEMPLATECODE: \"\"\n \n # Redis 配置\n SPRING_DATA_REDIS_DATABASE: \"0\"\n SPRING_DATA_REDIS_HOST: \"redis-service\"\n SPRING_DATA_REDIS_PORT: \"6379\"\n SPRING_DATA_REDIS_TIMEOUT: \"10000\"\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n \n # 缓存配置\n BYTEDESK_CACHE_LEVEL: \"0\"\n BYTEDESK_CACHE_PREFIX: \"bytedeskim\"\n BYTEDESK_CACHE_REDIS_STREAM_KEY: \"bytedeskim:stream\"\n \n # 上传配置\n BYTEDESK_UPLOAD_TYPE: \"local\"\n BYTEDESK_UPLOAD_DIR: \"/app/uploads\"\n BYTEDESK_UPLOAD_URL: \"http://127.0.0.1:9003\"\n \n # 知识库配置\n BYTEDESK_KBASE_THEME: \"default\"\n BYTEDESK_KBASE_HTML_PATH: \"helpcenter\"\n BYTEDESK_KBASE_API_URL: \"http://127.0.0.1:9003\"\n \n # Socket 配置\n BYTEDESK_SOCKET_HOST: \"0.0.0.0\"\n BYTEDESK_SOCKET_WEBSOCKET_PORT: \"9885\"\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: \"SIMPLE\"\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: \"1\"\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: \"8\"\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: \"10240\"\n \n # 集群配置\n BYTEDESK_CLUSTER_ENABLED: \"false\"\n \n # 日志配置\n LOGGING_LEVEL_COM_BYTEDESK_AI: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_CORE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: \"DEBUG\"\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: \"DEBUG\"\n \n # Swagger 配置\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n SPRINGDOC_SWAGGER_UI_ENABLED: \"true\"\n SPRINGDOC_SWAGGER_UI_PATH: \"/index.html\"\n SPRINGDOC_API_DOCS_ENABLED: \"true\"\n SPRINGDOC_API_DOCS_PATH: \"/v3/api-docs\"\n KNIFE4J_ENABLED: \"true\"\n \n # Elasticsearch 配置\n SPRING_ELASTICSEARCH_URIS: \"http://elasticsearch-service:9200\"\n \n # Elasticsearch 向量存储配置\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: \"bytedesk_vs_index\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: \"1024\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: \"cosine\"\n \n # Artemis 配置\n SPRING_ARTEMIS_MODE: \"native\"\n SPRING_ARTEMIS_BROKER_URL: \"tcp://artemis-service:61616\"\n \n # JMS 配置\n SPRING_JMS_LISTENER_CONCURRENCY: \"1\"\n SPRING_JMS_LISTENER_MAX_CONCURRENCY: \"10\"\n SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: \"client\"\n SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n SPRING_JMS_LISTENER_MAX_ATTEMPTS: \"5\"\n SPRING_JMS_LISTENER_INITIAL_INTERVAL: \"1000\"\n SPRING_JMS_LISTENER_MAX_INTERVAL: \"10000\"\n SPRING_JMS_LISTENER_MULTIPLIER: \"2.0\"\n SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: \"1000\"\n SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n SPRING_ARTEMIS_EMBEDDED_QUEUES: \"DLQ\"\n \n # Zipkin 配置\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: \"http://zipkin-service:9411/api/v2/spans\"\n \n # MinIO 配置\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: \"http://minio-service:9000\"\n BYTEDESK_MINIO_BUCKET_NAME: \"bytedesk\"\n BYTEDESK_MINIO_REGION: \"us-east-1\"\n BYTEDESK_MINIO_SECURE: \"false\"\n \n # 推送配置\n BYTEDESK_PUSH_APNS_BUNDLE_ID: \"com.kefux.im\"\n BYTEDESK_PUSH_APNS_P12_URL: \"123.p12\"\n BYTEDESK_PUSH_APNS_P12_PASSWORD: \"123456\"\n \n # AI 配置\n SPRING_AI_MODEL_CHAT: \"zhipuai\"\n SPRING_AI_MODEL_EMBEDDING: \"zhipuai\"\n SPRING_AI_MODEL_VISION: \"zhipuai\"\n SPRING_AI_MODEL_AUDIO: \"zhipuai\"\n SPRING_AI_MODEL_RERANK: \"dashscope\"\n \n # ZhipuAI 配置\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: \"glm-4.5-flash\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: \"0.9\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: \"4096\"\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: \"30\"\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: \"10\"\n SPRING_AI_ZHIPUAI_PING_INTERVAL: \"10\"\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: \"8\"\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: \"1\"\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: \"embedding-2\"\n \n # Ollama 配置\n SPRING_AI_OLLAMA_BASE_URL: \"http://host.docker.internal:11434\"\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: \"qwen3:0.6b\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: \"bge-m3:latest\"\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: \"when_missing\"\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: \"bge-reranker-v2-m3:latest\"\n \n # DeepSeek 配置\n SPRING_AI_DEEPSEEK_BASE_URL: \"https://api.deepseek.com\"\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: \"deepseek-chat\"\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n \n # OpenAI 配置\n SPRING_AI_OPENAI_BASE_URL: \"https://api.openai.com\"\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: \"gpt-4o\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n \n # 阿里云百炼配置\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: \"https://dashscope.aliyuncs.com\"\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: \"qwen-max\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: \"3\"\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: \"text-embedding-v1\"\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n \n # SiliconFlow 配置\n SPRING_AI_SILICONFLOW_BASE_URL: \"https://api.siliconflow.cn\"\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # Gitee 配置\n SPRING_AI_GITEE_BASE_URL: \"https://ai.gitee.com\"\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: \"Qwen/QwQ-32B\"\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 腾讯配置\n SPRING_AI_TENCENT_BASE_URL: \"https://api.hunyuan.cloud.tencent.com\"\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: \"hunyuan-t1-latest\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 百度配置\n SPRING_AI_BAIDU_BASE_URL: \"https://qianfan.baidubce.com/v2\"\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: \"ernie-x1-32k-preview\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 火山引擎配置\n SPRING_AI_VOLCENGINE_BASE_URL: \"https://ark.cn-beijing.volces.com/api/v3\"\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: \"doubao-1-5-pro-32k-250115\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: \"0.7\"\n \n # 向量存储配置\n SPRING_AI_VECTORSTORE_REDIS_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_REDIS_INDEX_NAME: \"bytedesk_vs_index\"\n \n # MCP 配置\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: \"SYNC\"\n \n # Weaviate 配置\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\" "}}, "modules/ai/src/main/java/com/bytedesk/ai/springai/providers/deepseek/SpringAIDeepseekChatConfig.java": {"affe883cb26b5fd3e33902ae54e2bd31c3fa2ade": {"t": 1785747144.913822, "n": 2775, "h": "77bd4ce459d8c9db", "c": "/*\n * @Author: jackning 270580156@qq.com\n * @Date: 2025-02-17 11:17:28\n * @LastEditors: jackning 270580156@qq.com\n * @LastEditTime: 2025-07-18 11:45:00\n * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk\n * Please be aware of the BSL license restrictions before installing Bytedesk IM – \n * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. \n * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE \n * contact: 270580156@qq.com \n * \n * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. \n */\npackage com.bytedesk.ai.springai.providers.deepseek;\n\nimport org.springframework.ai.chat.client.ChatClient;\nimport org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;\nimport org.springframework.ai.deepseek.DeepSeekChatModel;\nimport org.springframework.ai.deepseek.DeepSeekChatOptions;\nimport org.springframework.ai.deepseek.api.DeepSeekApi;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n/**\n * Deepseek 聊天配置\n */\n@Configuration\n@ConditionalOnProperty(prefix = \"spring.ai.deepseek.chat\", name = \"enabled\", havingValue = \"true\", matchIfMissing = false)\npublic class SpringAIDeepseekChatConfig {\n\n @Value(\"${spring.ai.deepseek.base-url:https://api.deepseek.com}\")\n private String baseUrl;\n\n @Value(\"${spring.ai.deepseek.api-key:sk-xxx}\")\n private String apiKey;\n\n @Value(\"${spring.ai.deepseek.chat.options.model:deepseek-chat}\")\n private String model;\n\n @Value(\"${spring.ai.deepseek.chat.options.temperature:0.7}\")\n private Double temperature;\n\n @Bean(\"deepseekApi\")\n DeepSeekApi deepseekApi() {\n return DeepSeekApi.builder()\n .baseUrl(baseUrl)\n .apiKey(apiKey)\n .build();\n }\n\n @Bean(\"deepseekChatOptions\")\n DeepSeekChatOptions deepseekChatOptions() {\n return DeepSeekChatOptions.builder()\n .model(model)\n .temperature(temperature)\n .build();\n }\n\n @Bean(\"deepseekChatModel\")\n DeepSeekChatModel deepseekChatModel() {\n return DeepSeekChatModel.builder()\n .deepSeekApi(deepseekApi())\n .options(deepseekChatOptions())\n .build();\n }\n\n @Bean(\"deepseekChatClient\")\n ChatClient deepseekChatClient() {\n return ChatClient.builder(deepseekChatModel())\n .defaultOptions(deepseekChatOptions().mutate())\n .defaultAdvisors(new SimpleLoggerAdvisor())\n .build();\n }\n\n} "}, "113b8a90cedbeef41d3dcea079a5665404e3884c": {"t": 1785748609.153521, "n": 2773, "h": "28987fad0367ad5c", "c": "/*\n * @Author: jackning 270580156@qq.com\n * @Date: 2025-02-17 11:17:28\n * @LastEditors: jackning 270580156@qq.com\n * @LastEditTime: 2025-07-18 11:45:00\n * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk\n * Please be aware of the BSL license restrictions before installing Bytedesk IM – \n * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. \n * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE \n * contact: 270580156@qq.com \n * \n * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. \n */\npackage com.bytedesk.ai.springai.providers.deepseek;\n\nimport org.springframework.ai.chat.client.ChatClient;\nimport org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;\nimport org.springframework.ai.deepseek.DeepSeekChatModel;\nimport org.springframework.ai.deepseek.DeepSeekChatOptions;\nimport org.springframework.ai.deepseek.api.DeepSeekApi;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n/**\n * Deepseek 聊天配置\n */\n@Configuration\n@ConditionalOnProperty(prefix = \"spring.ai.deepseek.chat\", name = \"enabled\", havingValue = \"true\", matchIfMissing = false)\npublic class SpringAIDeepseekChatConfig {\n\n @Value(\"${spring.ai.deepseek.base-url:https://api.deepseek.com}\")\n private String baseUrl;\n\n @Value(\"${spring.ai.deepseek.api-key:sk-xxx}\")\n private String apiKey;\n\n @Value(\"${spring.ai.deepseek.chat.options.model:deepseek-chat}\")\n private String model;\n\n @Value(\"${spring.ai.deepseek.chat.options.temperature:0.7}\")\n private Double temperature;\n\n @Bean(\"deepseekApi\")\n DeepSeekApi deepseekApi() {\n return DeepSeekApi.builder()\n .baseUrl(baseUrl)\n .apiKey(apiKey)\n .build();\n }\n\n @Bean(\"deepseekChatOptions\")\n DeepSeekChatOptions deepseekChatOptions() {\n return DeepSeekChatOptions.builder()\n .model(model)\n .temperature(temperature)\n .build();\n }\n\n @Bean(\"deepseekChatModel\")\n DeepSeekChatModel deepseekChatModel() {\n return DeepSeekChatModel.builder()\n .deepSeekApi(deepseekApi())\n .defaultOptions(deepseekChatOptions())\n .build();\n }\n\n @Bean(\"deepseekChatClient\")\n ChatClient deepseekChatClient() {\n return ChatClient.builder(deepseekChatModel())\n .defaultOptions(deepseekChatOptions())\n .defaultAdvisors(new SimpleLoggerAdvisor())\n .build();\n }\n\n} "}, "1ae8aee50f6f7e8ae3ecbf657d72a4e6d490466b": {"t": 1785748610.2461174, "n": 2642, "h": "af2d25d0fe51cdbf", "c": "/*\n * @Author: jackning 270580156@qq.com\n * @Date: 2025-02-17 11:17:28\n * @LastEditors: jackning 270580156@qq.com\n * @LastEditTime: 2025-07-18 11:34:20\n * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk\n * Please be aware of the BSL license restrictions before installing Bytedesk IM – \n * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. \n * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE \n * contact: 270580156@qq.com \n * \n * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. \n */\npackage com.bytedesk.ai.springai.providers.deepseek;\n\nimport org.springframework.ai.chat.client.ChatClient;\nimport org.springframework.ai.deepseek.DeepSeekChatModel;\nimport org.springframework.ai.deepseek.DeepSeekChatOptions;\nimport org.springframework.ai.deepseek.api.DeepSeekApi;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n/**\n * Deepseek 聊天配置\n */\n@Configuration\n@ConditionalOnProperty(prefix = \"spring.ai.deepseek.chat\", name = \"enabled\", havingValue = \"true\", matchIfMissing = false)\npublic class SpringAIDeepseekChatConfig {\n\n @Value(\"${spring.ai.deepseek.base-url:https://api.deepseek.com}\")\n private String baseUrl;\n\n @Value(\"${spring.ai.deepseek.api-key:sk-xxx}\")\n private String apiKey;\n\n @Value(\"${spring.ai.deepseek.chat.options.model:deepseek-chat}\")\n private String model;\n\n @Value(\"${spring.ai.deepseek.chat.options.temperature:0.7}\")\n private Double temperature;\n\n @Bean(\"deepseekApi\")\n DeepSeekApi deepseekApi() {\n return DeepSeekApi.builder()\n .baseUrl(baseUrl)\n .apiKey(apiKey)\n .build();\n }\n\n @Bean(\"deepseekChatOptions\")\n DeepSeekChatOptions deepseekChatOptions() {\n return DeepSeekChatOptions.builder()\n .model(model)\n .temperature(temperature)\n .build();\n }\n\n @Bean(\"deepseekChatModel\")\n DeepSeekChatModel deepseekChatModel() {\n return DeepSeekChatModel.builder()\n .deepSeekApi(deepseekApi())\n .defaultOptions(deepseekChatOptions())\n .build();\n }\n\n @Bean(\"deepseekChatClient\")\n ChatClient deepseekChatClient() {\n return ChatClient.builder(deepseekChatModel())\n .defaultOptions(deepseekChatOptions())\n .build();\n }\n\n} "}, "d90c6f192cf7b4de2cfd9bad8412735dd0819585": {"t": 1785748611.973851, "n": 2804, "h": "0ed34a295a7fc131", "c": "/*\n * @Author: jackning 270580156@qq.com\n * @Date: 2025-02-17 11:17:28\n * @LastEditors: jackning 270580156@qq.com\n * @LastEditTime: 2025-07-18 09:59:16\n * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk\n * Please be aware of the BSL license restrictions before installing Bytedesk IM – \n * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. \n * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE \n * contact: 270580156@qq.com \n * \n * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. \n */\npackage com.bytedesk.ai.springai.providers.deepseek;\n\nimport org.springframework.ai.chat.client.ChatClient;\nimport org.springframework.ai.deepseek.DeepSeekChatModel;\nimport org.springframework.ai.deepseek.DeepSeekChatOptions;\nimport org.springframework.ai.deepseek.api.DeepSeekApi;\nimport org.springframework.ai.openai.OpenAiChatModel;\nimport org.springframework.ai.openai.OpenAiChatOptions;\nimport org.springframework.ai.openai.api.OpenAiApi;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n/**\n * Deepseek 聊天配置\n */\n@Configuration\n@ConditionalOnProperty(prefix = \"spring.ai.deepseek.chat\", name = \"enabled\", havingValue = \"true\", matchIfMissing = false)\npublic class SpringAIDeepseekChatConfig {\n\n @Value(\"${spring.ai.deepseek.base-url:https://api.deepseek.com}\")\n private String baseUrl;\n\n @Value(\"${spring.ai.deepseek.api-key:sk-xxx}\")\n private String apiKey;\n\n @Value(\"${spring.ai.deepseek.chat.options.model:deepseek-chat}\")\n private String model;\n\n @Value(\"${spring.ai.deepseek.chat.options.temperature:0.7}\")\n private Double temperature;\n\n @Bean(\"deepseekApi\")\n DeepSeekApi deepseekApi() {\n return DeepSeekApi.builder()\n .baseUrl(baseUrl)\n .apiKey(apiKey)\n .build();\n }\n\n @Bean(\"deepseekChatOptions\")\n DeepSeekChatOptions deepseekChatOptions() {\n return DeepSeekChatOptions.builder()\n .model(model)\n .temperature(temperature)\n .build();\n }\n\n @Bean(\"deepseekChatModel\")\n DeepSeekChatModel deepseekChatModel() {\n return DeepSeekChatModel.builder()\n .deepSeekApi(deepseekApi())\n .defaultOptions(deepseekChatOptions())\n .build();\n }\n\n @Bean(\"deepseekChatClient\")\n ChatClient deepseekChatClient() {\n return ChatClient.builder(deepseekChatModel())\n .defaultOptions(deepseekChatOptions())\n .build();\n }\n\n} "}, "521c519ae47ed74430eae936cba0efc784f96dce": {"t": 1785748613.0984879, "n": 2616, "h": "55eb572f1a3411f4", "c": "/*\n * @Author: jackning 270580156@qq.com\n * @Date: 2025-02-17 11:17:28\n * @LastEditors: jackning 270580156@qq.com\n * @LastEditTime: 2025-07-16 13:20:28\n * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk\n * Please be aware of the BSL license restrictions before installing Bytedesk IM – \n * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. \n * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE \n * contact: 270580156@qq.com \n * \n * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. \n */\npackage com.bytedesk.ai.springai.providers.deepseek;\n\nimport org.springframework.ai.chat.client.ChatClient;\nimport org.springframework.ai.openai.OpenAiChatModel;\nimport org.springframework.ai.openai.OpenAiChatOptions;\nimport org.springframework.ai.openai.api.OpenAiApi;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n/**\n * Deepseek 聊天配置\n */\n@Configuration\n@ConditionalOnProperty(prefix = \"spring.ai.deepseek.chat\", name = \"enabled\", havingValue = \"true\", matchIfMissing = false)\npublic class SpringAIDeepseekChatConfig {\n\n @Value(\"${spring.ai.deepseek.base-url:https://api.deepseek.com}\")\n private String baseUrl;\n\n @Value(\"${spring.ai.deepseek.api-key:sk-xxx}\")\n private String apiKey;\n\n @Value(\"${spring.ai.deepseek.chat.options.model:deepseek-chat}\")\n private String model;\n\n @Value(\"${spring.ai.deepseek.chat.options.temperature:0.7}\")\n private Double temperature;\n\n @Bean(\"deepseekApi\")\n OpenAiApi deepseekApi() {\n return OpenAiApi.builder()\n .baseUrl(baseUrl)\n .apiKey(apiKey)\n .build();\n }\n\n @Bean(\"deepseekChatOptions\")\n OpenAiChatOptions deepseekChatOptions() {\n return OpenAiChatOptions.builder()\n .model(model)\n .temperature(temperature)\n .build();\n }\n\n @Bean(\"deepseekChatModel\")\n OpenAiChatModel deepseekChatModel() {\n return OpenAiChatModel.builder()\n .openAiApi(deepseekApi())\n .defaultOptions(deepseekChatOptions())\n .build();\n }\n\n @Bean(\"deepseekChatClient\")\n ChatClient deepseekChatClient() {\n return ChatClient.builder(deepseekChatModel())\n .defaultOptions(deepseekChatOptions())\n .build();\n }\n\n} "}, "9d693ec6662008233ec51d4a6e69937ce6812b4c": {"t": 1785748614.4342563, "n": 2616, "h": "2c8e98132ff4f7f5", "c": "/*\n * @Author: jackning 270580156@qq.com\n * @Date: 2025-02-17 11:17:28\n * @LastEditors: jackning 270580156@qq.com\n * @LastEditTime: 2025-07-16 11:37:38\n * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk\n * Please be aware of the BSL license restrictions before installing Bytedesk IM – \n * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. \n * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE \n * contact: 270580156@qq.com \n * \n * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. \n */\npackage com.bytedesk.ai.springai.providers.deepseek;\n\nimport org.springframework.ai.chat.client.ChatClient;\nimport org.springframework.ai.openai.OpenAiChatModel;\nimport org.springframework.ai.openai.OpenAiChatOptions;\nimport org.springframework.ai.openai.api.OpenAiApi;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n/**\n * Deepseek 聊天配置\n */\n@Configuration\n@ConditionalOnProperty(prefix = \"spring.ai.deepseek.chat\", name = \"enabled\", havingValue = \"true\", matchIfMissing = false)\npublic class SpringAIDeepseekChatConfig {\n\n @Value(\"${spring.ai.deepseek.base-url:https://api.deepseek.com}\")\n private String baseUrl;\n\n @Value(\"${spring.ai.deepseek.api-key:sk-xxx}\")\n private String apiKey;\n\n @Value(\"${spring.ai.deepseek.chat.options.model:deepseek-chat}\")\n private String model;\n\n @Value(\"${spring.ai.deepseek.chat.options.temperature:0.7}\")\n private Double temperature;\n\n @Bean(\"deepseekApi\")\n OpenAiApi deepseekApi() {\n return OpenAiApi.builder()\n .baseUrl(baseUrl)\n .apiKey(apiKey)\n .build();\n }\n\n @Bean(\"deepseekChatOptions\")\n OpenAiChatOptions deepseekChatOptions() {\n return OpenAiChatOptions.builder()\n .model(model)\n .temperature(temperature)\n .build();\n }\n\n @Bean(\"deepseekChatModel\")\n OpenAiChatModel deepseekChatModel() {\n return OpenAiChatModel.builder()\n .openAiApi(deepseekApi())\n .defaultOptions(deepseekChatOptions())\n .build();\n }\n\n @Bean(\"deepseekChatClient\")\n ChatClient deepseekChatClient() {\n return ChatClient.builder(deepseekChatModel())\n .defaultOptions(deepseekChatOptions())\n .build();\n }\n\n} "}, "94b2d24627aec8c4266254af97f41be1fc86bbf8": {"t": 1785748615.6796744, "n": 2604, "h": "b48db74cc8526a87", "c": "/*\n * @Author: jackning 270580156@qq.com\n * @Date: 2025-02-17 11:17:28\n * @LastEditors: jackning 270580156@qq.com\n * @LastEditTime: 2025-04-04 11:21:36\n * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk\n * Please be aware of the BSL license restrictions before installing Bytedesk IM – \n * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. \n * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE \n * contact: 270580156@qq.com \n * \n * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. \n */\npackage com.bytedesk.ai.springai.providers.deepseek;\n\nimport org.springframework.ai.chat.client.ChatClient;\nimport org.springframework.ai.openai.OpenAiChatModel;\nimport org.springframework.ai.openai.OpenAiChatOptions;\nimport org.springframework.ai.openai.api.OpenAiApi;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n/**\n * Deepseek 聊天配置\n */\n@Configuration\n@ConditionalOnProperty(name = \"spring.ai.deepseek.chat.enabled\", havingValue = \"true\", matchIfMissing = false)\npublic class SpringAIDeepseekChatConfig {\n\n @Value(\"${spring.ai.deepseek.base-url:https://api.deepseek.com}\")\n private String baseUrl;\n\n @Value(\"${spring.ai.deepseek.api-key:sk-xxx}\")\n private String apiKey;\n\n @Value(\"${spring.ai.deepseek.chat.options.model:deepseek-chat}\")\n private String model;\n\n @Value(\"${spring.ai.deepseek.chat.options.temperature:0.7}\")\n private Double temperature;\n\n @Bean(\"deepseekApi\")\n OpenAiApi deepseekApi() {\n return OpenAiApi.builder()\n .baseUrl(baseUrl)\n .apiKey(apiKey)\n .build();\n }\n\n @Bean(\"deepseekChatOptions\")\n OpenAiChatOptions deepseekChatOptions() {\n return OpenAiChatOptions.builder()\n .model(model)\n .temperature(temperature)\n .build();\n }\n\n @Bean(\"deepseekChatModel\")\n OpenAiChatModel deepseekChatModel() {\n return OpenAiChatModel.builder()\n .openAiApi(deepseekApi())\n .defaultOptions(deepseekChatOptions())\n .build();\n }\n\n @Bean(\"deepseekChatClient\")\n ChatClient deepseekChatClient() {\n return ChatClient.builder(deepseekChatModel())\n .defaultOptions(deepseekChatOptions())\n .build();\n }\n\n} "}, "976193668c0e76c76b3f7ba8d9522c7fc2692a06": {"t": 1786068081.967758, "n": 2773, "h": "28987fad0367ad5c", "c": "/*\n * @Author: jackning 270580156@qq.com\n * @Date: 2025-02-17 11:17:28\n * @LastEditors: jackning 270580156@qq.com\n * @LastEditTime: 2025-07-18 11:45:00\n * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk\n * Please be aware of the BSL license restrictions before installing Bytedesk IM – \n * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. \n * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE \n * contact: 270580156@qq.com \n * \n * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. \n */\npackage com.bytedesk.ai.springai.providers.deepseek;\n\nimport org.springframework.ai.chat.client.ChatClient;\nimport org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;\nimport org.springframework.ai.deepseek.DeepSeekChatModel;\nimport org.springframework.ai.deepseek.DeepSeekChatOptions;\nimport org.springframework.ai.deepseek.api.DeepSeekApi;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n/**\n * Deepseek 聊天配置\n */\n@Configuration\n@ConditionalOnProperty(prefix = \"spring.ai.deepseek.chat\", name = \"enabled\", havingValue = \"true\", matchIfMissing = false)\npublic class SpringAIDeepseekChatConfig {\n\n @Value(\"${spring.ai.deepseek.base-url:https://api.deepseek.com}\")\n private String baseUrl;\n\n @Value(\"${spring.ai.deepseek.api-key:sk-xxx}\")\n private String apiKey;\n\n @Value(\"${spring.ai.deepseek.chat.options.model:deepseek-chat}\")\n private String model;\n\n @Value(\"${spring.ai.deepseek.chat.options.temperature:0.7}\")\n private Double temperature;\n\n @Bean(\"deepseekApi\")\n DeepSeekApi deepseekApi() {\n return DeepSeekApi.builder()\n .baseUrl(baseUrl)\n .apiKey(apiKey)\n .build();\n }\n\n @Bean(\"deepseekChatOptions\")\n DeepSeekChatOptions deepseekChatOptions() {\n return DeepSeekChatOptions.builder()\n .model(model)\n .temperature(temperature)\n .build();\n }\n\n @Bean(\"deepseekChatModel\")\n DeepSeekChatModel deepseekChatModel() {\n return DeepSeekChatModel.builder()\n .deepSeekApi(deepseekApi())\n .defaultOptions(deepseekChatOptions())\n .build();\n }\n\n @Bean(\"deepseekChatClient\")\n ChatClient deepseekChatClient() {\n return ChatClient.builder(deepseekChatModel())\n .defaultOptions(deepseekChatOptions())\n .defaultAdvisors(new SimpleLoggerAdvisor())\n .build();\n }\n\n} "}}, "starter/src/main/resources/properties/open/70-ai-batch-liquibase.properties": {"affe883cb26b5fd3e33902ae54e2bd31c3fa2ade": {"t": 1785747363.9365695, "n": 9664, "h": "659070bec2e7f1c3", "c": "# = ai\n# ===============================\n# spring.mvc.async.request-timeout=10000\nlogging.level.org.springframework.ai.chat.client.advisor=DEBUG\n\n# 启用Spring AI的观察功能\nspring.ai.observation.enabled=true\nspring.ai.retry.observation.enabled=true\n\n# 文本对话配置\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n# spring.ai.model.chat=none\n# spring.ai.model.chat=ollama\nspring.ai.model.chat=zhipuai\n# spring.ai.model.chat=dashscope\n\n# 向量模型\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n# spring.ai.model.embedding=none\n# spring.ai.model.embedding=ollama\nspring.ai.model.embedding=zhipuai\n# spring.ai.model.embedding=dashscope\n# spring.ai.model.embedding.text=\n# spring.ai.model.embedding.multimodal=\n\n# 视觉模型\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n# spring.ai.model.vision=none\n# spring.ai.model.vision=ollama\nspring.ai.model.vision=zhipuai\n# spring.ai.model.vision=dashscope\n# \nspring.ai.model.image=none\nspring.ai.model.moderation=none\n\n# 语音模型\n# spring.ai.model.audio=none\n# spring.ai.model.audio=ollama\nspring.ai.model.audio=zhipuai\n# spring.ai.model.audio=dashscope\n# \nspring.ai.model.audio.speech=none\nspring.ai.model.audio.transcription=none\n\n# 重排序模型\n# spring.ai.model.rerank=none\n# spring.ai.model.rerank=ollama\nspring.ai.model.rerank=zhipuai\n# spring.ai.model.rerank=dashscope\n\n# 多模态模型\n# spring.ai.model.multimodal=none\n# spring.ai.model.multimodal=ollama\nspring.ai.model.multimodal=zhipuai\n# spring.ai.model.multimodal=dashscope\n\n# ===============================\n# = skill\n# ===============================\n# Optional external skills directory. Expected layout: /path/to/skills/<skill-dir>/SKILL.md\n# bytedesk.ai.skill.external-directory=/opt/bytedesk/skills\n\n\n# spring ai alibaba\n# https://java2ai.com/docs/dev/get-started/\n# 阿里云百炼大模型获取api key:\n# https://bailian.console.aliyun.com/?apiKey=1#/api-key\n# 阿里云百炼大模型模型列表:\n# https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\nspring.ai.dashscope.enabled=false\n# spring.ai.dashscope.base-url=https://dashscope.aliyuncs.com\n# spring.ai.dashscope.api-key=sk-xxx\n# spring.ai.dashscope.chat.enabled=false\n# spring.ai.dashscope.chat.options.model=qwen-max\n# spring.ai.dashscope.chat.options.temperature=0.7\n# spring.ai.dashscope.chat.options.topP=3\n# 可选:语音合成专用Key(未配置时回退到 spring.ai.dashscope.api-key)\n# spring.ai.dashscope.audio.synthesis.api-key=\n# TTS 默认模型与音色,会同步给后端执行接口和管理台表单默认值\nspring.ai.dashscope.audio.synthesis.options.model=cosyvoice-v3-flash\nspring.ai.dashscope.audio.synthesis.options.voice=longanhuan\n# spring.ai.dashscope.audio.transcription.enabled=false\n# ASR 默认模型,会同步给后端执行接口和管理台表单默认值\nspring.ai.dashscope.audio.transcription.options.model=paraformer-v2\n# 可选:语音转写专用Key(未配置时回退到 spring.ai.dashscope.api-key)\n# spring.ai.dashscope.audio.transcription.api-key=\n# spring.ai.dashscope.audio.transcription.realtime-model=paraformer-realtime-v2\n# spring.ai.dashscope.image.enabled=false\n# spring.ai.dashscope.embedding.enabled=false\n# spring.ai.dashscope.audio.synthesis.enabled=false\n# spring.ai.nacos.prompt.template.enabled=false\n\n\n# zhipuai\n# https://open.bigmodel.cn/overview\n# https://docs.spring.io/spring-ai/reference/api/embeddings/zhipuai-embeddings.html\n# https://docs.spring.io/spring-ai/reference/api/chat/zhipuai-chat.html\n# spring.ai.zhipuai.base-url=https://open.bigmodel.cn/api/paas\n# 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n# spring.ai.zhipuai.chat.base-url=URL_ADDRESS\nspring.ai.zhipuai.api-key='sk-xxx'\nspring.ai.zhipuai.chat.enabled=true\n# 免费模型:https://open.bigmodel.cn/dev/api#glm-4\nspring.ai.zhipuai.chat.options.model=glm-4.5-flash\nspring.ai.zhipuai.chat.options.temperature=0.7\nspring.ai.zhipuai.chat.options.top-p=0.9\nspring.ai.zhipuai.chat.options.max-tokens=4096\n# 网络超时配置:request-timeout 为总请求超时,需大于 connect/read/write 之和\nspring.ai.zhipuai.request-timeout=55\nspring.ai.zhipuai.connection-timeout=30\nspring.ai.zhipuai.read-timeout=10\nspring.ai.zhipuai.write-timeout=10\nspring.ai.zhipuai.max-idle-connections=8\nspring.ai.zhipuai.keep-alive-duration=1\n# https://docs.spring.io/spring-ai/reference/api/embeddings/zhipuai-embeddings.html\nspring.ai.zhipuai.embedding.enabled=true\n# spring.ai.zhipuai.embedding.base-url=https://api.bigmodel.cn\n# spring.ai.zhipuai.embedding.api-key=sk-xxx\n# 1024维度的模型\nspring.ai.zhipuai.embedding.options.model=embedding-2\n# 2048维度的模型\n# spring.ai.zhipuai.embedding.options.model=embedding-3\nspring.ai.zhipuai.embedding.options.dimensions=1024\n# \n\n# ollama: \n# https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html\n# spring.ai.ollama.init.pull-model-strategy=always\n# 默认:11434,为防止本地冲突,如果是docker,需要修改为21434\n# spring.ai.ollama.base-url=http://127.0.0.1:11434\nspring.ai.ollama.base-url=http://127.0.0.1:21434\nspring.ai.ollama.chat.enabled=true\n# spring.ai.ollama.chat.options.model=deepseek-r1:latest\nspring.ai.ollama.chat.options.model=qwen3:0.6b\nspring.ai.ollama.chat.options.temperature=0.7\n# spring.ai.ollama.chat.options.numa=false\n# https://docs.spring.io/spring-ai/reference/api/embeddings/ollama-embeddings.html\nspring.ai.ollama.embedding.enabled=true\n# https://github.com/ollama/ollama?tab=readme-ov-file#model-library\nspring.ai.ollama.embedding.options.model=bge-m3:latest\n# spring.ai.ollama.embedding.options.numa=false\n# spring.ai.ollama.init.timeout=60s\n# spring.ai.ollama.init.max-retries=2\n# https://huggingface.co/BAAI/bge-reranker-v2-m3\nspring.ai.ollama.embedding.options.model.rerank=linux6200/bge-reranker-v2-m3:latest\n\n\n# ===============================\n# = bytedesk ai defaults\n# ===============================\n# 管理台和执行接口共享的 TTS 默认参数\nbytedesk.ai.tts.language=zh-CN\nbytedesk.ai.tts.audio-format=mp3\n\n# 管理台和执行接口共享的 ASR 默认参数\nbytedesk.ai.asr.source-format=mp3\nbytedesk.ai.asr.timeout-ms=180000\nbytedesk.ai.asr.poll-interval-ms=1500\nbytedesk.ai.asr.ttsasr.enabled=${BYTEDESK_AI_ASR_TTSASR_ENABLED:true}\nbytedesk.ai.asr.ttsasr.base-url=${BYTEDESK_AI_ASR_TTSASR_BASE_URL:http://127.0.0.1:18000}\nbytedesk.ai.asr.ttsasr.model=${BYTEDESK_AI_ASR_TTSASR_MODEL:funasr}\nbytedesk.ai.asr.ttsasr.language=${BYTEDESK_AI_ASR_TTSASR_LANGUAGE:auto}\n\n# TTS Realtime WebSocket 配置(Qwen-Audio Realtime 中继地址)\nbytedesk.ai.tts.realtime.ws-url=${BYTEDESK_AI_TTS_REALTIME_WS_URL:wss://dashscope.aliyuncs.com/api-ws/v1/realtime}\n\n# ===============================\n# = 向量数据库\n# ===============================\n# https://github.com/spring-projects/spring-ai/blob/main/spring-ai-vector-store/src/main/java/org/springframework/ai/vectorstore/SpringAIVectorStoreTypes.java\n# spring.ai.vectorstore.type=none\n# spring.ai.vectorstore.type=redis\n# spring.ai.vectorstore.type=chroma\nspring.ai.vectorstore.type=elasticsearch\n# spring.ai.vectorstore.type=weaviate\n# spring.ai.vectorstore.type=milvus\n# spring.ai.vectorstore.type=pgvector\n\n# elasticsearch\n# 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n# 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\nspring.elasticsearch.uris=http://127.0.0.1:19200\nspring.elasticsearch.username=elastic\nspring.elasticsearch.password=bytedesk123\n# \nspring.ai.vectorstore.elasticsearch.enabled=true\nspring.ai.vectorstore.elasticsearch.initialize-schema=true\nspring.ai.vectorstore.elasticsearch.index-name=bytedesk_vs_index\nspring.ai.vectorstore.elasticsearch.dimensions=1024\n# cosine/l2_norm/dot_product\nspring.ai.vectorstore.elasticsearch.similarity=cosine\n\n# chroma\n# spring.ai.vectorstore.chroma.enabled=false\n# spring.ai.vectorstore.chroma.uri=http://127.0.0.1:18000\n# spring.ai.vectorstore.chroma.collection-name=bytedesk_vs_collection\n# spring.ai.vectorstore.chroma.distance-function=COSINE\n# spring.ai.vectorstore.chroma.embedding-dimension=1024\n\n# weaviate\n# spring.ai.vectorstore.weaviate.enabled=false\n# spring.ai.vectorstore.weaviate.host=127.0.0.1\n# spring.ai.vectorstore.weaviate.port=18080\n# spring.ai.vectorstore.weaviate.scheme=http\n# spring.ai.vectorstore.weaviate.index-name=BytedeskVectors\n# spring.ai.vectorstore.weaviate.text-field-name=content\n\n# milvus\n# spring.ai.vectorstore.milvus.enabled=false\n# spring.ai.vectorstore.milvus.host=127.0.0.1\n# spring.ai.vectorstore.milvus.port=19530\n# spring.ai.vectorstore.milvus.collection-name=bytedesk_vectors\n# spring.ai.vectorstore.milvus.vector-field=embedding\n# spring.ai.vectorstore.milvus.text-field=content\n# spring.ai.vectorstore.milvus.dimensions=1024\n\n\n# ===============================\n# = Spring Batch Configuration\n# ===============================\n# 禁止启动时自动执行作业\nspring.batch.job.enabled=false\n# 始终初始化批处理表,生产环境建议设置为never\nspring.batch.jdbc.initialize-schema=never\n# 表前缀,默认是BATCH_\n# spring.batch.jdbc.schema=classpath:org/springframework/batch/core/schema-mysql.sql\n# spring.batch.jdbc.table-prefix=BD_BATCH_\n\n# ===============================\n# City Import (optional, async)\n# ===============================\n# 说明:用于首次启动后后台导入大体量城市数据(不阻塞启动)。默认关闭。\n# stagingScript: 直接导入 bytedesk_core_city.sql 到 bytedesk_core_city\nbytedesk.city.import.enabled=false\nbytedesk.city.import.force=false\nbytedesk.city.import.delay-ms=10000\nbytedesk.city.import.staging-script=classpath:sql/city/bytedesk_core_city.sql\nbytedesk.city.import.fallback-staging-file=${user.dir}/bytedesk_core_city.sql\n# 默认留空:脚本已直接写入 bytedesk_core_city\nbytedesk.city.import.transform-script=\nbytedesk.city.import.drop-staging-after=true\nbytedesk.city.import.lock-name=bytedesk:city:import\nbytedesk.city.import.lock-timeout-seconds=0\n\n#\n# ===============================\n# = liquibase\n# https://contribute.liquibase.com/extensions-channels/directory/integration-docs/springboot/configuration/\n# ===============================\nspring.liquibase.enabled=true\nspring.liquibase.change-log=classpath:db/changelog/master.xml\n"}, "c7dc22d97d49758e385a0c961c95fe12e4266488": {"t": 1785748607.2548032, "n": 9664, "h": "659070bec2e7f1c3", "c": "# = ai\n# ===============================\n# spring.mvc.async.request-timeout=10000\nlogging.level.org.springframework.ai.chat.client.advisor=DEBUG\n\n# 启用Spring AI的观察功能\nspring.ai.observation.enabled=true\nspring.ai.retry.observation.enabled=true\n\n# 文本对话配置\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n# spring.ai.model.chat=none\n# spring.ai.model.chat=ollama\nspring.ai.model.chat=zhipuai\n# spring.ai.model.chat=dashscope\n\n# 向量模型\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n# spring.ai.model.embedding=none\n# spring.ai.model.embedding=ollama\nspring.ai.model.embedding=zhipuai\n# spring.ai.model.embedding=dashscope\n# spring.ai.model.embedding.text=\n# spring.ai.model.embedding.multimodal=\n\n# 视觉模型\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n# spring.ai.model.vision=none\n# spring.ai.model.vision=ollama\nspring.ai.model.vision=zhipuai\n# spring.ai.model.vision=dashscope\n# \nspring.ai.model.image=none\nspring.ai.model.moderation=none\n\n# 语音模型\n# spring.ai.model.audio=none\n# spring.ai.model.audio=ollama\nspring.ai.model.audio=zhipuai\n# spring.ai.model.audio=dashscope\n# \nspring.ai.model.audio.speech=none\nspring.ai.model.audio.transcription=none\n\n# 重排序模型\n# spring.ai.model.rerank=none\n# spring.ai.model.rerank=ollama\nspring.ai.model.rerank=zhipuai\n# spring.ai.model.rerank=dashscope\n\n# 多模态模型\n# spring.ai.model.multimodal=none\n# spring.ai.model.multimodal=ollama\nspring.ai.model.multimodal=zhipuai\n# spring.ai.model.multimodal=dashscope\n\n# ===============================\n# = skill\n# ===============================\n# Optional external skills directory. Expected layout: /path/to/skills/<skill-dir>/SKILL.md\n# bytedesk.ai.skill.external-directory=/opt/bytedesk/skills\n\n\n# spring ai alibaba\n# https://java2ai.com/docs/dev/get-started/\n# 阿里云百炼大模型获取api key:\n# https://bailian.console.aliyun.com/?apiKey=1#/api-key\n# 阿里云百炼大模型模型列表:\n# https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\nspring.ai.dashscope.enabled=false\n# spring.ai.dashscope.base-url=https://dashscope.aliyuncs.com\n# spring.ai.dashscope.api-key=sk-xxx\n# spring.ai.dashscope.chat.enabled=false\n# spring.ai.dashscope.chat.options.model=qwen-max\n# spring.ai.dashscope.chat.options.temperature=0.7\n# spring.ai.dashscope.chat.options.topP=3\n# 可选:语音合成专用Key(未配置时回退到 spring.ai.dashscope.api-key)\n# spring.ai.dashscope.audio.synthesis.api-key=\n# TTS 默认模型与音色,会同步给后端执行接口和管理台表单默认值\nspring.ai.dashscope.audio.synthesis.options.model=cosyvoice-v3-flash\nspring.ai.dashscope.audio.synthesis.options.voice=longanhuan\n# spring.ai.dashscope.audio.transcription.enabled=false\n# ASR 默认模型,会同步给后端执行接口和管理台表单默认值\nspring.ai.dashscope.audio.transcription.options.model=paraformer-v2\n# 可选:语音转写专用Key(未配置时回退到 spring.ai.dashscope.api-key)\n# spring.ai.dashscope.audio.transcription.api-key=\n# spring.ai.dashscope.audio.transcription.realtime-model=paraformer-realtime-v2\n# spring.ai.dashscope.image.enabled=false\n# spring.ai.dashscope.embedding.enabled=false\n# spring.ai.dashscope.audio.synthesis.enabled=false\n# spring.ai.nacos.prompt.template.enabled=false\n\n\n# zhipuai\n# https://open.bigmodel.cn/overview\n# https://docs.spring.io/spring-ai/reference/api/embeddings/zhipuai-embeddings.html\n# https://docs.spring.io/spring-ai/reference/api/chat/zhipuai-chat.html\n# spring.ai.zhipuai.base-url=https://open.bigmodel.cn/api/paas\n# 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n# spring.ai.zhipuai.chat.base-url=URL_ADDRESS\nspring.ai.zhipuai.api-key='sk-xxx'\nspring.ai.zhipuai.chat.enabled=true\n# 免费模型:https://open.bigmodel.cn/dev/api#glm-4\nspring.ai.zhipuai.chat.options.model=glm-4.5-flash\nspring.ai.zhipuai.chat.options.temperature=0.7\nspring.ai.zhipuai.chat.options.top-p=0.9\nspring.ai.zhipuai.chat.options.max-tokens=4096\n# 网络超时配置:request-timeout 为总请求超时,需大于 connect/read/write 之和\nspring.ai.zhipuai.request-timeout=55\nspring.ai.zhipuai.connection-timeout=30\nspring.ai.zhipuai.read-timeout=10\nspring.ai.zhipuai.write-timeout=10\nspring.ai.zhipuai.max-idle-connections=8\nspring.ai.zhipuai.keep-alive-duration=1\n# https://docs.spring.io/spring-ai/reference/api/embeddings/zhipuai-embeddings.html\nspring.ai.zhipuai.embedding.enabled=true\n# spring.ai.zhipuai.embedding.base-url=https://api.bigmodel.cn\n# spring.ai.zhipuai.embedding.api-key=sk-xxx\n# 1024维度的模型\nspring.ai.zhipuai.embedding.options.model=embedding-2\n# 2048维度的模型\n# spring.ai.zhipuai.embedding.options.model=embedding-3\nspring.ai.zhipuai.embedding.options.dimensions=1024\n# \n\n# ollama: \n# https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html\n# spring.ai.ollama.init.pull-model-strategy=always\n# 默认:11434,为防止本地冲突,如果是docker,需要修改为21434\n# spring.ai.ollama.base-url=http://127.0.0.1:11434\nspring.ai.ollama.base-url=http://127.0.0.1:21434\nspring.ai.ollama.chat.enabled=true\n# spring.ai.ollama.chat.options.model=deepseek-r1:latest\nspring.ai.ollama.chat.options.model=qwen3:0.6b\nspring.ai.ollama.chat.options.temperature=0.7\n# spring.ai.ollama.chat.options.numa=false\n# https://docs.spring.io/spring-ai/reference/api/embeddings/ollama-embeddings.html\nspring.ai.ollama.embedding.enabled=true\n# https://github.com/ollama/ollama?tab=readme-ov-file#model-library\nspring.ai.ollama.embedding.options.model=bge-m3:latest\n# spring.ai.ollama.embedding.options.numa=false\n# spring.ai.ollama.init.timeout=60s\n# spring.ai.ollama.init.max-retries=2\n# https://huggingface.co/BAAI/bge-reranker-v2-m3\nspring.ai.ollama.embedding.options.model.rerank=linux6200/bge-reranker-v2-m3:latest\n\n\n# ===============================\n# = bytedesk ai defaults\n# ===============================\n# 管理台和执行接口共享的 TTS 默认参数\nbytedesk.ai.tts.language=zh-CN\nbytedesk.ai.tts.audio-format=mp3\n\n# 管理台和执行接口共享的 ASR 默认参数\nbytedesk.ai.asr.source-format=mp3\nbytedesk.ai.asr.timeout-ms=180000\nbytedesk.ai.asr.poll-interval-ms=1500\nbytedesk.ai.asr.ttsasr.enabled=${BYTEDESK_AI_ASR_TTSASR_ENABLED:true}\nbytedesk.ai.asr.ttsasr.base-url=${BYTEDESK_AI_ASR_TTSASR_BASE_URL:http://127.0.0.1:18000}\nbytedesk.ai.asr.ttsasr.model=${BYTEDESK_AI_ASR_TTSASR_MODEL:funasr}\nbytedesk.ai.asr.ttsasr.language=${BYTEDESK_AI_ASR_TTSASR_LANGUAGE:auto}\n\n# TTS Realtime WebSocket 配置(Qwen-Audio Realtime 中继地址)\nbytedesk.ai.tts.realtime.ws-url=${BYTEDESK_AI_TTS_REALTIME_WS_URL:wss://dashscope.aliyuncs.com/api-ws/v1/realtime}\n\n# ===============================\n# = 向量数据库\n# ===============================\n# https://github.com/spring-projects/spring-ai/blob/main/spring-ai-vector-store/src/main/java/org/springframework/ai/vectorstore/SpringAIVectorStoreTypes.java\n# spring.ai.vectorstore.type=none\n# spring.ai.vectorstore.type=redis\n# spring.ai.vectorstore.type=chroma\nspring.ai.vectorstore.type=elasticsearch\n# spring.ai.vectorstore.type=weaviate\n# spring.ai.vectorstore.type=milvus\n# spring.ai.vectorstore.type=pgvector\n\n# elasticsearch\n# 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n# 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\nspring.elasticsearch.uris=http://127.0.0.1:19200\nspring.elasticsearch.username=elastic\nspring.elasticsearch.password=bytedesk123\n# \nspring.ai.vectorstore.elasticsearch.enabled=true\nspring.ai.vectorstore.elasticsearch.initialize-schema=true\nspring.ai.vectorstore.elasticsearch.index-name=bytedesk_vs_index\nspring.ai.vectorstore.elasticsearch.dimensions=1024\n# cosine/l2_norm/dot_product\nspring.ai.vectorstore.elasticsearch.similarity=cosine\n\n# chroma\n# spring.ai.vectorstore.chroma.enabled=false\n# spring.ai.vectorstore.chroma.uri=http://127.0.0.1:18000\n# spring.ai.vectorstore.chroma.collection-name=bytedesk_vs_collection\n# spring.ai.vectorstore.chroma.distance-function=COSINE\n# spring.ai.vectorstore.chroma.embedding-dimension=1024\n\n# weaviate\n# spring.ai.vectorstore.weaviate.enabled=false\n# spring.ai.vectorstore.weaviate.host=127.0.0.1\n# spring.ai.vectorstore.weaviate.port=18080\n# spring.ai.vectorstore.weaviate.scheme=http\n# spring.ai.vectorstore.weaviate.index-name=BytedeskVectors\n# spring.ai.vectorstore.weaviate.text-field-name=content\n\n# milvus\n# spring.ai.vectorstore.milvus.enabled=false\n# spring.ai.vectorstore.milvus.host=127.0.0.1\n# spring.ai.vectorstore.milvus.port=19530\n# spring.ai.vectorstore.milvus.collection-name=bytedesk_vectors\n# spring.ai.vectorstore.milvus.vector-field=embedding\n# spring.ai.vectorstore.milvus.text-field=content\n# spring.ai.vectorstore.milvus.dimensions=1024\n\n\n# ===============================\n# = Spring Batch Configuration\n# ===============================\n# 禁止启动时自动执行作业\nspring.batch.job.enabled=false\n# 始终初始化批处理表,生产环境建议设置为never\nspring.batch.jdbc.initialize-schema=never\n# 表前缀,默认是BATCH_\n# spring.batch.jdbc.schema=classpath:org/springframework/batch/core/schema-mysql.sql\n# spring.batch.jdbc.table-prefix=BD_BATCH_\n\n# ===============================\n# City Import (optional, async)\n# ===============================\n# 说明:用于首次启动后后台导入大体量城市数据(不阻塞启动)。默认关闭。\n# stagingScript: 直接导入 bytedesk_core_city.sql 到 bytedesk_core_city\nbytedesk.city.import.enabled=false\nbytedesk.city.import.force=false\nbytedesk.city.import.delay-ms=10000\nbytedesk.city.import.staging-script=classpath:sql/city/bytedesk_core_city.sql\nbytedesk.city.import.fallback-staging-file=${user.dir}/bytedesk_core_city.sql\n# 默认留空:脚本已直接写入 bytedesk_core_city\nbytedesk.city.import.transform-script=\nbytedesk.city.import.drop-staging-after=true\nbytedesk.city.import.lock-name=bytedesk:city:import\nbytedesk.city.import.lock-timeout-seconds=0\n\n#\n# ===============================\n# = liquibase\n# https://contribute.liquibase.com/extensions-channels/directory/integration-docs/springboot/configuration/\n# ===============================\nspring.liquibase.enabled=true\nspring.liquibase.change-log=classpath:db/changelog/master.xml\n"}, "ec8ad9c7b7e2c65bd8e1e1ded110bf991ceec923": {"t": 1785748608.444016, "n": 9495, "h": "1c73685c71f59cd6", "c": "# = ai\n# ===============================\n# spring.mvc.async.request-timeout=10000\nlogging.level.org.springframework.ai.chat.client.advisor=DEBUG\n\n# 启用Spring AI的观察功能\nspring.ai.observation.enabled=true\nspring.ai.retry.observation.enabled=true\n\n# 文本对话配置\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n# spring.ai.model.chat=none\n# spring.ai.model.chat=ollama\nspring.ai.model.chat=zhipuai\n# spring.ai.model.chat=dashscope\n\n# 向量模型\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n# spring.ai.model.embedding=none\n# spring.ai.model.embedding=ollama\nspring.ai.model.embedding=zhipuai\n# spring.ai.model.embedding=dashscope\n# spring.ai.model.embedding.text=\n# spring.ai.model.embedding.multimodal=\n\n# 视觉模型\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n# spring.ai.model.vision=none\n# spring.ai.model.vision=ollama\nspring.ai.model.vision=zhipuai\n# spring.ai.model.vision=dashscope\n# \nspring.ai.model.image=none\nspring.ai.model.moderation=none\n\n# 语音模型\n# spring.ai.model.audio=none\n# spring.ai.model.audio=ollama\nspring.ai.model.audio=zhipuai\n# spring.ai.model.audio=dashscope\n# \nspring.ai.model.audio.speech=none\nspring.ai.model.audio.transcription=none\n\n# 重排序模型\n# spring.ai.model.rerank=none\n# spring.ai.model.rerank=ollama\nspring.ai.model.rerank=zhipuai\n# spring.ai.model.rerank=dashscope\n\n# 多模态模型\n# spring.ai.model.multimodal=none\n# spring.ai.model.multimodal=ollama\nspring.ai.model.multimodal=zhipuai\n# spring.ai.model.multimodal=dashscope\n\n# ===============================\n# = skill\n# ===============================\n# Optional external skills directory. Expected layout: /path/to/skills/<skill-dir>/SKILL.md\n# bytedesk.ai.skill.external-directory=/opt/bytedesk/skills\n\n\n# spring ai alibaba\n# https://java2ai.com/docs/dev/get-started/\n# 阿里云百炼大模型获取api key:\n# https://bailian.console.aliyun.com/?apiKey=1#/api-key\n# 阿里云百炼大模型模型列表:\n# https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\nspring.ai.dashscope.enabled=false\n# spring.ai.dashscope.base-url=https://dashscope.aliyuncs.com\n# spring.ai.dashscope.api-key=sk-xxx\n# spring.ai.dashscope.chat.enabled=false\n# spring.ai.dashscope.chat.options.model=qwen-max\n# spring.ai.dashscope.chat.options.temperature=0.7\n# spring.ai.dashscope.chat.options.topP=3\n# 可选:语音合成专用Key(未配置时回退到 spring.ai.dashscope.api-key)\n# spring.ai.dashscope.audio.synthesis.api-key=\n# TTS 默认模型与音色,会同步给后端执行接口和管理台表单默认值\nspring.ai.dashscope.audio.synthesis.options.model=cosyvoice-v3-flash\nspring.ai.dashscope.audio.synthesis.options.voice=longanhuan\n# spring.ai.dashscope.audio.transcription.enabled=false\n# ASR 默认模型,会同步给后端执行接口和管理台表单默认值\nspring.ai.dashscope.audio.transcription.options.model=paraformer-v2\n# 可选:语音转写专用Key(未配置时回退到 spring.ai.dashscope.api-key)\n# spring.ai.dashscope.audio.transcription.api-key=\n# spring.ai.dashscope.audio.transcription.realtime-model=paraformer-realtime-v2\n# spring.ai.dashscope.image.enabled=false\n# spring.ai.dashscope.embedding.enabled=false\n# spring.ai.dashscope.audio.synthesis.enabled=false\n# spring.ai.nacos.prompt.template.enabled=false\n\n\n# zhipuai\n# https://open.bigmodel.cn/overview\n# https://docs.spring.io/spring-ai/reference/api/embeddings/zhipuai-embeddings.html\n# https://docs.spring.io/spring-ai/reference/api/chat/zhipuai-chat.html\n# spring.ai.zhipuai.base-url=https://open.bigmodel.cn/api/paas\n# 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n# spring.ai.zhipuai.chat.base-url=URL_ADDRESS\nspring.ai.zhipuai.api-key='sk-xxx'\nspring.ai.zhipuai.chat.enabled=true\n# 免费模型:https://open.bigmodel.cn/dev/api#glm-4\nspring.ai.zhipuai.chat.options.model=glm-4.5-flash\nspring.ai.zhipuai.chat.options.temperature=0.7\nspring.ai.zhipuai.chat.options.top-p=0.9\nspring.ai.zhipuai.chat.options.max-tokens=4096\n# 网络超时配置:request-timeout 为总请求超时,需大于 connect/read/write 之和\nspring.ai.zhipuai.request-timeout=55\nspring.ai.zhipuai.connection-timeout=30\nspring.ai.zhipuai.read-timeout=10\nspring.ai.zhipuai.write-timeout=10\nspring.ai.zhipuai.max-idle-connections=8\nspring.ai.zhipuai.keep-alive-duration=1\n# https://docs.spring.io/spring-ai/reference/api/embeddings/zhipuai-embeddings.html\nspring.ai.zhipuai.embedding.enabled=true\n# spring.ai.zhipuai.embedding.base-url=https://api.bigmodel.cn\n# spring.ai.zhipuai.embedding.api-key=sk-xxx\n# 1024维度的模型\nspring.ai.zhipuai.embedding.options.model=embedding-2\n# 2048维度的模型\n# spring.ai.zhipuai.embedding.options.model=embedding-3\nspring.ai.zhipuai.embedding.options.dimensions=1024\n# \n\n# ollama: \n# https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html\n# spring.ai.ollama.init.pull-model-strategy=always\n# 默认:11434,为防止本地冲突,如果是docker,需要修改为21434\n# spring.ai.ollama.base-url=http://127.0.0.1:11434\nspring.ai.ollama.base-url=http://127.0.0.1:21434\nspring.ai.ollama.chat.enabled=true\n# spring.ai.ollama.chat.options.model=deepseek-r1:latest\nspring.ai.ollama.chat.options.model=qwen3:0.6b\nspring.ai.ollama.chat.options.temperature=0.7\n# spring.ai.ollama.chat.options.numa=false\n# https://docs.spring.io/spring-ai/reference/api/embeddings/ollama-embeddings.html\nspring.ai.ollama.embedding.enabled=true\n# https://github.com/ollama/ollama?tab=readme-ov-file#model-library\nspring.ai.ollama.embedding.options.model=bge-m3:latest\n# spring.ai.ollama.embedding.options.numa=false\n# spring.ai.ollama.init.timeout=60s\n# spring.ai.ollama.init.max-retries=2\n# https://huggingface.co/BAAI/bge-reranker-v2-m3\nspring.ai.ollama.embedding.options.model.rerank=linux6200/bge-reranker-v2-m3:latest\n\n\n# ===============================\n# = bytedesk ai defaults\n# ===============================\n# 管理台和执行接口共享的 TTS 默认参数\nbytedesk.ai.tts.language=zh-CN\nbytedesk.ai.tts.audio-format=mp3\n\n# 管理台和执行接口共享的 ASR 默认参数\nbytedesk.ai.asr.source-format=mp3\nbytedesk.ai.asr.timeout-ms=180000\nbytedesk.ai.asr.poll-interval-ms=1500\nbytedesk.ai.asr.ttsasr.enabled=${BYTEDESK_AI_ASR_TTSASR_ENABLED:true}\nbytedesk.ai.asr.ttsasr.base-url=${BYTEDESK_AI_ASR_TTSASR_BASE_URL:http://127.0.0.1:18000}\nbytedesk.ai.asr.ttsasr.model=${BYTEDESK_AI_ASR_TTSASR_MODEL:funasr}\nbytedesk.ai.asr.ttsasr.language=${BYTEDESK_AI_ASR_TTSASR_LANGUAGE:auto}\n\n\n# ===============================\n# = 向量数据库\n# ===============================\n# https://github.com/spring-projects/spring-ai/blob/main/spring-ai-vector-store/src/main/java/org/springframework/ai/vectorstore/SpringAIVectorStoreTypes.java\n# spring.ai.vectorstore.type=none\n# spring.ai.vectorstore.type=redis\n# spring.ai.vectorstore.type=chroma\nspring.ai.vectorstore.type=elasticsearch\n# spring.ai.vectorstore.type=weaviate\n# spring.ai.vectorstore.type=milvus\n# spring.ai.vectorstore.type=pgvector\n\n# elasticsearch\n# 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n# 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\nspring.elasticsearch.uris=http://127.0.0.1:19200\nspring.elasticsearch.username=elastic\nspring.elasticsearch.password=bytedesk123\n# \nspring.ai.vectorstore.elasticsearch.enabled=true\nspring.ai.vectorstore.elasticsearch.initialize-schema=true\nspring.ai.vectorstore.elasticsearch.index-name=bytedesk_vs_index\nspring.ai.vectorstore.elasticsearch.dimensions=1024\n# cosine/l2_norm/dot_product\nspring.ai.vectorstore.elasticsearch.similarity=cosine\n\n# chroma\n# spring.ai.vectorstore.chroma.enabled=false\n# spring.ai.vectorstore.chroma.uri=http://127.0.0.1:18000\n# spring.ai.vectorstore.chroma.collection-name=bytedesk_vs_collection\n# spring.ai.vectorstore.chroma.distance-function=COSINE\n# spring.ai.vectorstore.chroma.embedding-dimension=1024\n\n# weaviate\n# spring.ai.vectorstore.weaviate.enabled=false\n# spring.ai.vectorstore.weaviate.host=127.0.0.1\n# spring.ai.vectorstore.weaviate.port=18080\n# spring.ai.vectorstore.weaviate.scheme=http\n# spring.ai.vectorstore.weaviate.index-name=BytedeskVectors\n# spring.ai.vectorstore.weaviate.text-field-name=content\n\n# milvus\n# spring.ai.vectorstore.milvus.enabled=false\n# spring.ai.vectorstore.milvus.host=127.0.0.1\n# spring.ai.vectorstore.milvus.port=19530\n# spring.ai.vectorstore.milvus.collection-name=bytedesk_vectors\n# spring.ai.vectorstore.milvus.vector-field=embedding\n# spring.ai.vectorstore.milvus.text-field=content\n# spring.ai.vectorstore.milvus.dimensions=1024\n\n\n# ===============================\n# = Spring Batch Configuration\n# ===============================\n# 禁止启动时自动执行作业\nspring.batch.job.enabled=false\n# 始终初始化批处理表,生产环境建议设置为never\nspring.batch.jdbc.initialize-schema=never\n# 表前缀,默认是BATCH_\n# spring.batch.jdbc.schema=classpath:org/springframework/batch/core/schema-mysql.sql\n# spring.batch.jdbc.table-prefix=BD_BATCH_\n\n# ===============================\n# City Import (optional, async)\n# ===============================\n# 说明:用于首次启动后后台导入大体量城市数据(不阻塞启动)。默认关闭。\n# stagingScript: 直接导入 bytedesk_core_city.sql 到 bytedesk_core_city\nbytedesk.city.import.enabled=false\nbytedesk.city.import.force=false\nbytedesk.city.import.delay-ms=10000\nbytedesk.city.import.staging-script=classpath:sql/city/bytedesk_core_city.sql\nbytedesk.city.import.fallback-staging-file=${user.dir}/bytedesk_core_city.sql\n# 默认留空:脚本已直接写入 bytedesk_core_city\nbytedesk.city.import.transform-script=\nbytedesk.city.import.drop-staging-after=true\nbytedesk.city.import.lock-name=bytedesk:city:import\nbytedesk.city.import.lock-timeout-seconds=0\n\n#\n# ===============================\n# = liquibase\n# https://contribute.liquibase.com/extensions-channels/directory/integration-docs/springboot/configuration/\n# ===============================\nspring.liquibase.enabled=true\nspring.liquibase.change-log=classpath:db/changelog/master.xml\n"}, "6bd9232e8d9b99e768847f54aeb668aa2b8faa82": {"t": 1785748609.5934272, "n": 10232, "h": "9781174d90385b0f", "c": "# = ai\n# ===============================\n# spring.mvc.async.request-timeout=10000\nlogging.level.org.springframework.ai.chat.client.advisor=DEBUG\n\n# 启用Spring AI的观察功能\nspring.ai.observation.enabled=true\nspring.ai.retry.observation.enabled=true\n\n# 文本对话配置\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n# spring.ai.model.chat=none\n# spring.ai.model.chat=ollama\nspring.ai.model.chat=zhipuai\n# spring.ai.model.chat=dashscope\n\n# 向量模型\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n# spring.ai.model.embedding=none\n# spring.ai.model.embedding=ollama\nspring.ai.model.embedding=zhipuai\n# spring.ai.model.embedding=dashscope\n# spring.ai.model.embedding.text=\n# spring.ai.model.embedding.multimodal=\n\n# 视觉模型\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n# spring.ai.model.vision=none\n# spring.ai.model.vision=ollama\nspring.ai.model.vision=zhipuai\n# spring.ai.model.vision=dashscope\n# \nspring.ai.model.image=none\nspring.ai.model.moderation=none\n\n# 语音模型\n# spring.ai.model.audio=none\n# spring.ai.model.audio=ollama\nspring.ai.model.audio=zhipuai\n# spring.ai.model.audio=dashscope\n# \nspring.ai.model.audio.speech=none\nspring.ai.model.audio.transcription=none\n\n# 重排序模型\n# spring.ai.model.rerank=none\n# spring.ai.model.rerank=ollama\nspring.ai.model.rerank=zhipuai\n# spring.ai.model.rerank=dashscope\n\n# 多模态模型\n# spring.ai.model.multimodal=none\n# spring.ai.model.multimodal=ollama\nspring.ai.model.multimodal=zhipuai\n# spring.ai.model.multimodal=dashscope\n\n# ===============================\n# = skill\n# ===============================\n# Optional external skills directory. Expected layout: /path/to/skills/<skill-dir>/SKILL.md\n# bytedesk.ai.skill.external-directory=/opt/bytedesk/skills\n\n\n# spring ai alibaba\n# https://java2ai.com/docs/dev/get-started/\n# 阿里云百炼大模型获取api key:\n# https://bailian.console.aliyun.com/?apiKey=1#/api-key\n# 阿里云百炼大模型模型列表:\n# https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\nspring.ai.dashscope.enabled=false\n# spring.ai.dashscope.base-url=https://dashscope.aliyuncs.com\n# spring.ai.dashscope.api-key=sk-xxx\n# spring.ai.dashscope.chat.enabled=false\n# spring.ai.dashscope.chat.options.model=qwen-max\n# spring.ai.dashscope.chat.options.temperature=0.7\n# spring.ai.dashscope.chat.options.topP=3\n# 可选:语音合成专用Key(未配置时回退到 spring.ai.dashscope.api-key)\n# spring.ai.dashscope.audio.synthesis.api-key=\n# TTS 默认模型与音色,会同步给后端执行接口和管理台表单默认值\nspring.ai.dashscope.audio.synthesis.options.model=cosyvoice-v3-flash\nspring.ai.dashscope.audio.synthesis.options.voice=longanhuan\n# spring.ai.dashscope.audio.transcription.enabled=false\n# ASR 默认模型,会同步给后端执行接口和管理台表单默认值\nspring.ai.dashscope.audio.transcription.options.model=paraformer-v2\n# 可选:语音转写专用Key(未配置时回退到 spring.ai.dashscope.api-key)\n# spring.ai.dashscope.audio.transcription.api-key=\n# spring.ai.dashscope.audio.transcription.realtime-model=paraformer-realtime-v2\n# spring.ai.dashscope.image.enabled=false\n# spring.ai.dashscope.embedding.enabled=false\n# spring.ai.dashscope.audio.synthesis.enabled=false\n# spring.ai.nacos.prompt.template.enabled=false\n\n\n# zhipuai\n# https://open.bigmodel.cn/overview\n# https://docs.spring.io/spring-ai/reference/api/embeddings/zhipuai-embeddings.html\n# https://docs.spring.io/spring-ai/reference/api/chat/zhipuai-chat.html\n# spring.ai.zhipuai.base-url=https://open.bigmodel.cn/api/paas\n# 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n# spring.ai.zhipuai.chat.base-url=URL_ADDRESS\nspring.ai.zhipuai.api-key='sk-xxx'\nspring.ai.zhipuai.chat.enabled=true\n# 免费模型:https://open.bigmodel.cn/dev/api#glm-4\nspring.ai.zhipuai.chat.options.model=glm-4.5-flash\nspring.ai.zhipuai.chat.options.temperature=0.7\nspring.ai.zhipuai.chat.options.top-p=0.9\nspring.ai.zhipuai.chat.options.max-tokens=4096\n# 网络超时配置:request-timeout 为总请求超时,需大于 connect/read/write 之和\nspring.ai.zhipuai.request-timeout=55\nspring.ai.zhipuai.connection-timeout=30\nspring.ai.zhipuai.read-timeout=10\nspring.ai.zhipuai.write-timeout=10\nspring.ai.zhipuai.max-idle-connections=8\nspring.ai.zhipuai.keep-alive-duration=1\n# https://docs.spring.io/spring-ai/reference/api/embeddings/zhipuai-embeddings.html\nspring.ai.zhipuai.embedding.enabled=true\n# spring.ai.zhipuai.embedding.base-url=https://api.bigmodel.cn\n# spring.ai.zhipuai.embedding.api-key=sk-xxx\n# 1024维度的模型\nspring.ai.zhipuai.embedding.options.model=embedding-2\n# 2048维度的模型\n# spring.ai.zhipuai.embedding.options.model=embedding-3\nspring.ai.zhipuai.embedding.options.dimensions=1024\n# \n\n# ollama: \n# https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html\n# spring.ai.ollama.init.pull-model-strategy=always\n# 默认:11434,为防止本地冲突,如果是docker,需要修改为21434\n# spring.ai.ollama.base-url=http://127.0.0.1:11434\nspring.ai.ollama.base-url=http://127.0.0.1:21434\nspring.ai.ollama.chat.enabled=true\n# spring.ai.ollama.chat.options.model=deepseek-r1:latest\nspring.ai.ollama.chat.options.model=qwen3:0.6b\nspring.ai.ollama.chat.options.temperature=0.7\n# spring.ai.ollama.chat.options.numa=false\n# https://docs.spring.io/spring-ai/reference/api/embeddings/ollama-embeddings.html\nspring.ai.ollama.embedding.enabled=true\n# https://github.com/ollama/ollama?tab=readme-ov-file#model-library\nspring.ai.ollama.embedding.options.model=bge-m3:latest\n# spring.ai.ollama.embedding.options.numa=false\n# spring.ai.ollama.init.timeout=60s\n# spring.ai.ollama.init.max-retries=2\n# https://huggingface.co/BAAI/bge-reranker-v2-m3\nspring.ai.ollama.embedding.options.model.rerank=linux6200/bge-reranker-v2-m3:latest\n\n\n# ===============================\n# = bytedesk ai defaults\n# ===============================\n# 管理台和执行接口共享的 TTS 默认参数\nbytedesk.ai.tts.language=zh-CN\nbytedesk.ai.tts.audio-format=mp3\n\n# 管理台和执行接口共享的 ASR 默认参数\nbytedesk.ai.asr.source-format=mp3\nbytedesk.ai.asr.timeout-ms=180000\nbytedesk.ai.asr.poll-interval-ms=1500\nbytedesk.ai.asr.ttsasr.enabled=${BYTEDESK_AI_ASR_TTSASR_ENABLED:true}\nbytedesk.ai.asr.ttsasr.base-url=${BYTEDESK_AI_ASR_TTSASR_BASE_URL:http://127.0.0.1:18000}\nbytedesk.ai.asr.ttsasr.model=${BYTEDESK_AI_ASR_TTSASR_MODEL:funasr}\nbytedesk.ai.asr.ttsasr.language=${BYTEDESK_AI_ASR_TTSASR_LANGUAGE:auto}\n\n\n# ===============================\n# = 向量数据库\n# ===============================\n# https://github.com/spring-projects/spring-ai/blob/main/spring-ai-vector-store/src/main/java/org/springframework/ai/vectorstore/SpringAIVectorStoreTypes.java\n# spring.ai.vectorstore.type=none\n# spring.ai.vectorstore.type=redis\n# spring.ai.vectorstore.type=chroma\nspring.ai.vectorstore.type=elasticsearch\n# spring.ai.vectorstore.type=weaviate\n# spring.ai.vectorstore.type=milvus\n# spring.ai.vectorstore.type=pgvector\n\n# elasticsearch\n# 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n# 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\nspring.elasticsearch.uris=http://127.0.0.1:19200\nspring.elasticsearch.username=elastic\nspring.elasticsearch.password=bytedesk123\n# \nspring.ai.vectorstore.elasticsearch.enabled=true\nspring.ai.vectorstore.elasticsearch.initialize-schema=true\nspring.ai.vectorstore.elasticsearch.index-name=bytedesk_vs_index\nspring.ai.vectorstore.elasticsearch.dimensions=1024\n# cosine/l2_norm/dot_product\nspring.ai.vectorstore.elasticsearch.similarity=cosine\n\n# chroma\n# spring.ai.vectorstore.chroma.enabled=false\n# spring.ai.vectorstore.chroma.uri=http://127.0.0.1:18000\n# spring.ai.vectorstore.chroma.collection-name=bytedesk_vs_collection\n# spring.ai.vectorstore.chroma.distance-function=COSINE\n# spring.ai.vectorstore.chroma.embedding-dimension=1024\n\n# weaviate\n# spring.ai.vectorstore.weaviate.enabled=false\n# spring.ai.vectorstore.weaviate.host=127.0.0.1\n# spring.ai.vectorstore.weaviate.port=18080\n# spring.ai.vectorstore.weaviate.scheme=http\n# spring.ai.vectorstore.weaviate.index-name=BytedeskVectors\n# spring.ai.vectorstore.weaviate.text-field-name=content\n\n# milvus\n# spring.ai.vectorstore.milvus.enabled=false\n# spring.ai.vectorstore.milvus.host=127.0.0.1\n# spring.ai.vectorstore.milvus.port=19530\n# spring.ai.vectorstore.milvus.collection-name=bytedesk_vectors\n# spring.ai.vectorstore.milvus.vector-field=embedding\n# spring.ai.vectorstore.milvus.text-field=content\n# spring.ai.vectorstore.milvus.dimensions=1024\n\n\n# ===============================\n# = Spring Batch Configuration\n# ===============================\n# 禁止启动时自动执行作业\nspring.batch.job.enabled=false\n# 始终初始化批处理表,生产环境建议设置为never\nspring.batch.jdbc.initialize-schema=never\n# 表前缀,默认是BATCH_\n# spring.batch.jdbc.schema=classpath:org/springframework/batch/core/schema-mysql.sql\n# spring.batch.jdbc.table-prefix=BD_BATCH_\n\n# ===============================\n# City Import (optional, async)\n# ===============================\n# 说明:用于首次启动后后台导入大体量城市数据(不阻塞启动)。默认关闭。\n# stagingScript: 直接导入 bytedesk_core_city.sql 到 bytedesk_core_city\nbytedesk.city.import.enabled=false\nbytedesk.city.import.force=false\nbytedesk.city.import.delay-ms=10000\nbytedesk.city.import.staging-script=classpath:sql/city/bytedesk_core_city.sql\nbytedesk.city.import.fallback-staging-file=${user.dir}/bytedesk_core_city.sql\n# 默认留空:脚本已直接写入 bytedesk_core_city\nbytedesk.city.import.transform-script=\nbytedesk.city.import.drop-staging-after=true\nbytedesk.city.import.lock-name=bytedesk:city:import\nbytedesk.city.import.lock-timeout-seconds=0\n\n#\n# ===============================\n# = liquibase\n# https://contribute.liquibase.com/extensions-channels/directory/integration-docs/springboot/configuration/\n# ===============================\nspring.liquibase.enabled=true\nspring.liquibase.change-log=classpath:db/changelog/master.xml\n\n\n# ===============================\n# = flowable\n# https://www.flowable.com/open-source/docs/bpmn/ch05a-Spring-Boot\n# ===============================\n# 禁止自动部署流程文件\n# flowable.check-process-definitions=false\n# flowable.deployment-enabled=false\n\n# 禁止CMMN自动部署\n# flowable.cmmn.enabled=false\n# flowable.cmmn.deployment-enabled=false\n\n# 禁止DMN自动部署\n# flowable.dmn.enabled=false \n# flowable.dmn.deployment-enabled=false\n\n# 禁止Form自动部署\n# flowable.form.enabled=false\n# flowable.form.deployment-enabled=false\n\n# 禁止Content自动部署\n# flowable.content.enabled=false\n# flowable.content.deployment-enabled=false\n\n# 禁止Event Registry自动部署\n# flowable.eventregistry.enabled=false\n# flowable.eventregistry.deployment-enabled=false\n\n# ===============================\n"}, "c17d41e4f68587d71918047754dc6aaf17b04f2e": {"t": 1785748610.673539, "n": 9932, "h": "26a2e0edb2b8be69", "c": "# = ai\n# ===============================\n# spring.mvc.async.request-timeout=10000\nlogging.level.org.springframework.ai.chat.client.advisor=DEBUG\n\n# 启用Spring AI的观察功能\nspring.ai.observation.enabled=true\nspring.ai.retry.observation.enabled=true\n\n# 文本对话配置\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n# spring.ai.model.chat=none\n# spring.ai.model.chat=ollama\nspring.ai.model.chat=zhipuai\n# spring.ai.model.chat=dashscope\n\n# 向量模型\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n# spring.ai.model.embedding=none\n# spring.ai.model.embedding=ollama\nspring.ai.model.embedding=zhipuai\n# spring.ai.model.embedding=dashscope\n# spring.ai.model.embedding.text=\n# spring.ai.model.embedding.multimodal=\n\n# 视觉模型\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n# spring.ai.model.vision=none\n# spring.ai.model.vision=ollama\nspring.ai.model.vision=zhipuai\n# spring.ai.model.vision=dashscope\n# \nspring.ai.model.image=none\nspring.ai.model.moderation=none\n\n# 语音模型\n# spring.ai.model.audio=none\n# spring.ai.model.audio=ollama\nspring.ai.model.audio=zhipuai\n# spring.ai.model.audio=dashscope\n# \nspring.ai.model.audio.speech=none\nspring.ai.model.audio.transcription=none\n\n# 重排序模型\n# spring.ai.model.rerank=none\n# spring.ai.model.rerank=ollama\nspring.ai.model.rerank=zhipuai\n# spring.ai.model.rerank=dashscope\n\n# 多模态模型\n# spring.ai.model.multimodal=none\n# spring.ai.model.multimodal=ollama\nspring.ai.model.multimodal=zhipuai\n# spring.ai.model.multimodal=dashscope\n\n# ===============================\n# = skill\n# ===============================\n# Optional external skills directory. Expected layout: /path/to/skills/<skill-dir>/SKILL.md\n# bytedesk.ai.skill.external-directory=/opt/bytedesk/skills\n\n\n# spring ai alibaba\n# https://java2ai.com/docs/dev/get-started/\n# 阿里云百炼大模型获取api key:\n# https://bailian.console.aliyun.com/?apiKey=1#/api-key\n# 阿里云百炼大模型模型列表:\n# https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\nspring.ai.dashscope.enabled=false\n# spring.ai.dashscope.base-url=https://dashscope.aliyuncs.com\n# spring.ai.dashscope.api-key=sk-xxx\n# spring.ai.dashscope.chat.enabled=false\n# spring.ai.dashscope.chat.options.model=qwen-max\n# spring.ai.dashscope.chat.options.temperature=0.7\n# spring.ai.dashscope.chat.options.topP=3\n# 可选:语音合成专用Key(未配置时回退到 spring.ai.dashscope.api-key)\n# spring.ai.dashscope.audio.synthesis.api-key=\n# TTS 默认模型与音色,会同步给后端执行接口和管理台表单默认值\nspring.ai.dashscope.audio.synthesis.options.model=cosyvoice-v3-flash\nspring.ai.dashscope.audio.synthesis.options.voice=longanhuan\n# spring.ai.dashscope.audio.transcription.enabled=false\n# ASR 默认模型,会同步给后端执行接口和管理台表单默认值\nspring.ai.dashscope.audio.transcription.options.model=paraformer-v2\n# 可选:语音转写专用Key(未配置时回退到 spring.ai.dashscope.api-key)\n# spring.ai.dashscope.audio.transcription.api-key=\n# spring.ai.dashscope.audio.transcription.realtime-model=paraformer-realtime-v2\n# spring.ai.dashscope.image.enabled=false\n# spring.ai.dashscope.embedding.enabled=false\n# spring.ai.dashscope.audio.synthesis.enabled=false\n# spring.ai.nacos.prompt.template.enabled=false\n\n\n# zhipuai\n# https://open.bigmodel.cn/overview\n# https://docs.spring.io/spring-ai/reference/api/embeddings/zhipuai-embeddings.html\n# https://docs.spring.io/spring-ai/reference/api/chat/zhipuai-chat.html\n# spring.ai.zhipuai.base-url=https://open.bigmodel.cn/api/paas\n# 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n# spring.ai.zhipuai.chat.base-url=URL_ADDRESS\nspring.ai.zhipuai.api-key='sk-xxx'\nspring.ai.zhipuai.chat.enabled=true\n# 免费模型:https://open.bigmodel.cn/dev/api#glm-4\nspring.ai.zhipuai.chat.options.model=glm-4.5-flash\nspring.ai.zhipuai.chat.options.temperature=0.7\nspring.ai.zhipuai.chat.options.top-p=0.9\nspring.ai.zhipuai.chat.options.max-tokens=4096\n# 网络超时配置:request-timeout 为总请求超时,需大于 connect/read/write 之和\nspring.ai.zhipuai.request-timeout=55\nspring.ai.zhipuai.connection-timeout=30\nspring.ai.zhipuai.read-timeout=10\nspring.ai.zhipuai.write-timeout=10\nspring.ai.zhipuai.max-idle-connections=8\nspring.ai.zhipuai.keep-alive-duration=1\n# https://docs.spring.io/spring-ai/reference/api/embeddings/zhipuai-embeddings.html\nspring.ai.zhipuai.embedding.enabled=true\n# spring.ai.zhipuai.embedding.base-url=https://api.bigmodel.cn\n# spring.ai.zhipuai.embedding.api-key=sk-xxx\n# 1024维度的模型\nspring.ai.zhipuai.embedding.options.model=embedding-2\n# 2048维度的模型\n# spring.ai.zhipuai.embedding.options.model=embedding-3\nspring.ai.zhipuai.embedding.options.dimensions=1024\n# \n\n# ollama: \n# https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html\n# spring.ai.ollama.init.pull-model-strategy=always\n# 默认:11434,为防止本地冲突,如果是docker,需要修改为21434\n# spring.ai.ollama.base-url=http://127.0.0.1:11434\nspring.ai.ollama.base-url=http://127.0.0.1:21434\nspring.ai.ollama.chat.enabled=true\n# spring.ai.ollama.chat.options.model=deepseek-r1:latest\nspring.ai.ollama.chat.options.model=qwen3:0.6b\nspring.ai.ollama.chat.options.temperature=0.7\n# spring.ai.ollama.chat.options.numa=false\n# https://docs.spring.io/spring-ai/reference/api/embeddings/ollama-embeddings.html\nspring.ai.ollama.embedding.enabled=true\n# https://github.com/ollama/ollama?tab=readme-ov-file#model-library\nspring.ai.ollama.embedding.options.model=bge-m3:latest\n# spring.ai.ollama.embedding.options.numa=false\n# spring.ai.ollama.init.timeout=60s\n# spring.ai.ollama.init.max-retries=2\n# https://huggingface.co/BAAI/bge-reranker-v2-m3\nspring.ai.ollama.embedding.options.model.rerank=linux6200/bge-reranker-v2-m3:latest\n\n\n# ===============================\n# = bytedesk ai defaults\n# ===============================\n# 管理台和执行接口共享的 TTS 默认参数\nbytedesk.ai.tts.language=zh-CN\nbytedesk.ai.tts.audio-format=mp3\n\n# 管理台和执行接口共享的 ASR 默认参数\nbytedesk.ai.asr.source-format=mp3\nbytedesk.ai.asr.timeout-ms=180000\nbytedesk.ai.asr.poll-interval-ms=1500\n\n\n# ===============================\n# = 向量数据库\n# ===============================\n# https://github.com/spring-projects/spring-ai/blob/main/spring-ai-vector-store/src/main/java/org/springframework/ai/vectorstore/SpringAIVectorStoreTypes.java\n# spring.ai.vectorstore.type=none\n# spring.ai.vectorstore.type=redis\n# spring.ai.vectorstore.type=chroma\nspring.ai.vectorstore.type=elasticsearch\n# spring.ai.vectorstore.type=weaviate\n# spring.ai.vectorstore.type=milvus\n# spring.ai.vectorstore.type=pgvector\n\n# elasticsearch\n# 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n# 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\nspring.elasticsearch.uris=http://127.0.0.1:19200\nspring.elasticsearch.username=elastic\nspring.elasticsearch.password=bytedesk123\n# \nspring.ai.vectorstore.elasticsearch.enabled=true\nspring.ai.vectorstore.elasticsearch.initialize-schema=true\nspring.ai.vectorstore.elasticsearch.index-name=bytedesk_vs_index\nspring.ai.vectorstore.elasticsearch.dimensions=1024\n# cosine/l2_norm/dot_product\nspring.ai.vectorstore.elasticsearch.similarity=cosine\n\n# chroma\n# spring.ai.vectorstore.chroma.enabled=false\n# spring.ai.vectorstore.chroma.uri=http://127.0.0.1:18000\n# spring.ai.vectorstore.chroma.collection-name=bytedesk_vs_collection\n# spring.ai.vectorstore.chroma.distance-function=COSINE\n# spring.ai.vectorstore.chroma.embedding-dimension=1024\n\n# weaviate\n# spring.ai.vectorstore.weaviate.enabled=false\n# spring.ai.vectorstore.weaviate.host=127.0.0.1\n# spring.ai.vectorstore.weaviate.port=18080\n# spring.ai.vectorstore.weaviate.scheme=http\n# spring.ai.vectorstore.weaviate.index-name=BytedeskVectors\n# spring.ai.vectorstore.weaviate.text-field-name=content\n\n# milvus\n# spring.ai.vectorstore.milvus.enabled=false\n# spring.ai.vectorstore.milvus.host=127.0.0.1\n# spring.ai.vectorstore.milvus.port=19530\n# spring.ai.vectorstore.milvus.collection-name=bytedesk_vectors\n# spring.ai.vectorstore.milvus.vector-field=embedding\n# spring.ai.vectorstore.milvus.text-field=content\n# spring.ai.vectorstore.milvus.dimensions=1024\n\n\n# ===============================\n# = Spring Batch Configuration\n# ===============================\n# 禁止启动时自动执行作业\nspring.batch.job.enabled=false\n# 始终初始化批处理表,生产环境建议设置为never\nspring.batch.jdbc.initialize-schema=never\n# 表前缀,默认是BATCH_\n# spring.batch.jdbc.schema=classpath:org/springframework/batch/core/schema-mysql.sql\n# spring.batch.jdbc.table-prefix=BD_BATCH_\n\n# ===============================\n# City Import (optional, async)\n# ===============================\n# 说明:用于首次启动后后台导入大体量城市数据(不阻塞启动)。默认关闭。\n# stagingScript: 直接导入 bytedesk_core_city.sql 到 bytedesk_core_city\nbytedesk.city.import.enabled=false\nbytedesk.city.import.force=false\nbytedesk.city.import.delay-ms=10000\nbytedesk.city.import.staging-script=classpath:sql/city/bytedesk_core_city.sql\nbytedesk.city.import.fallback-staging-file=${user.dir}/bytedesk_core_city.sql\n# 默认留空:脚本已直接写入 bytedesk_core_city\nbytedesk.city.import.transform-script=\nbytedesk.city.import.drop-staging-after=true\nbytedesk.city.import.lock-name=bytedesk:city:import\nbytedesk.city.import.lock-timeout-seconds=0\n\n#\n# ===============================\n# = liquibase\n# https://contribute.liquibase.com/extensions-channels/directory/integration-docs/springboot/configuration/\n# ===============================\nspring.liquibase.enabled=true\nspring.liquibase.change-log=classpath:db/changelog/master.xml\n\n\n# ===============================\n# = flowable\n# https://www.flowable.com/open-source/docs/bpmn/ch05a-Spring-Boot\n# ===============================\n# 禁止自动部署流程文件\n# flowable.check-process-definitions=false\n# flowable.deployment-enabled=false\n\n# 禁止CMMN自动部署\n# flowable.cmmn.enabled=false\n# flowable.cmmn.deployment-enabled=false\n\n# 禁止DMN自动部署\n# flowable.dmn.enabled=false \n# flowable.dmn.deployment-enabled=false\n\n# 禁止Form自动部署\n# flowable.form.enabled=false\n# flowable.form.deployment-enabled=false\n\n# 禁止Content自动部署\n# flowable.content.enabled=false\n# flowable.content.deployment-enabled=false\n\n# 禁止Event Registry自动部署\n# flowable.eventregistry.enabled=false\n# flowable.eventregistry.deployment-enabled=false\n\n# ===============================\n"}, "8782dc9cdcf36269c8a7a263661b025b7a629ecf": {"t": 1785748611.8445704, "n": 11332, "h": "b18c25370e6cc619", "c": "# = ai\n# ===============================\n# spring.mvc.async.request-timeout=10000\nlogging.level.org.springframework.ai.chat.client.advisor=DEBUG\n\n# 启用Spring AI的观察功能\nspring.ai.observation.enabled=true\nspring.ai.retry.observation.enabled=true\n\n# 文本对话配置\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n# spring.ai.model.chat=none\n# spring.ai.model.chat=ollama\nspring.ai.model.chat=zhipuai\n# spring.ai.model.chat=dashscope\n\n# 向量模型\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n# spring.ai.model.embedding=none\n# spring.ai.model.embedding=ollama\nspring.ai.model.embedding=zhipuai\n# spring.ai.model.embedding=dashscope\n# spring.ai.model.embedding.text=\n# spring.ai.model.embedding.multimodal=\n\n# 视觉模型\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n# spring.ai.model.vision=none\n# spring.ai.model.vision=ollama\nspring.ai.model.vision=zhipuai\n# spring.ai.model.vision=dashscope\n# \nspring.ai.model.image=none\nspring.ai.model.moderation=none\n\n# 语音模型\n# spring.ai.model.audio=none\n# spring.ai.model.audio=ollama\nspring.ai.model.audio=zhipuai\n# spring.ai.model.audio=dashscope\n# \nspring.ai.model.audio.speech=none\nspring.ai.model.audio.transcription=none\n\n# 重排序模型\n# spring.ai.model.rerank=none\n# spring.ai.model.rerank=ollama\nspring.ai.model.rerank=zhipuai\n# spring.ai.model.rerank=dashscope\n\n# 多模态模型\n# spring.ai.model.multimodal=none\n# spring.ai.model.multimodal=ollama\nspring.ai.model.multimodal=zhipuai\n# spring.ai.model.multimodal=dashscope\n\n# ===============================\n# = skill\n# ===============================\n# Optional external skills directory. Expected layout: /path/to/skills/<skill-dir>/SKILL.md\n# bytedesk.ai.skill.external-directory=/opt/bytedesk/skills\n\n\n# spring ai alibaba\n# https://java2ai.com/docs/dev/get-started/\n# 阿里云百炼大模型获取api key:\n# https://bailian.console.aliyun.com/?apiKey=1#/api-key\n# 阿里云百炼大模型模型列表:\n# https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\nspring.ai.dashscope.enabled=false\n# spring.ai.dashscope.base-url=https://dashscope.aliyuncs.com\n# spring.ai.dashscope.api-key=sk-xxx\n# spring.ai.dashscope.chat.enabled=false\n# spring.ai.dashscope.chat.options.model=qwen-max\n# spring.ai.dashscope.chat.options.temperature=0.7\n# spring.ai.dashscope.chat.options.topP=3\n# 可选:语音合成专用Key(未配置时回退到 spring.ai.dashscope.api-key)\n# spring.ai.dashscope.audio.synthesis.api-key=\n# TTS 默认模型与音色,会同步给后端执行接口和管理台表单默认值\nspring.ai.dashscope.audio.synthesis.options.model=cosyvoice-v3-flash\nspring.ai.dashscope.audio.synthesis.options.voice=longanhuan\n# spring.ai.dashscope.audio.transcription.enabled=false\n# ASR 默认模型,会同步给后端执行接口和管理台表单默认值\nspring.ai.dashscope.audio.transcription.options.model=paraformer-v2\n# 可选:语音转写专用Key(未配置时回退到 spring.ai.dashscope.api-key)\n# spring.ai.dashscope.audio.transcription.api-key=\n# spring.ai.dashscope.audio.transcription.realtime-model=paraformer-realtime-v2\n# spring.ai.dashscope.image.enabled=false\n# spring.ai.dashscope.embedding.enabled=false\n# spring.ai.dashscope.audio.synthesis.enabled=false\n# spring.ai.nacos.prompt.template.enabled=false\n\n\n# zhipuai\n# https://open.bigmodel.cn/overview\n# https://docs.spring.io/spring-ai/reference/api/embeddings/zhipuai-embeddings.html\n# https://docs.spring.io/spring-ai/reference/api/chat/zhipuai-chat.html\n# spring.ai.zhipuai.base-url=https://open.bigmodel.cn/api/paas\n# 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n# spring.ai.zhipuai.chat.base-url=URL_ADDRESS\nspring.ai.zhipuai.api-key='sk-xxx'\nspring.ai.zhipuai.chat.enabled=true\n# 免费模型:https://open.bigmodel.cn/dev/api#glm-4\nspring.ai.zhipuai.chat.options.model=glm-4.5-flash\nspring.ai.zhipuai.chat.options.temperature=0.7\nspring.ai.zhipuai.chat.options.top-p=0.9\nspring.ai.zhipuai.chat.options.max-tokens=4096\n# 网络超时配置:request-timeout 为总请求超时,需大于 connect/read/write 之和\nspring.ai.zhipuai.request-timeout=55\nspring.ai.zhipuai.connection-timeout=30\nspring.ai.zhipuai.read-timeout=10\nspring.ai.zhipuai.write-timeout=10\nspring.ai.zhipuai.max-idle-connections=8\nspring.ai.zhipuai.keep-alive-duration=1\n# https://docs.spring.io/spring-ai/reference/api/embeddings/zhipuai-embeddings.html\nspring.ai.zhipuai.embedding.enabled=true\n# spring.ai.zhipuai.embedding.base-url=https://api.bigmodel.cn\n# spring.ai.zhipuai.embedding.api-key=sk-xxx\n# 1024维度的模型\nspring.ai.zhipuai.embedding.options.model=embedding-2\n# 2048维度的模型\n# spring.ai.zhipuai.embedding.options.model=embedding-3\nspring.ai.zhipuai.embedding.options.dimensions=1024\n# \n\n# ollama: \n# https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html\n# spring.ai.ollama.init.pull-model-strategy=always\n# 默认:11434,为防止本地冲突,如果是docker,需要修改为21434\n# spring.ai.ollama.base-url=http://127.0.0.1:11434\nspring.ai.ollama.base-url=http://127.0.0.1:21434\nspring.ai.ollama.chat.enabled=true\n# spring.ai.ollama.chat.options.model=deepseek-r1:latest\nspring.ai.ollama.chat.options.model=qwen3:0.6b\nspring.ai.ollama.chat.options.temperature=0.7\n# spring.ai.ollama.chat.options.numa=false\n# https://docs.spring.io/spring-ai/reference/api/embeddings/ollama-embeddings.html\nspring.ai.ollama.embedding.enabled=true\n# https://github.com/ollama/ollama?tab=readme-ov-file#model-library\nspring.ai.ollama.embedding.options.model=bge-m3:latest\n# spring.ai.ollama.embedding.options.numa=false\n# spring.ai.ollama.init.timeout=60s\n# spring.ai.ollama.init.max-retries=2\n# https://huggingface.co/BAAI/bge-reranker-v2-m3\nspring.ai.ollama.embedding.options.model.rerank=linux6200/bge-reranker-v2-m3:latest\n\n\n# ===============================\n# = bytedesk ai defaults\n# ===============================\n# 管理台和执行接口共享的 TTS 默认参数\nbytedesk.ai.tts.language=zh-CN\nbytedesk.ai.tts.audio-format=mp3\n\n# 管理台和执行接口共享的 ASR 默认参数\nbytedesk.ai.asr.source-format=mp3\nbytedesk.ai.asr.timeout-ms=180000\nbytedesk.ai.asr.poll-interval-ms=1500\n\n\n# ===============================\n# = 向量数据库\n# ===============================\n# https://github.com/spring-projects/spring-ai/blob/main/spring-ai-vector-store/src/main/java/org/springframework/ai/vectorstore/SpringAIVectorStoreTypes.java\n# spring.ai.vectorstore.type=none\n# spring.ai.vectorstore.type=redis\n# spring.ai.vectorstore.type=chroma\nspring.ai.vectorstore.type=elasticsearch\n# spring.ai.vectorstore.type=weaviate\n# spring.ai.vectorstore.type=milvus\n# spring.ai.vectorstore.type=pgvector\n\n# elasticsearch\n# 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n# 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\nspring.elasticsearch.uris=http://127.0.0.1:19200\nspring.elasticsearch.username=elastic\nspring.elasticsearch.password=bytedesk123\n# \nspring.ai.vectorstore.elasticsearch.enabled=true\nspring.ai.vectorstore.elasticsearch.initialize-schema=true\nspring.ai.vectorstore.elasticsearch.index-name=bytedesk_vs_index\nspring.ai.vectorstore.elasticsearch.dimensions=1024\n# cosine/l2_norm/dot_product\nspring.ai.vectorstore.elasticsearch.similarity=cosine\n\n# chroma\n# spring.ai.vectorstore.chroma.enabled=false\n# spring.ai.vectorstore.chroma.uri=http://127.0.0.1:18000\n# spring.ai.vectorstore.chroma.collection-name=bytedesk_vs_collection\n# spring.ai.vectorstore.chroma.distance-function=COSINE\n# spring.ai.vectorstore.chroma.embedding-dimension=1024\n\n# weaviate\n# spring.ai.vectorstore.weaviate.enabled=false\n# spring.ai.vectorstore.weaviate.host=127.0.0.1\n# spring.ai.vectorstore.weaviate.port=18080\n# spring.ai.vectorstore.weaviate.scheme=http\n# spring.ai.vectorstore.weaviate.index-name=BytedeskVectors\n# spring.ai.vectorstore.weaviate.text-field-name=content\n\n# milvus\n# spring.ai.vectorstore.milvus.enabled=false\n# spring.ai.vectorstore.milvus.host=127.0.0.1\n# spring.ai.vectorstore.milvus.port=19530\n# spring.ai.vectorstore.milvus.collection-name=bytedesk_vectors\n# spring.ai.vectorstore.milvus.vector-field=embedding\n# spring.ai.vectorstore.milvus.text-field=content\n# spring.ai.vectorstore.milvus.dimensions=1024\n\n\n# ===============================\n# = spring ai mcp\n# https://contribute.liquibase.com/extensions-channels/directory/integration-docs/springboot/configuration/\n# ===============================\n# https://docs.spring.io/spring-ai/reference/api/mcp/mcp-client-boot-starter-docs.html\nspring.ai.mcp.client.enabled=false\n# logging.level.org.springframework.ai.mcp=WARN\n# logging.level.org.springframework.ai.mcp.client.transport.StdioClientTransport=WARN\n# logging.level.org.springframework.ai.mcp.samples.brave=INFO\n# logging.level.io.modelcontextprotocol.client=WARN\n# logging.level.io.modelcontextprotocol.spec=WARN\n\n# mcp servers\n# https://github.com/modelcontextprotocol/servers\n# https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html\n# https://github.com/spring-projects/spring-ai/blob/b29076f/auto-configurations/spring-ai-mcp-server/src/main/java/org/springframework/ai/autoconfigure/mcp/server/McpServerProperties.java\nspring.ai.mcp.server.enable=false\n# spring.ai.mcp.server.name=bytedesk-starter\n# spring.ai.mcp.server.version=0.0.1\n# SYNC or ASYNC\nspring.ai.mcp.server.type=SYNC\n# Transport configuration\nspring.ai.mcp.server.stdio=false\n# spring.ai.mcp.server.sse-message-endpoint=/mcp/message\n# spring.ai.mcp.server.resource-change-notification=true\n# spring.ai.mcp.server.tool-change-notification=true\n# spring.ai.mcp.server.prompt-change-notification=true\n\n\n# ===============================\n# = Spring Batch Configuration\n# ===============================\n# 禁止启动时自动执行作业\nspring.batch.job.enabled=false\n# 始终初始化批处理表,生产环境建议设置为never\nspring.batch.jdbc.initialize-schema=never\n# 表前缀,默认是BATCH_\n# spring.batch.jdbc.schema=classpath:org/springframework/batch/core/schema-mysql.sql\n# spring.batch.jdbc.table-prefix=BD_BATCH_\n\n# ===============================\n# City Import (optional, async)\n# ===============================\n# 说明:用于首次启动后后台导入大体量城市数据(不阻塞启动)。默认关闭。\n# stagingScript: 直接导入 bytedesk_core_city.sql 到 bytedesk_core_city\nbytedesk.city.import.enabled=false\nbytedesk.city.import.force=false\nbytedesk.city.import.delay-ms=10000\nbytedesk.city.import.staging-script=classpath:sql/city/bytedesk_core_city.sql\nbytedesk.city.import.fallback-staging-file=${user.dir}/bytedesk_core_city.sql\n# 默认留空:脚本已直接写入 bytedesk_core_city\nbytedesk.city.import.transform-script=\nbytedesk.city.import.drop-staging-after=true\nbytedesk.city.import.lock-name=bytedesk:city:import\nbytedesk.city.import.lock-timeout-seconds=0\n\n#\n# ===============================\n# = liquibase\n# https://contribute.liquibase.com/extensions-channels/directory/integration-docs/springboot/configuration/\n# ===============================\nspring.liquibase.enabled=true\nspring.liquibase.change-log=classpath:db/changelog/master.xml\n\n\n# ===============================\n# = flowable\n# https://www.flowable.com/open-source/docs/bpmn/ch05a-Spring-Boot\n# ===============================\n# 禁止自动部署流程文件\n# flowable.check-process-definitions=false\n# flowable.deployment-enabled=false\n\n# 禁止CMMN自动部署\n# flowable.cmmn.enabled=false\n# flowable.cmmn.deployment-enabled=false\n\n# 禁止DMN自动部署\n# flowable.dmn.enabled=false \n# flowable.dmn.deployment-enabled=false\n\n# 禁止Form自动部署\n# flowable.form.enabled=false\n# flowable.form.deployment-enabled=false\n\n# 禁止Content自动部署\n# flowable.content.enabled=false\n# flowable.content.deployment-enabled=false\n\n# 禁止Event Registry自动部署\n# flowable.eventregistry.enabled=false\n# flowable.eventregistry.deployment-enabled=false\n\n# ===============================\n"}, "0ffefc7867ec55721497e0f90769901fa12a42f2": {"t": 1785748613.0511737, "n": 11101, "h": "cb208a793614018e", "c": "# = ai\n# ===============================\n# spring.mvc.async.request-timeout=10000\nlogging.level.org.springframework.ai.chat.client.advisor=DEBUG\n\n# 启用Spring AI的观察功能\nspring.ai.observation.enabled=true\nspring.ai.retry.observation.enabled=true\n\n# 文本对话配置\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n# spring.ai.model.chat=none\n# spring.ai.model.chat=ollama\nspring.ai.model.chat=zhipuai\n# spring.ai.model.chat=dashscope\n\n# 向量模型\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n# spring.ai.model.embedding=none\n# spring.ai.model.embedding=ollama\nspring.ai.model.embedding=zhipuai\n# spring.ai.model.embedding=dashscope\n# spring.ai.model.embedding.text=\n# spring.ai.model.embedding.multimodal=\n\n# 视觉模型\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n# spring.ai.model.vision=none\n# spring.ai.model.vision=ollama\nspring.ai.model.vision=zhipuai\n# spring.ai.model.vision=dashscope\n# \nspring.ai.model.image=none\nspring.ai.model.moderation=none\n\n# 语音模型\n# spring.ai.model.audio=none\n# spring.ai.model.audio=ollama\nspring.ai.model.audio=zhipuai\n# spring.ai.model.audio=dashscope\n# \nspring.ai.model.audio.speech=none\nspring.ai.model.audio.transcription=none\n\n# 重排序模型\n# spring.ai.model.rerank=none\n# spring.ai.model.rerank=ollama\nspring.ai.model.rerank=zhipuai\n# spring.ai.model.rerank=dashscope\n\n# 多模态模型\n# spring.ai.model.multimodal=none\n# spring.ai.model.multimodal=ollama\nspring.ai.model.multimodal=zhipuai\n# spring.ai.model.multimodal=dashscope\n\n\n# spring ai alibaba\n# https://java2ai.com/docs/dev/get-started/\n# 阿里云百炼大模型获取api key:\n# https://bailian.console.aliyun.com/?apiKey=1#/api-key\n# 阿里云百炼大模型模型列表:\n# https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\nspring.ai.dashscope.enabled=false\n# spring.ai.dashscope.base-url=https://dashscope.aliyuncs.com\n# spring.ai.dashscope.api-key=sk-xxx\n# spring.ai.dashscope.chat.enabled=false\n# spring.ai.dashscope.chat.options.model=qwen-max\n# spring.ai.dashscope.chat.options.temperature=0.7\n# spring.ai.dashscope.chat.options.topP=3\n# 可选:语音合成专用Key(未配置时回退到 spring.ai.dashscope.api-key)\n# spring.ai.dashscope.audio.synthesis.api-key=\n# TTS 默认模型与音色,会同步给后端执行接口和管理台表单默认值\nspring.ai.dashscope.audio.synthesis.options.model=cosyvoice-v3-flash\nspring.ai.dashscope.audio.synthesis.options.voice=longanhuan\n# spring.ai.dashscope.audio.transcription.enabled=false\n# ASR 默认模型,会同步给后端执行接口和管理台表单默认值\nspring.ai.dashscope.audio.transcription.options.model=paraformer-v2\n# 可选:语音转写专用Key(未配置时回退到 spring.ai.dashscope.api-key)\n# spring.ai.dashscope.audio.transcription.api-key=\n# spring.ai.dashscope.audio.transcription.realtime-model=paraformer-realtime-v2\n# spring.ai.dashscope.image.enabled=false\n# spring.ai.dashscope.embedding.enabled=false\n# spring.ai.dashscope.audio.synthesis.enabled=false\n# spring.ai.nacos.prompt.template.enabled=false\n\n\n# zhipuai\n# https://open.bigmodel.cn/overview\n# https://docs.spring.io/spring-ai/reference/api/embeddings/zhipuai-embeddings.html\n# https://docs.spring.io/spring-ai/reference/api/chat/zhipuai-chat.html\n# spring.ai.zhipuai.base-url=https://open.bigmodel.cn/api/paas\n# 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n# spring.ai.zhipuai.chat.base-url=URL_ADDRESS\nspring.ai.zhipuai.api-key='sk-xxx'\nspring.ai.zhipuai.chat.enabled=true\n# 免费模型:https://open.bigmodel.cn/dev/api#glm-4\nspring.ai.zhipuai.chat.options.model=glm-4.5-flash\nspring.ai.zhipuai.chat.options.temperature=0.7\nspring.ai.zhipuai.chat.options.top-p=0.9\nspring.ai.zhipuai.chat.options.max-tokens=4096\n# 网络超时配置:request-timeout 为总请求超时,需大于 connect/read/write 之和\nspring.ai.zhipuai.request-timeout=55\nspring.ai.zhipuai.connection-timeout=30\nspring.ai.zhipuai.read-timeout=10\nspring.ai.zhipuai.write-timeout=10\nspring.ai.zhipuai.max-idle-connections=8\nspring.ai.zhipuai.keep-alive-duration=1\n# https://docs.spring.io/spring-ai/reference/api/embeddings/zhipuai-embeddings.html\nspring.ai.zhipuai.embedding.enabled=true\n# spring.ai.zhipuai.embedding.base-url=https://api.bigmodel.cn\n# spring.ai.zhipuai.embedding.api-key=sk-xxx\n# 1024维度的模型\nspring.ai.zhipuai.embedding.options.model=embedding-2\n# 2048维度的模型\n# spring.ai.zhipuai.embedding.options.model=embedding-3\nspring.ai.zhipuai.embedding.options.dimensions=1024\n# \n\n# ollama: \n# https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html\n# spring.ai.ollama.init.pull-model-strategy=always\n# 默认:11434,为防止本地冲突,如果是docker,需要修改为21434\n# spring.ai.ollama.base-url=http://127.0.0.1:11434\nspring.ai.ollama.base-url=http://127.0.0.1:21434\nspring.ai.ollama.chat.enabled=true\n# spring.ai.ollama.chat.options.model=deepseek-r1:latest\nspring.ai.ollama.chat.options.model=qwen3:0.6b\nspring.ai.ollama.chat.options.temperature=0.7\n# spring.ai.ollama.chat.options.numa=false\n# https://docs.spring.io/spring-ai/reference/api/embeddings/ollama-embeddings.html\nspring.ai.ollama.embedding.enabled=true\n# https://github.com/ollama/ollama?tab=readme-ov-file#model-library\nspring.ai.ollama.embedding.options.model=bge-m3:latest\n# spring.ai.ollama.embedding.options.numa=false\n# spring.ai.ollama.init.timeout=60s\n# spring.ai.ollama.init.max-retries=2\n# https://huggingface.co/BAAI/bge-reranker-v2-m3\nspring.ai.ollama.embedding.options.model.rerank=linux6200/bge-reranker-v2-m3:latest\n\n\n# ===============================\n# = bytedesk ai defaults\n# ===============================\n# 管理台和执行接口共享的 TTS 默认参数\nbytedesk.ai.tts.language=zh-CN\nbytedesk.ai.tts.audio-format=mp3\n\n# 管理台和执行接口共享的 ASR 默认参数\nbytedesk.ai.asr.source-format=mp3\nbytedesk.ai.asr.timeout-ms=180000\nbytedesk.ai.asr.poll-interval-ms=1500\n\n\n# ===============================\n# = 向量数据库\n# ===============================\n# https://github.com/spring-projects/spring-ai/blob/main/spring-ai-vector-store/src/main/java/org/springframework/ai/vectorstore/SpringAIVectorStoreTypes.java\n# spring.ai.vectorstore.type=none\n# spring.ai.vectorstore.type=redis\n# spring.ai.vectorstore.type=chroma\nspring.ai.vectorstore.type=elasticsearch\n# spring.ai.vectorstore.type=weaviate\n# spring.ai.vectorstore.type=milvus\n# spring.ai.vectorstore.type=pgvector\n\n# elasticsearch\n# 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n# 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\nspring.elasticsearch.uris=http://127.0.0.1:19200\nspring.elasticsearch.username=elastic\nspring.elasticsearch.password=bytedesk123\n# \nspring.ai.vectorstore.elasticsearch.enabled=true\nspring.ai.vectorstore.elasticsearch.initialize-schema=true\nspring.ai.vectorstore.elasticsearch.index-name=bytedesk_vs_index\nspring.ai.vectorstore.elasticsearch.dimensions=1024\n# cosine/l2_norm/dot_product\nspring.ai.vectorstore.elasticsearch.similarity=cosine\n\n# chroma\n# spring.ai.vectorstore.chroma.enabled=false\n# spring.ai.vectorstore.chroma.uri=http://127.0.0.1:18000\n# spring.ai.vectorstore.chroma.collection-name=bytedesk_vs_collection\n# spring.ai.vectorstore.chroma.distance-function=COSINE\n# spring.ai.vectorstore.chroma.embedding-dimension=1024\n\n# weaviate\n# spring.ai.vectorstore.weaviate.enabled=false\n# spring.ai.vectorstore.weaviate.host=127.0.0.1\n# spring.ai.vectorstore.weaviate.port=18080\n# spring.ai.vectorstore.weaviate.scheme=http\n# spring.ai.vectorstore.weaviate.index-name=BytedeskVectors\n# spring.ai.vectorstore.weaviate.text-field-name=content\n\n# milvus\n# spring.ai.vectorstore.milvus.enabled=false\n# spring.ai.vectorstore.milvus.host=127.0.0.1\n# spring.ai.vectorstore.milvus.port=19530\n# spring.ai.vectorstore.milvus.collection-name=bytedesk_vectors\n# spring.ai.vectorstore.milvus.vector-field=embedding\n# spring.ai.vectorstore.milvus.text-field=content\n# spring.ai.vectorstore.milvus.dimensions=1024\n\n\n# ===============================\n# = spring ai mcp\n# https://contribute.liquibase.com/extensions-channels/directory/integration-docs/springboot/configuration/\n# ===============================\n# https://docs.spring.io/spring-ai/reference/api/mcp/mcp-client-boot-starter-docs.html\nspring.ai.mcp.client.enabled=false\n# logging.level.org.springframework.ai.mcp=WARN\n# logging.level.org.springframework.ai.mcp.client.transport.StdioClientTransport=WARN\n# logging.level.org.springframework.ai.mcp.samples.brave=INFO\n# logging.level.io.modelcontextprotocol.client=WARN\n# logging.level.io.modelcontextprotocol.spec=WARN\n\n# mcp servers\n# https://github.com/modelcontextprotocol/servers\n# https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html\n# https://github.com/spring-projects/spring-ai/blob/b29076f/auto-configurations/spring-ai-mcp-server/src/main/java/org/springframework/ai/autoconfigure/mcp/server/McpServerProperties.java\nspring.ai.mcp.server.enable=false\n# spring.ai.mcp.server.name=bytedesk-starter\n# spring.ai.mcp.server.version=0.0.1\n# SYNC or ASYNC\nspring.ai.mcp.server.type=SYNC\n# Transport configuration\nspring.ai.mcp.server.stdio=false\n# spring.ai.mcp.server.sse-message-endpoint=/mcp/message\n# spring.ai.mcp.server.resource-change-notification=true\n# spring.ai.mcp.server.tool-change-notification=true\n# spring.ai.mcp.server.prompt-change-notification=true\n\n\n# ===============================\n# = Spring Batch Configuration\n# ===============================\n# 禁止启动时自动执行作业\nspring.batch.job.enabled=false\n# 始终初始化批处理表,生产环境建议设置为never\nspring.batch.jdbc.initialize-schema=never\n# 表前缀,默认是BATCH_\n# spring.batch.jdbc.schema=classpath:org/springframework/batch/core/schema-mysql.sql\n# spring.batch.jdbc.table-prefix=BD_BATCH_\n\n# ===============================\n# City Import (optional, async)\n# ===============================\n# 说明:用于首次启动后后台导入大体量城市数据(不阻塞启动)。默认关闭。\n# stagingScript: 直接导入 bytedesk_core_city.sql 到 bytedesk_core_city\nbytedesk.city.import.enabled=false\nbytedesk.city.import.force=false\nbytedesk.city.import.delay-ms=10000\nbytedesk.city.import.staging-script=classpath:sql/city/bytedesk_core_city.sql\nbytedesk.city.import.fallback-staging-file=${user.dir}/bytedesk_core_city.sql\n# 默认留空:脚本已直接写入 bytedesk_core_city\nbytedesk.city.import.transform-script=\nbytedesk.city.import.drop-staging-after=true\nbytedesk.city.import.lock-name=bytedesk:city:import\nbytedesk.city.import.lock-timeout-seconds=0\n\n#\n# ===============================\n# = liquibase\n# https://contribute.liquibase.com/extensions-channels/directory/integration-docs/springboot/configuration/\n# ===============================\nspring.liquibase.enabled=true\nspring.liquibase.change-log=classpath:db/changelog/master.xml\n\n\n# ===============================\n# = flowable\n# https://www.flowable.com/open-source/docs/bpmn/ch05a-Spring-Boot\n# ===============================\n# 禁止自动部署流程文件\n# flowable.check-process-definitions=false\n# flowable.deployment-enabled=false\n\n# 禁止CMMN自动部署\n# flowable.cmmn.enabled=false\n# flowable.cmmn.deployment-enabled=false\n\n# 禁止DMN自动部署\n# flowable.dmn.enabled=false \n# flowable.dmn.deployment-enabled=false\n\n# 禁止Form自动部署\n# flowable.form.enabled=false\n# flowable.form.deployment-enabled=false\n\n# 禁止Content自动部署\n# flowable.content.enabled=false\n# flowable.content.deployment-enabled=false\n\n# 禁止Event Registry自动部署\n# flowable.eventregistry.enabled=false\n# flowable.eventregistry.deployment-enabled=false\n\n# ===============================\n"}, "93bce581a29a77e71b563d7783c957a0c8ca4d2b": {"t": 1785748614.2539837, "n": 10369, "h": "ea301be0fe95845e", "c": "# = ai\n# ===============================\n# spring.mvc.async.request-timeout=10000\nlogging.level.org.springframework.ai.chat.client.advisor=DEBUG\n\n# 启用Spring AI的观察功能\nspring.ai.observation.enabled=true\nspring.ai.retry.observation.enabled=true\n\n# 文本对话配置\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n# spring.ai.model.chat=none\n# spring.ai.model.chat=ollama\nspring.ai.model.chat=zhipuai\n# spring.ai.model.chat=dashscope\n\n# 向量模型\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n# spring.ai.model.embedding=none\n# spring.ai.model.embedding=ollama\nspring.ai.model.embedding=zhipuai\n# spring.ai.model.embedding=dashscope\n# spring.ai.model.embedding.text=\n# spring.ai.model.embedding.multimodal=\n\n# 视觉模型\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n# spring.ai.model.vision=none\n# spring.ai.model.vision=ollama\nspring.ai.model.vision=zhipuai\n# spring.ai.model.vision=dashscope\n# \nspring.ai.model.image=none\nspring.ai.model.moderation=none\n\n# 语音模型\n# spring.ai.model.audio=none\n# spring.ai.model.audio=ollama\nspring.ai.model.audio=zhipuai\n# spring.ai.model.audio=dashscope\n# \nspring.ai.model.audio.speech=none\nspring.ai.model.audio.transcription=none\n\n# 重排序模型\n# spring.ai.model.rerank=none\n# spring.ai.model.rerank=ollama\nspring.ai.model.rerank=zhipuai\n# spring.ai.model.rerank=dashscope\n\n# 多模态模型\n# spring.ai.model.multimodal=none\n# spring.ai.model.multimodal=ollama\nspring.ai.model.multimodal=zhipuai\n# spring.ai.model.multimodal=dashscope\n\n\n# spring ai alibaba\n# https://java2ai.com/docs/dev/get-started/\n# 阿里云百炼大模型获取api key:\n# https://bailian.console.aliyun.com/?apiKey=1#/api-key\n# 阿里云百炼大模型模型列表:\n# https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\nspring.ai.dashscope.enabled=false\n# spring.ai.dashscope.base-url=https://dashscope.aliyuncs.com\n# spring.ai.dashscope.api-key=sk-xxx\n# spring.ai.dashscope.chat.enabled=false\n# spring.ai.dashscope.chat.options.model=qwen-max\n# spring.ai.dashscope.chat.options.temperature=0.7\n# spring.ai.dashscope.chat.options.topP=3\n# spring.ai.dashscope.audio.transcription.enabled=false\n# spring.ai.dashscope.audio.transcription.api-key=\n# spring.ai.dashscope.audio.transcription.realtime-model=fun-asr-realtime\n# spring.ai.dashscope.image.enabled=false\n# spring.ai.dashscope.embedding.enabled=false\n# spring.ai.dashscope.audio.synthesis.enabled=false\n# spring.ai.nacos.prompt.template.enabled=false\n\n\n# zhipuai\n# https://open.bigmodel.cn/overview\n# https://docs.spring.io/spring-ai/reference/api/embeddings/zhipuai-embeddings.html\n# https://docs.spring.io/spring-ai/reference/api/chat/zhipuai-chat.html\n# spring.ai.zhipuai.base-url=https://open.bigmodel.cn/api/paas\n# 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n# spring.ai.zhipuai.chat.base-url=URL_ADDRESS\nspring.ai.zhipuai.api-key='sk-xxx'\nspring.ai.zhipuai.chat.enabled=true\n# 免费模型:https://open.bigmodel.cn/dev/api#glm-4\nspring.ai.zhipuai.chat.options.model=glm-4.5-flash\nspring.ai.zhipuai.chat.options.temperature=0.7\nspring.ai.zhipuai.chat.options.top-p=0.9\nspring.ai.zhipuai.chat.options.max-tokens=4096\n# 网络超时配置:request-timeout 为总请求超时,需大于 connect/read/write 之和\nspring.ai.zhipuai.request-timeout=55\nspring.ai.zhipuai.connection-timeout=30\nspring.ai.zhipuai.read-timeout=10\nspring.ai.zhipuai.write-timeout=10\nspring.ai.zhipuai.max-idle-connections=8\nspring.ai.zhipuai.keep-alive-duration=1\n# https://docs.spring.io/spring-ai/reference/api/embeddings/zhipuai-embeddings.html\nspring.ai.zhipuai.embedding.enabled=true\n# spring.ai.zhipuai.embedding.base-url=https://api.bigmodel.cn\n# spring.ai.zhipuai.embedding.api-key=sk-xxx\n# 1024维度的模型\nspring.ai.zhipuai.embedding.options.model=embedding-2\n# 2048维度的模型\n# spring.ai.zhipuai.embedding.options.model=embedding-3\nspring.ai.zhipuai.embedding.options.dimensions=1024\n# \n\n# ollama: \n# https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html\n# spring.ai.ollama.init.pull-model-strategy=always\n# 默认:11434,为防止本地冲突,如果是docker,需要修改为21434\n# spring.ai.ollama.base-url=http://127.0.0.1:11434\nspring.ai.ollama.base-url=http://127.0.0.1:21434\nspring.ai.ollama.chat.enabled=true\n# spring.ai.ollama.chat.options.model=deepseek-r1:latest\nspring.ai.ollama.chat.options.model=qwen3:0.6b\nspring.ai.ollama.chat.options.temperature=0.7\n# spring.ai.ollama.chat.options.numa=false\n# https://docs.spring.io/spring-ai/reference/api/embeddings/ollama-embeddings.html\nspring.ai.ollama.embedding.enabled=true\n# https://github.com/ollama/ollama?tab=readme-ov-file#model-library\nspring.ai.ollama.embedding.options.model=bge-m3:latest\n# spring.ai.ollama.embedding.options.numa=false\n# spring.ai.ollama.init.timeout=60s\n# spring.ai.ollama.init.max-retries=2\n# https://huggingface.co/BAAI/bge-reranker-v2-m3\nspring.ai.ollama.embedding.options.model.rerank=linux6200/bge-reranker-v2-m3:latest\n\n\n# ===============================\n# = 向量数据库\n# ===============================\n# https://github.com/spring-projects/spring-ai/blob/main/spring-ai-vector-store/src/main/java/org/springframework/ai/vectorstore/SpringAIVectorStoreTypes.java\n# spring.ai.vectorstore.type=none\n# spring.ai.vectorstore.type=redis\n# spring.ai.vectorstore.type=chroma\nspring.ai.vectorstore.type=elasticsearch\n# spring.ai.vectorstore.type=weaviate\n# spring.ai.vectorstore.type=milvus\n# spring.ai.vectorstore.type=pgvector\n\n# elasticsearch\n# 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n# 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\nspring.elasticsearch.uris=http://127.0.0.1:19200\nspring.elasticsearch.username=elastic\nspring.elasticsearch.password=bytedesk123\n# \nspring.ai.vectorstore.elasticsearch.enabled=true\nspring.ai.vectorstore.elasticsearch.initialize-schema=true\nspring.ai.vectorstore.elasticsearch.index-name=bytedesk_vs_index\nspring.ai.vectorstore.elasticsearch.dimensions=1024\n# cosine/l2_norm/dot_product\nspring.ai.vectorstore.elasticsearch.similarity=cosine\n\n# chroma\n# spring.ai.vectorstore.chroma.enabled=false\n# spring.ai.vectorstore.chroma.uri=http://127.0.0.1:18000\n# spring.ai.vectorstore.chroma.collection-name=bytedesk_vs_collection\n# spring.ai.vectorstore.chroma.distance-function=COSINE\n# spring.ai.vectorstore.chroma.embedding-dimension=1024\n\n# weaviate\n# spring.ai.vectorstore.weaviate.enabled=false\n# spring.ai.vectorstore.weaviate.host=127.0.0.1\n# spring.ai.vectorstore.weaviate.port=18080\n# spring.ai.vectorstore.weaviate.scheme=http\n# spring.ai.vectorstore.weaviate.index-name=BytedeskVectors\n# spring.ai.vectorstore.weaviate.text-field-name=content\n\n# milvus\n# spring.ai.vectorstore.milvus.enabled=false\n# spring.ai.vectorstore.milvus.host=127.0.0.1\n# spring.ai.vectorstore.milvus.port=19530\n# spring.ai.vectorstore.milvus.collection-name=bytedesk_vectors\n# spring.ai.vectorstore.milvus.vector-field=embedding\n# spring.ai.vectorstore.milvus.text-field=content\n# spring.ai.vectorstore.milvus.dimensions=1024\n\n\n# ===============================\n# = spring ai mcp\n# https://contribute.liquibase.com/extensions-channels/directory/integration-docs/springboot/configuration/\n# ===============================\n# https://docs.spring.io/spring-ai/reference/api/mcp/mcp-client-boot-starter-docs.html\nspring.ai.mcp.client.enabled=false\n# logging.level.org.springframework.ai.mcp=WARN\n# logging.level.org.springframework.ai.mcp.client.transport.StdioClientTransport=WARN\n# logging.level.org.springframework.ai.mcp.samples.brave=INFO\n# logging.level.io.modelcontextprotocol.client=WARN\n# logging.level.io.modelcontextprotocol.spec=WARN\n\n# mcp servers\n# https://github.com/modelcontextprotocol/servers\n# https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html\n# https://github.com/spring-projects/spring-ai/blob/b29076f/auto-configurations/spring-ai-mcp-server/src/main/java/org/springframework/ai/autoconfigure/mcp/server/McpServerProperties.java\nspring.ai.mcp.server.enable=false\n# spring.ai.mcp.server.name=bytedesk-starter\n# spring.ai.mcp.server.version=0.0.1\n# SYNC or ASYNC\nspring.ai.mcp.server.type=SYNC\n# Transport configuration\nspring.ai.mcp.server.stdio=false\n# spring.ai.mcp.server.sse-message-endpoint=/mcp/message\n# spring.ai.mcp.server.resource-change-notification=true\n# spring.ai.mcp.server.tool-change-notification=true\n# spring.ai.mcp.server.prompt-change-notification=true\n\n\n# ===============================\n# = Spring Batch Configuration\n# ===============================\n# 禁止启动时自动执行作业\nspring.batch.job.enabled=false\n# 始终初始化批处理表,生产环境建议设置为never\nspring.batch.jdbc.initialize-schema=never\n# 表前缀,默认是BATCH_\n# spring.batch.jdbc.schema=classpath:org/springframework/batch/core/schema-mysql.sql\n# spring.batch.jdbc.table-prefix=BD_BATCH_\n\n# ===============================\n# City Import (optional, async)\n# ===============================\n# 说明:用于首次启动后后台导入大体量城市数据(不阻塞启动)。默认关闭。\n# stagingScript: 直接导入 bytedesk_core_city.sql 到 bytedesk_core_city\nbytedesk.city.import.enabled=false\nbytedesk.city.import.force=false\nbytedesk.city.import.delay-ms=10000\nbytedesk.city.import.staging-script=classpath:sql/city/bytedesk_core_city.sql\nbytedesk.city.import.fallback-staging-file=${user.dir}/bytedesk_core_city.sql\n# 默认留空:脚本已直接写入 bytedesk_core_city\nbytedesk.city.import.transform-script=\nbytedesk.city.import.drop-staging-after=true\nbytedesk.city.import.lock-name=bytedesk:city:import\nbytedesk.city.import.lock-timeout-seconds=0\n\n#\n# ===============================\n# = liquibase\n# https://contribute.liquibase.com/extensions-channels/directory/integration-docs/springboot/configuration/\n# ===============================\nspring.liquibase.enabled=true\nspring.liquibase.change-log=classpath:db/changelog/master.xml\n\n\n# ===============================\n# = flowable\n# https://www.flowable.com/open-source/docs/bpmn/ch05a-Spring-Boot\n# ===============================\n# 禁止自动部署流程文件\n# flowable.check-process-definitions=false\n# flowable.deployment-enabled=false\n\n# 禁止CMMN自动部署\n# flowable.cmmn.enabled=false\n# flowable.cmmn.deployment-enabled=false\n\n# 禁止DMN自动部署\n# flowable.dmn.enabled=false \n# flowable.dmn.deployment-enabled=false\n\n# 禁止Form自动部署\n# flowable.form.enabled=false\n# flowable.form.deployment-enabled=false\n\n# 禁止Content自动部署\n# flowable.content.enabled=false\n# flowable.content.deployment-enabled=false\n\n# 禁止Event Registry自动部署\n# flowable.eventregistry.enabled=false\n# flowable.eventregistry.deployment-enabled=false\n\n# ===============================\n"}, "31184b5692f06291701315300e39e49a457a4dcf": {"t": 1785748615.3902242, "n": 9996, "h": "5b4d79909326cafb", "c": "# = ai\n# ===============================\n# spring.mvc.async.request-timeout=10000\nlogging.level.org.springframework.ai.chat.client.advisor=DEBUG\n\n# 启用Spring AI的观察功能\nspring.ai.observation.enabled=true\nspring.ai.retry.observation.enabled=true\n\n# 文本对话配置\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n# spring.ai.model.chat=none\n# spring.ai.model.chat=ollama\nspring.ai.model.chat=zhipuai\n# spring.ai.model.chat=dashscope\n\n# 向量模型\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n# spring.ai.model.embedding=none\n# spring.ai.model.embedding=ollama\nspring.ai.model.embedding=zhipuai\n# spring.ai.model.embedding=dashscope\n# spring.ai.model.embedding.text=\n# spring.ai.model.embedding.multimodal=\n\n# 视觉模型\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n# spring.ai.model.vision=none\n# spring.ai.model.vision=ollama\nspring.ai.model.vision=zhipuai\n# spring.ai.model.vision=dashscope\n# \nspring.ai.model.image=none\nspring.ai.model.moderation=none\n\n# 语音模型\n# spring.ai.model.audio=none\n# spring.ai.model.audio=ollama\nspring.ai.model.audio=zhipuai\n# spring.ai.model.audio=dashscope\n# \nspring.ai.model.audio.speech=none\nspring.ai.model.audio.transcription=none\n\n# 重排序模型\n# spring.ai.model.rerank=none\n# spring.ai.model.rerank=ollama\nspring.ai.model.rerank=zhipuai\n# spring.ai.model.rerank=dashscope\n\n# 多模态模型\n# spring.ai.model.multimodal=none\n# spring.ai.model.multimodal=ollama\nspring.ai.model.multimodal=zhipuai\n# spring.ai.model.multimodal=dashscope\n\n\n# spring ai alibaba\n# https://java2ai.com/docs/dev/get-started/\n# 阿里云百炼大模型获取api key:\n# https://bailian.console.aliyun.com/?apiKey=1#/api-key\n# 阿里云百炼大模型模型列表:\n# https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\nspring.ai.dashscope.enabled=false\n# spring.ai.dashscope.base-url=https://dashscope.aliyuncs.com\n# spring.ai.dashscope.api-key=sk-xxx\n# spring.ai.dashscope.chat.enabled=false\n# spring.ai.dashscope.chat.options.model=qwen-max\n# spring.ai.dashscope.chat.options.temperature=0.7\n# spring.ai.dashscope.chat.options.topP=3\n# spring.ai.dashscope.audio.transcription.enabled=false\n# spring.ai.dashscope.audio.transcription.api-key=\n# spring.ai.dashscope.audio.transcription.realtime-model=fun-asr-realtime\n# spring.ai.dashscope.image.enabled=false\n# spring.ai.dashscope.embedding.enabled=false\n# spring.ai.dashscope.audio.synthesis.enabled=false\n# spring.ai.nacos.prompt.template.enabled=false\n\n\n# zhipuai\n# https://open.bigmodel.cn/overview\n# https://docs.spring.io/spring-ai/reference/api/embeddings/zhipuai-embeddings.html\n# https://docs.spring.io/spring-ai/reference/api/chat/zhipuai-chat.html\n# spring.ai.zhipuai.base-url=https://open.bigmodel.cn/api/paas\n# 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n# spring.ai.zhipuai.chat.base-url=URL_ADDRESS\nspring.ai.zhipuai.api-key='sk-xxx'\nspring.ai.zhipuai.chat.enabled=true\n# 免费模型:https://open.bigmodel.cn/dev/api#glm-4\nspring.ai.zhipuai.chat.options.model=glm-4.5-flash\nspring.ai.zhipuai.chat.options.temperature=0.7\n# https://docs.spring.io/spring-ai/reference/api/embeddings/zhipuai-embeddings.html\nspring.ai.zhipuai.embedding.enabled=true\n# spring.ai.zhipuai.embedding.base-url=https://api.bigmodel.cn\n# spring.ai.zhipuai.embedding.api-key=sk-xxx\n# 1024维度的模型\nspring.ai.zhipuai.embedding.options.model=embedding-2\n# 2048维度的模型\n# spring.ai.zhipuai.embedding.options.model=embedding-3\nspring.ai.zhipuai.embedding.options.dimensions=1024\n# \n\n# ollama: \n# https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html\n# spring.ai.ollama.init.pull-model-strategy=always\n# 默认:11434,为防止本地冲突,如果是docker,需要修改为21434\n# spring.ai.ollama.base-url=http://127.0.0.1:11434\nspring.ai.ollama.base-url=http://127.0.0.1:21434\nspring.ai.ollama.chat.enabled=true\n# spring.ai.ollama.chat.options.model=deepseek-r1:latest\nspring.ai.ollama.chat.options.model=qwen3:0.6b\nspring.ai.ollama.chat.options.temperature=0.7\n# spring.ai.ollama.chat.options.numa=false\n# https://docs.spring.io/spring-ai/reference/api/embeddings/ollama-embeddings.html\nspring.ai.ollama.embedding.enabled=true\n# https://github.com/ollama/ollama?tab=readme-ov-file#model-library\nspring.ai.ollama.embedding.options.model=bge-m3:latest\n# spring.ai.ollama.embedding.options.numa=false\n# spring.ai.ollama.init.timeout=60s\n# spring.ai.ollama.init.max-retries=2\n# https://huggingface.co/BAAI/bge-reranker-v2-m3\nspring.ai.ollama.embedding.options.model.rerank=linux6200/bge-reranker-v2-m3:latest\n\n\n# ===============================\n# = 向量数据库\n# ===============================\n# https://github.com/spring-projects/spring-ai/blob/main/spring-ai-vector-store/src/main/java/org/springframework/ai/vectorstore/SpringAIVectorStoreTypes.java\n# spring.ai.vectorstore.type=none\n# spring.ai.vectorstore.type=redis\n# spring.ai.vectorstore.type=chroma\nspring.ai.vectorstore.type=elasticsearch\n# spring.ai.vectorstore.type=weaviate\n# spring.ai.vectorstore.type=milvus\n# spring.ai.vectorstore.type=pgvector\n\n# elasticsearch\n# 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n# 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\nspring.elasticsearch.uris=http://127.0.0.1:19200\nspring.elasticsearch.username=elastic\nspring.elasticsearch.password=bytedesk123\n# \nspring.ai.vectorstore.elasticsearch.enabled=true\nspring.ai.vectorstore.elasticsearch.initialize-schema=true\nspring.ai.vectorstore.elasticsearch.index-name=bytedesk_vs_index\nspring.ai.vectorstore.elasticsearch.dimensions=1024\n# cosine/l2_norm/dot_product\nspring.ai.vectorstore.elasticsearch.similarity=cosine\n\n# chroma\n# spring.ai.vectorstore.chroma.enabled=false\n# spring.ai.vectorstore.chroma.uri=http://127.0.0.1:18000\n# spring.ai.vectorstore.chroma.collection-name=bytedesk_vs_collection\n# spring.ai.vectorstore.chroma.distance-function=COSINE\n# spring.ai.vectorstore.chroma.embedding-dimension=1024\n\n# weaviate\n# spring.ai.vectorstore.weaviate.enabled=false\n# spring.ai.vectorstore.weaviate.host=127.0.0.1\n# spring.ai.vectorstore.weaviate.port=18080\n# spring.ai.vectorstore.weaviate.scheme=http\n# spring.ai.vectorstore.weaviate.index-name=BytedeskVectors\n# spring.ai.vectorstore.weaviate.text-field-name=content\n\n# milvus\n# spring.ai.vectorstore.milvus.enabled=false\n# spring.ai.vectorstore.milvus.host=127.0.0.1\n# spring.ai.vectorstore.milvus.port=19530\n# spring.ai.vectorstore.milvus.collection-name=bytedesk_vectors\n# spring.ai.vectorstore.milvus.vector-field=embedding\n# spring.ai.vectorstore.milvus.text-field=content\n# spring.ai.vectorstore.milvus.dimensions=1024\n\n\n# ===============================\n# = spring ai mcp\n# https://contribute.liquibase.com/extensions-channels/directory/integration-docs/springboot/configuration/\n# ===============================\n# https://docs.spring.io/spring-ai/reference/api/mcp/mcp-client-boot-starter-docs.html\nspring.ai.mcp.client.enabled=false\n# logging.level.org.springframework.ai.mcp=WARN\n# logging.level.org.springframework.ai.mcp.client.transport.StdioClientTransport=WARN\n# logging.level.org.springframework.ai.mcp.samples.brave=INFO\n# logging.level.io.modelcontextprotocol.client=WARN\n# logging.level.io.modelcontextprotocol.spec=WARN\n\n# mcp servers\n# https://github.com/modelcontextprotocol/servers\n# https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html\n# https://github.com/spring-projects/spring-ai/blob/b29076f/auto-configurations/spring-ai-mcp-server/src/main/java/org/springframework/ai/autoconfigure/mcp/server/McpServerProperties.java\nspring.ai.mcp.server.enable=false\n# spring.ai.mcp.server.name=bytedesk-starter\n# spring.ai.mcp.server.version=0.0.1\n# SYNC or ASYNC\nspring.ai.mcp.server.type=SYNC\n# Transport configuration\nspring.ai.mcp.server.stdio=false\n# spring.ai.mcp.server.sse-message-endpoint=/mcp/message\n# spring.ai.mcp.server.resource-change-notification=true\n# spring.ai.mcp.server.tool-change-notification=true\n# spring.ai.mcp.server.prompt-change-notification=true\n\n\n# ===============================\n# = Spring Batch Configuration\n# ===============================\n# 禁止启动时自动执行作业\nspring.batch.job.enabled=false\n# 始终初始化批处理表,生产环境建议设置为never\nspring.batch.jdbc.initialize-schema=never\n# 表前缀,默认是BATCH_\n# spring.batch.jdbc.schema=classpath:org/springframework/batch/core/schema-mysql.sql\n# spring.batch.jdbc.table-prefix=BD_BATCH_\n\n# ===============================\n# City Import (optional, async)\n# ===============================\n# 说明:用于首次启动后后台导入大体量城市数据(不阻塞启动)。默认关闭。\n# stagingScript: 直接导入 bytedesk_core_city.sql 到 bytedesk_core_city\nbytedesk.city.import.enabled=false\nbytedesk.city.import.force=false\nbytedesk.city.import.delay-ms=10000\nbytedesk.city.import.staging-script=classpath:sql/city/bytedesk_core_city.sql\nbytedesk.city.import.fallback-staging-file=${user.dir}/bytedesk_core_city.sql\n# 默认留空:脚本已直接写入 bytedesk_core_city\nbytedesk.city.import.transform-script=\nbytedesk.city.import.drop-staging-after=true\nbytedesk.city.import.lock-name=bytedesk:city:import\nbytedesk.city.import.lock-timeout-seconds=0\n\n#\n# ===============================\n# = liquibase\n# https://contribute.liquibase.com/extensions-channels/directory/integration-docs/springboot/configuration/\n# ===============================\nspring.liquibase.enabled=true\nspring.liquibase.change-log=classpath:db/changelog/master.xml\n\n\n# ===============================\n# = flowable\n# https://www.flowable.com/open-source/docs/bpmn/ch05a-Spring-Boot\n# ===============================\n# 禁止自动部署流程文件\n# flowable.check-process-definitions=false\n# flowable.deployment-enabled=false\n\n# 禁止CMMN自动部署\n# flowable.cmmn.enabled=false\n# flowable.cmmn.deployment-enabled=false\n\n# 禁止DMN自动部署\n# flowable.dmn.enabled=false \n# flowable.dmn.deployment-enabled=false\n\n# 禁止Form自动部署\n# flowable.form.enabled=false\n# flowable.form.deployment-enabled=false\n\n# 禁止Content自动部署\n# flowable.content.enabled=false\n# flowable.content.deployment-enabled=false\n\n# 禁止Event Registry自动部署\n# flowable.eventregistry.enabled=false\n# flowable.eventregistry.deployment-enabled=false\n\n# ===============================\n"}, "976193668c0e76c76b3f7ba8d9522c7fc2692a06": {"t": 1786068153.2603822, "n": 9664, "h": "659070bec2e7f1c3", "c": "# = ai\n# ===============================\n# spring.mvc.async.request-timeout=10000\nlogging.level.org.springframework.ai.chat.client.advisor=DEBUG\n\n# 启用Spring AI的观察功能\nspring.ai.observation.enabled=true\nspring.ai.retry.observation.enabled=true\n\n# 文本对话配置\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n# spring.ai.model.chat=none\n# spring.ai.model.chat=ollama\nspring.ai.model.chat=zhipuai\n# spring.ai.model.chat=dashscope\n\n# 向量模型\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n# spring.ai.model.embedding=none\n# spring.ai.model.embedding=ollama\nspring.ai.model.embedding=zhipuai\n# spring.ai.model.embedding=dashscope\n# spring.ai.model.embedding.text=\n# spring.ai.model.embedding.multimodal=\n\n# 视觉模型\n# https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n# spring.ai.model.vision=none\n# spring.ai.model.vision=ollama\nspring.ai.model.vision=zhipuai\n# spring.ai.model.vision=dashscope\n# \nspring.ai.model.image=none\nspring.ai.model.moderation=none\n\n# 语音模型\n# spring.ai.model.audio=none\n# spring.ai.model.audio=ollama\nspring.ai.model.audio=zhipuai\n# spring.ai.model.audio=dashscope\n# \nspring.ai.model.audio.speech=none\nspring.ai.model.audio.transcription=none\n\n# 重排序模型\n# spring.ai.model.rerank=none\n# spring.ai.model.rerank=ollama\nspring.ai.model.rerank=zhipuai\n# spring.ai.model.rerank=dashscope\n\n# 多模态模型\n# spring.ai.model.multimodal=none\n# spring.ai.model.multimodal=ollama\nspring.ai.model.multimodal=zhipuai\n# spring.ai.model.multimodal=dashscope\n\n# ===============================\n# = skill\n# ===============================\n# Optional external skills directory. Expected layout: /path/to/skills/<skill-dir>/SKILL.md\n# bytedesk.ai.skill.external-directory=/opt/bytedesk/skills\n\n\n# spring ai alibaba\n# https://java2ai.com/docs/dev/get-started/\n# 阿里云百炼大模型获取api key:\n# https://bailian.console.aliyun.com/?apiKey=1#/api-key\n# 阿里云百炼大模型模型列表:\n# https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\nspring.ai.dashscope.enabled=false\n# spring.ai.dashscope.base-url=https://dashscope.aliyuncs.com\n# spring.ai.dashscope.api-key=sk-xxx\n# spring.ai.dashscope.chat.enabled=false\n# spring.ai.dashscope.chat.options.model=qwen-max\n# spring.ai.dashscope.chat.options.temperature=0.7\n# spring.ai.dashscope.chat.options.topP=3\n# 可选:语音合成专用Key(未配置时回退到 spring.ai.dashscope.api-key)\n# spring.ai.dashscope.audio.synthesis.api-key=\n# TTS 默认模型与音色,会同步给后端执行接口和管理台表单默认值\nspring.ai.dashscope.audio.synthesis.options.model=cosyvoice-v3-flash\nspring.ai.dashscope.audio.synthesis.options.voice=longanhuan\n# spring.ai.dashscope.audio.transcription.enabled=false\n# ASR 默认模型,会同步给后端执行接口和管理台表单默认值\nspring.ai.dashscope.audio.transcription.options.model=paraformer-v2\n# 可选:语音转写专用Key(未配置时回退到 spring.ai.dashscope.api-key)\n# spring.ai.dashscope.audio.transcription.api-key=\n# spring.ai.dashscope.audio.transcription.realtime-model=paraformer-realtime-v2\n# spring.ai.dashscope.image.enabled=false\n# spring.ai.dashscope.embedding.enabled=false\n# spring.ai.dashscope.audio.synthesis.enabled=false\n# spring.ai.nacos.prompt.template.enabled=false\n\n\n# zhipuai\n# https://open.bigmodel.cn/overview\n# https://docs.spring.io/spring-ai/reference/api/embeddings/zhipuai-embeddings.html\n# https://docs.spring.io/spring-ai/reference/api/chat/zhipuai-chat.html\n# spring.ai.zhipuai.base-url=https://open.bigmodel.cn/api/paas\n# 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n# spring.ai.zhipuai.chat.base-url=URL_ADDRESS\nspring.ai.zhipuai.api-key='sk-xxx'\nspring.ai.zhipuai.chat.enabled=true\n# 免费模型:https://open.bigmodel.cn/dev/api#glm-4\nspring.ai.zhipuai.chat.options.model=glm-4.5-flash\nspring.ai.zhipuai.chat.options.temperature=0.7\nspring.ai.zhipuai.chat.options.top-p=0.9\nspring.ai.zhipuai.chat.options.max-tokens=4096\n# 网络超时配置:request-timeout 为总请求超时,需大于 connect/read/write 之和\nspring.ai.zhipuai.request-timeout=55\nspring.ai.zhipuai.connection-timeout=30\nspring.ai.zhipuai.read-timeout=10\nspring.ai.zhipuai.write-timeout=10\nspring.ai.zhipuai.max-idle-connections=8\nspring.ai.zhipuai.keep-alive-duration=1\n# https://docs.spring.io/spring-ai/reference/api/embeddings/zhipuai-embeddings.html\nspring.ai.zhipuai.embedding.enabled=true\n# spring.ai.zhipuai.embedding.base-url=https://api.bigmodel.cn\n# spring.ai.zhipuai.embedding.api-key=sk-xxx\n# 1024维度的模型\nspring.ai.zhipuai.embedding.options.model=embedding-2\n# 2048维度的模型\n# spring.ai.zhipuai.embedding.options.model=embedding-3\nspring.ai.zhipuai.embedding.options.dimensions=1024\n# \n\n# ollama: \n# https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html\n# spring.ai.ollama.init.pull-model-strategy=always\n# 默认:11434,为防止本地冲突,如果是docker,需要修改为21434\n# spring.ai.ollama.base-url=http://127.0.0.1:11434\nspring.ai.ollama.base-url=http://127.0.0.1:21434\nspring.ai.ollama.chat.enabled=true\n# spring.ai.ollama.chat.options.model=deepseek-r1:latest\nspring.ai.ollama.chat.options.model=qwen3:0.6b\nspring.ai.ollama.chat.options.temperature=0.7\n# spring.ai.ollama.chat.options.numa=false\n# https://docs.spring.io/spring-ai/reference/api/embeddings/ollama-embeddings.html\nspring.ai.ollama.embedding.enabled=true\n# https://github.com/ollama/ollama?tab=readme-ov-file#model-library\nspring.ai.ollama.embedding.options.model=bge-m3:latest\n# spring.ai.ollama.embedding.options.numa=false\n# spring.ai.ollama.init.timeout=60s\n# spring.ai.ollama.init.max-retries=2\n# https://huggingface.co/BAAI/bge-reranker-v2-m3\nspring.ai.ollama.embedding.options.model.rerank=linux6200/bge-reranker-v2-m3:latest\n\n\n# ===============================\n# = bytedesk ai defaults\n# ===============================\n# 管理台和执行接口共享的 TTS 默认参数\nbytedesk.ai.tts.language=zh-CN\nbytedesk.ai.tts.audio-format=mp3\n\n# 管理台和执行接口共享的 ASR 默认参数\nbytedesk.ai.asr.source-format=mp3\nbytedesk.ai.asr.timeout-ms=180000\nbytedesk.ai.asr.poll-interval-ms=1500\nbytedesk.ai.asr.ttsasr.enabled=${BYTEDESK_AI_ASR_TTSASR_ENABLED:true}\nbytedesk.ai.asr.ttsasr.base-url=${BYTEDESK_AI_ASR_TTSASR_BASE_URL:http://127.0.0.1:18000}\nbytedesk.ai.asr.ttsasr.model=${BYTEDESK_AI_ASR_TTSASR_MODEL:funasr}\nbytedesk.ai.asr.ttsasr.language=${BYTEDESK_AI_ASR_TTSASR_LANGUAGE:auto}\n\n# TTS Realtime WebSocket 配置(Qwen-Audio Realtime 中继地址)\nbytedesk.ai.tts.realtime.ws-url=${BYTEDESK_AI_TTS_REALTIME_WS_URL:wss://dashscope.aliyuncs.com/api-ws/v1/realtime}\n\n# ===============================\n# = 向量数据库\n# ===============================\n# https://github.com/spring-projects/spring-ai/blob/main/spring-ai-vector-store/src/main/java/org/springframework/ai/vectorstore/SpringAIVectorStoreTypes.java\n# spring.ai.vectorstore.type=none\n# spring.ai.vectorstore.type=redis\n# spring.ai.vectorstore.type=chroma\nspring.ai.vectorstore.type=elasticsearch\n# spring.ai.vectorstore.type=weaviate\n# spring.ai.vectorstore.type=milvus\n# spring.ai.vectorstore.type=pgvector\n\n# elasticsearch\n# 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n# 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\nspring.elasticsearch.uris=http://127.0.0.1:19200\nspring.elasticsearch.username=elastic\nspring.elasticsearch.password=bytedesk123\n# \nspring.ai.vectorstore.elasticsearch.enabled=true\nspring.ai.vectorstore.elasticsearch.initialize-schema=true\nspring.ai.vectorstore.elasticsearch.index-name=bytedesk_vs_index\nspring.ai.vectorstore.elasticsearch.dimensions=1024\n# cosine/l2_norm/dot_product\nspring.ai.vectorstore.elasticsearch.similarity=cosine\n\n# chroma\n# spring.ai.vectorstore.chroma.enabled=false\n# spring.ai.vectorstore.chroma.uri=http://127.0.0.1:18000\n# spring.ai.vectorstore.chroma.collection-name=bytedesk_vs_collection\n# spring.ai.vectorstore.chroma.distance-function=COSINE\n# spring.ai.vectorstore.chroma.embedding-dimension=1024\n\n# weaviate\n# spring.ai.vectorstore.weaviate.enabled=false\n# spring.ai.vectorstore.weaviate.host=127.0.0.1\n# spring.ai.vectorstore.weaviate.port=18080\n# spring.ai.vectorstore.weaviate.scheme=http\n# spring.ai.vectorstore.weaviate.index-name=BytedeskVectors\n# spring.ai.vectorstore.weaviate.text-field-name=content\n\n# milvus\n# spring.ai.vectorstore.milvus.enabled=false\n# spring.ai.vectorstore.milvus.host=127.0.0.1\n# spring.ai.vectorstore.milvus.port=19530\n# spring.ai.vectorstore.milvus.collection-name=bytedesk_vectors\n# spring.ai.vectorstore.milvus.vector-field=embedding\n# spring.ai.vectorstore.milvus.text-field=content\n# spring.ai.vectorstore.milvus.dimensions=1024\n\n\n# ===============================\n# = Spring Batch Configuration\n# ===============================\n# 禁止启动时自动执行作业\nspring.batch.job.enabled=false\n# 始终初始化批处理表,生产环境建议设置为never\nspring.batch.jdbc.initialize-schema=never\n# 表前缀,默认是BATCH_\n# spring.batch.jdbc.schema=classpath:org/springframework/batch/core/schema-mysql.sql\n# spring.batch.jdbc.table-prefix=BD_BATCH_\n\n# ===============================\n# City Import (optional, async)\n# ===============================\n# 说明:用于首次启动后后台导入大体量城市数据(不阻塞启动)。默认关闭。\n# stagingScript: 直接导入 bytedesk_core_city.sql 到 bytedesk_core_city\nbytedesk.city.import.enabled=false\nbytedesk.city.import.force=false\nbytedesk.city.import.delay-ms=10000\nbytedesk.city.import.staging-script=classpath:sql/city/bytedesk_core_city.sql\nbytedesk.city.import.fallback-staging-file=${user.dir}/bytedesk_core_city.sql\n# 默认留空:脚本已直接写入 bytedesk_core_city\nbytedesk.city.import.transform-script=\nbytedesk.city.import.drop-staging-after=true\nbytedesk.city.import.lock-name=bytedesk:city:import\nbytedesk.city.import.lock-timeout-seconds=0\n\n#\n# ===============================\n# = liquibase\n# https://contribute.liquibase.com/extensions-channels/directory/integration-docs/springboot/configuration/\n# ===============================\nspring.liquibase.enabled=true\nspring.liquibase.change-log=classpath:db/changelog/master.xml\n"}}, "deploy/docker/one/docker-compose.yaml": {"affe883cb26b5fd3e33902ae54e2bd31c3fa2ade": {"t": 1785747395.4501543, "n": 27344, "h": "219b4a22fbe02b2b", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:9.4.2\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"IK_PLUGIN_DIR=/tmp/ik-plugin-cache; IK_PLUGIN_FILE=$$IK_PLUGIN_DIR/elasticsearch-analysis-ik-9.4.2.zip; IK_PLUGIN_TMP=$$IK_PLUGIN_FILE.tmp; mkdir -p $$IK_PLUGIN_DIR; if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; curl -fsSL -o $$IK_PLUGIN_TMP https://www.weiyuai.cn/download/elasticsearch-analysis-ik-9.4.2.zip && mv $$IK_PLUGIN_TMP $$IK_PLUGIN_FILE; /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file://$$IK_PLUGIN_FILE; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(缓存目录中的 zip 文件)\n # 如缓存目录中无 zip 文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-9.4.2.zip 下载\n - ./elasticsearch-analysis-ik-9.4.2.zip:/tmp/ik-plugin-cache\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n BYTEDESK_CALL_MRCP_ENABLED: \"false\"\n BYTEDESK_CALL_MRCP_PROFILE: java-mrcp\n BYTEDESK_CALL_MRCP_HOST: 0.0.0.0\n BYTEDESK_CALL_MRCP_PORT: 1544\n BYTEDESK_CALL_MRCP_TTS_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_MODE: recording-file\n BYTEDESK_CALL_MRCP_TTS_VOICE: longanhuan\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ===============================\n # Spring Boot Admin Client (bytedesk-monitor)\n # Uncomment to register this instance with a monitor server. 取消注释以注册到监控服务端。\n # ===============================\n # SPRING_BOOT_ADMIN_CLIENT_URL: http://bytedesk-monitor:9103\n # SPRING_BOOT_ADMIN_CLIENT_USERNAME: admin\n # SPRING_BOOT_ADMIN_CLIENT_PASSWORD: admin\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_NAME: bytedesk-starter\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_SERVICE_BASE_URL: http://127.0.0.1:9003\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "b887c4d8832c822f205c0f2cbbc97b26ebd41d84": {"t": 1785748606.5230246, "n": 27349, "h": "3405626ac7346524", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"IK_PLUGIN_DIR=/tmp/ik-plugin-cache; IK_PLUGIN_FILE=$$IK_PLUGIN_DIR/elasticsearch-analysis-ik-8.18.0.zip; IK_PLUGIN_TMP=$$IK_PLUGIN_FILE.tmp; mkdir -p $$IK_PLUGIN_DIR; if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; curl -fsSL -o $$IK_PLUGIN_TMP https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && mv $$IK_PLUGIN_TMP $$IK_PLUGIN_FILE; /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file://$$IK_PLUGIN_FILE; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(缓存目录中的 zip 文件)\n # 如缓存目录中无 zip 文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/ik-plugin-cache\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n BYTEDESK_CALL_MRCP_ENABLED: \"false\"\n BYTEDESK_CALL_MRCP_PROFILE: java-mrcp\n BYTEDESK_CALL_MRCP_HOST: 0.0.0.0\n BYTEDESK_CALL_MRCP_PORT: 1544\n BYTEDESK_CALL_MRCP_TTS_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_MODE: recording-file\n BYTEDESK_CALL_MRCP_TTS_VOICE: longanhuan\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ===============================\n # Spring Boot Admin Client (bytedesk-monitor)\n # Uncomment to register this instance with a monitor server. 取消注释以注册到监控服务端。\n # ===============================\n # SPRING_BOOT_ADMIN_CLIENT_URL: http://bytedesk-monitor:9103\n # SPRING_BOOT_ADMIN_CLIENT_USERNAME: admin\n # SPRING_BOOT_ADMIN_CLIENT_PASSWORD: admin\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_NAME: bytedesk-starter\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_SERVICE_BASE_URL: http://127.0.0.1:9003\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "797fc307db5d99f05be7654a91259d1e76ad03bc": {"t": 1785748607.8955474, "n": 26993, "h": "2b4a0a4ad739b48a", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"IK_PLUGIN_DIR=/tmp/ik-plugin-cache; IK_PLUGIN_FILE=$$IK_PLUGIN_DIR/elasticsearch-analysis-ik-8.18.0.zip; IK_PLUGIN_TMP=$$IK_PLUGIN_FILE.tmp; mkdir -p $$IK_PLUGIN_DIR; if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; curl -fsSL -o $$IK_PLUGIN_TMP https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && mv $$IK_PLUGIN_TMP $$IK_PLUGIN_FILE; /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file://$$IK_PLUGIN_FILE; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(缓存目录中的 zip 文件)\n # 如缓存目录中无 zip 文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/ik-plugin-cache\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ===============================\n # Spring Boot Admin Client (bytedesk-monitor)\n # Uncomment to register this instance with a monitor server. 取消注释以注册到监控服务端。\n # ===============================\n # SPRING_BOOT_ADMIN_CLIENT_URL: http://bytedesk-monitor:9103\n # SPRING_BOOT_ADMIN_CLIENT_USERNAME: admin\n # SPRING_BOOT_ADMIN_CLIENT_PASSWORD: admin\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_NAME: bytedesk-starter\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_SERVICE_BASE_URL: http://127.0.0.1:9003\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "7ef9159f723f12427bb03ecb9b23fe9090ae0e34": {"t": 1785748609.1145768, "n": 26504, "h": "8e914c772dbf3afb", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "12eb4359662371740e80b49a3d86e8cc4101cee5": {"t": 1785748610.4686995, "n": 26339, "h": "e95641fd7ff34f8a", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "0ffefc7867ec55721497e0f90769901fa12a42f2": {"t": 1785748611.8349934, "n": 26200, "h": "b20910e3b25d934e", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "cfcd4fe31454c60261f28951de5ec33377e115ab": {"t": 1785748613.0925734, "n": 26151, "h": "8ab3da8e47ac8946", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "93bce581a29a77e71b563d7783c957a0c8ca4d2b": {"t": 1785748614.3159156, "n": 25018, "h": "47fb4f2b4e7ffee6", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.7.0\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "7b3acbe6b6df8fbe01ae2b19b26dc787b5285037": {"t": 1785748615.5543747, "n": 25018, "h": "1ffb4c66acea3e66", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.6.0\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "dc2c12166af8ccdb5e6f22248dd783b794644ab6": {"t": 1785748616.7833953, "n": 25004, "h": "9fb39514e38af9f4", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis/redis-stack-server:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n environment:\n - REDIS_ARGS=--requirepass qfRxz3tVT8Nh\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.6.0\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "d363dfa388e3ada7b7e8ec12d1628c560b23ab61": {"t": 1785748618.1537971, "n": 25013, "h": "fd690c66223e9a70", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis/redis-stack-server:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n environment:\n - REDIS_ARGS=--requirepass qfRxz3tVT8Nh\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.5.1\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_LOCK_TIME_MINUTES: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HELPCENTER_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "a6b37c539838b97d2c6616946d1f47ee8e07ea06": {"t": 1785748619.4089139, "n": 25013, "h": "d0e27480524b3ec3", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis/redis-stack-server:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n environment:\n - REDIS_ARGS=--requirepass qfRxz3tVT8Nh\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.5.0\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_LOCK_TIME_MINUTES: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HELPCENTER_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "5ffbeba3e9fb263f2a3fc41a8fe4cfafe20452f1": {"t": 1785748620.655554, "n": 25013, "h": "014dd29e7ca4cad5", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis/redis-stack-server:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n environment:\n - REDIS_ARGS=--requirepass qfRxz3tVT8Nh\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.0.0\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_LOCK_TIME_MINUTES: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HELPCENTER_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "b73297ad66d3f7bbaf79c808c12a3bcbad053435": {"t": 1785748622.0609345, "n": 24902, "h": "768120e8e0dd3f08", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis/redis-stack-server:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n environment:\n - REDIS_ARGS=--requirepass qfRxz3tVT8Nh\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.0.0\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_LOCK_TIME_MINUTES: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HELPCENTER_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n # SPRING_ARTEMIS_MODE: embedded\n SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "976193668c0e76c76b3f7ba8d9522c7fc2692a06": {"t": 1786068160.644144, "n": 27349, "h": "3405626ac7346524", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"IK_PLUGIN_DIR=/tmp/ik-plugin-cache; IK_PLUGIN_FILE=$$IK_PLUGIN_DIR/elasticsearch-analysis-ik-8.18.0.zip; IK_PLUGIN_TMP=$$IK_PLUGIN_FILE.tmp; mkdir -p $$IK_PLUGIN_DIR; if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; curl -fsSL -o $$IK_PLUGIN_TMP https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && mv $$IK_PLUGIN_TMP $$IK_PLUGIN_FILE; /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file://$$IK_PLUGIN_FILE; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(缓存目录中的 zip 文件)\n # 如缓存目录中无 zip 文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/ik-plugin-cache\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n BYTEDESK_CALL_MRCP_ENABLED: \"false\"\n BYTEDESK_CALL_MRCP_PROFILE: java-mrcp\n BYTEDESK_CALL_MRCP_HOST: 0.0.0.0\n BYTEDESK_CALL_MRCP_PORT: 1544\n BYTEDESK_CALL_MRCP_TTS_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_MODE: recording-file\n BYTEDESK_CALL_MRCP_TTS_VOICE: longanhuan\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ===============================\n # Spring Boot Admin Client (bytedesk-monitor)\n # Uncomment to register this instance with a monitor server. 取消注释以注册到监控服务端。\n # ===============================\n # SPRING_BOOT_ADMIN_CLIENT_URL: http://bytedesk-monitor:9103\n # SPRING_BOOT_ADMIN_CLIENT_USERNAME: admin\n # SPRING_BOOT_ADMIN_CLIENT_PASSWORD: admin\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_NAME: bytedesk-starter\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_SERVICE_BASE_URL: http://127.0.0.1:9003\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}}, "deploy/docker/one/docker-compose-rabbitmq.yaml": {"affe883cb26b5fd3e33902ae54e2bd31c3fa2ade": {"t": 1785747395.5298662, "n": 27177, "h": "5a93c1f89b4f5603", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # RabbitMQ 消息队列\n # https://hub.docker.com/_/rabbitmq\n # http://localhost:15673 (管理后台)\n bytedesk-rabbitmq:\n image: rabbitmq:4.2.3-management\n container_name: rabbitmq-bytedesk\n environment:\n - RABBITMQ_DEFAULT_USER=admin\n - RABBITMQ_DEFAULT_PASS=admin\n - TZ=Asia/Shanghai\n ports:\n - \"5673:5672\" # AMQP\n - \"15673:15672\" # Management UI\n volumes:\n - rabbitmq_data:/var/lib/rabbitmq\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"rabbitmq-diagnostics\", \"-q\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:9.4.2\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"IK_PLUGIN_DIR=/tmp/ik-plugin-cache; IK_PLUGIN_FILE=$$IK_PLUGIN_DIR/elasticsearch-analysis-ik-9.4.2.zip; IK_PLUGIN_TMP=$$IK_PLUGIN_FILE.tmp; mkdir -p $$IK_PLUGIN_DIR; if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; curl -fsSL -o $$IK_PLUGIN_TMP https://www.weiyuai.cn/download/elasticsearch-analysis-ik-9.4.2.zip && mv $$IK_PLUGIN_TMP $$IK_PLUGIN_FILE; /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file://$$IK_PLUGIN_FILE; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(缓存目录中的 zip 文件)\n # 如缓存目录中无 zip 文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-9.4.2.zip 下载\n - ./elasticsearch-analysis-ik-9.4.2.zip:/tmp/ik-plugin-cache\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-rabbitmq\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n BYTEDESK_CALL_MRCP_ENABLED: \"false\"\n BYTEDESK_CALL_MRCP_PROFILE: java-mrcp\n BYTEDESK_CALL_MRCP_HOST: 0.0.0.0\n BYTEDESK_CALL_MRCP_PORT: 1544\n BYTEDESK_CALL_MRCP_TTS_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_MODE: recording-file\n BYTEDESK_CALL_MRCP_TTS_VOICE: longanhuan\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ===============================\n # Spring Boot Admin Client (bytedesk-monitor)\n # Uncomment to register this instance with a monitor server. 取消注释以注册到监控服务端。\n # ===============================\n # SPRING_BOOT_ADMIN_CLIENT_URL: http://bytedesk-monitor:9103\n # SPRING_BOOT_ADMIN_CLIENT_USERNAME: admin\n # SPRING_BOOT_ADMIN_CLIENT_PASSWORD: admin\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_NAME: bytedesk-starter\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_SERVICE_BASE_URL: http://127.0.0.1:9003\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n # MQ 配置\n BYTEDESK_MQ_TYPE: rabbitmq\n BYTEDESK_MQ_RABBITMQ_ENABLED: \"true\"\n SPRING_RABBITMQ_HOST: bytedesk-rabbitmq\n SPRING_RABBITMQ_PORT: 5672\n SPRING_RABBITMQ_USERNAME: admin\n SPRING_RABBITMQ_PASSWORD: admin\n SPRING_RABBITMQ_VIRTUAL_HOST: /\n SPRING_RABBITMQ_CONNECTION_TIMEOUT: 5000\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n rabbitmq_data:\n name: bytedesk_rabbitmq_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "b887c4d8832c822f205c0f2cbbc97b26ebd41d84": {"t": 1785748606.3893638, "n": 27182, "h": "cdd2b40eeb13d549", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # RabbitMQ 消息队列\n # https://hub.docker.com/_/rabbitmq\n # http://localhost:15673 (管理后台)\n bytedesk-rabbitmq:\n image: rabbitmq:4.2.3-management\n container_name: rabbitmq-bytedesk\n environment:\n - RABBITMQ_DEFAULT_USER=admin\n - RABBITMQ_DEFAULT_PASS=admin\n - TZ=Asia/Shanghai\n ports:\n - \"5673:5672\" # AMQP\n - \"15673:15672\" # Management UI\n volumes:\n - rabbitmq_data:/var/lib/rabbitmq\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"rabbitmq-diagnostics\", \"-q\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"IK_PLUGIN_DIR=/tmp/ik-plugin-cache; IK_PLUGIN_FILE=$$IK_PLUGIN_DIR/elasticsearch-analysis-ik-8.18.0.zip; IK_PLUGIN_TMP=$$IK_PLUGIN_FILE.tmp; mkdir -p $$IK_PLUGIN_DIR; if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; curl -fsSL -o $$IK_PLUGIN_TMP https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && mv $$IK_PLUGIN_TMP $$IK_PLUGIN_FILE; /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file://$$IK_PLUGIN_FILE; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(缓存目录中的 zip 文件)\n # 如缓存目录中无 zip 文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/ik-plugin-cache\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-rabbitmq\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n BYTEDESK_CALL_MRCP_ENABLED: \"false\"\n BYTEDESK_CALL_MRCP_PROFILE: java-mrcp\n BYTEDESK_CALL_MRCP_HOST: 0.0.0.0\n BYTEDESK_CALL_MRCP_PORT: 1544\n BYTEDESK_CALL_MRCP_TTS_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_MODE: recording-file\n BYTEDESK_CALL_MRCP_TTS_VOICE: longanhuan\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ===============================\n # Spring Boot Admin Client (bytedesk-monitor)\n # Uncomment to register this instance with a monitor server. 取消注释以注册到监控服务端。\n # ===============================\n # SPRING_BOOT_ADMIN_CLIENT_URL: http://bytedesk-monitor:9103\n # SPRING_BOOT_ADMIN_CLIENT_USERNAME: admin\n # SPRING_BOOT_ADMIN_CLIENT_PASSWORD: admin\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_NAME: bytedesk-starter\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_SERVICE_BASE_URL: http://127.0.0.1:9003\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n # MQ 配置\n BYTEDESK_MQ_TYPE: rabbitmq\n BYTEDESK_MQ_RABBITMQ_ENABLED: \"true\"\n SPRING_RABBITMQ_HOST: bytedesk-rabbitmq\n SPRING_RABBITMQ_PORT: 5672\n SPRING_RABBITMQ_USERNAME: admin\n SPRING_RABBITMQ_PASSWORD: admin\n SPRING_RABBITMQ_VIRTUAL_HOST: /\n SPRING_RABBITMQ_CONNECTION_TIMEOUT: 5000\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n rabbitmq_data:\n name: bytedesk_rabbitmq_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "797fc307db5d99f05be7654a91259d1e76ad03bc": {"t": 1785748607.6442506, "n": 26826, "h": "e3a2810d79b44fc1", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # RabbitMQ 消息队列\n # https://hub.docker.com/_/rabbitmq\n # http://localhost:15673 (管理后台)\n bytedesk-rabbitmq:\n image: rabbitmq:4.2.3-management\n container_name: rabbitmq-bytedesk\n environment:\n - RABBITMQ_DEFAULT_USER=admin\n - RABBITMQ_DEFAULT_PASS=admin\n - TZ=Asia/Shanghai\n ports:\n - \"5673:5672\" # AMQP\n - \"15673:15672\" # Management UI\n volumes:\n - rabbitmq_data:/var/lib/rabbitmq\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"rabbitmq-diagnostics\", \"-q\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"IK_PLUGIN_DIR=/tmp/ik-plugin-cache; IK_PLUGIN_FILE=$$IK_PLUGIN_DIR/elasticsearch-analysis-ik-8.18.0.zip; IK_PLUGIN_TMP=$$IK_PLUGIN_FILE.tmp; mkdir -p $$IK_PLUGIN_DIR; if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; curl -fsSL -o $$IK_PLUGIN_TMP https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && mv $$IK_PLUGIN_TMP $$IK_PLUGIN_FILE; /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file://$$IK_PLUGIN_FILE; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(缓存目录中的 zip 文件)\n # 如缓存目录中无 zip 文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/ik-plugin-cache\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-rabbitmq\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ===============================\n # Spring Boot Admin Client (bytedesk-monitor)\n # Uncomment to register this instance with a monitor server. 取消注释以注册到监控服务端。\n # ===============================\n # SPRING_BOOT_ADMIN_CLIENT_URL: http://bytedesk-monitor:9103\n # SPRING_BOOT_ADMIN_CLIENT_USERNAME: admin\n # SPRING_BOOT_ADMIN_CLIENT_PASSWORD: admin\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_NAME: bytedesk-starter\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_SERVICE_BASE_URL: http://127.0.0.1:9003\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n # MQ 配置\n BYTEDESK_MQ_TYPE: rabbitmq\n BYTEDESK_MQ_RABBITMQ_ENABLED: \"true\"\n SPRING_RABBITMQ_HOST: bytedesk-rabbitmq\n SPRING_RABBITMQ_PORT: 5672\n SPRING_RABBITMQ_USERNAME: admin\n SPRING_RABBITMQ_PASSWORD: admin\n SPRING_RABBITMQ_VIRTUAL_HOST: /\n SPRING_RABBITMQ_CONNECTION_TIMEOUT: 5000\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n rabbitmq_data:\n name: bytedesk_rabbitmq_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "7ef9159f723f12427bb03ecb9b23fe9090ae0e34": {"t": 1785748609.0481448, "n": 26337, "h": "1631e86ac5c55ae6", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # RabbitMQ 消息队列\n # https://hub.docker.com/_/rabbitmq\n # http://localhost:15673 (管理后台)\n bytedesk-rabbitmq:\n image: rabbitmq:4.2.3-management\n container_name: rabbitmq-bytedesk\n environment:\n - RABBITMQ_DEFAULT_USER=admin\n - RABBITMQ_DEFAULT_PASS=admin\n - TZ=Asia/Shanghai\n ports:\n - \"5673:5672\" # AMQP\n - \"15673:15672\" # Management UI\n volumes:\n - rabbitmq_data:/var/lib/rabbitmq\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"rabbitmq-diagnostics\", \"-q\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-rabbitmq\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n # MQ 配置\n BYTEDESK_MQ_TYPE: rabbitmq\n BYTEDESK_MQ_RABBITMQ_ENABLED: \"true\"\n SPRING_RABBITMQ_HOST: bytedesk-rabbitmq\n SPRING_RABBITMQ_PORT: 5672\n SPRING_RABBITMQ_USERNAME: admin\n SPRING_RABBITMQ_PASSWORD: admin\n SPRING_RABBITMQ_VIRTUAL_HOST: /\n SPRING_RABBITMQ_CONNECTION_TIMEOUT: 5000\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n rabbitmq_data:\n name: bytedesk_rabbitmq_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "12eb4359662371740e80b49a3d86e8cc4101cee5": {"t": 1785748610.2686694, "n": 26172, "h": "6a7ace16f002eb0f", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # RabbitMQ 消息队列\n # https://hub.docker.com/_/rabbitmq\n # http://localhost:15673 (管理后台)\n bytedesk-rabbitmq:\n image: rabbitmq:4.2.3-management\n container_name: rabbitmq-bytedesk\n environment:\n - RABBITMQ_DEFAULT_USER=admin\n - RABBITMQ_DEFAULT_PASS=admin\n - TZ=Asia/Shanghai\n ports:\n - \"5673:5672\" # AMQP\n - \"15673:15672\" # Management UI\n volumes:\n - rabbitmq_data:/var/lib/rabbitmq\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"rabbitmq-diagnostics\", \"-q\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-rabbitmq\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n # MQ 配置\n BYTEDESK_MQ_TYPE: rabbitmq\n BYTEDESK_MQ_RABBITMQ_ENABLED: \"true\"\n SPRING_RABBITMQ_HOST: bytedesk-rabbitmq\n SPRING_RABBITMQ_PORT: 5672\n SPRING_RABBITMQ_USERNAME: admin\n SPRING_RABBITMQ_PASSWORD: admin\n SPRING_RABBITMQ_VIRTUAL_HOST: /\n SPRING_RABBITMQ_CONNECTION_TIMEOUT: 5000\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n rabbitmq_data:\n name: bytedesk_rabbitmq_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "0ffefc7867ec55721497e0f90769901fa12a42f2": {"t": 1785748611.9358203, "n": 26033, "h": "18fcafe1baf582e2", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # RabbitMQ 消息队列\n # https://hub.docker.com/_/rabbitmq\n # http://localhost:15673 (管理后台)\n bytedesk-rabbitmq:\n image: rabbitmq:4.2.3-management\n container_name: rabbitmq-bytedesk\n environment:\n - RABBITMQ_DEFAULT_USER=admin\n - RABBITMQ_DEFAULT_PASS=admin\n - TZ=Asia/Shanghai\n ports:\n - \"5673:5672\" # AMQP\n - \"15673:15672\" # Management UI\n volumes:\n - rabbitmq_data:/var/lib/rabbitmq\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"rabbitmq-diagnostics\", \"-q\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-rabbitmq\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n # MQ 配置\n BYTEDESK_MQ_TYPE: rabbitmq\n BYTEDESK_MQ_RABBITMQ_ENABLED: \"true\"\n SPRING_RABBITMQ_HOST: bytedesk-rabbitmq\n SPRING_RABBITMQ_PORT: 5672\n SPRING_RABBITMQ_USERNAME: admin\n SPRING_RABBITMQ_PASSWORD: admin\n SPRING_RABBITMQ_VIRTUAL_HOST: /\n SPRING_RABBITMQ_CONNECTION_TIMEOUT: 5000\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n rabbitmq_data:\n name: bytedesk_rabbitmq_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "cfcd4fe31454c60261f28951de5ec33377e115ab": {"t": 1785748613.2793646, "n": 25984, "h": "0a7af7ab06608f4c", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # RabbitMQ 消息队列\n # https://hub.docker.com/_/rabbitmq\n # http://localhost:15673 (管理后台)\n bytedesk-rabbitmq:\n image: rabbitmq:4.2.3-management\n container_name: rabbitmq-bytedesk\n environment:\n - RABBITMQ_DEFAULT_USER=admin\n - RABBITMQ_DEFAULT_PASS=admin\n - TZ=Asia/Shanghai\n ports:\n - \"5673:5672\" # AMQP\n - \"15673:15672\" # Management UI\n volumes:\n - rabbitmq_data:/var/lib/rabbitmq\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"rabbitmq-diagnostics\", \"-q\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-rabbitmq\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n # MQ 配置\n BYTEDESK_MQ_TYPE: rabbitmq\n BYTEDESK_MQ_RABBITMQ_ENABLED: \"true\"\n SPRING_RABBITMQ_HOST: bytedesk-rabbitmq\n SPRING_RABBITMQ_PORT: 5672\n SPRING_RABBITMQ_USERNAME: admin\n SPRING_RABBITMQ_PASSWORD: admin\n SPRING_RABBITMQ_VIRTUAL_HOST: /\n SPRING_RABBITMQ_CONNECTION_TIMEOUT: 5000\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n rabbitmq_data:\n name: bytedesk_rabbitmq_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "93bce581a29a77e71b563d7783c957a0c8ca4d2b": {"t": 1785748614.5144126, "n": 24851, "h": "370bcb961e03af43", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # RabbitMQ 消息队列\n # https://hub.docker.com/_/rabbitmq\n # http://localhost:15673 (管理后台)\n bytedesk-rabbitmq:\n image: rabbitmq:4.2.3-management\n container_name: rabbitmq-bytedesk\n environment:\n - RABBITMQ_DEFAULT_USER=admin\n - RABBITMQ_DEFAULT_PASS=admin\n - TZ=Asia/Shanghai\n ports:\n - \"5673:5672\" # AMQP\n - \"15673:15672\" # Management UI\n volumes:\n - rabbitmq_data:/var/lib/rabbitmq\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"rabbitmq-diagnostics\", \"-q\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-rabbitmq\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.7.0\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n # MQ 配置\n BYTEDESK_MQ_TYPE: rabbitmq\n BYTEDESK_MQ_RABBITMQ_ENABLED: \"true\"\n SPRING_RABBITMQ_HOST: bytedesk-rabbitmq\n SPRING_RABBITMQ_PORT: 5672\n SPRING_RABBITMQ_USERNAME: admin\n SPRING_RABBITMQ_PASSWORD: admin\n SPRING_RABBITMQ_VIRTUAL_HOST: /\n SPRING_RABBITMQ_CONNECTION_TIMEOUT: 5000\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n rabbitmq_data:\n name: bytedesk_rabbitmq_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "7b3acbe6b6df8fbe01ae2b19b26dc787b5285037": {"t": 1785748615.795779, "n": 24851, "h": "fddacec5672a5675", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # RabbitMQ 消息队列\n # https://hub.docker.com/_/rabbitmq\n # http://localhost:15673 (管理后台)\n bytedesk-rabbitmq:\n image: rabbitmq:4.2.3-management\n container_name: rabbitmq-bytedesk\n environment:\n - RABBITMQ_DEFAULT_USER=admin\n - RABBITMQ_DEFAULT_PASS=admin\n - TZ=Asia/Shanghai\n ports:\n - \"5673:5672\" # AMQP\n - \"15673:15672\" # Management UI\n volumes:\n - rabbitmq_data:/var/lib/rabbitmq\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"rabbitmq-diagnostics\", \"-q\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-rabbitmq\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.6.0\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n # MQ 配置\n BYTEDESK_MQ_TYPE: rabbitmq\n BYTEDESK_MQ_RABBITMQ_ENABLED: \"true\"\n SPRING_RABBITMQ_HOST: bytedesk-rabbitmq\n SPRING_RABBITMQ_PORT: 5672\n SPRING_RABBITMQ_USERNAME: admin\n SPRING_RABBITMQ_PASSWORD: admin\n SPRING_RABBITMQ_VIRTUAL_HOST: /\n SPRING_RABBITMQ_CONNECTION_TIMEOUT: 5000\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n rabbitmq_data:\n name: bytedesk_rabbitmq_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "dc2c12166af8ccdb5e6f22248dd783b794644ab6": {"t": 1785748617.2768867, "n": 24837, "h": "528292eb0471a697", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis/redis-stack-server:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n environment:\n - REDIS_ARGS=--requirepass qfRxz3tVT8Nh\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # RabbitMQ 消息队列\n # https://hub.docker.com/_/rabbitmq\n # http://localhost:15673 (管理后台)\n bytedesk-rabbitmq:\n image: rabbitmq:4.2.3-management\n container_name: rabbitmq-bytedesk\n environment:\n - RABBITMQ_DEFAULT_USER=admin\n - RABBITMQ_DEFAULT_PASS=admin\n - TZ=Asia/Shanghai\n ports:\n - \"5673:5672\" # AMQP\n - \"15673:15672\" # Management UI\n volumes:\n - rabbitmq_data:/var/lib/rabbitmq\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"rabbitmq-diagnostics\", \"-q\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-rabbitmq\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.6.0\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n # MQ 配置\n BYTEDESK_MQ_TYPE: rabbitmq\n BYTEDESK_MQ_RABBITMQ_ENABLED: \"true\"\n SPRING_RABBITMQ_HOST: bytedesk-rabbitmq\n SPRING_RABBITMQ_PORT: 5672\n SPRING_RABBITMQ_USERNAME: admin\n SPRING_RABBITMQ_PASSWORD: admin\n SPRING_RABBITMQ_VIRTUAL_HOST: /\n SPRING_RABBITMQ_CONNECTION_TIMEOUT: 5000\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n rabbitmq_data:\n name: bytedesk_rabbitmq_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "d363dfa388e3ada7b7e8ec12d1628c560b23ab61": {"t": 1785748618.5184858, "n": 24846, "h": "6e5b59bb25b1dfb4", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis/redis-stack-server:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n environment:\n - REDIS_ARGS=--requirepass qfRxz3tVT8Nh\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # RabbitMQ 消息队列\n # https://hub.docker.com/_/rabbitmq\n # http://localhost:15673 (管理后台)\n bytedesk-rabbitmq:\n image: rabbitmq:4.2.3-management\n container_name: rabbitmq-bytedesk\n environment:\n - RABBITMQ_DEFAULT_USER=admin\n - RABBITMQ_DEFAULT_PASS=admin\n - TZ=Asia/Shanghai\n ports:\n - \"5673:5672\" # AMQP\n - \"15673:15672\" # Management UI\n volumes:\n - rabbitmq_data:/var/lib/rabbitmq\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"rabbitmq-diagnostics\", \"-q\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-rabbitmq\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.5.1\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_LOCK_TIME_MINUTES: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HELPCENTER_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n # MQ 配置\n BYTEDESK_MQ_TYPE: rabbitmq\n BYTEDESK_MQ_RABBITMQ_ENABLED: \"true\"\n SPRING_RABBITMQ_HOST: bytedesk-rabbitmq\n SPRING_RABBITMQ_PORT: 5672\n SPRING_RABBITMQ_USERNAME: admin\n SPRING_RABBITMQ_PASSWORD: admin\n SPRING_RABBITMQ_VIRTUAL_HOST: /\n SPRING_RABBITMQ_CONNECTION_TIMEOUT: 5000\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n rabbitmq_data:\n name: bytedesk_rabbitmq_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "a6b37c539838b97d2c6616946d1f47ee8e07ea06": {"t": 1785748619.7280307, "n": 24846, "h": "c010b9c61bb63e80", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis/redis-stack-server:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n environment:\n - REDIS_ARGS=--requirepass qfRxz3tVT8Nh\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # RabbitMQ 消息队列\n # https://hub.docker.com/_/rabbitmq\n # http://localhost:15673 (管理后台)\n bytedesk-rabbitmq:\n image: rabbitmq:4.2.3-management\n container_name: rabbitmq-bytedesk\n environment:\n - RABBITMQ_DEFAULT_USER=admin\n - RABBITMQ_DEFAULT_PASS=admin\n - TZ=Asia/Shanghai\n ports:\n - \"5673:5672\" # AMQP\n - \"15673:15672\" # Management UI\n volumes:\n - rabbitmq_data:/var/lib/rabbitmq\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"rabbitmq-diagnostics\", \"-q\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-rabbitmq\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.5.0\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_LOCK_TIME_MINUTES: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HELPCENTER_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n # MQ 配置\n BYTEDESK_MQ_TYPE: rabbitmq\n BYTEDESK_MQ_RABBITMQ_ENABLED: \"true\"\n SPRING_RABBITMQ_HOST: bytedesk-rabbitmq\n SPRING_RABBITMQ_PORT: 5672\n SPRING_RABBITMQ_USERNAME: admin\n SPRING_RABBITMQ_PASSWORD: admin\n SPRING_RABBITMQ_VIRTUAL_HOST: /\n SPRING_RABBITMQ_CONNECTION_TIMEOUT: 5000\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n rabbitmq_data:\n name: bytedesk_rabbitmq_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "5ffbeba3e9fb263f2a3fc41a8fe4cfafe20452f1": {"t": 1785748620.9811435, "n": 24846, "h": "8481f1c949a50fad", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis/redis-stack-server:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n environment:\n - REDIS_ARGS=--requirepass qfRxz3tVT8Nh\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # RabbitMQ 消息队列\n # https://hub.docker.com/_/rabbitmq\n # http://localhost:15673 (管理后台)\n bytedesk-rabbitmq:\n image: rabbitmq:4.2.3-management\n container_name: rabbitmq-bytedesk\n environment:\n - RABBITMQ_DEFAULT_USER=admin\n - RABBITMQ_DEFAULT_PASS=admin\n - TZ=Asia/Shanghai\n ports:\n - \"5673:5672\" # AMQP\n - \"15673:15672\" # Management UI\n volumes:\n - rabbitmq_data:/var/lib/rabbitmq\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"rabbitmq-diagnostics\", \"-q\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-rabbitmq\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.0.0\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_LOCK_TIME_MINUTES: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HELPCENTER_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n # MQ 配置\n BYTEDESK_MQ_TYPE: rabbitmq\n BYTEDESK_MQ_RABBITMQ_ENABLED: \"true\"\n SPRING_RABBITMQ_HOST: bytedesk-rabbitmq\n SPRING_RABBITMQ_PORT: 5672\n SPRING_RABBITMQ_USERNAME: admin\n SPRING_RABBITMQ_PASSWORD: admin\n SPRING_RABBITMQ_VIRTUAL_HOST: /\n SPRING_RABBITMQ_CONNECTION_TIMEOUT: 5000\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n rabbitmq_data:\n name: bytedesk_rabbitmq_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "b73297ad66d3f7bbaf79c808c12a3bcbad053435": {"t": 1785748622.2585058, "n": 24735, "h": "29eb3ba55e5f0038", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis/redis-stack-server:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n environment:\n - REDIS_ARGS=--requirepass qfRxz3tVT8Nh\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # RabbitMQ 消息队列\n # https://hub.docker.com/_/rabbitmq\n # http://localhost:15673 (管理后台)\n bytedesk-rabbitmq:\n image: rabbitmq:4.2.3-management\n container_name: rabbitmq-bytedesk\n environment:\n - RABBITMQ_DEFAULT_USER=admin\n - RABBITMQ_DEFAULT_PASS=admin\n - TZ=Asia/Shanghai\n ports:\n - \"5673:5672\" # AMQP\n - \"15673:15672\" # Management UI\n volumes:\n - rabbitmq_data:/var/lib/rabbitmq\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"rabbitmq-diagnostics\", \"-q\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-rabbitmq\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.0.0\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_LOCK_TIME_MINUTES: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HELPCENTER_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n # MQ 配置\n BYTEDESK_MQ_TYPE: rabbitmq\n BYTEDESK_MQ_RABBITMQ_ENABLED: \"true\"\n SPRING_RABBITMQ_HOST: bytedesk-rabbitmq\n SPRING_RABBITMQ_PORT: 5672\n SPRING_RABBITMQ_USERNAME: admin\n SPRING_RABBITMQ_PASSWORD: admin\n SPRING_RABBITMQ_VIRTUAL_HOST: /\n SPRING_RABBITMQ_CONNECTION_TIMEOUT: 5000\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n rabbitmq_data:\n name: bytedesk_rabbitmq_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "976193668c0e76c76b3f7ba8d9522c7fc2692a06": {"t": 1786068160.958034, "n": 27182, "h": "cdd2b40eeb13d549", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # RabbitMQ 消息队列\n # https://hub.docker.com/_/rabbitmq\n # http://localhost:15673 (管理后台)\n bytedesk-rabbitmq:\n image: rabbitmq:4.2.3-management\n container_name: rabbitmq-bytedesk\n environment:\n - RABBITMQ_DEFAULT_USER=admin\n - RABBITMQ_DEFAULT_PASS=admin\n - TZ=Asia/Shanghai\n ports:\n - \"5673:5672\" # AMQP\n - \"15673:15672\" # Management UI\n volumes:\n - rabbitmq_data:/var/lib/rabbitmq\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"rabbitmq-diagnostics\", \"-q\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"IK_PLUGIN_DIR=/tmp/ik-plugin-cache; IK_PLUGIN_FILE=$$IK_PLUGIN_DIR/elasticsearch-analysis-ik-8.18.0.zip; IK_PLUGIN_TMP=$$IK_PLUGIN_FILE.tmp; mkdir -p $$IK_PLUGIN_DIR; if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; curl -fsSL -o $$IK_PLUGIN_TMP https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && mv $$IK_PLUGIN_TMP $$IK_PLUGIN_FILE; /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file://$$IK_PLUGIN_FILE; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(缓存目录中的 zip 文件)\n # 如缓存目录中无 zip 文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/ik-plugin-cache\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-rabbitmq\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n BYTEDESK_CALL_MRCP_ENABLED: \"false\"\n BYTEDESK_CALL_MRCP_PROFILE: java-mrcp\n BYTEDESK_CALL_MRCP_HOST: 0.0.0.0\n BYTEDESK_CALL_MRCP_PORT: 1544\n BYTEDESK_CALL_MRCP_TTS_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_MODE: recording-file\n BYTEDESK_CALL_MRCP_TTS_VOICE: longanhuan\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ===============================\n # Spring Boot Admin Client (bytedesk-monitor)\n # Uncomment to register this instance with a monitor server. 取消注释以注册到监控服务端。\n # ===============================\n # SPRING_BOOT_ADMIN_CLIENT_URL: http://bytedesk-monitor:9103\n # SPRING_BOOT_ADMIN_CLIENT_USERNAME: admin\n # SPRING_BOOT_ADMIN_CLIENT_PASSWORD: admin\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_NAME: bytedesk-starter\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_SERVICE_BASE_URL: http://127.0.0.1:9003\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n # MQ 配置\n BYTEDESK_MQ_TYPE: rabbitmq\n BYTEDESK_MQ_RABBITMQ_ENABLED: \"true\"\n SPRING_RABBITMQ_HOST: bytedesk-rabbitmq\n SPRING_RABBITMQ_PORT: 5672\n SPRING_RABBITMQ_USERNAME: admin\n SPRING_RABBITMQ_PASSWORD: admin\n SPRING_RABBITMQ_VIRTUAL_HOST: /\n SPRING_RABBITMQ_CONNECTION_TIMEOUT: 5000\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n rabbitmq_data:\n name: bytedesk_rabbitmq_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}}, "deploy/docker/one/docker-compose-noai.yaml": {"affe883cb26b5fd3e33902ae54e2bd31c3fa2ade": {"t": 1785747395.6749265, "n": 27592, "h": "4fab29d87ee0278c", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:9.4.2\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"IK_PLUGIN_DIR=/tmp/ik-plugin-cache; IK_PLUGIN_FILE=$$IK_PLUGIN_DIR/elasticsearch-analysis-ik-9.4.2.zip; IK_PLUGIN_TMP=$$IK_PLUGIN_FILE.tmp; mkdir -p $$IK_PLUGIN_DIR; if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; curl -fsSL -o $$IK_PLUGIN_TMP https://www.weiyuai.cn/download/elasticsearch-analysis-ik-9.4.2.zip && mv $$IK_PLUGIN_TMP $$IK_PLUGIN_FILE; /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file://$$IK_PLUGIN_FILE; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(缓存目录中的 zip 文件)\n # 如缓存目录中无 zip 文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-9.4.2.zip 下载\n - ./elasticsearch-analysis-ik-9.4.2.zip:/tmp/ik-plugin-cache\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n BYTEDESK_CALL_MRCP_ENABLED: \"false\"\n BYTEDESK_CALL_MRCP_PROFILE: java-mrcp\n BYTEDESK_CALL_MRCP_HOST: 0.0.0.0\n BYTEDESK_CALL_MRCP_PORT: 1544\n BYTEDESK_CALL_MRCP_TTS_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_MODE: recording-file\n BYTEDESK_CALL_MRCP_TTS_VOICE: longanhuan\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ===============================\n # Spring Boot Admin Client (bytedesk-monitor)\n # Uncomment to register this instance with a monitor server. 取消注释以注册到监控服务端。\n # ===============================\n # SPRING_BOOT_ADMIN_CLIENT_URL: http://bytedesk-monitor:9103\n # SPRING_BOOT_ADMIN_CLIENT_USERNAME: admin\n # SPRING_BOOT_ADMIN_CLIENT_PASSWORD: admin\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_NAME: bytedesk-starter\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_SERVICE_BASE_URL: http://127.0.0.1:9003\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: none\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: none\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: none\n SPRING_AI_MODEL_IMAGE: none\n SPRING_AI_MODEL_MODERATION: none\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: none\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: none\n # 多模态模型\n SPRING_AI_MODEL_MULTIMODAL: none\n # \n SPRING_AI_CHAT_CLIENT_ENABLED: \"false\"\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # deepseek-reasoner or deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n # SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"false\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "b887c4d8832c822f205c0f2cbbc97b26ebd41d84": {"t": 1785748605.9342573, "n": 27597, "h": "3552bb383133ec13", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"IK_PLUGIN_DIR=/tmp/ik-plugin-cache; IK_PLUGIN_FILE=$$IK_PLUGIN_DIR/elasticsearch-analysis-ik-8.18.0.zip; IK_PLUGIN_TMP=$$IK_PLUGIN_FILE.tmp; mkdir -p $$IK_PLUGIN_DIR; if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; curl -fsSL -o $$IK_PLUGIN_TMP https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && mv $$IK_PLUGIN_TMP $$IK_PLUGIN_FILE; /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file://$$IK_PLUGIN_FILE; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(缓存目录中的 zip 文件)\n # 如缓存目录中无 zip 文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/ik-plugin-cache\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n BYTEDESK_CALL_MRCP_ENABLED: \"false\"\n BYTEDESK_CALL_MRCP_PROFILE: java-mrcp\n BYTEDESK_CALL_MRCP_HOST: 0.0.0.0\n BYTEDESK_CALL_MRCP_PORT: 1544\n BYTEDESK_CALL_MRCP_TTS_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_MODE: recording-file\n BYTEDESK_CALL_MRCP_TTS_VOICE: longanhuan\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ===============================\n # Spring Boot Admin Client (bytedesk-monitor)\n # Uncomment to register this instance with a monitor server. 取消注释以注册到监控服务端。\n # ===============================\n # SPRING_BOOT_ADMIN_CLIENT_URL: http://bytedesk-monitor:9103\n # SPRING_BOOT_ADMIN_CLIENT_USERNAME: admin\n # SPRING_BOOT_ADMIN_CLIENT_PASSWORD: admin\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_NAME: bytedesk-starter\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_SERVICE_BASE_URL: http://127.0.0.1:9003\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: none\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: none\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: none\n SPRING_AI_MODEL_IMAGE: none\n SPRING_AI_MODEL_MODERATION: none\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: none\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: none\n # 多模态模型\n SPRING_AI_MODEL_MULTIMODAL: none\n # \n SPRING_AI_CHAT_CLIENT_ENABLED: \"false\"\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # deepseek-reasoner or deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n # SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"false\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "797fc307db5d99f05be7654a91259d1e76ad03bc": {"t": 1785748607.1726, "n": 27241, "h": "72c65641ae7ff046", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"IK_PLUGIN_DIR=/tmp/ik-plugin-cache; IK_PLUGIN_FILE=$$IK_PLUGIN_DIR/elasticsearch-analysis-ik-8.18.0.zip; IK_PLUGIN_TMP=$$IK_PLUGIN_FILE.tmp; mkdir -p $$IK_PLUGIN_DIR; if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; curl -fsSL -o $$IK_PLUGIN_TMP https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && mv $$IK_PLUGIN_TMP $$IK_PLUGIN_FILE; /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file://$$IK_PLUGIN_FILE; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(缓存目录中的 zip 文件)\n # 如缓存目录中无 zip 文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/ik-plugin-cache\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ===============================\n # Spring Boot Admin Client (bytedesk-monitor)\n # Uncomment to register this instance with a monitor server. 取消注释以注册到监控服务端。\n # ===============================\n # SPRING_BOOT_ADMIN_CLIENT_URL: http://bytedesk-monitor:9103\n # SPRING_BOOT_ADMIN_CLIENT_USERNAME: admin\n # SPRING_BOOT_ADMIN_CLIENT_PASSWORD: admin\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_NAME: bytedesk-starter\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_SERVICE_BASE_URL: http://127.0.0.1:9003\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: none\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: none\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: none\n SPRING_AI_MODEL_IMAGE: none\n SPRING_AI_MODEL_MODERATION: none\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: none\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: none\n # 多模态模型\n SPRING_AI_MODEL_MULTIMODAL: none\n # \n SPRING_AI_CHAT_CLIENT_ENABLED: \"false\"\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # deepseek-reasoner or deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n # SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"false\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "7ef9159f723f12427bb03ecb9b23fe9090ae0e34": {"t": 1785748608.3826516, "n": 26752, "h": "eb144387f0c09bda", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: none\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: none\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: none\n SPRING_AI_MODEL_IMAGE: none\n SPRING_AI_MODEL_MODERATION: none\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: none\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: none\n # 多模态模型\n SPRING_AI_MODEL_MULTIMODAL: none\n # \n SPRING_AI_CHAT_CLIENT_ENABLED: \"false\"\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # deepseek-reasoner or deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n # SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"false\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "12eb4359662371740e80b49a3d86e8cc4101cee5": {"t": 1785748609.8069177, "n": 26587, "h": "7a261aa44417f4d5", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: none\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: none\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: none\n SPRING_AI_MODEL_IMAGE: none\n SPRING_AI_MODEL_MODERATION: none\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: none\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: none\n # 多模态模型\n SPRING_AI_MODEL_MULTIMODAL: none\n # \n SPRING_AI_CHAT_CLIENT_ENABLED: \"false\"\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # deepseek-reasoner or deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n # SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"false\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "0ffefc7867ec55721497e0f90769901fa12a42f2": {"t": 1785748611.1287925, "n": 26448, "h": "cac4fe970c3a408c", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: none\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: none\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: none\n SPRING_AI_MODEL_IMAGE: none\n SPRING_AI_MODEL_MODERATION: none\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: none\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: none\n # 多模态模型\n SPRING_AI_MODEL_MULTIMODAL: none\n # \n SPRING_AI_CHAT_CLIENT_ENABLED: \"false\"\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # deepseek-reasoner or deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n # SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"false\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "cfcd4fe31454c60261f28951de5ec33377e115ab": {"t": 1785748612.6752272, "n": 26399, "h": "413b23fc13577761", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: none\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: none\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: none\n SPRING_AI_MODEL_IMAGE: none\n SPRING_AI_MODEL_MODERATION: none\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: none\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: none\n # 多模态模型\n SPRING_AI_MODEL_MULTIMODAL: none\n # \n SPRING_AI_CHAT_CLIENT_ENABLED: \"false\"\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # deepseek-reasoner or deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n # SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"false\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "93bce581a29a77e71b563d7783c957a0c8ca4d2b": {"t": 1785748614.0278928, "n": 25266, "h": "35e0ce16b6369738", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.7.0\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: none\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: none\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: none\n SPRING_AI_MODEL_IMAGE: none\n SPRING_AI_MODEL_MODERATION: none\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: none\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: none\n # 多模态模型\n SPRING_AI_MODEL_MULTIMODAL: none\n # \n SPRING_AI_CHAT_CLIENT_ENABLED: \"false\"\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # deepseek-reasoner or deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n # SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"false\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "7b3acbe6b6df8fbe01ae2b19b26dc787b5285037": {"t": 1785748615.3956678, "n": 25266, "h": "c98ba5d92edf77cd", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.6.0\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: none\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: none\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: none\n SPRING_AI_MODEL_IMAGE: none\n SPRING_AI_MODEL_MODERATION: none\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: none\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: none\n # 多模态模型\n SPRING_AI_MODEL_MULTIMODAL: none\n # \n SPRING_AI_CHAT_CLIENT_ENABLED: \"false\"\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # deepseek-reasoner or deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n # SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"false\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "dc2c12166af8ccdb5e6f22248dd783b794644ab6": {"t": 1785748616.6776552, "n": 25252, "h": "fbea7c2fb59fffab", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis/redis-stack-server:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n environment:\n - REDIS_ARGS=--requirepass qfRxz3tVT8Nh\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.6.0\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: none\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: none\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: none\n SPRING_AI_MODEL_IMAGE: none\n SPRING_AI_MODEL_MODERATION: none\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: none\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: none\n # 多模态模型\n SPRING_AI_MODEL_MULTIMODAL: none\n # \n SPRING_AI_CHAT_CLIENT_ENABLED: \"false\"\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # deepseek-reasoner or deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n # SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"false\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "d363dfa388e3ada7b7e8ec12d1628c560b23ab61": {"t": 1785748617.9107711, "n": 25261, "h": "4e1f87cbe2a2140a", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis/redis-stack-server:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n environment:\n - REDIS_ARGS=--requirepass qfRxz3tVT8Nh\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.5.1\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_LOCK_TIME_MINUTES: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HELPCENTER_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: none\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: none\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: none\n SPRING_AI_MODEL_IMAGE: none\n SPRING_AI_MODEL_MODERATION: none\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: none\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: none\n # 多模态模型\n SPRING_AI_MODEL_MULTIMODAL: none\n # \n SPRING_AI_CHAT_CLIENT_ENABLED: \"false\"\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # deepseek-reasoner or deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n # SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"false\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "a6b37c539838b97d2c6616946d1f47ee8e07ea06": {"t": 1785748619.4664347, "n": 25261, "h": "5e139ce40c5b9530", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis/redis-stack-server:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n environment:\n - REDIS_ARGS=--requirepass qfRxz3tVT8Nh\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.5.0\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_LOCK_TIME_MINUTES: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HELPCENTER_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: none\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: none\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: none\n SPRING_AI_MODEL_IMAGE: none\n SPRING_AI_MODEL_MODERATION: none\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: none\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: none\n # 多模态模型\n SPRING_AI_MODEL_MULTIMODAL: none\n # \n SPRING_AI_CHAT_CLIENT_ENABLED: \"false\"\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # deepseek-reasoner or deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n # SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"false\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "5ffbeba3e9fb263f2a3fc41a8fe4cfafe20452f1": {"t": 1785748620.8152163, "n": 25261, "h": "f73c443d57dcc3f6", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis/redis-stack-server:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n environment:\n - REDIS_ARGS=--requirepass qfRxz3tVT8Nh\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.0.0\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_LOCK_TIME_MINUTES: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HELPCENTER_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: none\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: none\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: none\n SPRING_AI_MODEL_IMAGE: none\n SPRING_AI_MODEL_MODERATION: none\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: none\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: none\n # 多模态模型\n SPRING_AI_MODEL_MULTIMODAL: none\n # \n SPRING_AI_CHAT_CLIENT_ENABLED: \"false\"\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # deepseek-reasoner or deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n # SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"false\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "b73297ad66d3f7bbaf79c808c12a3bcbad053435": {"t": 1785748622.0288773, "n": 25150, "h": "926c525c178965bc", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis/redis-stack-server:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n environment:\n - REDIS_ARGS=--requirepass qfRxz3tVT8Nh\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.0.0\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_LOCK_TIME_MINUTES: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HELPCENTER_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: none\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: none\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: none\n SPRING_AI_MODEL_IMAGE: none\n SPRING_AI_MODEL_MODERATION: none\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: none\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: none\n # 多模态模型\n SPRING_AI_MODEL_MULTIMODAL: none\n # \n SPRING_AI_CHAT_CLIENT_ENABLED: \"false\"\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # deepseek-reasoner or deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n # SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"false\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n # SPRING_ARTEMIS_MODE: embedded\n SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "976193668c0e76c76b3f7ba8d9522c7fc2692a06": {"t": 1786067314.196579, "n": 27597, "h": "3552bb383133ec13", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"IK_PLUGIN_DIR=/tmp/ik-plugin-cache; IK_PLUGIN_FILE=$$IK_PLUGIN_DIR/elasticsearch-analysis-ik-8.18.0.zip; IK_PLUGIN_TMP=$$IK_PLUGIN_FILE.tmp; mkdir -p $$IK_PLUGIN_DIR; if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; curl -fsSL -o $$IK_PLUGIN_TMP https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && mv $$IK_PLUGIN_TMP $$IK_PLUGIN_FILE; /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file://$$IK_PLUGIN_FILE; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(缓存目录中的 zip 文件)\n # 如缓存目录中无 zip 文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/ik-plugin-cache\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n BYTEDESK_CALL_MRCP_ENABLED: \"false\"\n BYTEDESK_CALL_MRCP_PROFILE: java-mrcp\n BYTEDESK_CALL_MRCP_HOST: 0.0.0.0\n BYTEDESK_CALL_MRCP_PORT: 1544\n BYTEDESK_CALL_MRCP_TTS_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_MODE: recording-file\n BYTEDESK_CALL_MRCP_TTS_VOICE: longanhuan\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ===============================\n # Spring Boot Admin Client (bytedesk-monitor)\n # Uncomment to register this instance with a monitor server. 取消注释以注册到监控服务端。\n # ===============================\n # SPRING_BOOT_ADMIN_CLIENT_URL: http://bytedesk-monitor:9103\n # SPRING_BOOT_ADMIN_CLIENT_USERNAME: admin\n # SPRING_BOOT_ADMIN_CLIENT_PASSWORD: admin\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_NAME: bytedesk-starter\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_SERVICE_BASE_URL: http://127.0.0.1:9003\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: none\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: none\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: none\n SPRING_AI_MODEL_IMAGE: none\n SPRING_AI_MODEL_MODERATION: none\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: none\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: none\n # 多模态模型\n SPRING_AI_MODEL_MULTIMODAL: none\n # \n SPRING_AI_CHAT_CLIENT_ENABLED: \"false\"\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"false\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"false\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n # SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n # SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n # SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # # deepseek-reasoner or deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n # SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n # SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n # SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n # SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n # SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n # SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n # SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n # SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n # SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n # SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n # SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n # SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n # SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n # SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n # SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n # SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n # SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n # SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n # SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n # SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # # model builder(可用)\n # SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n # SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n # SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n # SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n # SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n # SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n # SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n # SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n # SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"false\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}}, "deploy/docker/one/docker-compose-all.yaml": {"affe883cb26b5fd3e33902ae54e2bd31c3fa2ade": {"t": 1785747395.7085872, "n": 31677, "h": "13acbaf22adb660a", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:9.4.2\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"IK_PLUGIN_DIR=/tmp/ik-plugin-cache; IK_PLUGIN_FILE=$$IK_PLUGIN_DIR/elasticsearch-analysis-ik-9.4.2.zip; IK_PLUGIN_TMP=$$IK_PLUGIN_FILE.tmp; mkdir -p $$IK_PLUGIN_DIR; if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; curl -fsSL -o $$IK_PLUGIN_TMP https://www.weiyuai.cn/download/elasticsearch-analysis-ik-9.4.2.zip && mv $$IK_PLUGIN_TMP $$IK_PLUGIN_FILE; /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file://$$IK_PLUGIN_FILE; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(缓存目录中的 zip 文件)\n # 如缓存目录中无 zip 文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-9.4.2.zip 下载\n - ./elasticsearch-analysis-ik-9.4.2.zip:/tmp/ik-plugin-cache\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # Coturn TURN server\n # https://hub.docker.com/r/coturn/coturn\n # 参考:https://github.com/coturn/coturn/blob/master/docker/coturn/README.md\n # 说明:TURN 需要开放一段 UDP 中继端口范围(RFC 5766)。Docker 对超大端口段映射性能较差,\n # 这里按官方示例收敛到 49160-49200(可按需调整)。\n bytedesk-coturn:\n image: coturn/coturn:latest\n container_name: coturn-bytedesk\n restart: always\n ports:\n - \"13478:3478\"\n - \"13478:3478/udp\"\n - \"15349:5349\"\n - \"15349:5349/udp\"\n - \"49160-49200:49160-49200/udp\"\n command:\n - -n\n - --log-file=stdout\n - --min-port=49160\n - --max-port=49200\n - --lt-cred-mech\n - --fingerprint\n - --no-multicast-peers\n - --no-cli\n - --no-tlsv1\n - --realm=${COTURN_REALM:-bytedesk.local}\n - --user=${COTURN_USER:-bytedesk}:${COTURN_PASS:-bytedesk123}\n volumes:\n - coturn_data:/var/lib/coturn\n networks:\n - bytedesk-network\n\n # FreeSwitch 语音通话服务\n # https://hub.docker.com/r/bytedesk/freeswitch\n # 使用自定义构建的 FreeSWITCH 镜像(支持 ARM64/AMD64)\n bytedesk-freeswitch:\n # image: bytedesk/freeswitch:latest\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/freeswitch:latest\n container_name: freeswitch-bytedesk\n restart: always\n # 使用 -nf (no fork) 参数在前台运行,避免容器退出\n command: [\"freeswitch\", \"-nf\", \"-nonat\", \"-nonatmap\"]\n environment:\n # 时区设置\n - TZ=Asia/Shanghai\n # 完全禁用 IPv6\n - DISABLE_IPV6=true\n ports:\n # SIP 端口\n - \"15060:5060/tcp\" # SIP 内部\n - \"15060:5060/udp\" # SIP 内部\n - \"15080:5080/tcp\" # SIP 外部\n - \"15080:5080/udp\" # SIP 外部\n - \"15061:5061/tcp\" # SIP 内部 TLS\n - \"15081:5081/tcp\" # SIP 外部 TLS\n # WebRTC 端口\n - \"15066:5066/tcp\" # WebSocket 信令\n - \"17443:7443/tcp\" # WebRTC WSS\n # ESL 管理端口\n - \"18021:8021/tcp\"\n # HTTP 服务端口\n - \"18081-18082:8081-8082/tcp\"\n # RTP 媒体端口范围\n - \"16000-16129:6000-6129/udp\"\n volumes:\n # 配置文件目录 - 使用本地配置文件覆盖容器内的配置(经验证实际使用 /usr/local/freeswitch/etc/freeswitch)\n - ../freeswitch/conf:/usr/local/freeswitch/etc/freeswitch\n # Lua 脚本目录 - 92-ai-bot 等拨号计划依赖 nlsml_to_text.lua\n - ../freeswitch/scripts:/usr/local/freeswitch/share/freeswitch/scripts\n # 数据持久化目录\n - freeswitch_data:/usr/local/freeswitch/db\n # 日志目录\n - ../freeswitch/log:/usr/local/freeswitch/log\n # 声音目录\n - ../freeswitch/sounds:/usr/local/freeswitch/sounds\n # 录音目录\n - ../freeswitch/recordings:/usr/local/freeswitch/recordings\n # 挂载 ODBC 配置(ARM64 MariaDB 驱动)\n - ../freeswitch/etc/odbc.ini:/etc/odbc.ini:ro\n - ../freeswitch/etc/odbcinst.ini:/etc/odbcinst.ini:ro\n depends_on:\n - bytedesk-mysql\n networks:\n - bytedesk-network\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # AI 会话并发守护(每个组织最大并发 AI 语音会话数,超限返回忙线)\n BYTEDESK_CALL_AI_SESSION_MAX_CONCURRENCY_PER_ORG: 10\n # 僵死会话 TTL(分钟),超时未释放的会话会被定时清理\n BYTEDESK_CALL_AI_SESSION_STALE_TTL_MINUTES: 30\n # 僵死会话清理间隔(毫秒)\n BYTEDESK_CALL_AI_SESSION_SWEEP_INTERVAL_MS: 60000\n # 分机导入来源:esl 或 directory。默认优先通过 ESL list_users 读取 FreeSWITCH 目录分机。\n BYTEDESK_CALL_FREESWITCH_EXTENSION_IMPORT_SOURCE: esl\n # 当 ESL list_users 不可用或返回空时,是否回退扫描应用容器内挂载的 FreeSWITCH conf/directory。\n BYTEDESK_CALL_FREESWITCH_EXTENSION_IMPORT_DIRECTORY_FALLBACK_ENABLED: \"false\"\n # AI hotline 动态入口路由同步:为已发布的 AI 分机自动创建/回填 CallRoute。\n BYTEDESK_CALL_AI_HOTLINE_ROUTE_SYNC_ENABLED: \"true\"\n # 调试开关:开启后仅记录将要同步的路由,不真正写入数据库。\n BYTEDESK_CALL_AI_HOTLINE_ROUTE_SYNC_DRY_RUN: \"false\"\n # xml_curl 功能开关:dialplan/directory/configuration/phrases 后备处理\n BYTEDESK_CALL_FREESWITCH_XMLCURL_DIALPLAN_ENABLED: \"true\"\n BYTEDESK_CALL_FREESWITCH_XMLCURL_DIRECTORY_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_XMLCURL_CONFIGURATION_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_XMLCURL_PHRASES_ENABLED: \"false\"\n # xml_curl directory 用户列表:user1@domain:password,...\n BYTEDESK_CALL_FREESWITCH_XMLCURL_DIRECTORY_USERS: \"1000@default:1234\"\n # xml_curl configuration 白名单,逗号分隔(支持 100-200 范围写法)\n BYTEDESK_CALL_FREESWITCH_XMLCURL_CONFIG_WHITELIST:\n # 目录回退时扫描的 FreeSWITCH conf 根目录;需与下方 volumes 中的宿主机挂载保持一致。\n BYTEDESK_CALL_FREESWITCH_CONF_DIR: /app/freeswitch/conf\n BYTEDESK_CALL_MRCP_ENABLED: \"false\"\n BYTEDESK_CALL_MRCP_PROFILE: java-mrcp\n BYTEDESK_CALL_MRCP_HOST: 0.0.0.0\n BYTEDESK_CALL_MRCP_PORT: 1544\n BYTEDESK_CALL_MRCP_TTS_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_MODE: recording-file\n BYTEDESK_CALL_MRCP_TTS_VOICE: longanhuan\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ===============================\n # Spring Boot Admin Client (bytedesk-monitor)\n # Uncomment to register this instance with a monitor server. 取消注释以注册到监控服务端。\n # ===============================\n # SPRING_BOOT_ADMIN_CLIENT_URL: http://bytedesk-monitor:9103\n # SPRING_BOOT_ADMIN_CLIENT_USERNAME: admin\n # SPRING_BOOT_ADMIN_CLIENT_PASSWORD: admin\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_NAME: bytedesk-starter\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_SERVICE_BASE_URL: http://127.0.0.1:9003\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n - ../freeswitch/conf:/app/freeswitch/conf:ro\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n coturn_data:\n name: bytedesk_coturn_data\n freeswitch_data:\n name: bytedesk_freeswitch_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "7018186bb2f554cb4a369fb9598b7c6dc7c7874e": {"t": 1785748607.1337774, "n": 31682, "h": "4da427643777496f", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"IK_PLUGIN_DIR=/tmp/ik-plugin-cache; IK_PLUGIN_FILE=$$IK_PLUGIN_DIR/elasticsearch-analysis-ik-8.18.0.zip; IK_PLUGIN_TMP=$$IK_PLUGIN_FILE.tmp; mkdir -p $$IK_PLUGIN_DIR; if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; curl -fsSL -o $$IK_PLUGIN_TMP https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && mv $$IK_PLUGIN_TMP $$IK_PLUGIN_FILE; /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file://$$IK_PLUGIN_FILE; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(缓存目录中的 zip 文件)\n # 如缓存目录中无 zip 文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/ik-plugin-cache\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # Coturn TURN server\n # https://hub.docker.com/r/coturn/coturn\n # 参考:https://github.com/coturn/coturn/blob/master/docker/coturn/README.md\n # 说明:TURN 需要开放一段 UDP 中继端口范围(RFC 5766)。Docker 对超大端口段映射性能较差,\n # 这里按官方示例收敛到 49160-49200(可按需调整)。\n bytedesk-coturn:\n image: coturn/coturn:latest\n container_name: coturn-bytedesk\n restart: always\n ports:\n - \"13478:3478\"\n - \"13478:3478/udp\"\n - \"15349:5349\"\n - \"15349:5349/udp\"\n - \"49160-49200:49160-49200/udp\"\n command:\n - -n\n - --log-file=stdout\n - --min-port=49160\n - --max-port=49200\n - --lt-cred-mech\n - --fingerprint\n - --no-multicast-peers\n - --no-cli\n - --no-tlsv1\n - --realm=${COTURN_REALM:-bytedesk.local}\n - --user=${COTURN_USER:-bytedesk}:${COTURN_PASS:-bytedesk123}\n volumes:\n - coturn_data:/var/lib/coturn\n networks:\n - bytedesk-network\n\n # FreeSwitch 语音通话服务\n # https://hub.docker.com/r/bytedesk/freeswitch\n # 使用自定义构建的 FreeSWITCH 镜像(支持 ARM64/AMD64)\n bytedesk-freeswitch:\n # image: bytedesk/freeswitch:latest\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/freeswitch:latest\n container_name: freeswitch-bytedesk\n restart: always\n # 使用 -nf (no fork) 参数在前台运行,避免容器退出\n command: [\"freeswitch\", \"-nf\", \"-nonat\", \"-nonatmap\"]\n environment:\n # 时区设置\n - TZ=Asia/Shanghai\n # 完全禁用 IPv6\n - DISABLE_IPV6=true\n ports:\n # SIP 端口\n - \"15060:5060/tcp\" # SIP 内部\n - \"15060:5060/udp\" # SIP 内部\n - \"15080:5080/tcp\" # SIP 外部\n - \"15080:5080/udp\" # SIP 外部\n - \"15061:5061/tcp\" # SIP 内部 TLS\n - \"15081:5081/tcp\" # SIP 外部 TLS\n # WebRTC 端口\n - \"15066:5066/tcp\" # WebSocket 信令\n - \"17443:7443/tcp\" # WebRTC WSS\n # ESL 管理端口\n - \"18021:8021/tcp\"\n # HTTP 服务端口\n - \"18081-18082:8081-8082/tcp\"\n # RTP 媒体端口范围\n - \"16000-16129:6000-6129/udp\"\n volumes:\n # 配置文件目录 - 使用本地配置文件覆盖容器内的配置(经验证实际使用 /usr/local/freeswitch/etc/freeswitch)\n - ../freeswitch/conf:/usr/local/freeswitch/etc/freeswitch\n # Lua 脚本目录 - 92-ai-bot 等拨号计划依赖 nlsml_to_text.lua\n - ../freeswitch/scripts:/usr/local/freeswitch/share/freeswitch/scripts\n # 数据持久化目录\n - freeswitch_data:/usr/local/freeswitch/db\n # 日志目录\n - ../freeswitch/log:/usr/local/freeswitch/log\n # 声音目录\n - ../freeswitch/sounds:/usr/local/freeswitch/sounds\n # 录音目录\n - ../freeswitch/recordings:/usr/local/freeswitch/recordings\n # 挂载 ODBC 配置(ARM64 MariaDB 驱动)\n - ../freeswitch/etc/odbc.ini:/etc/odbc.ini:ro\n - ../freeswitch/etc/odbcinst.ini:/etc/odbcinst.ini:ro\n depends_on:\n - bytedesk-mysql\n networks:\n - bytedesk-network\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # AI 会话并发守护(每个组织最大并发 AI 语音会话数,超限返回忙线)\n BYTEDESK_CALL_AI_SESSION_MAX_CONCURRENCY_PER_ORG: 10\n # 僵死会话 TTL(分钟),超时未释放的会话会被定时清理\n BYTEDESK_CALL_AI_SESSION_STALE_TTL_MINUTES: 30\n # 僵死会话清理间隔(毫秒)\n BYTEDESK_CALL_AI_SESSION_SWEEP_INTERVAL_MS: 60000\n # 分机导入来源:esl 或 directory。默认优先通过 ESL list_users 读取 FreeSWITCH 目录分机。\n BYTEDESK_CALL_FREESWITCH_EXTENSION_IMPORT_SOURCE: esl\n # 当 ESL list_users 不可用或返回空时,是否回退扫描应用容器内挂载的 FreeSWITCH conf/directory。\n BYTEDESK_CALL_FREESWITCH_EXTENSION_IMPORT_DIRECTORY_FALLBACK_ENABLED: \"false\"\n # AI hotline 动态入口路由同步:为已发布的 AI 分机自动创建/回填 CallRoute。\n BYTEDESK_CALL_AI_HOTLINE_ROUTE_SYNC_ENABLED: \"true\"\n # 调试开关:开启后仅记录将要同步的路由,不真正写入数据库。\n BYTEDESK_CALL_AI_HOTLINE_ROUTE_SYNC_DRY_RUN: \"false\"\n # xml_curl 功能开关:dialplan/directory/configuration/phrases 后备处理\n BYTEDESK_CALL_FREESWITCH_XMLCURL_DIALPLAN_ENABLED: \"true\"\n BYTEDESK_CALL_FREESWITCH_XMLCURL_DIRECTORY_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_XMLCURL_CONFIGURATION_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_XMLCURL_PHRASES_ENABLED: \"false\"\n # xml_curl directory 用户列表:user1@domain:password,...\n BYTEDESK_CALL_FREESWITCH_XMLCURL_DIRECTORY_USERS: \"1000@default:1234\"\n # xml_curl configuration 白名单,逗号分隔(支持 100-200 范围写法)\n BYTEDESK_CALL_FREESWITCH_XMLCURL_CONFIG_WHITELIST:\n # 目录回退时扫描的 FreeSWITCH conf 根目录;需与下方 volumes 中的宿主机挂载保持一致。\n BYTEDESK_CALL_FREESWITCH_CONF_DIR: /app/freeswitch/conf\n BYTEDESK_CALL_MRCP_ENABLED: \"false\"\n BYTEDESK_CALL_MRCP_PROFILE: java-mrcp\n BYTEDESK_CALL_MRCP_HOST: 0.0.0.0\n BYTEDESK_CALL_MRCP_PORT: 1544\n BYTEDESK_CALL_MRCP_TTS_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_MODE: recording-file\n BYTEDESK_CALL_MRCP_TTS_VOICE: longanhuan\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ===============================\n # Spring Boot Admin Client (bytedesk-monitor)\n # Uncomment to register this instance with a monitor server. 取消注释以注册到监控服务端。\n # ===============================\n # SPRING_BOOT_ADMIN_CLIENT_URL: http://bytedesk-monitor:9103\n # SPRING_BOOT_ADMIN_CLIENT_USERNAME: admin\n # SPRING_BOOT_ADMIN_CLIENT_PASSWORD: admin\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_NAME: bytedesk-starter\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_SERVICE_BASE_URL: http://127.0.0.1:9003\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n - ../freeswitch/conf:/app/freeswitch/conf:ro\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n coturn_data:\n name: bytedesk_coturn_data\n freeswitch_data:\n name: bytedesk_freeswitch_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "eba5a5ff3a303ac10ac864f71c4077088c141f87": {"t": 1785748608.6995566, "n": 30152, "h": "f57cf17d8060d245", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"IK_PLUGIN_DIR=/tmp/ik-plugin-cache; IK_PLUGIN_FILE=$$IK_PLUGIN_DIR/elasticsearch-analysis-ik-8.18.0.zip; IK_PLUGIN_TMP=$$IK_PLUGIN_FILE.tmp; mkdir -p $$IK_PLUGIN_DIR; if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; curl -fsSL -o $$IK_PLUGIN_TMP https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && mv $$IK_PLUGIN_TMP $$IK_PLUGIN_FILE; /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file://$$IK_PLUGIN_FILE; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(缓存目录中的 zip 文件)\n # 如缓存目录中无 zip 文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/ik-plugin-cache\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # Coturn TURN server\n # https://hub.docker.com/r/coturn/coturn\n # 参考:https://github.com/coturn/coturn/blob/master/docker/coturn/README.md\n # 说明:TURN 需要开放一段 UDP 中继端口范围(RFC 5766)。Docker 对超大端口段映射性能较差,\n # 这里按官方示例收敛到 49160-49200(可按需调整)。\n bytedesk-coturn:\n image: coturn/coturn:latest\n container_name: coturn-bytedesk\n restart: always\n ports:\n - \"13478:3478\"\n - \"13478:3478/udp\"\n - \"15349:5349\"\n - \"15349:5349/udp\"\n - \"49160-49200:49160-49200/udp\"\n command:\n - -n\n - --log-file=stdout\n - --min-port=49160\n - --max-port=49200\n - --lt-cred-mech\n - --fingerprint\n - --no-multicast-peers\n - --no-cli\n - --no-tlsv1\n - --realm=${COTURN_REALM:-bytedesk.local}\n - --user=${COTURN_USER:-bytedesk}:${COTURN_PASS:-bytedesk123}\n volumes:\n - coturn_data:/var/lib/coturn\n networks:\n - bytedesk-network\n\n # FreeSwitch 语音通话服务\n # https://hub.docker.com/r/bytedesk/freeswitch\n # 使用自定义构建的 FreeSWITCH 镜像(支持 ARM64/AMD64)\n bytedesk-freeswitch:\n # image: bytedesk/freeswitch:latest\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/freeswitch:latest\n container_name: freeswitch-bytedesk\n restart: always\n # 使用 -nf (no fork) 参数在前台运行,避免容器退出\n command: [\"freeswitch\", \"-nf\", \"-nonat\", \"-nonatmap\"]\n environment:\n # 时区设置\n - TZ=Asia/Shanghai\n # 完全禁用 IPv6\n - DISABLE_IPV6=true\n ports:\n # SIP 端口\n - \"15060:5060/tcp\" # SIP 内部\n - \"15060:5060/udp\" # SIP 内部\n - \"15080:5080/tcp\" # SIP 外部\n - \"15080:5080/udp\" # SIP 外部\n - \"15061:5061/tcp\" # SIP 内部 TLS\n - \"15081:5081/tcp\" # SIP 外部 TLS\n # WebRTC 端口\n - \"15066:5066/tcp\" # WebSocket 信令\n - \"17443:7443/tcp\" # WebRTC WSS\n # ESL 管理端口\n - \"18021:8021/tcp\"\n # HTTP 服务端口\n - \"18081-18082:8081-8082/tcp\"\n # RTP 媒体端口范围\n - \"16000-16129:6000-6129/udp\"\n volumes:\n # 配置文件目录 - 使用本地配置文件覆盖容器内的配置(经验证实际使用 /usr/local/freeswitch/etc/freeswitch)\n - ../freeswitch/conf:/usr/local/freeswitch/etc/freeswitch\n # Lua 脚本目录 - 92-ai-bot 等拨号计划依赖 nlsml_to_text.lua\n - ../freeswitch/scripts:/usr/local/freeswitch/share/freeswitch/scripts\n # 数据持久化目录\n - freeswitch_data:/usr/local/freeswitch/db\n # 日志目录\n - ../freeswitch/log:/usr/local/freeswitch/log\n # 声音目录\n - ../freeswitch/sounds:/usr/local/freeswitch/sounds\n # 录音目录\n - ../freeswitch/recordings:/usr/local/freeswitch/recordings\n # 挂载 ODBC 配置(ARM64 MariaDB 驱动)\n - ../freeswitch/etc/odbc.ini:/etc/odbc.ini:ro\n - ../freeswitch/etc/odbcinst.ini:/etc/odbcinst.ini:ro\n depends_on:\n - bytedesk-mysql\n networks:\n - bytedesk-network\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n BYTEDESK_CALL_MRCP_ENABLED: \"false\"\n BYTEDESK_CALL_MRCP_PROFILE: java-mrcp\n BYTEDESK_CALL_MRCP_HOST: 0.0.0.0\n BYTEDESK_CALL_MRCP_PORT: 1544\n BYTEDESK_CALL_MRCP_TTS_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_MODE: recording-file\n BYTEDESK_CALL_MRCP_TTS_VOICE: longanhuan\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ===============================\n # Spring Boot Admin Client (bytedesk-monitor)\n # Uncomment to register this instance with a monitor server. 取消注释以注册到监控服务端。\n # ===============================\n # SPRING_BOOT_ADMIN_CLIENT_URL: http://bytedesk-monitor:9103\n # SPRING_BOOT_ADMIN_CLIENT_USERNAME: admin\n # SPRING_BOOT_ADMIN_CLIENT_PASSWORD: admin\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_NAME: bytedesk-starter\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_SERVICE_BASE_URL: http://127.0.0.1:9003\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n coturn_data:\n name: bytedesk_coturn_data\n freeswitch_data:\n name: bytedesk_freeswitch_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "b887c4d8832c822f205c0f2cbbc97b26ebd41d84": {"t": 1785748609.9614887, "n": 30020, "h": "14f7aad3e2aa3f26", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"IK_PLUGIN_DIR=/tmp/ik-plugin-cache; IK_PLUGIN_FILE=$$IK_PLUGIN_DIR/elasticsearch-analysis-ik-8.18.0.zip; IK_PLUGIN_TMP=$$IK_PLUGIN_FILE.tmp; mkdir -p $$IK_PLUGIN_DIR; if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; curl -fsSL -o $$IK_PLUGIN_TMP https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && mv $$IK_PLUGIN_TMP $$IK_PLUGIN_FILE; /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file://$$IK_PLUGIN_FILE; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(缓存目录中的 zip 文件)\n # 如缓存目录中无 zip 文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/ik-plugin-cache\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # Coturn TURN server\n # https://hub.docker.com/r/coturn/coturn\n # 参考:https://github.com/coturn/coturn/blob/master/docker/coturn/README.md\n # 说明:TURN 需要开放一段 UDP 中继端口范围(RFC 5766)。Docker 对超大端口段映射性能较差,\n # 这里按官方示例收敛到 49160-49200(可按需调整)。\n bytedesk-coturn:\n image: coturn/coturn:latest\n container_name: coturn-bytedesk\n restart: always\n ports:\n - \"13478:3478\"\n - \"13478:3478/udp\"\n - \"15349:5349\"\n - \"15349:5349/udp\"\n - \"49160-49200:49160-49200/udp\"\n command:\n - -n\n - --log-file=stdout\n - --min-port=49160\n - --max-port=49200\n - --lt-cred-mech\n - --fingerprint\n - --no-multicast-peers\n - --no-cli\n - --no-tlsv1\n - --realm=${COTURN_REALM:-bytedesk.local}\n - --user=${COTURN_USER:-bytedesk}:${COTURN_PASS:-bytedesk123}\n volumes:\n - coturn_data:/var/lib/coturn\n networks:\n - bytedesk-network\n\n # FreeSwitch 语音通话服务\n # https://hub.docker.com/r/bytedesk/freeswitch\n # 使用自定义构建的 FreeSWITCH 镜像(支持 ARM64/AMD64)\n bytedesk-freeswitch:\n # image: bytedesk/freeswitch:latest\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/freeswitch:latest\n container_name: freeswitch-bytedesk\n restart: always\n # 使用 -nf (no fork) 参数在前台运行,避免容器退出\n command: [\"freeswitch\", \"-nf\", \"-nonat\", \"-nonatmap\"]\n environment:\n # 时区设置\n - TZ=Asia/Shanghai\n # 完全禁用 IPv6\n - DISABLE_IPV6=true\n ports:\n # SIP 端口\n - \"15060:5060/tcp\" # SIP 内部\n - \"15060:5060/udp\" # SIP 内部\n - \"15080:5080/tcp\" # SIP 外部\n - \"15080:5080/udp\" # SIP 外部\n - \"15061:5061/tcp\" # SIP 内部 TLS\n - \"15081:5081/tcp\" # SIP 外部 TLS\n # WebRTC 端口\n - \"15066:5066/tcp\" # WebSocket 信令\n - \"17443:7443/tcp\" # WebRTC WSS\n # ESL 管理端口\n - \"18021:8021/tcp\"\n # HTTP 服务端口\n - \"18081-18082:8081-8082/tcp\"\n # RTP 媒体端口范围\n - \"16000-16129:6000-6129/udp\"\n volumes:\n # 配置文件目录 - 使用本地配置文件覆盖容器内的配置(经验证实际使用 /usr/local/freeswitch/etc/freeswitch)\n - ../freeswitch/conf:/usr/local/freeswitch/etc/freeswitch\n # 数据持久化目录\n - freeswitch_data:/usr/local/freeswitch/db\n # 日志目录\n - ../freeswitch/log:/usr/local/freeswitch/log\n # 声音目录\n - ../freeswitch/sounds:/usr/local/freeswitch/sounds\n # 录音目录\n - ../freeswitch/recordings:/usr/local/freeswitch/recordings\n # 挂载 ODBC 配置(ARM64 MariaDB 驱动)\n - ../freeswitch/etc/odbc.ini:/etc/odbc.ini:ro\n - ../freeswitch/etc/odbcinst.ini:/etc/odbcinst.ini:ro\n depends_on:\n - bytedesk-mysql\n networks:\n - bytedesk-network\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n BYTEDESK_CALL_MRCP_ENABLED: \"false\"\n BYTEDESK_CALL_MRCP_PROFILE: java-mrcp\n BYTEDESK_CALL_MRCP_HOST: 0.0.0.0\n BYTEDESK_CALL_MRCP_PORT: 1544\n BYTEDESK_CALL_MRCP_TTS_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_MODE: recording-file\n BYTEDESK_CALL_MRCP_TTS_VOICE: longanhuan\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ===============================\n # Spring Boot Admin Client (bytedesk-monitor)\n # Uncomment to register this instance with a monitor server. 取消注释以注册到监控服务端。\n # ===============================\n # SPRING_BOOT_ADMIN_CLIENT_URL: http://bytedesk-monitor:9103\n # SPRING_BOOT_ADMIN_CLIENT_USERNAME: admin\n # SPRING_BOOT_ADMIN_CLIENT_PASSWORD: admin\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_NAME: bytedesk-starter\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_SERVICE_BASE_URL: http://127.0.0.1:9003\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n coturn_data:\n name: bytedesk_coturn_data\n freeswitch_data:\n name: bytedesk_freeswitch_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "797fc307db5d99f05be7654a91259d1e76ad03bc": {"t": 1785748611.3612158, "n": 29664, "h": "66ed681b2c6e25ea", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"IK_PLUGIN_DIR=/tmp/ik-plugin-cache; IK_PLUGIN_FILE=$$IK_PLUGIN_DIR/elasticsearch-analysis-ik-8.18.0.zip; IK_PLUGIN_TMP=$$IK_PLUGIN_FILE.tmp; mkdir -p $$IK_PLUGIN_DIR; if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; curl -fsSL -o $$IK_PLUGIN_TMP https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && mv $$IK_PLUGIN_TMP $$IK_PLUGIN_FILE; /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file://$$IK_PLUGIN_FILE; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(缓存目录中的 zip 文件)\n # 如缓存目录中无 zip 文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/ik-plugin-cache\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # Coturn TURN server\n # https://hub.docker.com/r/coturn/coturn\n # 参考:https://github.com/coturn/coturn/blob/master/docker/coturn/README.md\n # 说明:TURN 需要开放一段 UDP 中继端口范围(RFC 5766)。Docker 对超大端口段映射性能较差,\n # 这里按官方示例收敛到 49160-49200(可按需调整)。\n bytedesk-coturn:\n image: coturn/coturn:latest\n container_name: coturn-bytedesk\n restart: always\n ports:\n - \"13478:3478\"\n - \"13478:3478/udp\"\n - \"15349:5349\"\n - \"15349:5349/udp\"\n - \"49160-49200:49160-49200/udp\"\n command:\n - -n\n - --log-file=stdout\n - --min-port=49160\n - --max-port=49200\n - --lt-cred-mech\n - --fingerprint\n - --no-multicast-peers\n - --no-cli\n - --no-tlsv1\n - --realm=${COTURN_REALM:-bytedesk.local}\n - --user=${COTURN_USER:-bytedesk}:${COTURN_PASS:-bytedesk123}\n volumes:\n - coturn_data:/var/lib/coturn\n networks:\n - bytedesk-network\n\n # FreeSwitch 语音通话服务\n # https://hub.docker.com/r/bytedesk/freeswitch\n # 使用自定义构建的 FreeSWITCH 镜像(支持 ARM64/AMD64)\n bytedesk-freeswitch:\n # image: bytedesk/freeswitch:latest\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/freeswitch:latest\n container_name: freeswitch-bytedesk\n restart: always\n # 使用 -nf (no fork) 参数在前台运行,避免容器退出\n command: [\"freeswitch\", \"-nf\", \"-nonat\", \"-nonatmap\"]\n environment:\n # 时区设置\n - TZ=Asia/Shanghai\n # 完全禁用 IPv6\n - DISABLE_IPV6=true\n ports:\n # SIP 端口\n - \"15060:5060/tcp\" # SIP 内部\n - \"15060:5060/udp\" # SIP 内部\n - \"15080:5080/tcp\" # SIP 外部\n - \"15080:5080/udp\" # SIP 外部\n - \"15061:5061/tcp\" # SIP 内部 TLS\n - \"15081:5081/tcp\" # SIP 外部 TLS\n # WebRTC 端口\n - \"15066:5066/tcp\" # WebSocket 信令\n - \"17443:7443/tcp\" # WebRTC WSS\n # ESL 管理端口\n - \"18021:8021/tcp\"\n # HTTP 服务端口\n - \"18081-18082:8081-8082/tcp\"\n # RTP 媒体端口范围\n - \"16000-16129:6000-6129/udp\"\n volumes:\n # 配置文件目录 - 使用本地配置文件覆盖容器内的配置(经验证实际使用 /usr/local/freeswitch/etc/freeswitch)\n - ../freeswitch/conf:/usr/local/freeswitch/etc/freeswitch\n # 数据持久化目录\n - freeswitch_data:/usr/local/freeswitch/db\n # 日志目录\n - ../freeswitch/log:/usr/local/freeswitch/log\n # 声音目录\n - ../freeswitch/sounds:/usr/local/freeswitch/sounds\n # 录音目录\n - ../freeswitch/recordings:/usr/local/freeswitch/recordings\n # 挂载 ODBC 配置(ARM64 MariaDB 驱动)\n - ../freeswitch/etc/odbc.ini:/etc/odbc.ini:ro\n - ../freeswitch/etc/odbcinst.ini:/etc/odbcinst.ini:ro\n depends_on:\n - bytedesk-mysql\n networks:\n - bytedesk-network\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ===============================\n # Spring Boot Admin Client (bytedesk-monitor)\n # Uncomment to register this instance with a monitor server. 取消注释以注册到监控服务端。\n # ===============================\n # SPRING_BOOT_ADMIN_CLIENT_URL: http://bytedesk-monitor:9103\n # SPRING_BOOT_ADMIN_CLIENT_USERNAME: admin\n # SPRING_BOOT_ADMIN_CLIENT_PASSWORD: admin\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_NAME: bytedesk-starter\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_SERVICE_BASE_URL: http://127.0.0.1:9003\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n coturn_data:\n name: bytedesk_coturn_data\n freeswitch_data:\n name: bytedesk_freeswitch_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "7ef9159f723f12427bb03ecb9b23fe9090ae0e34": {"t": 1785748612.6181881, "n": 29175, "h": "541613c2f4e57ed4", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # Coturn TURN server\n # https://hub.docker.com/r/coturn/coturn\n # 参考:https://github.com/coturn/coturn/blob/master/docker/coturn/README.md\n # 说明:TURN 需要开放一段 UDP 中继端口范围(RFC 5766)。Docker 对超大端口段映射性能较差,\n # 这里按官方示例收敛到 49160-49200(可按需调整)。\n bytedesk-coturn:\n image: coturn/coturn:latest\n container_name: coturn-bytedesk\n restart: always\n ports:\n - \"13478:3478\"\n - \"13478:3478/udp\"\n - \"15349:5349\"\n - \"15349:5349/udp\"\n - \"49160-49200:49160-49200/udp\"\n command:\n - -n\n - --log-file=stdout\n - --min-port=49160\n - --max-port=49200\n - --lt-cred-mech\n - --fingerprint\n - --no-multicast-peers\n - --no-cli\n - --no-tlsv1\n - --realm=${COTURN_REALM:-bytedesk.local}\n - --user=${COTURN_USER:-bytedesk}:${COTURN_PASS:-bytedesk123}\n volumes:\n - coturn_data:/var/lib/coturn\n networks:\n - bytedesk-network\n\n # FreeSwitch 语音通话服务\n # https://hub.docker.com/r/bytedesk/freeswitch\n # 使用自定义构建的 FreeSWITCH 镜像(支持 ARM64/AMD64)\n bytedesk-freeswitch:\n # image: bytedesk/freeswitch:latest\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/freeswitch:latest\n container_name: freeswitch-bytedesk\n restart: always\n # 使用 -nf (no fork) 参数在前台运行,避免容器退出\n command: [\"freeswitch\", \"-nf\", \"-nonat\", \"-nonatmap\"]\n environment:\n # 时区设置\n - TZ=Asia/Shanghai\n # 完全禁用 IPv6\n - DISABLE_IPV6=true\n ports:\n # SIP 端口\n - \"15060:5060/tcp\" # SIP 内部\n - \"15060:5060/udp\" # SIP 内部\n - \"15080:5080/tcp\" # SIP 外部\n - \"15080:5080/udp\" # SIP 外部\n - \"15061:5061/tcp\" # SIP 内部 TLS\n - \"15081:5081/tcp\" # SIP 外部 TLS\n # WebRTC 端口\n - \"15066:5066/tcp\" # WebSocket 信令\n - \"17443:7443/tcp\" # WebRTC WSS\n # ESL 管理端口\n - \"18021:8021/tcp\"\n # HTTP 服务端口\n - \"18081-18082:8081-8082/tcp\"\n # RTP 媒体端口范围\n - \"16000-16129:6000-6129/udp\"\n volumes:\n # 配置文件目录 - 使用本地配置文件覆盖容器内的配置(经验证实际使用 /usr/local/freeswitch/etc/freeswitch)\n - ../freeswitch/conf:/usr/local/freeswitch/etc/freeswitch\n # 数据持久化目录\n - freeswitch_data:/usr/local/freeswitch/db\n # 日志目录\n - ../freeswitch/log:/usr/local/freeswitch/log\n # 声音目录\n - ../freeswitch/sounds:/usr/local/freeswitch/sounds\n # 录音目录\n - ../freeswitch/recordings:/usr/local/freeswitch/recordings\n # 挂载 ODBC 配置(ARM64 MariaDB 驱动)\n - ../freeswitch/etc/odbc.ini:/etc/odbc.ini:ro\n - ../freeswitch/etc/odbcinst.ini:/etc/odbcinst.ini:ro\n depends_on:\n - bytedesk-mysql\n networks:\n - bytedesk-network\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n coturn_data:\n name: bytedesk_coturn_data\n freeswitch_data:\n name: bytedesk_freeswitch_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "12eb4359662371740e80b49a3d86e8cc4101cee5": {"t": 1785748613.9896712, "n": 29010, "h": "1c428849bf1782a5", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # Coturn TURN server\n # https://hub.docker.com/r/coturn/coturn\n # 参考:https://github.com/coturn/coturn/blob/master/docker/coturn/README.md\n # 说明:TURN 需要开放一段 UDP 中继端口范围(RFC 5766)。Docker 对超大端口段映射性能较差,\n # 这里按官方示例收敛到 49160-49200(可按需调整)。\n bytedesk-coturn:\n image: coturn/coturn:latest\n container_name: coturn-bytedesk\n restart: always\n ports:\n - \"13478:3478\"\n - \"13478:3478/udp\"\n - \"15349:5349\"\n - \"15349:5349/udp\"\n - \"49160-49200:49160-49200/udp\"\n command:\n - -n\n - --log-file=stdout\n - --min-port=49160\n - --max-port=49200\n - --lt-cred-mech\n - --fingerprint\n - --no-multicast-peers\n - --no-cli\n - --no-tlsv1\n - --realm=${COTURN_REALM:-bytedesk.local}\n - --user=${COTURN_USER:-bytedesk}:${COTURN_PASS:-bytedesk123}\n volumes:\n - coturn_data:/var/lib/coturn\n networks:\n - bytedesk-network\n\n # FreeSwitch 语音通话服务\n # https://hub.docker.com/r/bytedesk/freeswitch\n # 使用自定义构建的 FreeSWITCH 镜像(支持 ARM64/AMD64)\n bytedesk-freeswitch:\n # image: bytedesk/freeswitch:latest\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/freeswitch:latest\n container_name: freeswitch-bytedesk\n restart: always\n # 使用 -nf (no fork) 参数在前台运行,避免容器退出\n command: [\"freeswitch\", \"-nf\", \"-nonat\", \"-nonatmap\"]\n environment:\n # 时区设置\n - TZ=Asia/Shanghai\n # 完全禁用 IPv6\n - DISABLE_IPV6=true\n ports:\n # SIP 端口\n - \"15060:5060/tcp\" # SIP 内部\n - \"15060:5060/udp\" # SIP 内部\n - \"15080:5080/tcp\" # SIP 外部\n - \"15080:5080/udp\" # SIP 外部\n - \"15061:5061/tcp\" # SIP 内部 TLS\n - \"15081:5081/tcp\" # SIP 外部 TLS\n # WebRTC 端口\n - \"15066:5066/tcp\" # WebSocket 信令\n - \"17443:7443/tcp\" # WebRTC WSS\n # ESL 管理端口\n - \"18021:8021/tcp\"\n # HTTP 服务端口\n - \"18081-18082:8081-8082/tcp\"\n # RTP 媒体端口范围\n - \"16000-16129:6000-6129/udp\"\n volumes:\n # 配置文件目录 - 使用本地配置文件覆盖容器内的配置(经验证实际使用 /usr/local/freeswitch/etc/freeswitch)\n - ../freeswitch/conf:/usr/local/freeswitch/etc/freeswitch\n # 数据持久化目录\n - freeswitch_data:/usr/local/freeswitch/db\n # 日志目录\n - ../freeswitch/log:/usr/local/freeswitch/log\n # 声音目录\n - ../freeswitch/sounds:/usr/local/freeswitch/sounds\n # 录音目录\n - ../freeswitch/recordings:/usr/local/freeswitch/recordings\n # 挂载 ODBC 配置(ARM64 MariaDB 驱动)\n - ../freeswitch/etc/odbc.ini:/etc/odbc.ini:ro\n - ../freeswitch/etc/odbcinst.ini:/etc/odbcinst.ini:ro\n depends_on:\n - bytedesk-mysql\n networks:\n - bytedesk-network\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n coturn_data:\n name: bytedesk_coturn_data\n freeswitch_data:\n name: bytedesk_freeswitch_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "0ffefc7867ec55721497e0f90769901fa12a42f2": {"t": 1785748615.3654926, "n": 28871, "h": "6f9f71bb04439534", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # Coturn TURN server\n # https://hub.docker.com/r/coturn/coturn\n # 参考:https://github.com/coturn/coturn/blob/master/docker/coturn/README.md\n # 说明:TURN 需要开放一段 UDP 中继端口范围(RFC 5766)。Docker 对超大端口段映射性能较差,\n # 这里按官方示例收敛到 49160-49200(可按需调整)。\n bytedesk-coturn:\n image: coturn/coturn:latest\n container_name: coturn-bytedesk\n restart: always\n ports:\n - \"13478:3478\"\n - \"13478:3478/udp\"\n - \"15349:5349\"\n - \"15349:5349/udp\"\n - \"49160-49200:49160-49200/udp\"\n command:\n - -n\n - --log-file=stdout\n - --min-port=49160\n - --max-port=49200\n - --lt-cred-mech\n - --fingerprint\n - --no-multicast-peers\n - --no-cli\n - --no-tlsv1\n - --realm=${COTURN_REALM:-bytedesk.local}\n - --user=${COTURN_USER:-bytedesk}:${COTURN_PASS:-bytedesk123}\n volumes:\n - coturn_data:/var/lib/coturn\n networks:\n - bytedesk-network\n\n # FreeSwitch 语音通话服务\n # https://hub.docker.com/r/bytedesk/freeswitch\n # 使用自定义构建的 FreeSWITCH 镜像(支持 ARM64/AMD64)\n bytedesk-freeswitch:\n # image: bytedesk/freeswitch:latest\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/freeswitch:latest\n container_name: freeswitch-bytedesk\n restart: always\n # 使用 -nf (no fork) 参数在前台运行,避免容器退出\n command: [\"freeswitch\", \"-nf\", \"-nonat\", \"-nonatmap\"]\n environment:\n # 时区设置\n - TZ=Asia/Shanghai\n # 完全禁用 IPv6\n - DISABLE_IPV6=true\n ports:\n # SIP 端口\n - \"15060:5060/tcp\" # SIP 内部\n - \"15060:5060/udp\" # SIP 内部\n - \"15080:5080/tcp\" # SIP 外部\n - \"15080:5080/udp\" # SIP 外部\n - \"15061:5061/tcp\" # SIP 内部 TLS\n - \"15081:5081/tcp\" # SIP 外部 TLS\n # WebRTC 端口\n - \"15066:5066/tcp\" # WebSocket 信令\n - \"17443:7443/tcp\" # WebRTC WSS\n # ESL 管理端口\n - \"18021:8021/tcp\"\n # HTTP 服务端口\n - \"18081-18082:8081-8082/tcp\"\n # RTP 媒体端口范围\n - \"16000-16129:6000-6129/udp\"\n volumes:\n # 配置文件目录 - 使用本地配置文件覆盖容器内的配置(经验证实际使用 /usr/local/freeswitch/etc/freeswitch)\n - ../freeswitch/conf:/usr/local/freeswitch/etc/freeswitch\n # 数据持久化目录\n - freeswitch_data:/usr/local/freeswitch/db\n # 日志目录\n - ../freeswitch/log:/usr/local/freeswitch/log\n # 声音目录\n - ../freeswitch/sounds:/usr/local/freeswitch/sounds\n # 录音目录\n - ../freeswitch/recordings:/usr/local/freeswitch/recordings\n # 挂载 ODBC 配置(ARM64 MariaDB 驱动)\n - ../freeswitch/etc/odbc.ini:/etc/odbc.ini:ro\n - ../freeswitch/etc/odbcinst.ini:/etc/odbcinst.ini:ro\n depends_on:\n - bytedesk-mysql\n networks:\n - bytedesk-network\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n coturn_data:\n name: bytedesk_coturn_data\n freeswitch_data:\n name: bytedesk_freeswitch_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "cfcd4fe31454c60261f28951de5ec33377e115ab": {"t": 1785748616.7268052, "n": 28822, "h": "927ba2fcfc1739a7", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # Coturn TURN server\n # https://hub.docker.com/r/coturn/coturn\n # 参考:https://github.com/coturn/coturn/blob/master/docker/coturn/README.md\n # 说明:TURN 需要开放一段 UDP 中继端口范围(RFC 5766)。Docker 对超大端口段映射性能较差,\n # 这里按官方示例收敛到 49160-49200(可按需调整)。\n bytedesk-coturn:\n image: coturn/coturn:latest\n container_name: coturn-bytedesk\n restart: always\n ports:\n - \"13478:3478\"\n - \"13478:3478/udp\"\n - \"15349:5349\"\n - \"15349:5349/udp\"\n - \"49160-49200:49160-49200/udp\"\n command:\n - -n\n - --log-file=stdout\n - --min-port=49160\n - --max-port=49200\n - --lt-cred-mech\n - --fingerprint\n - --no-multicast-peers\n - --no-cli\n - --no-tlsv1\n - --realm=${COTURN_REALM:-bytedesk.local}\n - --user=${COTURN_USER:-bytedesk}:${COTURN_PASS:-bytedesk123}\n volumes:\n - coturn_data:/var/lib/coturn\n networks:\n - bytedesk-network\n\n # FreeSwitch 语音通话服务\n # https://hub.docker.com/r/bytedesk/freeswitch\n # 使用自定义构建的 FreeSWITCH 镜像(支持 ARM64/AMD64)\n bytedesk-freeswitch:\n # image: bytedesk/freeswitch:latest\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/freeswitch:latest\n container_name: freeswitch-bytedesk\n restart: always\n # 使用 -nf (no fork) 参数在前台运行,避免容器退出\n command: [\"freeswitch\", \"-nf\", \"-nonat\", \"-nonatmap\"]\n environment:\n # 时区设置\n - TZ=Asia/Shanghai\n # 完全禁用 IPv6\n - DISABLE_IPV6=true\n ports:\n # SIP 端口\n - \"15060:5060/tcp\" # SIP 内部\n - \"15060:5060/udp\" # SIP 内部\n - \"15080:5080/tcp\" # SIP 外部\n - \"15080:5080/udp\" # SIP 外部\n - \"15061:5061/tcp\" # SIP 内部 TLS\n - \"15081:5081/tcp\" # SIP 外部 TLS\n # WebRTC 端口\n - \"15066:5066/tcp\" # WebSocket 信令\n - \"17443:7443/tcp\" # WebRTC WSS\n # ESL 管理端口\n - \"18021:8021/tcp\"\n # HTTP 服务端口\n - \"18081-18082:8081-8082/tcp\"\n # RTP 媒体端口范围\n - \"16000-16129:6000-6129/udp\"\n volumes:\n # 配置文件目录 - 使用本地配置文件覆盖容器内的配置(经验证实际使用 /usr/local/freeswitch/etc/freeswitch)\n - ../freeswitch/conf:/usr/local/freeswitch/etc/freeswitch\n # 数据持久化目录\n - freeswitch_data:/usr/local/freeswitch/db\n # 日志目录\n - ../freeswitch/log:/usr/local/freeswitch/log\n # 声音目录\n - ../freeswitch/sounds:/usr/local/freeswitch/sounds\n # 录音目录\n - ../freeswitch/recordings:/usr/local/freeswitch/recordings\n # 挂载 ODBC 配置(ARM64 MariaDB 驱动)\n - ../freeswitch/etc/odbc.ini:/etc/odbc.ini:ro\n - ../freeswitch/etc/odbcinst.ini:/etc/odbcinst.ini:ro\n depends_on:\n - bytedesk-mysql\n networks:\n - bytedesk-network\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n coturn_data:\n name: bytedesk_coturn_data\n freeswitch_data:\n name: bytedesk_freeswitch_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "93bce581a29a77e71b563d7783c957a0c8ca4d2b": {"t": 1785748618.0046215, "n": 27659, "h": "d69494723770f6a6", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # Coturn TURN server\n # https://hub.docker.com/r/coturn/coturn\n # 参考:https://github.com/coturn/coturn/blob/master/docker/coturn/README.md\n # 说明:TURN 需要开放一段 UDP 中继端口范围(RFC 5766)。Docker 对超大端口段映射性能较差,\n # 这里按官方示例收敛到 49160-49200(可按需调整)。\n bytedesk-coturn:\n image: coturn/coturn:latest\n container_name: coturn-bytedesk\n restart: always\n ports:\n - \"13478:3478\"\n - \"13478:3478/udp\"\n - \"15349:5349\"\n - \"15349:5349/udp\"\n - \"49160-49200:49160-49200/udp\"\n command:\n - -n\n - --log-file=stdout\n - --min-port=49160\n - --max-port=49200\n - --lt-cred-mech\n - --fingerprint\n - --no-multicast-peers\n - --no-cli\n - --no-tlsv1\n - --realm=${COTURN_REALM:-bytedesk.local}\n - --user=${COTURN_USER:-bytedesk}:${COTURN_PASS:-bytedesk123}\n volumes:\n - coturn_data:/var/lib/coturn\n networks:\n - bytedesk-network\n\n # FreeSwitch 语音通话服务\n # https://hub.docker.com/r/bytedesk/freeswitch\n # 使用自定义构建的 FreeSWITCH 镜像(支持 ARM64/AMD64)\n bytedesk-freeswitch:\n # image: bytedesk/freeswitch:latest\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/freeswitch:latest\n container_name: freeswitch-bytedesk\n restart: always\n # 使用 -nf (no fork) 参数在前台运行,避免容器退出\n command: [\"freeswitch\", \"-nf\", \"-nonat\", \"-nonatmap\"]\n environment:\n # 时区设置\n - TZ=Asia/Shanghai\n # 完全禁用 IPv6\n - DISABLE_IPV6=true\n ports:\n # SIP 端口\n - \"15060:5060/tcp\" # SIP 内部\n - \"15060:5060/udp\" # SIP 内部\n - \"15080:5080/tcp\" # SIP 外部\n - \"15080:5080/udp\" # SIP 外部\n - \"15061:5061/tcp\" # SIP 内部 TLS\n - \"15081:5081/tcp\" # SIP 外部 TLS\n # WebRTC 端口\n - \"15066:5066/tcp\" # WebSocket 信令\n - \"17443:7443/tcp\" # WebRTC WSS\n # ESL 管理端口\n - \"18021:8021/tcp\"\n # HTTP 服务端口\n - \"18081-18082:8081-8082/tcp\"\n # RTP 媒体端口范围\n - \"16000-16129:6000-6129/udp\"\n volumes:\n # 配置文件目录 - 使用本地配置文件覆盖容器内的配置(经验证实际使用 /usr/local/freeswitch/etc/freeswitch)\n - ../freeswitch/conf:/usr/local/freeswitch/etc/freeswitch\n # 数据持久化目录\n - freeswitch_data:/usr/local/freeswitch/db\n # 日志目录\n - ../freeswitch/log:/usr/local/freeswitch/log\n # 声音目录\n - ../freeswitch/sounds:/usr/local/freeswitch/sounds\n # 录音目录\n - ../freeswitch/recordings:/usr/local/freeswitch/recordings\n # 挂载 ODBC 配置(ARM64 MariaDB 驱动)\n - ../freeswitch/etc/odbc.ini:/etc/odbc.ini:ro\n - ../freeswitch/etc/odbcinst.ini:/etc/odbcinst.ini:ro\n depends_on:\n - bytedesk-mysql\n networks:\n - bytedesk-network\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n coturn_data:\n name: bytedesk_coturn_data\n freeswitch_data:\n name: bytedesk_freeswitch_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "7b3acbe6b6df8fbe01ae2b19b26dc787b5285037": {"t": 1785748619.3712406, "n": 27689, "h": "806824f7ce3f0f15", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # Coturn TURN server\n # https://hub.docker.com/r/coturn/coturn\n # 参考:https://github.com/coturn/coturn/blob/master/docker/coturn/README.md\n # 说明:TURN 需要开放一段 UDP 中继端口范围(RFC 5766)。Docker 对超大端口段映射性能较差,\n # 这里按官方示例收敛到 49160-49200(可按需调整)。\n bytedesk-coturn:\n image: coturn/coturn:latest\n container_name: coturn-bytedesk\n restart: always\n ports:\n - \"13478:3478\"\n - \"13478:3478/udp\"\n - \"15349:5349\"\n - \"15349:5349/udp\"\n - \"49160-49200:49160-49200/udp\"\n command:\n - -n\n - --log-file=stdout\n - --min-port=49160\n - --max-port=49200\n - --lt-cred-mech\n - --fingerprint\n - --no-multicast-peers\n - --no-cli\n - --no-tlsv1\n - --realm=${COTURN_REALM:-bytedesk.local}\n - --user=${COTURN_USER:-bytedesk}:${COTURN_PASS:-bytedesk123}\n volumes:\n - coturn_data:/var/lib/coturn\n networks:\n - bytedesk-network\n\n # FreeSwitch 语音通话服务\n # https://hub.docker.com/r/bytedesk/freeswitch\n # 使用自定义构建的 FreeSWITCH 镜像(支持 ARM64/AMD64)\n bytedesk-freeswitch:\n # image: bytedesk/freeswitch:latest\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/freeswitch:latest\n container_name: freeswitch-bytedesk\n restart: always\n # 使用 -nf (no fork) 参数在前台运行,避免容器退出\n command: [\"freeswitch\", \"-nf\", \"-nonat\", \"-nonatmap\"]\n environment:\n # 时区设置\n - TZ=Asia/Shanghai\n # 完全禁用 IPv6\n - DISABLE_IPV6=true\n ports:\n # SIP 端口\n - \"15060:5060/tcp\" # SIP 内部\n - \"15060:5060/udp\" # SIP 内部\n - \"15080:5080/tcp\" # SIP 外部\n - \"15080:5080/udp\" # SIP 外部\n - \"15061:5061/tcp\" # SIP 内部 TLS\n - \"15081:5081/tcp\" # SIP 外部 TLS\n # WebRTC 端口\n - \"15066:5066/tcp\" # WebSocket 信令\n - \"17443:7443/tcp\" # WebRTC WSS\n # ESL 管理端口\n - \"18021:8021/tcp\"\n # HTTP 服务端口\n - \"18081-18082:8081-8082/tcp\"\n # RTP 媒体端口范围\n - \"16000-16129:6000-6129/udp\"\n volumes:\n # 配置文件目录 - 使用本地配置文件覆盖容器内的配置(经验证实际使用 /usr/local/freeswitch/etc/freeswitch)\n - ../freeswitch/conf:/usr/local/freeswitch/etc/freeswitch\n # 数据持久化目录\n - freeswitch_data:/usr/local/freeswitch/db\n # 日志目录\n - ../freeswitch/log:/usr/local/freeswitch/log\n # 声音目录\n - ../freeswitch/sounds:/usr/local/freeswitch/sounds\n # 录音目录\n - ../freeswitch/recordings:/usr/local/freeswitch/recordings\n # 挂载 ODBC 配置(ARM64 MariaDB 驱动)\n - ../freeswitch/etc/odbc.ini:/etc/odbc.ini:ro\n - ../freeswitch/etc/odbcinst.ini:/etc/odbcinst.ini:ro\n depends_on:\n - bytedesk-mysql\n networks:\n - bytedesk-network\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.6.0\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n coturn_data:\n name: bytedesk_coturn_data\n freeswitch_data:\n name: bytedesk_freeswitch_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "dc2c12166af8ccdb5e6f22248dd783b794644ab6": {"t": 1785748620.724596, "n": 27675, "h": "ff36a606bc7a9b99", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis/redis-stack-server:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n environment:\n - REDIS_ARGS=--requirepass qfRxz3tVT8Nh\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # Coturn TURN server\n # https://hub.docker.com/r/coturn/coturn\n # 参考:https://github.com/coturn/coturn/blob/master/docker/coturn/README.md\n # 说明:TURN 需要开放一段 UDP 中继端口范围(RFC 5766)。Docker 对超大端口段映射性能较差,\n # 这里按官方示例收敛到 49160-49200(可按需调整)。\n bytedesk-coturn:\n image: coturn/coturn:latest\n container_name: coturn-bytedesk\n restart: always\n ports:\n - \"13478:3478\"\n - \"13478:3478/udp\"\n - \"15349:5349\"\n - \"15349:5349/udp\"\n - \"49160-49200:49160-49200/udp\"\n command:\n - -n\n - --log-file=stdout\n - --min-port=49160\n - --max-port=49200\n - --lt-cred-mech\n - --fingerprint\n - --no-multicast-peers\n - --no-cli\n - --no-tlsv1\n - --realm=${COTURN_REALM:-bytedesk.local}\n - --user=${COTURN_USER:-bytedesk}:${COTURN_PASS:-bytedesk123}\n volumes:\n - coturn_data:/var/lib/coturn\n networks:\n - bytedesk-network\n\n # FreeSwitch 语音通话服务\n # https://hub.docker.com/r/bytedesk/freeswitch\n # 使用自定义构建的 FreeSWITCH 镜像(支持 ARM64/AMD64)\n bytedesk-freeswitch:\n # image: bytedesk/freeswitch:latest\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/freeswitch:latest\n container_name: freeswitch-bytedesk\n restart: always\n # 使用 -nf (no fork) 参数在前台运行,避免容器退出\n command: [\"freeswitch\", \"-nf\", \"-nonat\", \"-nonatmap\"]\n environment:\n # 时区设置\n - TZ=Asia/Shanghai\n # 完全禁用 IPv6\n - DISABLE_IPV6=true\n ports:\n # SIP 端口\n - \"15060:5060/tcp\" # SIP 内部\n - \"15060:5060/udp\" # SIP 内部\n - \"15080:5080/tcp\" # SIP 外部\n - \"15080:5080/udp\" # SIP 外部\n - \"15061:5061/tcp\" # SIP 内部 TLS\n - \"15081:5081/tcp\" # SIP 外部 TLS\n # WebRTC 端口\n - \"15066:5066/tcp\" # WebSocket 信令\n - \"17443:7443/tcp\" # WebRTC WSS\n # ESL 管理端口\n - \"18021:8021/tcp\"\n # HTTP 服务端口\n - \"18081-18082:8081-8082/tcp\"\n # RTP 媒体端口范围\n - \"16000-16129:6000-6129/udp\"\n volumes:\n # 配置文件目录 - 使用本地配置文件覆盖容器内的配置(经验证实际使用 /usr/local/freeswitch/etc/freeswitch)\n - ../freeswitch/conf:/usr/local/freeswitch/etc/freeswitch\n # 数据持久化目录\n - freeswitch_data:/usr/local/freeswitch/db\n # 日志目录\n - ../freeswitch/log:/usr/local/freeswitch/log\n # 声音目录\n - ../freeswitch/sounds:/usr/local/freeswitch/sounds\n # 录音目录\n - ../freeswitch/recordings:/usr/local/freeswitch/recordings\n # 挂载 ODBC 配置(ARM64 MariaDB 驱动)\n - ../freeswitch/etc/odbc.ini:/etc/odbc.ini:ro\n - ../freeswitch/etc/odbcinst.ini:/etc/odbcinst.ini:ro\n depends_on:\n - bytedesk-mysql\n networks:\n - bytedesk-network\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.6.0\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n coturn_data:\n name: bytedesk_coturn_data\n freeswitch_data:\n name: bytedesk_freeswitch_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "d363dfa388e3ada7b7e8ec12d1628c560b23ab61": {"t": 1785748622.124844, "n": 27684, "h": "82257cb6b6938360", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis/redis-stack-server:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n environment:\n - REDIS_ARGS=--requirepass qfRxz3tVT8Nh\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # Coturn TURN server\n # https://hub.docker.com/r/coturn/coturn\n # 参考:https://github.com/coturn/coturn/blob/master/docker/coturn/README.md\n # 说明:TURN 需要开放一段 UDP 中继端口范围(RFC 5766)。Docker 对超大端口段映射性能较差,\n # 这里按官方示例收敛到 49160-49200(可按需调整)。\n bytedesk-coturn:\n image: coturn/coturn:latest\n container_name: coturn-bytedesk\n restart: always\n ports:\n - \"13478:3478\"\n - \"13478:3478/udp\"\n - \"15349:5349\"\n - \"15349:5349/udp\"\n - \"49160-49200:49160-49200/udp\"\n command:\n - -n\n - --log-file=stdout\n - --min-port=49160\n - --max-port=49200\n - --lt-cred-mech\n - --fingerprint\n - --no-multicast-peers\n - --no-cli\n - --no-tlsv1\n - --realm=${COTURN_REALM:-bytedesk.local}\n - --user=${COTURN_USER:-bytedesk}:${COTURN_PASS:-bytedesk123}\n volumes:\n - coturn_data:/var/lib/coturn\n networks:\n - bytedesk-network\n\n # FreeSwitch 语音通话服务\n # https://hub.docker.com/r/bytedesk/freeswitch\n # 使用自定义构建的 FreeSWITCH 镜像(支持 ARM64/AMD64)\n bytedesk-freeswitch:\n # image: bytedesk/freeswitch:latest\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/freeswitch:latest\n container_name: freeswitch-bytedesk\n restart: always\n # 使用 -nf (no fork) 参数在前台运行,避免容器退出\n command: [\"freeswitch\", \"-nf\", \"-nonat\", \"-nonatmap\"]\n environment:\n # 时区设置\n - TZ=Asia/Shanghai\n # 完全禁用 IPv6\n - DISABLE_IPV6=true\n ports:\n # SIP 端口\n - \"15060:5060/tcp\" # SIP 内部\n - \"15060:5060/udp\" # SIP 内部\n - \"15080:5080/tcp\" # SIP 外部\n - \"15080:5080/udp\" # SIP 外部\n - \"15061:5061/tcp\" # SIP 内部 TLS\n - \"15081:5081/tcp\" # SIP 外部 TLS\n # WebRTC 端口\n - \"15066:5066/tcp\" # WebSocket 信令\n - \"17443:7443/tcp\" # WebRTC WSS\n # ESL 管理端口\n - \"18021:8021/tcp\"\n # HTTP 服务端口\n - \"18081-18082:8081-8082/tcp\"\n # RTP 媒体端口范围\n - \"16000-16129:6000-6129/udp\"\n volumes:\n # 配置文件目录 - 使用本地配置文件覆盖容器内的配置(经验证实际使用 /usr/local/freeswitch/etc/freeswitch)\n - ../freeswitch/conf:/usr/local/freeswitch/etc/freeswitch\n # 数据持久化目录\n - freeswitch_data:/usr/local/freeswitch/db\n # 日志目录\n - ../freeswitch/log:/usr/local/freeswitch/log\n # 声音目录\n - ../freeswitch/sounds:/usr/local/freeswitch/sounds\n # 录音目录\n - ../freeswitch/recordings:/usr/local/freeswitch/recordings\n # 挂载 ODBC 配置(ARM64 MariaDB 驱动)\n - ../freeswitch/etc/odbc.ini:/etc/odbc.ini:ro\n - ../freeswitch/etc/odbcinst.ini:/etc/odbcinst.ini:ro\n depends_on:\n - bytedesk-mysql\n networks:\n - bytedesk-network\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.5.1\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_LOCK_TIME_MINUTES: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HELPCENTER_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n coturn_data:\n name: bytedesk_coturn_data\n freeswitch_data:\n name: bytedesk_freeswitch_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "a6b37c539838b97d2c6616946d1f47ee8e07ea06": {"t": 1785748623.4820762, "n": 27684, "h": "11bf05a0d394a6bd", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis/redis-stack-server:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n environment:\n - REDIS_ARGS=--requirepass qfRxz3tVT8Nh\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # Coturn TURN server\n # https://hub.docker.com/r/coturn/coturn\n # 参考:https://github.com/coturn/coturn/blob/master/docker/coturn/README.md\n # 说明:TURN 需要开放一段 UDP 中继端口范围(RFC 5766)。Docker 对超大端口段映射性能较差,\n # 这里按官方示例收敛到 49160-49200(可按需调整)。\n bytedesk-coturn:\n image: coturn/coturn:latest\n container_name: coturn-bytedesk\n restart: always\n ports:\n - \"13478:3478\"\n - \"13478:3478/udp\"\n - \"15349:5349\"\n - \"15349:5349/udp\"\n - \"49160-49200:49160-49200/udp\"\n command:\n - -n\n - --log-file=stdout\n - --min-port=49160\n - --max-port=49200\n - --lt-cred-mech\n - --fingerprint\n - --no-multicast-peers\n - --no-cli\n - --no-tlsv1\n - --realm=${COTURN_REALM:-bytedesk.local}\n - --user=${COTURN_USER:-bytedesk}:${COTURN_PASS:-bytedesk123}\n volumes:\n - coturn_data:/var/lib/coturn\n networks:\n - bytedesk-network\n\n # FreeSwitch 语音通话服务\n # https://hub.docker.com/r/bytedesk/freeswitch\n # 使用自定义构建的 FreeSWITCH 镜像(支持 ARM64/AMD64)\n bytedesk-freeswitch:\n # image: bytedesk/freeswitch:latest\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/freeswitch:latest\n container_name: freeswitch-bytedesk\n restart: always\n # 使用 -nf (no fork) 参数在前台运行,避免容器退出\n command: [\"freeswitch\", \"-nf\", \"-nonat\", \"-nonatmap\"]\n environment:\n # 时区设置\n - TZ=Asia/Shanghai\n # 完全禁用 IPv6\n - DISABLE_IPV6=true\n ports:\n # SIP 端口\n - \"15060:5060/tcp\" # SIP 内部\n - \"15060:5060/udp\" # SIP 内部\n - \"15080:5080/tcp\" # SIP 外部\n - \"15080:5080/udp\" # SIP 外部\n - \"15061:5061/tcp\" # SIP 内部 TLS\n - \"15081:5081/tcp\" # SIP 外部 TLS\n # WebRTC 端口\n - \"15066:5066/tcp\" # WebSocket 信令\n - \"17443:7443/tcp\" # WebRTC WSS\n # ESL 管理端口\n - \"18021:8021/tcp\"\n # HTTP 服务端口\n - \"18081-18082:8081-8082/tcp\"\n # RTP 媒体端口范围\n - \"16000-16129:6000-6129/udp\"\n volumes:\n # 配置文件目录 - 使用本地配置文件覆盖容器内的配置(经验证实际使用 /usr/local/freeswitch/etc/freeswitch)\n - ../freeswitch/conf:/usr/local/freeswitch/etc/freeswitch\n # 数据持久化目录\n - freeswitch_data:/usr/local/freeswitch/db\n # 日志目录\n - ../freeswitch/log:/usr/local/freeswitch/log\n # 声音目录\n - ../freeswitch/sounds:/usr/local/freeswitch/sounds\n # 录音目录\n - ../freeswitch/recordings:/usr/local/freeswitch/recordings\n # 挂载 ODBC 配置(ARM64 MariaDB 驱动)\n - ../freeswitch/etc/odbc.ini:/etc/odbc.ini:ro\n - ../freeswitch/etc/odbcinst.ini:/etc/odbcinst.ini:ro\n depends_on:\n - bytedesk-mysql\n networks:\n - bytedesk-network\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.5.0\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_LOCK_TIME_MINUTES: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HELPCENTER_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n coturn_data:\n name: bytedesk_coturn_data\n freeswitch_data:\n name: bytedesk_freeswitch_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "5ffbeba3e9fb263f2a3fc41a8fe4cfafe20452f1": {"t": 1785748624.6997895, "n": 27684, "h": "7613043af648c278", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis/redis-stack-server:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n environment:\n - REDIS_ARGS=--requirepass qfRxz3tVT8Nh\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # Coturn TURN server\n # https://hub.docker.com/r/coturn/coturn\n # 参考:https://github.com/coturn/coturn/blob/master/docker/coturn/README.md\n # 说明:TURN 需要开放一段 UDP 中继端口范围(RFC 5766)。Docker 对超大端口段映射性能较差,\n # 这里按官方示例收敛到 49160-49200(可按需调整)。\n bytedesk-coturn:\n image: coturn/coturn:latest\n container_name: coturn-bytedesk\n restart: always\n ports:\n - \"13478:3478\"\n - \"13478:3478/udp\"\n - \"15349:5349\"\n - \"15349:5349/udp\"\n - \"49160-49200:49160-49200/udp\"\n command:\n - -n\n - --log-file=stdout\n - --min-port=49160\n - --max-port=49200\n - --lt-cred-mech\n - --fingerprint\n - --no-multicast-peers\n - --no-cli\n - --no-tlsv1\n - --realm=${COTURN_REALM:-bytedesk.local}\n - --user=${COTURN_USER:-bytedesk}:${COTURN_PASS:-bytedesk123}\n volumes:\n - coturn_data:/var/lib/coturn\n networks:\n - bytedesk-network\n\n # FreeSwitch 语音通话服务\n # https://hub.docker.com/r/bytedesk/freeswitch\n # 使用自定义构建的 FreeSWITCH 镜像(支持 ARM64/AMD64)\n bytedesk-freeswitch:\n # image: bytedesk/freeswitch:latest\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/freeswitch:latest\n container_name: freeswitch-bytedesk\n restart: always\n # 使用 -nf (no fork) 参数在前台运行,避免容器退出\n command: [\"freeswitch\", \"-nf\", \"-nonat\", \"-nonatmap\"]\n environment:\n # 时区设置\n - TZ=Asia/Shanghai\n # 完全禁用 IPv6\n - DISABLE_IPV6=true\n ports:\n # SIP 端口\n - \"15060:5060/tcp\" # SIP 内部\n - \"15060:5060/udp\" # SIP 内部\n - \"15080:5080/tcp\" # SIP 外部\n - \"15080:5080/udp\" # SIP 外部\n - \"15061:5061/tcp\" # SIP 内部 TLS\n - \"15081:5081/tcp\" # SIP 外部 TLS\n # WebRTC 端口\n - \"15066:5066/tcp\" # WebSocket 信令\n - \"17443:7443/tcp\" # WebRTC WSS\n # ESL 管理端口\n - \"18021:8021/tcp\"\n # HTTP 服务端口\n - \"18081-18082:8081-8082/tcp\"\n # RTP 媒体端口范围\n - \"16000-16129:6000-6129/udp\"\n volumes:\n # 配置文件目录 - 使用本地配置文件覆盖容器内的配置(经验证实际使用 /usr/local/freeswitch/etc/freeswitch)\n - ../freeswitch/conf:/usr/local/freeswitch/etc/freeswitch\n # 数据持久化目录\n - freeswitch_data:/usr/local/freeswitch/db\n # 日志目录\n - ../freeswitch/log:/usr/local/freeswitch/log\n # 声音目录\n - ../freeswitch/sounds:/usr/local/freeswitch/sounds\n # 录音目录\n - ../freeswitch/recordings:/usr/local/freeswitch/recordings\n # 挂载 ODBC 配置(ARM64 MariaDB 驱动)\n - ../freeswitch/etc/odbc.ini:/etc/odbc.ini:ro\n - ../freeswitch/etc/odbcinst.ini:/etc/odbcinst.ini:ro\n depends_on:\n - bytedesk-mysql\n networks:\n - bytedesk-network\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.0.0\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_LOCK_TIME_MINUTES: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HELPCENTER_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n coturn_data:\n name: bytedesk_coturn_data\n freeswitch_data:\n name: bytedesk_freeswitch_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "b73297ad66d3f7bbaf79c808c12a3bcbad053435": {"t": 1785748626.401747, "n": 27573, "h": "0bb43ca005122ec3", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis/redis-stack-server:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n environment:\n - REDIS_ARGS=--requirepass qfRxz3tVT8Nh\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; if [ -f /tmp/elasticsearch-analysis-ik-8.18.0.zip ]; then /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; else curl -fsSL -o /tmp/elasticsearch-analysis-ik-8.18.0.zip https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file:///tmp/elasticsearch-analysis-ik-8.18.0.zip; fi; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(本地文件)\n # 如无本地文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/elasticsearch-analysis-ik-8.18.0.zip:ro\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # Coturn TURN server\n # https://hub.docker.com/r/coturn/coturn\n # 参考:https://github.com/coturn/coturn/blob/master/docker/coturn/README.md\n # 说明:TURN 需要开放一段 UDP 中继端口范围(RFC 5766)。Docker 对超大端口段映射性能较差,\n # 这里按官方示例收敛到 49160-49200(可按需调整)。\n bytedesk-coturn:\n image: coturn/coturn:latest\n container_name: coturn-bytedesk\n restart: always\n ports:\n - \"13478:3478\"\n - \"13478:3478/udp\"\n - \"15349:5349\"\n - \"15349:5349/udp\"\n - \"49160-49200:49160-49200/udp\"\n command:\n - -n\n - --log-file=stdout\n - --min-port=49160\n - --max-port=49200\n - --lt-cred-mech\n - --fingerprint\n - --no-multicast-peers\n - --no-cli\n - --no-tlsv1\n - --realm=${COTURN_REALM:-bytedesk.local}\n - --user=${COTURN_USER:-bytedesk}:${COTURN_PASS:-bytedesk123}\n volumes:\n - coturn_data:/var/lib/coturn\n networks:\n - bytedesk-network\n\n # FreeSwitch 语音通话服务\n # https://hub.docker.com/r/bytedesk/freeswitch\n # 使用自定义构建的 FreeSWITCH 镜像(支持 ARM64/AMD64)\n bytedesk-freeswitch:\n # image: bytedesk/freeswitch:latest\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/freeswitch:latest\n container_name: freeswitch-bytedesk\n restart: always\n # 使用 -nf (no fork) 参数在前台运行,避免容器退出\n command: [\"freeswitch\", \"-nf\", \"-nonat\", \"-nonatmap\"]\n environment:\n # 时区设置\n - TZ=Asia/Shanghai\n # 完全禁用 IPv6\n - DISABLE_IPV6=true\n ports:\n # SIP 端口\n - \"15060:5060/tcp\" # SIP 内部\n - \"15060:5060/udp\" # SIP 内部\n - \"15080:5080/tcp\" # SIP 外部\n - \"15080:5080/udp\" # SIP 外部\n - \"15061:5061/tcp\" # SIP 内部 TLS\n - \"15081:5081/tcp\" # SIP 外部 TLS\n # WebRTC 端口\n - \"15066:5066/tcp\" # WebSocket 信令\n - \"17443:7443/tcp\" # WebRTC WSS\n # ESL 管理端口\n - \"18021:8021/tcp\"\n # HTTP 服务端口\n - \"18081-18082:8081-8082/tcp\"\n # RTP 媒体端口范围\n - \"16000-16129:6000-6129/udp\"\n volumes:\n # 配置文件目录 - 使用本地配置文件覆盖容器内的配置(经验证实际使用 /usr/local/freeswitch/etc/freeswitch)\n - ../freeswitch/conf:/usr/local/freeswitch/etc/freeswitch\n # 数据持久化目录\n - freeswitch_data:/usr/local/freeswitch/db\n # 日志目录\n - ../freeswitch/log:/usr/local/freeswitch/log\n # 声音目录\n - ../freeswitch/sounds:/usr/local/freeswitch/sounds\n # 录音目录\n - ../freeswitch/recordings:/usr/local/freeswitch/recordings\n # 挂载 ODBC 配置(ARM64 MariaDB 驱动)\n - ../freeswitch/etc/odbc.ini:/etc/odbc.ini:ro\n - ../freeswitch/etc/odbcinst.ini:/etc/odbcinst.ini:ro\n depends_on:\n - bytedesk-mysql\n networks:\n - bytedesk-network\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n BYTEDESK_VERSION: 1.0.0\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_LOCK_TIME_MINUTES: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HELPCENTER_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n # SPRING_ARTEMIS_MODE: embedded\n SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n coturn_data:\n name: bytedesk_coturn_data\n freeswitch_data:\n name: bytedesk_freeswitch_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}, "976193668c0e76c76b3f7ba8d9522c7fc2692a06": {"t": 1786068160.9803777, "n": 31682, "h": "4da427643777496f", "c": "services:\n bytedesk-mysql:\n image: mysql:latest\n container_name: mysql-bytedesk\n environment:\n MYSQL_DATABASE: bytedesk\n MYSQL_ROOT_PASSWORD: r8FqfdbWUaN3\n TZ: Asia/Shanghai # 添加这一行\n ports:\n - \"13306:3306\"\n volumes:\n - mysql_data:/var/lib/mysql\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$MYSQL_ROOT_PASSWORD\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n\n bytedesk-redis:\n image: redis:latest\n container_name: redis-bytedesk\n ports:\n - \"16379:6379\"\n command: sh -c \"chown -R redis:redis /data && exec redis-server --requirepass qfRxz3tVT8Nh\"\n volumes:\n - redis_data:/data\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD\", \"redis-cli\", \"-a\", \"qfRxz3tVT8Nh\", \"ping\"]\n # interval: 10s\n # timeout: 5s\n # retries: 5\n \n # ActiveMQ Artemis 消息队列\n # http://localhost:18161/console,使用 admin/admin 作为登录凭据\n bytedesk-artemis:\n image: apache/activemq-artemis:latest\n container_name: artemis-bytedesk\n environment:\n - ARTEMIS_USER=admin\n - ARTEMIS_PASSWORD=admin\n - ANONYMOUS_LOGIN=false\n - EXTRA_ARGS=--http-host 0.0.0.0 --relax-jolokia\n ports:\n - \"16161:61616\" # JMS\n - \"16162:61617\" # AMQP\n - \"18161:8161\" # Web Console\n - \"15672:5672\" # AMQP\n - \"16163:61613\" # STOMP\n - \"11883:1883\" # MQTT\n volumes:\n - artemis_data:/var/lib/artemis/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"--fail\", \"-u\", \"admin:admin\", \"http://localhost:8161/console/jolokia/\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # ElasticSearch 向量数据库\n bytedesk-elasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0\n container_name: elasticsearch-bytedesk\n environment:\n - node.name=bytedesk-es01\n - cluster.name=bytedesk-es-cluster\n - discovery.type=single-node\n - bootstrap.memory_lock=true\n - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\n - xpack.security.enabled=true\n - ELASTIC_PASSWORD=bytedesk123\n ulimits:\n memlock:\n soft: -1\n hard: -1\n entrypoint: [\"bash\", \"-c\", \"IK_PLUGIN_DIR=/tmp/ik-plugin-cache; IK_PLUGIN_FILE=$$IK_PLUGIN_DIR/elasticsearch-analysis-ik-8.18.0.zip; IK_PLUGIN_TMP=$$IK_PLUGIN_FILE.tmp; mkdir -p $$IK_PLUGIN_DIR; if [ ! -d /usr/share/elasticsearch/plugins/analysis-ik ]; then echo 'Installing IK plugin...'; curl -fsSL -o $$IK_PLUGIN_TMP https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip && mv $$IK_PLUGIN_TMP $$IK_PLUGIN_FILE; /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch file://$$IK_PLUGIN_FILE; fi; exec /usr/local/bin/docker-entrypoint.sh\"]\n volumes:\n - elasticsearch_data:/usr/share/elasticsearch/data\n # 默认安装 IK 分词插件(缓存目录中的 zip 文件)\n # 如缓存目录中无 zip 文件,将自动从 https://www.weiyuai.cn/download/elasticsearch-analysis-ik-8.18.0.zip 下载\n - ./elasticsearch-analysis-ik-8.18.0.zip:/tmp/ik-plugin-cache\n ports:\n - \"19200:9200\"\n - \"19300:9300\"\n networks:\n - bytedesk-network\n # healthcheck:\n # test: [\"CMD-SHELL\", \"curl -s -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1\"]\n # interval: 30s\n # timeout: 10s\n # retries: 5\n\n # Zipkin 分布式追踪系统- Spring Ai Observability\n bytedesk-zipkin:\n image: 'openzipkin/zipkin:latest'\n container_name: zipkin-bytedesk\n ports:\n - '19411:9411'\n volumes:\n - zipkin_data:/data\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9411/health\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # MinIO 对象存储服务\n # http://localhost:19000 - MinIO Console\n # http://localhost:19001 - MinIO API\n bytedesk-minio:\n image: minio/minio:latest\n container_name: minio-bytedesk\n environment:\n - MINIO_ROOT_USER=minioadmin\n - MINIO_ROOT_PASSWORD=minioadmin123\n - TZ=Asia/Shanghai\n ports:\n - \"19000:9000\" # API\n - \"19001:9001\" # Console\n volumes:\n - minio_data:/data\n command: minio server /data --console-address \":9001\"\n networks:\n - bytedesk-network\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n interval: 30s\n timeout: 10s\n retries: 5\n\n # Coturn TURN server\n # https://hub.docker.com/r/coturn/coturn\n # 参考:https://github.com/coturn/coturn/blob/master/docker/coturn/README.md\n # 说明:TURN 需要开放一段 UDP 中继端口范围(RFC 5766)。Docker 对超大端口段映射性能较差,\n # 这里按官方示例收敛到 49160-49200(可按需调整)。\n bytedesk-coturn:\n image: coturn/coturn:latest\n container_name: coturn-bytedesk\n restart: always\n ports:\n - \"13478:3478\"\n - \"13478:3478/udp\"\n - \"15349:5349\"\n - \"15349:5349/udp\"\n - \"49160-49200:49160-49200/udp\"\n command:\n - -n\n - --log-file=stdout\n - --min-port=49160\n - --max-port=49200\n - --lt-cred-mech\n - --fingerprint\n - --no-multicast-peers\n - --no-cli\n - --no-tlsv1\n - --realm=${COTURN_REALM:-bytedesk.local}\n - --user=${COTURN_USER:-bytedesk}:${COTURN_PASS:-bytedesk123}\n volumes:\n - coturn_data:/var/lib/coturn\n networks:\n - bytedesk-network\n\n # FreeSwitch 语音通话服务\n # https://hub.docker.com/r/bytedesk/freeswitch\n # 使用自定义构建的 FreeSWITCH 镜像(支持 ARM64/AMD64)\n bytedesk-freeswitch:\n # image: bytedesk/freeswitch:latest\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/freeswitch:latest\n container_name: freeswitch-bytedesk\n restart: always\n # 使用 -nf (no fork) 参数在前台运行,避免容器退出\n command: [\"freeswitch\", \"-nf\", \"-nonat\", \"-nonatmap\"]\n environment:\n # 时区设置\n - TZ=Asia/Shanghai\n # 完全禁用 IPv6\n - DISABLE_IPV6=true\n ports:\n # SIP 端口\n - \"15060:5060/tcp\" # SIP 内部\n - \"15060:5060/udp\" # SIP 内部\n - \"15080:5080/tcp\" # SIP 外部\n - \"15080:5080/udp\" # SIP 外部\n - \"15061:5061/tcp\" # SIP 内部 TLS\n - \"15081:5081/tcp\" # SIP 外部 TLS\n # WebRTC 端口\n - \"15066:5066/tcp\" # WebSocket 信令\n - \"17443:7443/tcp\" # WebRTC WSS\n # ESL 管理端口\n - \"18021:8021/tcp\"\n # HTTP 服务端口\n - \"18081-18082:8081-8082/tcp\"\n # RTP 媒体端口范围\n - \"16000-16129:6000-6129/udp\"\n volumes:\n # 配置文件目录 - 使用本地配置文件覆盖容器内的配置(经验证实际使用 /usr/local/freeswitch/etc/freeswitch)\n - ../freeswitch/conf:/usr/local/freeswitch/etc/freeswitch\n # Lua 脚本目录 - 92-ai-bot 等拨号计划依赖 nlsml_to_text.lua\n - ../freeswitch/scripts:/usr/local/freeswitch/share/freeswitch/scripts\n # 数据持久化目录\n - freeswitch_data:/usr/local/freeswitch/db\n # 日志目录\n - ../freeswitch/log:/usr/local/freeswitch/log\n # 声音目录\n - ../freeswitch/sounds:/usr/local/freeswitch/sounds\n # 录音目录\n - ../freeswitch/recordings:/usr/local/freeswitch/recordings\n # 挂载 ODBC 配置(ARM64 MariaDB 驱动)\n - ../freeswitch/etc/odbc.ini:/etc/odbc.ini:ro\n - ../freeswitch/etc/odbcinst.ini:/etc/odbcinst.ini:ro\n depends_on:\n - bytedesk-mysql\n networks:\n - bytedesk-network\n\n bytedesk:\n # image: bytedesk/bytedesk:latest # hub.docker.com enterprise\n # image: bytedesk/bytedesk-ce:latest # hub.docker.com community\n image: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk:latest # aliyun enterprise\n # mage: registry.cn-hangzhou.aliyuncs.com/bytedesk/bytedesk-ce:latest # aliyun community\n container_name: bytedesk\n depends_on:\n - bytedesk-mysql\n - bytedesk-redis\n - bytedesk-elasticsearch\n - bytedesk-artemis\n - bytedesk-zipkin\n - bytedesk-minio\n # bytedesk-mysql:\n # condition: service_healthy\n # bytedesk-redis:\n # condition: service_healthy\n # bytedesk-elasticsearch:\n # condition: service_healthy\n # bytedesk-artemis:\n # condition: service_healthy\n environment:\n TZ: Asia/Shanghai\n SERVER_PORT: 9003\n # bytedesk config\n BYTEDESK_DEBUG: \"false\"\n # open profile 数据源类型:mysql / postgresql / oracle / kingbase / h2\n BYTEDESK_DATASOURCE_ACTIVE: mysql\n # 申请licenseKey\n # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license\n BYTEDESK_LICENSE_KEY: \n # enable custom config: name, logo, description\n # enable custom system config 是否开启自定义系统配置\n BYTEDESK_CUSTOM_ENABLED: \"false\"\n # custom system name 自定义系统名称\n BYTEDESK_CUSTOM_NAME: \n # custom logo url 自定义logo地址\n BYTEDESK_CUSTOM_LOGO: \n # custom system description 自定义系统描述\n BYTEDESK_CUSTOM_DESCRIPTION: \n BYTEDESK_CUSTOM_SHOW_RIGHT_CORNER_CHAT: \"false\"\n BYTEDESK_CUSTOM_SHOW_DEMO: \"false\"\n BYTEDESK_CUSTOM_PRIVACY_POLICY_URL: https://www.weiyuai.cn/privacy.html\n BYTEDESK_CUSTOM_TERMS_OF_SERVICE_URL: https://www.weiyuai.cn/terms.html\n # 外网可访问的 MQTT WebSocket 地址(nginx/反向代理场景),例如:wss://api.weiyuai.cn/websocket\n BYTEDESK_CUSTOM_MQTT_WEBSOCKET_URL:\n # 外网可访问的访客工单页面地址(完整URL,不带末尾斜杠),用于邮件中的工单会话直达链接,例如:https://support.weiyuai.cn/ticket\n # BYTEDESK_CUSTOM_TICKET_HTML_URL: https://support.example.com/ticket\n # enable login username 登录用户名开启\n BYTEDESK_CUSTOM_LOGIN_USERNAME_ENABLE: \"true\"\n # enable 2fa 双重验证开启\n BYTEDESK_CUSTOM_LOGIN_2FA_ENABLE: \"false\"\n # 密码错误最大重试次数, 默认3次, 0表示不限制。\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_COUNT: 3\n # 超过次数默认锁定10分钟, 0表示不锁定\n BYTEDESK_CUSTOM_LOGIN_MAX_RETRY_LOCK_TIME: 10\n # enable login mobile 手机号登录开启\n BYTEDESK_CUSTOM_LOGIN_MOBILE_ENABLE: \"true\"\n # enable login scan 扫码登录开启\n BYTEDESK_CUSTOM_LOGIN_SCAN_ENABLE: \"true\"\n # enable github login\n BYTEDESK_CUSTOM_LOGIN_GITHUB_ENABLE: \"false\"\n BYTEDESK_CUSTOM_DOC_URL_SHOW: \"true\"\n BYTEDESK_CUSTOM_DOC_URL: https://www.weiyuai.cn/docs/zh-CN/\n BYTEDESK_CUSTOM_LANG: zh-CN\n # Custom default LLM prompt; leave empty to fall back to the built-in RobotConsts default.\n BYTEDESK_CUSTOM_DEFAULT_LLM_PROMPT:\n # allow register 注册开启\n BYTEDESK_CUSTOM_ALLOW_REGISTER: \"true\"\n # force validate mobile 强制验证手机号\n BYTEDESK_CUSTOM_FORCE_VALIDATE_MOBILE: \"true\"\n # force validate email 强制验证邮箱\n BYTEDESK_CUSTOM_FORCE_VALIDATE_EMAIL: \"true\"\n # Admin config\n BYTEDESK_ADMIN_EMAIL: admin@email.com\n BYTEDESK_ADMIN_PASSWORD: admin\n BYTEDESK_ADMIN_NICKNAME: SuperAdmin\n BYTEDESK_ADMIN_MOBILE: 13345678000\n BYTEDESK_ADMIN_MOBILE_WHITELIST: 18888888000,18888888001,18888888002,18888888003,18888888004,18888888005\n BYTEDESK_ADMIN_EMAIL_WHITELIST: 100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com\n BYTEDESK_ADMIN_VALIDATE_CODE: 123456\n \n # Member config\n BYTEDESK_MEMBER_PASSWORD: 123456\n # Performance Testing config\n BYTEDESK_TESTING_ENABLED: \"true\"\n # BYTEDESK_TESTING_ACCOUNT_COUNT: 300\n # BYTEDESK_TESTING_ACCOUNT_USERNAME: test\n # BYTEDESK_TESTING_ACCOUNT_PASSWORD: password\n BYTEDESK_TESTING_DISABLE_CAPTCHA: \"true\"\n BYTEDESK_TESTING_DISABLE_IP_FILTER: \"true\"\n # whitelist ip for performance testing\n BYTEDESK_TESTING_IP_WHITELIST: 127.0.0.1,127.0.0.2\n # Organization config\n BYTEDESK_ORGANIZATION_NAME: MyCompany\n BYTEDESK_ORGANIZATION_CODE: bytedesk\n BYTEDESK_ORGANIZATION_ALLOW_CREATE_ORG: \"true\"\n BYTEDESK_ORGANIZATION_ALLOW_JOIN_ORG: \"true\"\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_LEVEL: 0\n BYTEDESK_ORGANIZATION_DEFAULT_VIP_DAYS: 365\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_MEMBERS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_AGENTS: 20\n BYTEDESK_ORGANIZATION_DEFAULT_MAX_WORKGROUPS: 20\n # Features config\n BYTEDESK_FEATURES_JAVA_AI: \"true\"\n BYTEDESK_FEATURES_EMAIL_TYPE: javamail\n # 头像的访问地址,请修改为服务器实际的地址\n BYTEDESK_FEATURES_AVATAR_BASE_URL: http://127.0.0.1:9003\n # CORS config\n # BYTEDESK_CORS_ALLOWED_ORIGINS: *\n # JWT config\n BYTEDESK_JWT_SECRET_KEY: 1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2\n BYTEDESK_JWT_EXPIRATION: 2592000000\n BYTEDESK_JWT_REFRESH_TOKEN_EXPIRATION: 5184000000\n # db config\n SPRING_DATASOURCE_URL: jdbc:mysql://mysql-bytedesk:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true\n SPRING_DATASOURCE_USERNAME: root\n SPRING_DATASOURCE_PASSWORD: r8FqfdbWUaN3\n SPRING_JPA_HIBERNATE_DDL_AUTO: update\n # redis config\n SPRING_DATA_REDIS_DATABASE: 0\n SPRING_DATA_REDIS_HOST: redis-bytedesk\n SPRING_DATA_REDIS_PORT: 6379\n SPRING_DATA_REDIS_PASSWORD: qfRxz3tVT8Nh\n SPRING_DATA_REDIS_TIMEOUT: 10000\n SPRING_DATA_REDIS_REPOSITORIES_ENABLED: \"false\"\n # Cache config\n BYTEDESK_CACHE_LEVEL: 2\n BYTEDESK_CACHE_PREFIX: bytedeskim\n BYTEDESK_CACHE_REDIS_STREAM_KEY: bytedeskim:stream\n SPRING_CACHE_TYPE: redis\n SPRING_CACHE_REDIS_TIME_TO_LIVE: 1800000\n SPRING_CACHE_REDIS_CACHE_NULL_VALUES: \"false\"\n SPRING_CACHE_REDIS_USE_KEY_PREFIX: \"true\"\n SPRING_CACHE_REDIS_KEY_PREFIX: \"bytedeskim:cache:\"\n # Upload config\n BYTEDESK_UPLOAD_TYPE: local\n BYTEDESK_UPLOAD_DIR: /app/uploads\n # 上传文件的访问地址,请修改为服务器实际的地址\n BYTEDESK_UPLOAD_URL: http://127.0.0.1:9003\n # 文件上传安全配置\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_SIZE: 10485760\n BYTEDESK_UPLOAD_SECURITY_ENABLE_IMAGE_VALIDATION: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_FILE_NAME_FILTER: \"true\"\n BYTEDESK_UPLOAD_SECURITY_FORCE_RENAME: \"true\"\n BYTEDESK_UPLOAD_SECURITY_MAX_FILE_NAME_LENGTH: 255\n BYTEDESK_UPLOAD_SECURITY_ENABLE_UPLOAD_LOG: \"true\"\n BYTEDESK_UPLOAD_SECURITY_ENABLE_VIRUS_SCAN: \"false\"\n # Watermark config 水印配置\n # BYTEDESK_WATERMARK_ENABLED: \"false\"\n # BYTEDESK_WATERMARK_TEXT: bytedesk.com\n # BYTEDESK_WATERMARK_POSITION: BOTTOM_RIGHT\n # BYTEDESK_WATERMARK_FONT_SIZE: 24\n # BYTEDESK_WATERMARK_FONT_NAME: Arial\n # BYTEDESK_WATERMARK_COLOR: 255,255,255,128\n # BYTEDESK_WATERMARK_OPACITY: 0.5\n # BYTEDESK_WATERMARK_MARGIN: 20\n # BYTEDESK_WATERMARK_IMAGE_ONLY: \"true\"\n # BYTEDESK_WATERMARK_MIN_IMAGE_SIZE: 100\n # BYTEDESK_WATERMARK_MAX_IMAGE_SIZE: 5000\n # MinIO配置(当使用MinIO时)\n BYTEDESK_MINIO_ENABLED: \"false\"\n BYTEDESK_MINIO_ENDPOINT: http://bytedesk-minio:9000 # Docker内部通信使用服务名\n BYTEDESK_MINIO_ACCESS_KEY: minioadmin\n BYTEDESK_MINIO_SECRET_KEY: minioadmin123\n BYTEDESK_MINIO_BUCKET_NAME: bytedesk\n BYTEDESK_MINIO_REGION: us-east-1\n BYTEDESK_MINIO_SECURE: false\n # Knowledge base config\n # BYTEDESK_KBASE_THEME: default\n # # legacy keys (helpcenter defaults)\n # BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n # # 知识库的访问地址,请修改为服务器实际的地址\n # BYTEDESK_KBASE_API_URL: http://127.0.0.1:9003\n # split config: helpcenter/blog\n BYTEDESK_KBASE_HELPCENTER_THEME: default\n BYTEDESK_KBASE_HTML_PATH: /app/helpcenter\n BYTEDESK_KBASE_HELPCENTER_API_URL: http://127.0.0.1:9003\n BYTEDESK_KBASE_BLOG_THEME: default\n BYTEDESK_KBASE_BLOG_HTML_PATH: /app/blog\n BYTEDESK_KBASE_BLOG_API_URL: http://127.0.0.1:9003\n # Socket config\n BYTEDESK_SOCKET_HOST: 0.0.0.0\n BYTEDESK_SOCKET_WEBSOCKET_PORT: 9885\n BYTEDESK_SOCKET_LEAK_DETECTOR_LEVEL: SIMPLE\n BYTEDESK_SOCKET_PARENT_EVENT_LOOP_GROUP_THREAD_COUNT: 1\n BYTEDESK_SOCKET_CHILD_EVENT_LOOP_GROUP_THREAD_COUNT: 8\n BYTEDESK_SOCKET_MAX_PAYLOAD_SIZE: 10240\n # Call FreeSwitch config\n BYTEDESK_CALL_FREESWITCH_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_SERVER: 127.0.0.1\n BYTEDESK_CALL_FREESWITCH_ESL_PORT: 8021\n BYTEDESK_CALL_FREESWITCH_ESL_PASSWORD: password\n BYTEDESK_CALL_FREESWITCH_SIP_PORT: 5060\n BYTEDESK_CALL_FREESWITCH_WEBRTC_PORT: 7443\n BYTEDESK_CALL_FREESWITCH_WS_PORT: 5066\n BYTEDESK_CALL_FREESWITCH_CALL_TIMEOUT: 120\n # AI 会话并发守护(每个组织最大并发 AI 语音会话数,超限返回忙线)\n BYTEDESK_CALL_AI_SESSION_MAX_CONCURRENCY_PER_ORG: 10\n # 僵死会话 TTL(分钟),超时未释放的会话会被定时清理\n BYTEDESK_CALL_AI_SESSION_STALE_TTL_MINUTES: 30\n # 僵死会话清理间隔(毫秒)\n BYTEDESK_CALL_AI_SESSION_SWEEP_INTERVAL_MS: 60000\n # 分机导入来源:esl 或 directory。默认优先通过 ESL list_users 读取 FreeSWITCH 目录分机。\n BYTEDESK_CALL_FREESWITCH_EXTENSION_IMPORT_SOURCE: esl\n # 当 ESL list_users 不可用或返回空时,是否回退扫描应用容器内挂载的 FreeSWITCH conf/directory。\n BYTEDESK_CALL_FREESWITCH_EXTENSION_IMPORT_DIRECTORY_FALLBACK_ENABLED: \"false\"\n # AI hotline 动态入口路由同步:为已发布的 AI 分机自动创建/回填 CallRoute。\n BYTEDESK_CALL_AI_HOTLINE_ROUTE_SYNC_ENABLED: \"true\"\n # 调试开关:开启后仅记录将要同步的路由,不真正写入数据库。\n BYTEDESK_CALL_AI_HOTLINE_ROUTE_SYNC_DRY_RUN: \"false\"\n # xml_curl 功能开关:dialplan/directory/configuration/phrases 后备处理\n BYTEDESK_CALL_FREESWITCH_XMLCURL_DIALPLAN_ENABLED: \"true\"\n BYTEDESK_CALL_FREESWITCH_XMLCURL_DIRECTORY_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_XMLCURL_CONFIGURATION_ENABLED: \"false\"\n BYTEDESK_CALL_FREESWITCH_XMLCURL_PHRASES_ENABLED: \"false\"\n # xml_curl directory 用户列表:user1@domain:password,...\n BYTEDESK_CALL_FREESWITCH_XMLCURL_DIRECTORY_USERS: \"1000@default:1234\"\n # xml_curl configuration 白名单,逗号分隔(支持 100-200 范围写法)\n BYTEDESK_CALL_FREESWITCH_XMLCURL_CONFIG_WHITELIST:\n # 目录回退时扫描的 FreeSWITCH conf 根目录;需与下方 volumes 中的宿主机挂载保持一致。\n BYTEDESK_CALL_FREESWITCH_CONF_DIR: /app/freeswitch/conf\n BYTEDESK_CALL_MRCP_ENABLED: \"false\"\n BYTEDESK_CALL_MRCP_PROFILE: java-mrcp\n BYTEDESK_CALL_MRCP_HOST: 0.0.0.0\n BYTEDESK_CALL_MRCP_PORT: 1544\n BYTEDESK_CALL_MRCP_TTS_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_PROVIDER: dashscope\n BYTEDESK_CALL_MRCP_ASR_MODE: recording-file\n BYTEDESK_CALL_MRCP_TTS_VOICE: longanhuan\n # WebRTC / Janus config\n BYTEDESK_WEBRTC_JANUS_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_WS_URL: ws://bytedesk-janus:8188/janus\n BYTEDESK_WEBRTC_JANUS_LOG_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_OPERATION_TIMEOUT_MS: 10000\n BYTEDESK_WEBRTC_JANUS_HEALTH_TIMEOUT_MS: 3000\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_0_URLS: stun:bytedesk-coturn:3478\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_URLS: turn:bytedesk-coturn:3478?transport=udp\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_USERNAME: ${COTURN_USER:-bytedesk}\n BYTEDESK_WEBRTC_JANUS_ICE_SERVERS_1_CREDENTIAL: ${COTURN_PASS:-bytedesk123}\n BYTEDESK_WEBRTC_JANUS_ADMIN_ENABLED: \"true\"\n BYTEDESK_WEBRTC_JANUS_ADMIN_WS_URL: ws://bytedesk-janus:7188/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_HTTP_URL: http://bytedesk-janus:8088/janus\n BYTEDESK_WEBRTC_JANUS_ADMIN_SECRET: ${JANUS_ADMIN_SECRET:-janusoverlord}\n BYTEDESK_WEBRTC_RECORD_DIR: /app/uploads/webrtc-video-recordings\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PUBLISHERS: 6\n BYTEDESK_WEBRTC_JANUS_VIDEO_ROOM_DEFAULT_PERMANENT: \"false\"\n BYTEDESK_WEBRTC_JANUS_AUDIO_BRIDGE_DEFAULT_PERMANENT: \"false\"\n # 废弃 Cluster config\n # BYTEDESK_CLUSTER_ENABLED: \"false\"\n # Push config\n # BYTEDESK_PUSH_APNS_BUNDLE_ID: com.kefux.im\n # BYTEDESK_PUSH_APNS_P12_URL: 123.p12\n # BYTEDESK_PUSH_APNS_P12_PASSWORD: 123456\n # druid\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_USERNAME: admin@email.com\n SPRING_DATASOURCE_DRUID_STAT_VIEW_SERVLET_LOGIN_PASSWORD: admin\n # Actuator security configuration\n MANAGEMENT_ENDPOINTS_ENABLED_BY_DEFAULT: \"false\"\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: ''\n MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_EXCLUDE: '*'\n MANAGEMENT_ENDPOINT_HEALTH_ENABLED: \"false\"\n MANAGEMENT_ENDPOINT_INFO_ENABLED: \"false\"\n MANAGEMENT_SERVER_PORT: -1\n MANAGEMENT_ENDPOINTS_WEB_BASE_PATH: '/management'\n SPRING_SECURITY_BASIC_ENABLED: \"true\"\n # Zipkin Tracing Configuration\n MANAGEMENT_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENABLED: \"false\"\n MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: http://127.0.0.1:19411/api/v2/spans\n MANAGEMENT_TRACING_SAMPLING_PROBABILITY: 0.0\n # ===============================\n # Spring Boot Admin Client (bytedesk-monitor)\n # Uncomment to register this instance with a monitor server. 取消注释以注册到监控服务端。\n # ===============================\n # SPRING_BOOT_ADMIN_CLIENT_URL: http://bytedesk-monitor:9103\n # SPRING_BOOT_ADMIN_CLIENT_USERNAME: admin\n # SPRING_BOOT_ADMIN_CLIENT_PASSWORD: admin\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_NAME: bytedesk-starter\n # SPRING_BOOT_ADMIN_CLIENT_INSTANCE_SERVICE_BASE_URL: http://127.0.0.1:9003\n # ai config\n # 默认对话配置\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text\n SPRING_AI_MODEL_CHAT: zhipuai\n # 默认向量模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding\n SPRING_AI_MODEL_EMBEDDING: zhipuai\n # 默认视觉模型\n # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision\n SPRING_AI_MODEL_VISION: zhipuai\n # 默认语音模型\n SPRING_AI_MODEL_AUDIO: zhipuai\n SPRING_AI_MODEL_AUDIO_SPEECH: none\n SPRING_AI_MODEL_AUDIO_TRANSCRIPTION: none\n # 默认重排序模型\n SPRING_AI_MODEL_RERANK: zhipuai\n # ollama\n SPRING_AI_OLLAMA_BASE_URL: http://host.docker.internal:11434\n SPRING_AI_OLLAMA_CHAT_ENABLED: \"false\"\n SPRING_AI_OLLAMA_CHAT_OPTIONS_MODEL: qwen3:0.6b\n SPRING_AI_OLLAMA_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OLLAMA_EMBEDDING_ENABLED: \"false\"\n # 如果主要处理中文内容,推荐使用BGE模型,在中文语义理解上表现更好\n # https://huggingface.co/BAAI/bge-m3: Dimension: 1024, Sequence Length: 8192 \n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL: bge-m3:latest\n # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#auto-pulling-models\n # always/when_missing/never\n SPRING_AI_OLLAMA_INIT_PULL_MODEL_STRATEGY: when_missing\n # https://huggingface.co/BAAI/bge-reranker-v2-m3\n SPRING_AI_OLLAMA_EMBEDDING_OPTIONS_MODEL_RERANK: bge-reranker-v2-m3:latest\n # zhipuai\n # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys\n # SPRING_AI_ZHIPUAI_BASE_URL: https://open.bigmodel.cn/api/paas\n SPRING_AI_ZHIPUAI_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_CHAT_ENABLED: \"true\"\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MODEL: glm-4.5-flash\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_TOP_P: 0.9\n SPRING_AI_ZHIPUAI_CHAT_OPTIONS_MAX_TOKENS: 4096\n SPRING_AI_ZHIPUAI_CONNECTION_TIMEOUT: 30\n SPRING_AI_ZHIPUAI_READ_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_WRITE_TIMEOUT: 10\n SPRING_AI_ZHIPUAI_PING_INTERVAL: 10\n SPRING_AI_ZHIPUAI_MAX_IDLE_CONNECTIONS: 8\n SPRING_AI_ZHIPUAI_KEEP_ALIVE_DURATION: 1\n SPRING_AI_ZHIPUAI_EMBEDDING_ENABLED: \"true\"\n # SPRING_AI_ZHIPUAI_EMBEDDING_BASE_URL: https://api.bigmodel.cn\n # SPRING_AI_ZHIPUAI_EMBEDDING_API_KEY: 'sk-xxx'\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-2\n # SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_MODEL: embedding-3\n SPRING_AI_ZHIPUAI_EMBEDDING_OPTIONS_DIMENSIONS: 1024\n # deepseek\n # 申请key https://api-docs.deepseek.com/zh-cn/\n SPRING_AI_DEEPSEEK_BASE_URL: https://api.deepseek.com\n SPRING_AI_DEEPSEEK_API_KEY: 'sk-xxx'\n SPRING_AI_DEEPSEEK_CHAT_ENABLED: \"false\"\n # deepseek-reasoner or deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_MODEL: deepseek-chat\n SPRING_AI_DEEPSEEK_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DEEPSEEK_EMBEDDING_ENABLED: \"false\"\n # openai\n # https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html\n SPRING_AI_OPENAI_BASE_URL: https://api.openai.com\n SPRING_AI_OPENAI_API_KEY: 'sk-xxx'\n SPRING_AI_OPENAI_CHAT_ENABLED: \"false\"\n SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o\n # SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL: gpt-4o-mini\n SPRING_AI_OPENAI_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_OPENAI_EMBEDDING_ENABLED: \"false\"\n # alibaba\n # 阿里云百炼大模型获取api key:\n # https://bailian.console.aliyun.com/?apiKey=1#/api-key\n # 阿里云百炼大模型模型列表:\n # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market\n SPRING_AI_DASHSCOPE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_BASE_URL: https://dashscope.aliyuncs.com\n SPRING_AI_DASHSCOPE_API_KEY: 'sk-xxx'\n SPRING_AI_DASHSCOPE_CHAT_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_MODEL: qwen-max\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TEMPERATURE: 0.7\n SPRING_AI_DASHSCOPE_CHAT_OPTIONS_TOP_P: 3\n SPRING_AI_DASHSCOPE_AUDIO_TRANSCRIPTION_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_IMAGE_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_ENABLED: \"false\"\n SPRING_AI_DASHSCOPE_EMBEDDING_OPTIONS_MODEL: text-embedding-v1\n SPRING_AI_DASHSCOPE_AUDIO_SYNTHESIS_ENABLED: \"false\"\n # siliconflow\n # https://siliconflow.com/\n # https://docs.spring.io/spring-ai/reference/api/chat/siliconflow-chat.html\n SPRING_AI_SILICONFLOW_BASE_URL: https://api.siliconflow.cn\n SPRING_AI_SILICONFLOW_API_KEY: 'sk-xxx'\n SPRING_AI_SILICONFLOW_CHAT_ENABLED: \"false\"\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_SILICONFLOW_CHAT_OPTIONS_TEMPERATURE: 0.7\n # gitee\n # https://ai.gitee.com/\n # https://ai.gitee.com/docs/best-practice/integration\n SPRING_AI_GITEE_BASE_URL: https://ai.gitee.com\n SPRING_AI_GITEE_API_KEY: 'sk-xxx'\n SPRING_AI_GITEE_CHAT_ENABLED: \"false\"\n SPRING_AI_GITEE_CHAT_OPTIONS_MODEL: Qwen/QwQ-32B\n SPRING_AI_GITEE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # tencent\n # https://console.cloud.tencent.com/hunyuan/start#\n # https://cloud.tencent.com/document/product/1729/111007\n SPRING_AI_TENCENT_BASE_URL: https://api.hunyuan.cloud.tencent.com\n SPRING_AI_TENCENT_API_KEY: 'sk-xxx'\n SPRING_AI_TENCENT_CHAT_ENABLED: \"false\"\n SPRING_AI_TENCENT_CHAT_OPTIONS_MODEL: hunyuan-t1-latest\n SPRING_AI_TENCENT_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # baidu\n # https://console.bce.baidu.com/iam/#/iam/apikey/list\n # https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\n SPRING_AI_BAIDU_BASE_URL: https://qianfan.baidubce.com/v2\n # model builder(可用)\n SPRING_AI_BAIDU_API_KEY: 'bce-v3/xxx'\n SPRING_AI_BAIDU_CHAT_ENABLED: \"false\"\n SPRING_AI_BAIDU_CHAT_OPTIONS_MODEL: ernie-x1-32k-preview\n SPRING_AI_BAIDU_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # volcengine 火山引擎\n # api key: https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D\n # https://www.volcengine.com/docs/82379/1330626\n SPRING_AI_VOLCENGINE_BASE_URL: https://ark.cn-beijing.volces.com/api/v3\n SPRING_AI_VOLCENGINE_API_KEY: 'sk-xxx'\n SPRING_AI_VOLCENGINE_CHAT_ENABLED: \"false\"\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_MODEL: doubao-1-5-pro-32k-250115\n SPRING_AI_VOLCENGINE_CHAT_OPTIONS_TEMPERATURE: 0.7\n \n # vector store\n SPRING_AI_VECTORSTORE_TYPE: elasticsearch\n # SPRING_AI_VECTORSTORE_TYPE: none \n \n # elasticsearch\n # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client\n # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties\n SPRING_ELASTICSEARCH_URIS: http://elasticsearch-bytedesk:9200\n SPRING_ELASTICSEARCH_USERNAME: elastic\n SPRING_ELASTICSEARCH_PASSWORD: bytedesk123\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_ENABLED: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INITIALIZE_SCHEMA: \"true\"\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_INDEX_NAME: bytedesk_vs_index\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_DIMENSIONS: 1024\n # cosine/l2_norm/dot_product\n SPRING_AI_VECTORSTORE_ELASTICSEARCH_SIMILARITY: cosine\n \n # mcp\n SPRING_AI_MCP_CLIENT_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_ENABLED: \"false\"\n SPRING_AI_MCP_SERVER_STDIO: \"false\"\n SPRING_AI_MCP_SERVER_TYPE: SYNC\n # weaviate\n SPRING_AI_VECTORSTORE_WEAVIATE_ENABLED: \"false\"\n # SPRING_MAIN_ALLOW_BEAN_DEFINITION_OVERRIDING: \"true\"\n # logging config\n LOGGING_LEVEL_COM_BYTEDESK_AI: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_CORE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_KBASE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SERVICE: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SOCIAL: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_WECHAT: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_SHOP: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TEAM: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_TICKET: DEBUG\n LOGGING_LEVEL_COM_BYTEDESK_STARTER: DEBUG\n # LOGGING_PATTERN_CONSOLE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_PATTERN_FILE: '[RID:%X{requestId} TRACEID:%X{traceId}] %clr(%d{$${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr($${LOG_LEVEL_PATTERN:%5p}) %clr($${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n$${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'\n # LOGGING_FILE_NAME: logs/bytedeskim.log\n # LOGGING_FILE_MAX_SIZE: 10MB\n # LOGGING_FILE_MAX_HISTORY: 5\n # wechat config\n WECHAT_PAY_ENABLED: \"false\"\n WECHAT_PAY_CERTPATH: ''\n # 阿里云短信服务的签名,可以在控制台找到,如是中文,请转为Unicode\n ALIYUN_SMS_SIGNNAME: ''\n #阿里云短信服务的模板Code,可以在控制台找到\n ALIYUN_SMS_TEMPLATECODE: ''\n # Artemis JMS 配置\n SPRING_ARTEMIS_MODE: embedded\n # SPRING_ARTEMIS_MODE: native\n SPRING_ARTEMIS_BROKER_URL: tcp://artemis-bytedesk:61616\n SPRING_ARTEMIS_USER: admin\n SPRING_ARTEMIS_PASSWORD: admin\n # SPRING_ARTEMIS_EMBEDDED_QUEUES: DLQ\n SPRING_JMS_CACHE_ENABLED: \"true\"\n # SPRING_JMS_LISTENER_CONCURRENCY: 3\n # SPRING_JMS_LISTENER_MAX_CONCURRENCY: 20\n # SPRING_JMS_LISTENER_ACKNOWLEDGE_MODE: client\n # SPRING_JMS_LISTENER_AUTO_STARTUP: \"true\"\n # SPRING_JMS_LISTENER_MAX_ATTEMPTS: 5\n # SPRING_JMS_LISTENER_INITIAL_INTERVAL: 1000\n # SPRING_JMS_LISTENER_MAX_INTERVAL: 10000\n # SPRING_JMS_LISTENER_MULTIPLIER: 2.0\n # SPRING_JMS_LISTENER_RECEIVE_TIMEOUT: 1000\n # SPRING_JMS_LISTENER_MISSING_QUEUES_FATAL: \"false\"\n # springdoc\n SPRINGDOC_SHOW_ACTUATOR: \"false\"\n # swagger-ui\n # http://服务器ip:9003/swagger-ui/index.html\n SPRINGDOC_SWAGGER_UI_ENABLED: \"false\"\n SPRINGDOC_SWAGGER_UI_PATH: /index.html\n # api-docs\n SPRINGDOC_API_DOCS_ENABLED: \"false\"\n SPRINGDOC_API_DOCS_PATH: /v3/api-docs\n # 百度翻译 https://fanyi-api.baidu.com/doc/21\n BYTEDESK_TRANSLATE_BAIDU_APPID: placeholder\n BYTEDESK_TRANSLATE_BAIDU_KEY: placeholder\n ports:\n - 9003:9003\n - 9885:9885\n volumes:\n - upload_data:/app/uploads\n - helpcenter_data:/app/helpcenter\n - blog_data:/app/blog\n - ../freeswitch/conf:/app/freeswitch/conf:ro\n networks:\n - bytedesk-network\n\nvolumes:\n mysql_data:\n name: bytedesk_mysql_data\n redis_data:\n name: bytedesk_redis_data\n elasticsearch_data:\n name: bytedesk_elasticsearch_data\n upload_data:\n name: bytedesk_upload_data\n helpcenter_data:\n name: bytedesk_helpcenter_data\n blog_data:\n name: bytedesk_blog_data\n artemis_data:\n name: bytedesk_artemis_data\n zipkin_data:\n name: bytedesk_zipkin_data\n minio_data:\n name: bytedesk_minio_data\n coturn_data:\n name: bytedesk_coturn_data\n freeswitch_data:\n name: bytedesk_freeswitch_data\n\nnetworks:\n bytedesk-network:\n driver: bridge\n"}}, "modules/ai/src/main/java/com/bytedesk/ai/springai/providers/tencent/SpringAITencentChatConfig.java": {"affe883cb26b5fd3e33902ae54e2bd31c3fa2ade": {"t": 1785809867.8234873, "n": 2641, "h": "63b0c9c9401c7a90", "c": "/*\n * @Author: jackning 270580156@qq.com\n * @Date: 2025-02-17 11:17:28\n * @LastEditors: jackning 270580156@qq.com\n * @LastEditTime: 2025-08-21 15:55:01\n * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk\n * Please be aware of the BSL license restrictions before installing Bytedesk IM – \n * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. \n * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE \n * contact: 270580156@qq.com \n * \n * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. \n */\npackage com.bytedesk.ai.springai.providers.tencent;\n\nimport org.springframework.ai.chat.client.ChatClient;\nimport org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;\nimport org.springframework.ai.openai.OpenAiChatModel;\nimport org.springframework.ai.openai.OpenAiChatOptions;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n/**\n * 腾讯混元大模型聊天配置\n * https://console.cloud.tencent.com/hunyuan/start#\n * https://cloud.tencent.com/document/product/1729/111007\n */\n@Configuration\n@ConditionalOnProperty(prefix = \"spring.ai.tencent.chat\", name = \"enabled\", havingValue = \"true\", matchIfMissing = false)\npublic class SpringAITencentChatConfig {\n\n @Value(\"${spring.ai.tencent.base-url:https://api.hunyuan.cloud.tencent.com}\")\n private String baseUrl;\n\n @Value(\"${spring.ai.tencent.api-key:sk-xxx}\")\n private String apiKey;\n\n @Value(\"${spring.ai.tencent.chat.options.model:hunyuan-t1-latest}\")\n private String model;\n\n @Value(\"${spring.ai.tencent.chat.options.temperature:0.7}\")\n private Double temperature;\n\n @Bean(\"tencentChatOptions\")\n OpenAiChatOptions tencentChatOptions() {\n return OpenAiChatOptions.builder()\n .baseUrl(baseUrl)\n .apiKey(apiKey)\n .model(model)\n .temperature(temperature)\n .build();\n }\n\n @Bean(\"tencentChatModel\")\n OpenAiChatModel tencentChatModel() {\n return OpenAiChatModel.builder()\n .options(tencentChatOptions())\n .build();\n }\n\n @Bean(\"tencentChatClient\")\n ChatClient tencentChatClient() {\n return ChatClient.builder(tencentChatModel())\n .defaultOptions(tencentChatOptions().mutate())\n .defaultAdvisors(new SimpleLoggerAdvisor())\n .build();\n }\n\n} "}}}} |