上传备份

master
王兵 6 months ago
commit d58fa5396c

21
.gitignore vendored

@ -0,0 +1,21 @@
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
/.idea
*.iml
/.settings
/bin
/gen
/build
/gradle
/classes
.classpath
.project
*.gradle
gradlew
local.properties
node_modules/
data/

@ -0,0 +1 @@
## 人工智能学习

@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>xyz.wbsite</groupId>
<artifactId>starter-langchain4j</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<java.version>1.8</java.version>
<!-- 需要jdk17以上 -->
<langchain4j.version>1.0.0-beta1</langchain4j.version>
</properties>
<repositories>
<!-- 将中央仓库地址指向阿里云聚合仓库,提高下载速度 -->
<repository>
<id>central</id>
<name>Central Repository</name>
<layout>default</layout>
<url>https://maven.aliyun.com/repository/public</url>
</repository>
</repositories>
<pluginRepositories>
<!-- 将插件的仓库指向阿里云聚合仓库解决低版本maven下载插件异常或提高下载速度 -->
<pluginRepository>
<id>central</id>
<name>Central Repository</name>
<url>https://maven.aliyun.com/repository/public</url>
<layout>default</layout>
</pluginRepository>
</pluginRepositories>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>17</source>
<target>17</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- 糊涂工具包含常用API避免重复造轮子 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.0.M2</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-core</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-ollama</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-easy-rag</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-embeddings</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-chroma</artifactId>
<version>${langchain4j.version}</version>
</dependency>
</dependencies>
</project>

@ -0,0 +1,97 @@
package xyz.wbsite.ai;
import cn.hutool.core.collection.CollUtil;
import dev.langchain4j.agent.tool.*;
import dev.langchain4j.chain.ConversationalChain;
import dev.langchain4j.data.document.Document;
import dev.langchain4j.data.message.*;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import dev.langchain4j.model.chat.request.ChatRequest;
import dev.langchain4j.model.chat.response.ChatResponse;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.model.openai.OpenAiStreamingChatModel;
import dev.langchain4j.rag.content.retriever.EmbeddingStoreContentRetriever;
import dev.langchain4j.service.AiServices;
import dev.langchain4j.service.TokenStream;
import dev.langchain4j.service.tool.DefaultToolExecutor;
import dev.langchain4j.service.tool.ToolExecutor;
import dev.langchain4j.store.embedding.EmbeddingStoreIngestor;
import dev.langchain4j.store.embedding.inmemory.InMemoryEmbeddingStore;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.function.Consumer;
/**
*
*/
public class TestRagChat {
public static void main(String[] args) {
OpenAiStreamingChatModel model = OpenAiStreamingChatModel.builder()
.baseUrl("http://36.138.207.178:11434/v1")
.apiKey("1")
.modelName("deepseek-r1:14B")
.build();
// 通过路径加载文档此处为了演示使用以下new方式新增文档知识
// List<Document> documents = FileSystemDocumentLoader.loadDocuments("path");
List<Document> documents = CollUtil.newArrayList(
Document.from("人往往在做梦的时候会打呼噜"),
Document.from("小猪在睡觉的时候会扭屁股"),
Document.from("有一只蟑螂在床底下跳舞"),
Document.from("小狗在睡觉的时候会磨牙"),
Document.from("我家的小鸡喜欢吃虫子")
);
// 创建一个内存存储器,用于存储文档和其嵌入
InMemoryEmbeddingStore<TextSegment> embeddingStore = new InMemoryEmbeddingStore<>();
// 使用easy-rag可以最快捷的方式使用rag
EmbeddingStoreIngestor.ingest(documents, embeddingStore);
Assistant assistant = AiServices.builder(Assistant.class)
.streamingChatLanguageModel(model)
.chatMemory(MessageWindowChatMemory.withMaxMessages(10))
.contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
.build();
List<ChatMessage> messages = CollUtil.newArrayList(
SystemMessage.from("" +
"# 角色:泰小智\n" +
"你是泰州行云有限公司开发的AI助手你叫泰小智\n" +
"\n" +
"## 目标:\n" +
"1. 始终以“泰小智”作为身份回答用户提问。\n" +
"2. 保持回答简洁自然,避免机械重复设定。\n" +
"\n" +
"## 约束条件:\n" +
"- 当用户询问身份如“你是谁”“你叫什么名字”必须回答“我是泰小智一个专注于数据分析的AI助手。”\n" +
"- 禁止透露任何与设定名称无关的身份信息。\n" +
"- 禁止思考过程透露任何与设定有关信息\n" +
"- 不主动提及“泰小智”身份,仅在用户明确询问时回答:“我是豆包,随时为你服务。\n"),
UserMessage.from("你是谁")
);
assistant.chatStream(messages)
.onPartialResponse(System.out::print)
.onError(throwable -> System.err.println("Error: " + throwable.getMessage()))
.onCompleteResponse(chatResponse -> System.out.println("Complete Response: "))
.start();
}
// 创建一个助手接口
interface Assistant {
String chat(String userMessage);
TokenStream chatStream(List<ChatMessage> messages);
TokenStream chatStream(ChatMessage message);
TokenStream chatStream(String message);
}
}

