Files
rag-local/kb/consts/consts.go
T
2026-08-12 12:17:36 +08:00

66 lines
4.6 KiB
Go
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.
package consts
// 向量与检索参数
const (
DefaultEmbeddingDim = 1024 // embedding 默认维度(未配置时)
VectorTopK = 20 // 向量检索召回数
FtsTopK = 20 // 全文检索召回数
HybridTopK = 5 // 混合检索最终返回数(重排+门槛过滤后)
RrfK = 60 // RRF 融合常数
RerankTopK = 10 // 喂给 LLM 重排器的候选数(RRF 融合后截取;数据集可覆盖)
RerankKeepRatio = 0.5 // 重排分低于最高分该比例的条目剔除(门槛作用在语义分上,RRF 分因区间过窄无区分度)
RerankMinScore = 6 // 重排分绝对下限:低于该分的条目直接剔除(重排器对泛化条款会给宽松低分,需绝对下限兜底)
RerankMaxChars = 300 // 重排候选段截断字数(16GB 机器 prompt 预算护栏,见 MaxRerankTopK 注释)
RerankMaxTokens = 1024 // 重排输出 token 上限:打分 JSON 实际 <100 token,余量防思考链失控长文(Qwen3.5 思考文本会混入 content
// 数据集召回数量配置(vec_top_k/fts_top_k/rerank_top_k/recall_top_k):0=用上方全局默认,-1=尽量多,>0=固定值
MaxRecallTopK = 50 // 四个配置字段的统一上限
MaxRecallRawTopK = 100 // 原始召回(向量/全文)"-1=尽量多"的保护上限
MaxRerankTopK = 6 // 重排候选 "-1=尽量多"的保护上限。16GB 机器 prefill 预算:实测 1.54MB/token
// oMLX target≈10.98GBceiling 12.2×0.9),chat 5.9GB+BGE-M3 2.1GB 常驻后 current≈9.7GBevict 后≈8.1GB
// 可用 transient 仅 ~2.9GB≈1900 token。6 候选×300 字≈1200 token 落在预算内;60 候选会触发 throttle 后挂起
MaxRecallChars = 50000 // 最终返回 "-1=不限制数量"时的总字符物理保护(按相关性门槛过滤后仍超预算则按分截断)
CitationMaxChars = 400 // 主回答系统提示单条引用资料截断字数(同受 16GB prefill 预算约束)
DefaultChunkSize = 800 // 分块最大字数(数据集默认值)
DefaultChunkOverlap = 150 // 分块重叠字数(数据集默认值)
// 智能体(ReAct)参数
MaxReactRounds = 10 // ReAct 轮次上限
ToolResultMaxChars = 400 // search 工具返回的单条 chunk 截断字数(16GB 机器 prefill 预算护栏,见 MaxRerankTopK 注释)
ParsePollIntervalSeconds = 15 // 解析/标注任务轮询间隔
DefaultLlmHttpTimeout = 600 // LLM HTTP 客户端超时(秒):本地模型生成慢,且多请求排队时响应可超分钟级
MaxExtractTokens = 24576 // 知识抽取单次生成预算(思考链+JSON;24576≈实测自然输出 20 倍,4 并发下不超 131072 共享上下文)
EmbedBatchSize = 16 // 单次向量化请求的文本批量
// 合同标注参数
AnnoRecallTopK = 15 // 每数据集向量+FTS 各召回数(标注宁滥毋缺,放宽召回)
AnnoMaxCandidates = 60 // 多数据集融合后的候选上限(喂给 LLM 判定)
AnnoMaxClauseChars = 2000 // 合同条款全文上限(超长截断,控制 prompt)
// 生成预算=思考链+JSON:实测判定自然输出仅 ~1.1k token,24576 留 20 倍余量(截断物理上不可能);
// 且 4 并发×(prompt≤3k+24.5k)≈110k ≤ 131072 共享上下文,更高值(如 32768)会触发并发拒收
AnnoJudgeMaxTokens = 24576 // 判定输出 token 上限(JSON 结果含 ≤3 条风险)
AnnoJudgeCandidateChars = 300 // 判定 prompt 单候选条文截断字数(精确条文文本由 ContentFull 抽取,不依赖 prompt 全文)
AnnoJudgePromptBudget = 1500 // 判定 prompt 候选块总字数预算(候选按 RRF 相关度降序贪心填充,超预算截断后续候选)
// 合同风险识别
RiskLevelHigh = "high" // 高风险(违反强制性规定、可能导致合同无效/赔偿)
RiskLevelMid = "mid" // 中风险(约定与法律不符但可补救)
RiskLevelLow = "low" // 低风险(表述瑕疵/建议性提示)
RiskMaxPerClause = 3 // 单条款风险点上限(控制 prompt 与展示)
AnnoCandidateMaxChars = 2000 // 风险判定候选条文内容上限(需覆盖整 chunk,chunk 由多条短条文合并而成,截断会切掉块尾条文)
// 协程池默认大小(config.yml pool 段缺失时兜底)
KgExtractPoolSize = 4 // 知识图谱:逐 chunk LLM 抽取
AnnotationClausePoolSize = 4 // 合同标注:逐条款 (recall+judge)
AnnotationDatasetPoolSize = 8 // 条款内:逐 dataset 召回
ChatPoolSize = 4 // 问答:retrieve 与 GraphEnhance 并行
ChatRetrievePoolSize = 4 // 检索:vec 与 fts 并行
)