66 lines
4.6 KiB
Go
66 lines
4.6 KiB
Go
package consts
|
||
|
||
// 向量与检索参数
|
||
const (
|
||
DefaultEmbeddingDim = 1024 // embedding 默认维度(未配置时)
|
||
VectorTopK = 20 // 向量检索召回数
|
||
FtsTopK = 20 // 全文检索召回数
|
||
HybridTopK = 5 // 混合检索最终返回数(重排+门槛过滤后)
|
||
RrfK = 60 // RRF 融合常数
|
||
|
||
RerankTopK = 10 // 喂给 LLM 重排器的候选数(RRF 融合后截取;数据集可覆盖)
|
||
RerankKeepRatio = 0.5 // 重排分低于最高分该比例的条目剔除(门槛作用在语义分上,RRF 分因区间过窄无区分度)
|
||
RerankMinScore = 7 // 重排分绝对下限:低于该分的条目直接剔除(重排器对泛化条款会给宽松低分,需绝对下限兜底)
|
||
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.98GB(ceiling 12.2×0.9),chat 5.9GB+BGE-M3 2.1GB 常驻后 current≈9.7GB,evict 后≈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 并行
|
||
)
|