application.yml.example 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. server:
  2. port: 2438
  3. rag:
  4. ai-bridge:
  5. enabled: ${RAG_AI_BRIDGE_ENABLED:false}
  6. timeout: ${RAG_AI_BRIDGE_TIMEOUT:300s}
  7. # Python 子进程管理(由 Java 启动并注入 LLM 环境变量,LLM 配置统一从 spring.ai.openai.* 读取)
  8. host: ${RAG_AI_BRIDGE_HOST:127.0.0.1}
  9. port: ${RAG_AI_BRIDGE_PORT:18733}
  10. python-path: ${RAG_AI_BRIDGE_PYTHON_PATH:python}
  11. script-path: ${RAG_AI_BRIDGE_SCRIPT_PATH:rag-ai-bridge/server.py}
  12. startup-timeout: ${RAG_AI_BRIDGE_STARTUP_TIMEOUT:60}
  13. health-check-interval: ${RAG_AI_BRIDGE_HEALTH_CHECK_INTERVAL:60}
  14. skill:
  15. # Skill 文件存放目录,请修改为你的实际路径
  16. # 该目录下的每个子目录被视为一个 Skill,子目录内应包含 SKILL.md
  17. base-path: ${SKILL_BASE_PATH:./uploads/skills}
  18. # JSON 文件存储目录(配置类数据:ai_model / tags / categories / workflows)
  19. app:
  20. json-store-dir: ${JSON_STORE_DIR:./data/json}
  21. # ========== 错误模式嗅探(智能体节点失败兜底识别) ==========
  22. # 启动时若数据文件为空,自动写入以下内置模式;用户自定义后不会被覆盖。
  23. # 通过"重置为默认"可清空自定义 + 重新启用全部内置模式。
  24. # pattern 字段:子串匹配、大小写不敏感;建议保持粒度适中,过短易误报。
  25. error-pattern:
  26. builtin:
  27. - name: LLM SDK 重试耗尽
  28. pattern: API call failed after
  29. description: OpenAI SDK 重试耗尽仍未成功,通常是限流或下游故障
  30. - name: HTTP 4xx 客户端错误
  31. pattern: HTTP 4
  32. description: LLM 服务返回 4xx(含 429 限流、401 鉴权、400 参数等)
  33. - name: HTTP 5xx 服务端错误
  34. pattern: HTTP 5
  35. description: LLM 服务返回 5xx,服务端临时故障
  36. - name: Rate Limit(英文)
  37. pattern: rate limit
  38. description: OpenAI 兼容服务的标准限流错误
  39. - name: OpenAI 配额耗尽
  40. pattern: insufficient_quota
  41. description: OpenAI 标准配额耗尽错误码
  42. - name: 额度 / 配额
  43. pattern: quota
  44. description: 额度耗尽类错误(中英文 quota 关键词)
  45. - name: OpenAI 鉴权失败
  46. pattern: invalid_api_key
  47. description: OpenAI 标准鉴权失败错误码
  48. - name: 认证失败(英文)
  49. pattern: invalid api key
  50. description: API Key 无效或被吊销
  51. - name: 认证失败(中文)
  52. pattern: 无效的 api
  53. description: 中文鉴权失败描述(兼容智谱等中文错误消息)
  54. - name: 上下文超限(英文)
  55. pattern: context_length_exceeded
  56. description: 输入超过模型上下文窗口
  57. - name: 上下文超限(中文)
  58. pattern: 上下文长度
  59. description: 中文上下文超限描述
  60. - name: 模型不存在
  61. pattern: model_not_found
  62. description: 指定的模型标识不存在或无权访问
  63. - name: OpenAI 服务端错误
  64. pattern: server_error
  65. description: OpenAI 标准 5xx 错误码
  66. - name: Anthropic 过载
  67. pattern: overloaded_error
  68. description: Anthropic 服务过载错误码
  69. - name: 智谱限流(具体)
  70. pattern: 该模型当前访问量过大
  71. description: 智谱 AI glm 系列特定限流描述
  72. - name: 通用中文限流
  73. pattern: 请稍后重试
  74. description: 通用中文限流提示(含 QPS/并发限制等场景)
  75. - name: 通用中文系统繁忙
  76. pattern: 系统繁忙
  77. description: 服务端繁忙类错误(多见于国内 LLM 服务)
  78. - name: 通用中文请求失败
  79. pattern: 请求失败
  80. description: 通用请求失败描述(兜底捕获)
  81. - name: 网络连接拒绝
  82. pattern: connection refused
  83. description: 下游服务不可达(连接被拒绝)
  84. - name: 网络超时
  85. pattern: connection timeout
  86. description: 下游服务响应超时
  87. - name: ECONNREFUSED
  88. pattern: ECONNREFUSED
  89. description: Node.js / Python HTTP 客户端的连接拒绝错误码
  90. - name: ETIMEDOUT
  91. pattern: ETIMEDOUT
  92. description: HTTP 客户端的连接超时错误码
  93. - name: Socket 挂起
  94. pattern: socket hang up
  95. description: HTTP 连接被对端中途切断
  96. - name: JSON 解析失败
  97. pattern: unexpected token
  98. description: LLM 返回非合法 JSON(结构化输出场景)
  99. - name: 工具调用失败(英文)
  100. pattern: tool call failed
  101. description: Agent 工具调用抛出异常
  102. # ========== 知识库子系统 ==========
  103. kb:
  104. # 总开关:false 时所有 kb 接口返回 503(运维应急降级用)
  105. enabled: ${KB_ENABLED:true}
  106. upload-dir: ${KB_UPLOAD_DIR:./uploads/kb}
  107. max-file-size: 52428800 # 50MB
  108. chunk-size: 1000
  109. chunk-overlap: 200
  110. allowed-mime-types:
  111. - application/pdf
  112. - application/vnd.openxmlformats-officedocument.wordprocessingml.document
  113. - application/msword
  114. - application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
  115. - application/vnd.ms-excel
  116. - application/vnd.openxmlformats-officedocument.presentationml.presentation
  117. - application/vnd.ms-powerpoint
  118. - text/plain
  119. - text/markdown
  120. - text/html
  121. # Milvus 向量库(文档向量化)
  122. milvus:
  123. enabled: ${MILVUS_ENABLED:true}
  124. # Java SDK 使用 gRPC 连接 Milvus Lite,不要加 http:// 前缀
  125. # 本地 Milvus Lite 默认 gRPC 地址:127.0.0.1:19530
  126. # HTTP REST 端口是 9091,不要混用
  127. host: ${MILVUS_HOST:127.0.0.1}
  128. port: ${MILVUS_PORT:19530}
  129. collection: ${MILVUS_COLLECTION:kb_documents}
  130. vector-dimension: 1024
  131. # 本地 Embedding Bridge(稠密+稀疏向量、三级分块、Leaf-only 存储)
  132. # 使用前需安装依赖: pip install -r backend/embedding-bridge/requirements.txt
  133. # 首次运行会自动下载 HuggingFace 模型(约 2GB)
  134. embedding-bridge:
  135. enabled: ${EMBEDDING_BRIDGE_ENABLED:true}
  136. host: ${EMBEDDING_BRIDGE_HOST:127.0.0.1}
  137. port: ${EMBEDDING_BRIDGE_PORT:18732}
  138. python-path: ${EMBEDDING_BRIDGE_PYTHON_PATH:python}
  139. script-path: ${EMBEDDING_BRIDGE_SCRIPT_PATH:embedding-bridge/server.py}
  140. startup-timeout: 120
  141. health-check-interval: 5
  142. http-timeout: 600000
  143. # 访问令牌(为空时自动生成临时 token)
  144. auth-token: ${EMBEDDING_BRIDGE_AUTH_TOKEN:}
  145. # 本地 HuggingFace 嵌入模型
  146. embedding-model: ${EMBEDDING_MODEL:BAAI/bge-m3}
  147. embedding-device: ${EMBEDDING_DEVICE:cpu}
  148. dense-embedding-dim: ${DENSE_EMBEDDING_DIM:1024}
  149. # 三级分块叶子节点参数(L1/L2 按比例放大)
  150. chunk-size: ${EMBEDDING_CHUNK_SIZE:800}
  151. chunk-overlap: ${EMBEDDING_CHUNK_OVERLAP:100}
  152. # ========== SQL Console(结构化数据源管理) ==========
  153. sql-console:
  154. query-timeout-seconds: 30
  155. max-rows: 10000
  156. forbidden-system-schemas:
  157. - information_schema
  158. - mysql
  159. - sys
  160. - performance_schema
  161. - pg_catalog
  162. # ========== 知识图谱(Neo4j) ==========
  163. neo4j:
  164. # 默认值仅供表单预填,实际连接信息存 GraphSource 表(密码 Jasypt 加密)
  165. # ⚠️ 请改为你的 Neo4j 实例地址与凭据
  166. default-uri: ${NEO4J_URI:bolt://localhost:7687}
  167. default-user: ${NEO4J_USER:neo4j}
  168. default-password: ${NEO4J_PASSWORD:YOUR_NEO4J_PASSWORD_HERE}
  169. # 查询安全
  170. query-timeout-seconds: 30
  171. max-nodes: 1000
  172. max-edges: 2000
  173. # 工作流运行目录(永久保留,包含每次运行的文件)
  174. workflow:
  175. run-dir: ${WORKFLOW_RUN_DIR:./data/workflow-runs}
  176. # LLM 类节点(llm / smartAction / agent / hermesAgent / hermesSmartAction)输出提取的全局默认重试策略
  177. # 节点 data 中可声明同名字段覆盖此处默认值(详见 RetryPolicy.fromNodeData)
  178. # 双层重试模型:
  179. # runtime-max-retries - 运行异常(限流/超时)时重新完整推理
  180. # format-max-retries - 格式错误(中文键名/字段缺失/类型不匹配)时仅重组 JSON,不重跑业务
  181. llm:
  182. retry:
  183. runtime-max-retries: 2
  184. format-max-retries: 2
  185. retry-on-parse-error: true
  186. retry-on-missing-required: true
  187. retry-on-type-mismatch: true
  188. retry-on-key-name-mismatch: true
  189. spring:
  190. datasource:
  191. # H2 仅保留运行日志(workflow_run / workflow_run_node)
  192. url: jdbc:h2:file:./data/agent-runs
  193. driver-class-name: org.h2.Driver
  194. username: sa
  195. password:
  196. jpa:
  197. hibernate:
  198. ddl-auto: update
  199. show-sql: false
  200. h2:
  201. console:
  202. enabled: false
  203. servlet:
  204. multipart:
  205. # 单次上传文件大小上限(工作流运行时上传场景)
  206. max-file-size: 50MB
  207. max-request-size: 50MB
  208. # 排除 Spring AI Milvus 自动配置,由本项目 MilvusConfig 按 app.milvus.enabled 控制
  209. autoconfigure:
  210. exclude:
  211. - org.springframework.ai.vectorstore.milvus.autoconfigure.MilvusVectorStoreAutoConfiguration
  212. ai:
  213. openai:
  214. # LLM 服务地址,默认指向智谱 AI(兼容 OpenAI 协议)
  215. # 可改为其他兼容服务(如 DeepSeek、Moonshot 等)
  216. base-url: https://open.bigmodel.cn/api/coding/paas/v4
  217. # ⚠️ 请填入你的智谱 AI API Key
  218. # 获取地址:https://open.bigmodel.cn/
  219. # 该 Key 同时用于:1) Spring AI 直接调用 LLM 节点 2) Hermes Bridge 子进程(hermes.bridge.llm-api-key 为空时回退到此)
  220. api-key: ${OPENAI_API_KEY:YOUR_ZHIPU_API_KEY_HERE}
  221. chat:
  222. completions-path: /chat/completions
  223. options:
  224. # 模型名称需与 base-url 对应服务一致
  225. model: glm-5.2
  226. temperature: 0.3
  227. # 智谱 embedding-2(已弃用,文档向量化现由本地 Embedding Bridge 完成)
  228. # 保留本配置仅为兼容 Spring AI EmbeddingModel bean 创建
  229. embedding:
  230. options:
  231. model: embedding-2
  232. # 外部 API(/api/v1/**)配置
  233. # 第三方系统通过 X-API-Key 鉴权后调用工作流,详见 docs/specs/external-workflow-api-spec.md
  234. external:
  235. api:
  236. enabled: ${EXTERNAL_API_ENABLED:true}
  237. keys:
  238. - key: ${EXTERNAL_API_KEY_1:}
  239. workflow-ids: [] # 留空表示不限制;填 [12, 15] 表示仅允许调用这两个工作流
  240. # Hermes Agent 执行引擎配置
  241. # 启用后 agent / smartAction 节点将委托 Hermes Bridge(Python AIAgent)执行,
  242. # 获得 40+ 工具(终端、浏览器、搜索等)与 Skill 系统的实际执行能力。
  243. # 使用前需安装: pip install -r hermes-bridge/requirements.txt
  244. # 关闭后 agent / smartAction 节点将退化为 LLM 节点(仅文本对话,无工具能力)
  245. hermes:
  246. enabled: ${HERMES_ENABLED:true}
  247. bridge:
  248. port: ${HERMES_BRIDGE_PORT:18731}
  249. # Python 可执行文件路径(Windows 可能需要改为 python)
  250. python-path: ${HERMES_PYTHON_PATH:python}
  251. # Bridge 脚本路径(相对于项目根目录)
  252. script-path: ${HERMES_SCRIPT_PATH:hermes-bridge/hermes_bridge.py}
  253. # Bridge 启动超时(秒)
  254. startup-timeout: 30
  255. # 健康检查间隔(秒),0 表示不检查
  256. health-check-interval: 60
  257. # 节点未显式配置时使用的最大工具调用轮次(默认 100)
  258. # 复杂 Skill(多步工具调用)需要较大值,过小会导致「工具调用次数已达上限」错误
  259. default-max-iterations: 100
  260. # Bridge 子进程使用的 LLM API Key(与前端 LLM 节点隔离)
  261. # 为空时回退到 spring.ai.openai.api-key
  262. llm-api-key: ${HERMES_BRIDGE_LLM_API_KEY:}
  263. # Bridge HTTP 端点访问令牌(X-Bridge-Token 头校验)
  264. # 为空时启动会生成临时 token(推荐显式设置 32+ 字符随机字符串)
  265. auth-token: ${HERMES_BRIDGE_AUTH_TOKEN:}
  266. # 固定 HERMES_HOME 目录(其下 skills 由 Java 侧自动镜像同步,skill_view/skills_list 从此加载)
  267. # 相对路径基于后端工作目录;Bridge 子进程启动时通过 --hermes-home 传入,进程内不变
  268. home: ${HERMES_HOME:./data/hermes-home}
  269. # Jasypt 加密(数据源凭据加密入库)
  270. # ⚠️ 生产环境务必通过环境变量 JASYPT_KEY 设置强随机密钥,不要使用默认值
  271. jasypt:
  272. encryptor:
  273. password: ${JASYPT_KEY:dev-only-key-replace-me-in-prod}