【开发日记】LLM开发中的一些参数设置
MaxTokens 和 MaxContexts设置问题
场景 | 输入 tokens 估算 | 推荐 max_new_tokens | 原因 |
---|---|---|---|
🔹 简单问答 / 聊天 | ~512 tokens | 8192 | 输入少,可留足输出空间,适合生成长回答 |
🔹 RAG(检索增强) | ~16,000 tokens(长文档) | 4096 ~ 8192 | 输入占大头,输出需精简(如摘要) |
🔹 代码生成 | ~4096 tokens(上下文代码) | 8192 | 生成函数或模块可能较长 |
🔹 摘要任务 | ~30,000 tokens(整篇论文) | 512 ~ 1024 | 输入几乎占满,只能生成短摘要 |
🔹 对话历史较多 | ~10,000 tokens(多轮对话) | 4096 | 平衡输入与输出 |
Top-k 和 SimilarityThreshold
Top-K: 控制文本生成过程中的解码多样性
- 推荐取值设置
- 小(10~20), 输出更确定、保守,可能重复。
- 中等(40~50),平衡创造性和稳定性,通用生成任务
- 大(100+~), 更多样、有创意,但可能不连贯。适用于创作、故事生成。
SimilarityThreshold: 控制向量检索(RAG)中的语义相关性过滤
- 基于RAG,similarityThreshold是一个用于过滤检索结果的最小语义相似得分,只有相似度高于该阈值的文档片段才会被送入LLM
- 常见相似指标
- 余弦相似度:[-1, 1], 通常大于0.6认为相关
- 点积相似度:未归一化,依赖向量长度
- 余弦相似度推荐值: 阈值大于0.9可能导致无结果返回;太低则会引入噪声,影响生成质量。
- <0.4, 通常视为不相关, 不推荐
- 0.4 < x < 0.6, 宽松匹配,可能包含噪声。多义词、模糊查询
- 0.6 < x < 0.8, 平衡相关性与召回率, 通用知识库、企业FAQ
- x > 0.8, 专业问答、法律、医疗
segmentMaxTokens
segmentMaxTokens是一个常见于文本分开(Text chunking)或文档分割(Document Segmentation)阶段的参数。用于预处理阶段控制每个文本片段的最大长度
- 定义: segmentMaxTokens,指在将长文本(如文档、网页、书籍)切分为多个片段(segments/chunks)时,每个片段最多包含的Token数量
- 为什么需要segmentMaxTokens
- LLM和嵌入模型(Embedding Model)都有上下文限制。Qwen3, maxTokens: 32,768 tokens, 大多数embedding模型,仅支持512~8196tokens。
- 实际文档(如PDF报告、维基百科文章等)可能长达数万甚至数十万tokens。因此必须切分为小段。以便”能被嵌入模型编码,用于向量化和检索;在RAG中作为上下文输入给LLM; 提高检索精度“
- 推荐取值
- 通用问答/RAG, 512~1024, 平衡语义完整性与检索精度
- 代码检索, 256~512, 函数/类级别粒度更合适
- 长文档摘要, 2048~4096, 保留更多上下文结构
- 多跳推理, 1024 ~ 2048,需要跨句逻辑关联
- 轻量设备推理, 256 ~ 512,节省内存和计算资源。