Files
smartmate/backend/config.example.yaml
Losita dd6638f8db Version: 0.9.24.dev.260416
后端:
1. Memory 预取缓存改为会话级隔离 + 管理面自动失效 + 空检索清理
- 预取缓存 key 从 smartflow:memory_prefetch:{userID} 改为 smartflow:memory_prefetch:u:{userID}:c:{chatID},隔离不同会话的记忆上下文,避免会话间互相覆盖
- 新增 DeleteMemoryPrefetchCacheByUser 方法,使用 SCAN+UNLINK 按模式批量删除指定用户所有会话的预取缓存
- ItemRepo 四个变更方法(SoftDeleteByID / RestoreByIDAt / UpdateManagedFieldsByIDAt / UpdateStatusByIDAt)通过 Model 携带 UserID,使 GORM cache deleter 可精准定位用户
- GormCachePlugin 将 MemoryItem 从忽略列表移至主动处理,新增 invalidMemoryPrefetchCache 异步失效方法
- 后台检索返回空结果时主动清除该用户所有预取缓存,避免过期记忆残留
2. 修复 RAG 召回未过滤 deleted 状态记忆的严重 bug
- MemoryCorpus.BuildRetrieveFilter 新增 status="active" 硬过滤,Milvus 向量检索直接排除已删除/已归档记忆
- 此前删除记忆后即使 MySQL 标记为 deleted,Milvus 中向量仍可被语义召回并注入 prompt
前端:无
仓库:无
2026-04-16 23:33:38 +08:00