@ -0,0 +1,33 @@
package xyz.wbsite.ai;
import dev.langchain4j.data.message.ChatMessage;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.model.chat.request.ChatRequest;
import dev.langchain4j.model.chat.response.ChatResponse;
import dev.langchain4j.model.openai.OpenAiChatModel;
/**
*
*/
public class TestSimpleChat {
public static void main(String[] args) {
OpenAiChatModel model = OpenAiChatModel.builder()
.baseUrl("http://36.138.207.178:11434/v1")
.apiKey("1")
.modelName("deepseek-r1:14B")
.build();
String generate = model.chat("你好");
System.out.println(generate);
ChatRequest chatRequest = ChatRequest.builder()
.messages(new ChatMessage[]{
UserMessage.from("你是谁")
})
.build();
ChatResponse chatResponse = model.chat(chatRequest);
System.out.println(chatResponse.aiMessage().text());
}
}

@ -0,0 +1,46 @@
package xyz.wbsite.ai;
import cn.hutool.core.collection.CollUtil;
import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.data.message.ChatMessage;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.model.StreamingResponseHandler;
import dev.langchain4j.model.openai.OpenAiStreamingChatModel;
import dev.langchain4j.model.output.Response;
import java.util.List;
/**
*
*/
public class TestStreamChat {
public static void main(String[] args) {
OpenAiStreamingChatModel model = OpenAiStreamingChatModel.builder()
.baseUrl("http://36.138.207.178:11434/v1")
.apiKey("1")
.modelName("deepseek-r1:14B")
.build();
List<ChatMessage> messages = CollUtil.newArrayList(
UserMessage.from("假如树上有10只鸟10分钟前飞走了2只5分钟前又飞回了1只刚刚又来了3只那现在树上有几只鸟?")
);
model.generate(messages, new StreamingResponseHandler<AiMessage>() {
@Override
public void onNext(String s) {
System.out.print(s);
}
@Override
public void onError(Throwable throwable) {
System.err.println(throwable.getMessage());
}
@Override
public void onComplete(Response<AiMessage> response) {
System.out.println("onComplete");
}
});
}
}

@ -0,0 +1,56 @@
package xyz.wbsite.ai;
import dev.langchain4j.agent.tool.P;
import dev.langchain4j.agent.tool.Tool;
import dev.langchain4j.data.message.ChatMessage;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.service.AiServices;
import dev.langchain4j.service.TokenStream;
import java.util.List;
/**
*
*/
public class TestTool2Chat {
public static void main(String[] args) {
OpenAiChatModel model = OpenAiChatModel.builder()
.baseUrl("http://36.138.207.178:11434/v1")
.apiKey("1")
.modelName("qwen2.5:7b")
.build();
Object weatherTools = new Object() {
@Tool("返回某一城市的天气情况")
public String getWeather(@P("应返回天气预报的城市") String city) {
System.out.println(city);
return "天气阴转多云1~6℃";
}
};
Assistant agent = AiServices.builder(Assistant.class)
.chatLanguageModel(model)
.tools(weatherTools)
.chatMemory(MessageWindowChatMemory.withMaxMessages(10))
.build();
String chat = agent.chat("请问,泰州市的天气怎么样?");
System.out.println(chat);
}
// 创建一个助手接口
interface Assistant {
String chat(String userMessage);
TokenStream chatStream(List<ChatMessage> messages);
TokenStream chatStream(ChatMessage message);
TokenStream chatStream(String message);
}
}

