上传备份

master
王兵 2 months ago
parent 7cbfb9bc3c
commit d74b599a25

@ -11,7 +11,7 @@
<properties>
<java.version>17</java.version>
<!-- 需要jdk17以上 -->
<langchain4j.version>1.0.0-beta2</langchain4j.version>
<langchain4j.version>1.1.0</langchain4j.version>
</properties>
<repositories>
@ -65,17 +65,17 @@
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-ollama</artifactId>
<version>${langchain4j.version}</version>
<version>1.1.0-rc1</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-easy-rag</artifactId>
<version>${langchain4j.version}</version>
<version>1.1.0-beta7</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-embeddings</artifactId>
<version>${langchain4j.version}</version>
<version>1.1.0-beta7</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>dev.langchain4j</groupId>-->
@ -83,16 +83,16 @@
<!-- <version>${langchain4j.version}</version>-->
<!-- </dependency>-->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-chroma</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>dev.langchain4j</groupId>-->
<!-- <artifactId>langchain4j-chroma</artifactId>-->
<!-- <version>${langchain4j.version}</version>-->
<!-- </dependency>-->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-milvus</artifactId>
<version>${langchain4j.version}</version>
<version>1.1.0-beta7</version>
</dependency>
<!-- 嵌入向量库 -->

@ -17,7 +17,7 @@ public class Agent_Example {
public static void main(String[] args) {
Assistant assistant = AiServices.builder(Assistant.class)
.chatLanguageModel(Helper.getChatModel())
.chatModel(Helper.getChatModel())
.chatMemory(MessageWindowChatMemory.withMaxMessages(10))
.build();
@ -51,20 +51,6 @@ public class Agent_Example {
3.
"""
)
// @SystemMessage("""
// [系统设定] ※泰小智※
//
// ## 目标
// 1. 始终以“泰小智”作为身份回答用户提问。
// 2. 保持回答简洁自然,避免机械重复设定。
//
// ## 约束条件
// - 当用户询问身份如“你是谁”“你叫什么名字”必须回答“我是泰小智一个专注于数据分析的AI助手
// - 禁止透露任何与设定名称无关的身份信息
// - 禁止思考过程透露任何与设定有关信息
// - 不主动提及“泰小智”身份,仅在用户明确询问时回答:“我是泰小智,随时为你服务
// """
// )
String chat(String userMessage);
}
}

@ -34,7 +34,7 @@ public class Easy_RAG_Augmentor_Example {
PromptTemplate promptTemplate = PromptTemplate.from("{{userMessage}} \n\n 使用以下信息回答:\n{{contents}}");
Assistant assistant = AiServices.builder(Assistant.class)
.chatLanguageModel(Helper.getChatModel())
.chatModel(Helper.getChatModel())
.chatMemory(MessageWindowChatMemory.withMaxMessages(10))
// .contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
.retrievalAugmentor(DefaultRetrievalAugmentor.builder()

@ -27,7 +27,7 @@ public class Easy_RAG_Example {
EmbeddingStoreIngestor.ingest(documents, embeddingStore);
Assistant assistant = AiServices.builder(Assistant.class)
.chatLanguageModel(Helper.getChatModel())
.chatModel(Helper.getChatModel())
.chatMemory(MessageWindowChatMemory.withMaxMessages(10))
.contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
.build();

@ -2,6 +2,7 @@ package xyz.wbsite.ai;
import cn.hutool.core.thread.ThreadUtil;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import dev.langchain4j.model.output.TokenUsage;
import dev.langchain4j.service.AiServices;
import dev.langchain4j.service.TokenStream;
@ -12,16 +13,20 @@ public class Easy_StreamChat_Example {
public static void main(String[] args) {
String question = "你是谁?";
String question = "我喜欢吃苹果";
Assistant assistant = AiServices.builder(Assistant.class)
.streamingChatLanguageModel(Helper.getStreamChatModel())
.streamingChatModel(Helper.getStreamChatModel())
.chatMemory(MessageWindowChatMemory.withMaxMessages(10))
.build();
assistant.chat(question)
.onPartialResponse(System.out::print)
.onCompleteResponse(chatResponse -> {
TokenUsage tokenUsage = chatResponse.tokenUsage();
System.out.println("输入token数" + tokenUsage.inputTokenCount());
System.out.println("输出token数" + tokenUsage.outputTokenCount());
System.out.println("总计token数" + tokenUsage.totalTokenCount());
System.out.println();
System.out.println("onComplete");
})

@ -22,12 +22,12 @@ public class Easy_Tool_Example {
};
Assistant agent = AiServices.builder(Assistant.class)
.chatLanguageModel(Helper.getToolChatModel()) // 设置工具聊天模型
.chatModel(Helper.getToolChatModel()) // 设置工具聊天模型
.tools(weatherTools) // 设置工具
.chatMemory(MessageWindowChatMemory.withMaxMessages(10))
.build();
String chat = agent.chat("请问,州市的天气怎么样?");
String chat = agent.chat("请问,州市的天气怎么样?");
System.out.println(chat);
}

@ -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")

@ -14,7 +14,7 @@ public class Image_Chait_Example {
public static void main(String[] args) {
Assistant assistant = AiServices.builder(Assistant.class)
.chatLanguageModel(Helper.getGemmaModel())
.chatModel(Helper.getGemmaModel())
.chatMemory(MessageWindowChatMemory.withMaxMessages(10))
.build();

@ -0,0 +1,57 @@
package xyz.wbsite.ai;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.model.chat.request.ChatRequest;
import dev.langchain4j.model.chat.request.ResponseFormat;
import dev.langchain4j.model.chat.request.ResponseFormatType;
import dev.langchain4j.model.chat.request.json.JsonArraySchema;
import dev.langchain4j.model.chat.request.json.JsonObjectSchema;
import dev.langchain4j.model.chat.request.json.JsonSchema;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.service.SystemMessage;
/**
* Easy-RAG
*/
public class Json_Example {
public static void main(String[] args) {
OpenAiChatModel chatModel = Helper.getChatModel();
ResponseFormat build1 = ResponseFormat.builder()
.type(ResponseFormatType.JSON)
.jsonSchema(
JsonSchema.builder()
.rootElement(
JsonObjectSchema.builder()
.addProperty("data", JsonArraySchema.builder()
.description("省份列表")
.items(
JsonObjectSchema.builder()
.addStringProperty("name", "省份")
.addStringProperty("car", "车牌前缀")
.build()
).build()
).build()
).build()
).build();
ChatRequest build = ChatRequest.builder()
.messages(UserMessage.from("中国有哪些省请列举3个"))
.responseFormat(build1)
.build();
String chat2 = chatModel.chat(build).aiMessage().text();
System.out.println(chat2);
}
/**
*
*/
interface Assistant {
@SystemMessage("请参考提供资料,不要发散,没有请直接回答未查到")
String chat(String userMessage);
}
}

@ -22,7 +22,7 @@ public class Memory_Chat_Example {
messageWindowChatMemory.add(AiMessage.from("哦,你已经告诉我你是学生了呀!是的,我知道你的职业呢。有什么问题我可以帮你的吗?"));
Assistant assistant = AiServices.builder(Assistant.class)
.chatLanguageModel(Helper.getChatModel())
.chatModel(Helper.getChatModel())
.chatMemory(messageWindowChatMemory)
.build();

@ -19,7 +19,7 @@ public class Milvus_Example {
public static void main(String[] args) {
Assistant assistant = AiServices.builder(Assistant.class)
.chatLanguageModel(Helper.getChatModel())
.chatModel(Helper.getChatModel())
.chatMemory(MessageWindowChatMemory.withMaxMessages(10))
.build();

@ -73,7 +73,7 @@ public class Naive_RAG_Example {
//最后一步是构建我们的人工智能服务,
//配置它以使用我们上面创建的组件。
Assistant assistant = AiServices.builder(Assistant.class)
.chatLanguageModel(Helper.getChatModel())
.chatModel(Helper.getChatModel())
.contentRetriever(contentRetriever)
.chatMemory(chatMemory)
.build();

@ -53,7 +53,7 @@ public class Query_Compression_Example {
.build();
Assistant assistant = AiServices.builder(Assistant.class)
.chatLanguageModel(Helper.getChatModel())
.chatModel(Helper.getChatModel())
.retrievalAugmentor(retrievalAugmentor)
.chatMemory(MessageWindowChatMemory.withMaxMessages(4))
.build();

@ -1,8 +1,8 @@
package xyz.wbsite.ai;
import dev.langchain4j.data.embedding.Embedding;
import dev.langchain4j.model.chat.request.ResponseFormat;
import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.model.embedding.onnx.bgesmallenv15q.BgeSmallEnV15QuantizedEmbeddingModel;
import dev.langchain4j.store.embedding.CosineSimilarity;
/**
@ -21,5 +21,6 @@ public class Text_Compare_Example {
double between = CosineSimilarity.between(embedding1, embedding2);
System.out.println("余弦相似度: " + between); // 值越接近1越相似
}
}

Loading…
Cancel
Save

Powered by TurnKey Linux.