207 lines
6.3 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# SmartFlow 后端配置示例
#
# 使用说明:
# 1. 请复制为 config.yaml 后再按实际环境填写。
# 2. 示例文件强调“结构清晰”和“字段语义明确”,不是生产推荐值。
# 3. 若你只想看 memory 相关配置,优先看本文件下半部分的 memory / rag / websearch 段。
# 服务启动与 HTTP 行为。
server:
# HTTP 监听端口。
port: 8080
# gin 运行模式debug / release。
mode: debug
# 单次请求默认超时时间。
timeout: 30s
# MySQL 主库配置。
database:
host: localhost
port: 3306
user: smartflow_user
password: "put_your_database_password_here"
dbname: "put_your_database_name_here"
charset: utf8mb4
parseTime: true
loc: Local
# 登录态与鉴权令牌配置。
jwt:
accessSecret: "put_your_jwt_access_secret_here"
refreshSecret: "put_your_jwt_refresh_secret_here"
# access token 有效期,面向接口鉴权。
accessTokenExpire: 15min
# refresh token 有效期,面向续签。
refreshTokenExpire: 7d
# 应用日志输出配置。
log:
level: info
path: logs/
# Redis 缓存与轻量状态存储。
redis:
host: localhost
port: 6379
password: ""
db: 0
# Kafka outbox 事件总线配置。
kafka:
enabled: true
brokers:
- "localhost:9092"
topic: "smartflow.agent.outbox"
groupID: "smartflow-agent-outbox-consumer"
retryScanInterval: 1s
retryBatchSize: 100
maxRetry: 20
# 时间与学期边界配置。
time:
zone: "Asia/Shanghai"
# 学期开始日期,一定要设定为周一,以便于计算周数。
semesterStartDate: "2026-03-02"
# 学期结束日期,一定要设定为周日,确保最后一周完整。
semesterEndDate: "2026-07-19"
# 智能体模型与规划参数。
agent:
# 日常执行链路使用的主模型。
workerModel: "doubao-seed-2-0-code-preview-260215"
# 规划、拆解、策略推导使用的模型。
strategistModel: "doubao-seed-2-0-code-preview-260215"
# 模型服务根路径。
baseURL: "https://ark.cn-beijing.volces.com/api/v3"
# 日内并发优化并发度,建议按模型配额调整。
dailyRefineConcurrency: 7
# 周级跨天配平额度上限,防止过度调整。
weeklyAdjustBudget: 5
# 通用 RAG 配置。
rag:
# 总开关;关闭后不再走通用向量检索链路。
enabled: true
# 当前向量存储类型可选inmemory / milvus。
store: "milvus"
# 召回候选上限。
topK: 8
# 召回相似度阈值。
threshold: 0.55
retrieve:
# 单次检索超时时间,避免主链路长时间阻塞。
timeoutMs: 1500
ingest:
# 文档切块大小;过大影响召回精度,过小影响上下文完整度。
chunkSize: 400
# 相邻 chunk 重叠字符数。
chunkOverlap: 80
embed:
# embedding 供应商实现可选mock / eino。
provider: "eino"
# embedding 模型名。
model: "doubao-embedding-vision-251215"
# embedding 服务根路径API Key 统一从环境变量读取。
baseURL: "https://ark.cn-beijing.volces.com/api/v3"
timeoutMs: 1200
# 向量维度,必须与向量库 collection 配置一致。
dimension: 1024
reranker:
# 是否启用重排。
enabled: false
# 当前默认 noop后续可扩展。
provider: "noop"
milvus:
# Milvus REST 地址,不要填健康检查口。
address: "http://localhost:19530"
token: "root:Milvus"
dbName: ""
# 通用 RAG chunk collection。
collectionName: "smartflow_rag_chunks"
metricType: "COSINE"
requestTimeoutMs: 1500
# 记忆模块配置。
memory:
# memory 总开关;关闭后不做抽取、写入、召回、注入。
enabled: true
rag:
# 是否允许 memory 读写链路使用向量召回能力。
# 关闭后memory 里的“语义候选”会退回 MySQL 路径,不等于整个 memory 模块关闭。
enabled: true
read:
# 读取模式:
# 1. legacy旧读链路语义上是“RAG 优先,失败再走 legacy”。
# 2. hybrid新读链路先取强约束再补语义候选再统一去重/排序/预算裁剪。
# 3. 如果你想强制纯 MySQL 召回,建议同时设置 read.mode=legacy 且 memory.rag.enabled=false。
mode: legacy
# constraint 类型最大注入条数。
constraintLimit: 5
# preference 类型最大注入条数。
preferenceLimit: 5
# fact 类型最大注入条数。
factLimit: 5
# todo_hint 类型最大注入条数。
todoHintLimit: 3
inject:
# 注入渲染模式:
# flat 为旧扁平列表typed_v2 为按类型分段,便于模型区分“硬约束”和“参考事实”。
renderMode: flat
prompt:
# 留空表示走代码内默认抽取 prompt。
extract: ""
# 留空表示走代码内默认决策 prompt。
decision: ""
# memory 向量召回阈值。
threshold: 0.55
# 是否启用重排;当前默认关闭。
enableReranker: false
llm:
# 记忆抽取/决策使用的 LLM 随机度,默认尽量保守,提升可复现性。
temperature: 0.1
topP: 0.2
job:
# 异步记忆任务最大重试次数。
maxRetry: 6
worker:
# worker 轮询间隔。
pollEvery: 2s
# 单次认领任务数。
claimBatch: 1
decision:
# 决策层总开关。
# 开启后,写入链路会从”直接新增”升级成”召回旧记忆 -> 比对 -> 决策动作”。
enabled: true
# 决策层语义候选数上限。
candidateTopK: 5
# 决策层语义候选最低相似度阈值。
candidateMinScore: 0.6
# 决策流程整体失败时的降级策略:
# legacy_add退回旧路径直接新增
# drop直接丢弃本次写入
fallbackMode: legacy_add
write:
# 写入模式:
# legacy沿用旧写入路径
# decision启用决策式写入
# 注意:只有 decision.enabled=true 时,这个值才真正生效。
mode: legacy
# 写入最低置信度阈值,抽取结果 confidence 低于此值直接丢弃。
minConfidence: 0.5
# 联网搜索能力配置。
websearch:
# 可选mock | bocha。
provider: bocha
# 搜索供应商 API Keybocha 模式必填,否则会降级为 mock。
apiKey: ""
# 单次搜索请求超时。
timeout: 10s
# 单次 URL 抓取超时。
fetchTimeout: 15s
# 抓取正文最大字符数。
fetchMaxChars: 4000
rag:
# 是否把 websearch 结果继续送入 RAG 处理。
enabled: false