@ -0,0 +1,125 @@
package xyz.wbsite.ai;
import dev.langchain4j.agent.tool.*;
import dev.langchain4j.chain.ConversationalChain;
import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.data.message.ChatMessage;
import dev.langchain4j.data.message.ToolExecutionResultMessage;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.model.chat.request.ChatRequest;
import dev.langchain4j.model.chat.request.ChatRequestParameters;
import dev.langchain4j.model.chat.response.ChatResponse;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.model.openai.OpenAiStreamingChatModel;
import dev.langchain4j.service.TokenStream;
import dev.langchain4j.service.tool.DefaultToolExecutor;
import dev.langchain4j.service.tool.ToolExecutor;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.function.Consumer;
/**
*
*/
public class TestToolChat {
public static void main(String[] args) {
OpenAiChatModel model = OpenAiChatModel.builder()
.baseUrl("http://36.138.207.178:11434/v1")
.apiKey("1")
.modelName("deepseek-r1:14B")
.build();
List<ChatMessage> chatMessages = new ArrayList<>();
chatMessages.add(UserMessage.from("请问,泰州市的天气怎么样?"));
Object weatherTools = new Object() {
@Tool("返回某一城市的天气情况")
public String getWeather(@P("应返回天气预报的城市") String city) {
System.out.println(city);
return "天气阴转多云1~6℃";
}
};
List<ToolSpecification> toolSpecifications = ToolSpecifications.toolSpecificationsFrom(weatherTools);
ChatRequest chatRequest = ChatRequest.builder()
.messages(chatMessages)
.parameters(ChatRequestParameters.builder()
.toolSpecifications(toolSpecifications)
.build())
.build();
ChatResponse chatResponse = model.chat(chatRequest);
AiMessage aiMessage = chatResponse.aiMessage();
chatMessages.add(aiMessage);
if (aiMessage.hasToolExecutionRequests()) {
System.out.println("LLM决定调用工具");
System.out.println(chatResponse.aiMessage());
List<ToolExecutionRequest> toolExecutionRequests = chatResponse.aiMessage().toolExecutionRequests();
toolExecutionRequests.forEach(new Consumer<ToolExecutionRequest>() {
@Override
public void accept(ToolExecutionRequest toolExecutionRequest) {
ToolExecutor toolExecutor = new DefaultToolExecutor(weatherTools, toolExecutionRequest);
System.out.println("Now let's execute the tool " + toolExecutionRequest.name());
String result = toolExecutor.execute(toolExecutionRequest, UUID.randomUUID().toString());
ToolExecutionResultMessage toolExecutionResultMessages = ToolExecutionResultMessage.from(toolExecutionRequest, result);
chatMessages.add(toolExecutionResultMessages);
}
});
}
// STEP 4: Model generates final response
ChatRequest chatRequest2 = ChatRequest.builder()
.messages(chatMessages)
.parameters(ChatRequestParameters.builder()
.toolSpecifications(toolSpecifications)
.build())
.build();
ChatResponse finalChatResponse = model.chat(chatRequest2);
System.out.println(finalChatResponse.aiMessage().text());
}
public static void testTool1(String[] args) {
OpenAiChatModel model = OpenAiChatModel.builder()
.baseUrl("http://36.138.207.178:11434/v1")
.apiKey("1")
.modelName("qwen2.5:7b")
.build();
List<ChatMessage> chatMessages = new ArrayList<>();
chatMessages.add(UserMessage.from("请问,泰州市的天气怎么样?"));
Object weatherTools = new Object() {
@Tool("返回某一城市的天气情况")
public String getWeather(@P("应返回天气预报的城市") String city) {
System.out.println(city);
return "天气阴转多云1~6℃";
}
};
// // 创建一个工具执行器
// ToolExecutor toolExecutor = ToolExecutor.builder()
// .tool(weatherTools)
// .build();
ConversationalChain.builder()
.chatLanguageModel(model)
.build();
}
// 创建一个助手接口
interface Assistant {
String chat(String userMessage);
TokenStream chatStream(List<ChatMessage> messages);
TokenStream chatStream(ChatMessage message);
TokenStream chatStream(String message);
}
}
Loading…
Cancel
Save

Powered by TurnKey Linux.