|
|
|
@ -2,6 +2,8 @@ package xyz.wbsite.ai;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
import dev.langchain4j.data.document.Document;
|
|
|
|
|
import dev.langchain4j.model.chat.request.ResponseFormat;
|
|
|
|
|
import dev.langchain4j.model.chat.request.ResponseFormatType;
|
|
|
|
|
import dev.langchain4j.model.openai.OpenAiChatModel;
|
|
|
|
|
import dev.langchain4j.model.openai.OpenAiEmbeddingModel;
|
|
|
|
|
import dev.langchain4j.model.openai.OpenAiStreamingChatModel;
|
|
|
|
@ -12,22 +14,72 @@ import java.util.List;
|
|
|
|
|
public class Helper {
|
|
|
|
|
|
|
|
|
|
private static OpenAiStreamingChatModel openAiStreamingChatModel = OpenAiStreamingChatModel.builder()
|
|
|
|
|
// openai地址
|
|
|
|
|
.baseUrl("http://192.168.88.106:11434/v1")
|
|
|
|
|
// 密钥
|
|
|
|
|
.apiKey("1")
|
|
|
|
|
//模型名称
|
|
|
|
|
.modelName("qwen2.5:0.5b")
|
|
|
|
|
// 主要用于控制生成文本的随机性和创造性。它常见于基于 Transformer 架构的生成模型(如 GPT、LLaMA 等)中,影响模型在预测下一个 token 时的概率分布
|
|
|
|
|
// 低 temperature(接近 0):模型会更倾向于选择概率最高的 token,生成的文本更确定性、保守,接近 “标准答案”。适合需要精确性的场景,如数学计算、事实性问答、代码生成。
|
|
|
|
|
// 高 temperature(如 1.0 或更高):模型会增加低概率 token 的选择机会,生成的文本更随机、多样,可能包含更多创意或意外内容。适合需要开放性、创造性的场景,如故事写作、诗歌生成、对话模拟。
|
|
|
|
|
// 调整概率分布的平滑度,创造性内容生成(如故事、诗歌)
|
|
|
|
|
.temperature(0.7)
|
|
|
|
|
// 替代温度采样(temperature sampling)的策略,主要用于限制模型生成时的词汇选择范围:
|
|
|
|
|
// 限制候选词的范围,精确性要求高的任务(如问答、摘要)
|
|
|
|
|
// 高精确性任务(如数学计算、代码生成、事实性问答):top_p = 0.7 ~ 0.8 限制候选词范围,减少模型编造错误信息的可能性。
|
|
|
|
|
// 创造性任务(如故事创作、对话生成、诗歌): top_p = 0.9 ~ 0.95 保留更多可能性,让生成内容更具多样性和创新性。
|
|
|
|
|
// top_p = 0.0:无意义(无法选择任何词)。
|
|
|
|
|
// top_p = 1.0:等同于禁用 top_p,与贪婪采样(greedy search)效果相同
|
|
|
|
|
.topP(1.0)
|
|
|
|
|
// 限制单次调用生成的最大 token 数量。仅针对模型生成的回复(completion),不包括输入的提示词(prompt)。
|
|
|
|
|
.maxCompletionTokens(2028)
|
|
|
|
|
// 限制整个对话的最大 token 数量,包括输入的提示词和生成的回复
|
|
|
|
|
.maxTokens(4096)
|
|
|
|
|
// frequencyPenalty 的作用
|
|
|
|
|
// 惩罚高频词汇:当模型在生成过程中多次使用某个词汇时,frequencyPenalty 会降低该词汇再次被选中的概率。
|
|
|
|
|
// 提高多样性:鼓励模型使用同义词或不同表达方式,避免文本重复、冗余。
|
|
|
|
|
// 数学原理:在采样时,对已出现词汇的概率进行如下调整:
|
|
|
|
|
// 参数取值范围通常为 -2.0 到 2.0 之间的浮点数。
|
|
|
|
|
// 负值:增加重复的可能性(使生成更集中)。
|
|
|
|
|
// 零值:不施加惩罚(默认行为)。
|
|
|
|
|
// 正值:减少重复(使生成更多样化)。
|
|
|
|
|
// 典型应用场景
|
|
|
|
|
// 场景 建议设置 效果说明
|
|
|
|
|
// 精确性任务 frequencyPenalty =0~0.3
|
|
|
|
|
// 创造性写作 frequencyPenalty = 0.5~1.0 避免词汇重复,使故事、诗歌更生动。
|
|
|
|
|
// 对话生成 frequencyPenalty = 0.7~1.0 防止机器人重复使用相同话术,增强自然度。
|
|
|
|
|
// 技术文档 / 代码生成 frequencyPenalty = 0 保留专业术语的一致性,避免不必要的替换。
|
|
|
|
|
// 长文本生成 frequencyPenalty = 0.3~0.7 减少长段落中的重复表述。
|
|
|
|
|
.frequencyPenalty(0.0)
|
|
|
|
|
// 惩罚已出现的主题 当模型在生成过程中多次提及某个主题(如人物、事件、概念)时,presencePenalty 会降低该主题相关词汇再次被选中的概率。
|
|
|
|
|
// 鼓励引入新内容:与 frequencyPenalty(惩罚词汇重复)不同,presencePenalty 更关注主题层面的多样性,避免模型围绕同一主题反复阐述。
|
|
|
|
|
// 范围:通常为 -2.0 到 2.0 之间的浮点数。
|
|
|
|
|
// 负值:增加重复主题的可能性(使生成更聚焦)。
|
|
|
|
|
// 零值:不施加惩罚(默认行为)。
|
|
|
|
|
// 正值:减少重复主题(使生成更多样化)。
|
|
|
|
|
.presencePenalty(0.0)
|
|
|
|
|
// 不太确定以下是否都正确,字段要求小写
|
|
|
|
|
// text
|
|
|
|
|
// json_object
|
|
|
|
|
// b64_json
|
|
|
|
|
.responseFormat("text")
|
|
|
|
|
// 请求日志
|
|
|
|
|
.logRequests(true)
|
|
|
|
|
// 响应日志
|
|
|
|
|
.logResponses(true)
|
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
private static OpenAiChatModel openAiChatModel = OpenAiChatModel.builder()
|
|
|
|
|
private static OpenAiChatModel openAiChatModel = OpenAiChatModel.builder()
|
|
|
|
|
.baseUrl("http://192.168.88.106:11434/v1")
|
|
|
|
|
.apiKey("1")
|
|
|
|
|
.timeout(Duration.ofSeconds(120))
|
|
|
|
|
.modelName("deepseek-r1:1.5b")
|
|
|
|
|
.modelName("qwen2.5:0.5b")
|
|
|
|
|
.maxTokens(4096)
|
|
|
|
|
.timeout(Duration.ofMinutes(50))
|
|
|
|
|
.responseFormat("json")
|
|
|
|
|
.logRequests(true)
|
|
|
|
|
.logResponses(true)
|
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
private static OpenAiEmbeddingModel openAiEmbeddingModel = OpenAiEmbeddingModel.builder()
|
|
|
|
|
.baseUrl("http://192.168.88.106:11434/v1")
|
|
|
|
|
.apiKey("1")
|
|
|
|
@ -36,13 +88,13 @@ public class Helper {
|
|
|
|
|
.logResponses(true)
|
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
private static OpenAiChatModel toolChatModel = OpenAiChatModel.builder()
|
|
|
|
|
private static OpenAiChatModel toolChatModel = OpenAiChatModel.builder()
|
|
|
|
|
.baseUrl("http://192.168.88.106:11434/v1")
|
|
|
|
|
.apiKey("1")
|
|
|
|
|
.modelName("qwen2.5:0.5b")
|
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
private static OpenAiChatModel gemmaModel = OpenAiChatModel.builder()
|
|
|
|
|
private static OpenAiChatModel gemmaModel = OpenAiChatModel.builder()
|
|
|
|
|
.baseUrl("http://192.168.88.106:11434/v1")
|
|
|
|
|
.apiKey("1")
|
|
|
|
|
.modelName("gemma3:4b")
|
|
|
|
|