diff --git a/pom.xml b/pom.xml
index 6dfb09d..16afdb3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -46,6 +46,11 @@
langchain4j-community-zhipu-ai
1.0.0-beta1
+
+ dev.langchain4j
+ langchain4j-ollama
+ 1.0.0-beta1
+
dev.langchain4j
@@ -53,6 +58,30 @@
1.0.0-beta1
+
+
+
+ com.mashape.unirest
+ unirest-java
+ 1.4.9
+
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+ 2.15.2
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ 2.15.2
+
+
+ com.fasterxml.jackson.core
+ jackson-annotations
+ 2.15.2
+
+
diff --git a/src/main/java/com/ai/config/OllamaConfig.java b/src/main/java/com/ai/config/OllamaConfig.java
new file mode 100644
index 0000000..446ba40
--- /dev/null
+++ b/src/main/java/com/ai/config/OllamaConfig.java
@@ -0,0 +1,28 @@
+package com.ai.config;
+
+import com.ai.function.MyCalculator;
+import com.ai.service.OllamaAssist;
+import dev.langchain4j.memory.chat.MessageWindowChatMemory;
+import dev.langchain4j.model.chat.ChatLanguageModel;
+import dev.langchain4j.model.ollama.OllamaChatModel;
+import dev.langchain4j.service.AiServices;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class OllamaConfig {
+
+ @Bean
+ public OllamaAssist ollamaAssist() {
+ ChatLanguageModel ollamaModel = OllamaChatModel.builder()
+ .baseUrl("http://localhost:11434")
+ .modelName("llama3.2:3b")
+ .build();
+ return AiServices.builder(OllamaAssist.class)
+ .chatMemoryProvider(memoryId -> MessageWindowChatMemory.withMaxMessages(10))
+ .chatLanguageModel(ollamaModel)
+ .tools(new MyCalculator())
+ .build();
+ }
+
+}
diff --git a/src/main/java/com/ai/controller/LangChainController.java b/src/main/java/com/ai/controller/LangChainController.java
index 4553726..9ff1a31 100644
--- a/src/main/java/com/ai/controller/LangChainController.java
+++ b/src/main/java/com/ai/controller/LangChainController.java
@@ -2,6 +2,8 @@ package com.ai.controller;
import com.ai.service.Assist;
import com.ai.service.LangChainService;
+import com.ai.service.NormalRequestService;
+import com.ai.service.OllamaAssist;
import dev.langchain4j.community.model.dashscope.QwenChatModel;
import dev.langchain4j.community.model.zhipu.ZhipuAiImageModel;
import dev.langchain4j.data.image.Image;
@@ -31,6 +33,18 @@ public class LangChainController {
@Autowired
private ZhipuAiImageModel zhipuAiImageModel;
+ @Autowired
+ private OllamaAssist ollamaAssist;
+
+ @Autowired
+ private NormalRequestService normalRequestService;
+
+ @GetMapping("/normal/chat")
+ public String normalChat(@RequestParam("input") String input) {
+ System.out.println("start normal chat...");
+ return normalRequestService.chat(input);
+ }
+
/**
* 处理用户输入并调用 LangChainService 获取响应
* @param input 用户输入的内容
@@ -65,6 +79,6 @@ public class LangChainController {
@GetMapping("/high/call")
public String functionCall(@RequestParam("input") String input) {
System.out.println("start highlevel memory chat...");
- return assist.chat(input);
+ return ollamaAssist.chat(input);
}
}
diff --git a/src/main/java/com/ai/function/MyCalculator.java b/src/main/java/com/ai/function/MyCalculator.java
index 751677f..a92abf5 100644
--- a/src/main/java/com/ai/function/MyCalculator.java
+++ b/src/main/java/com/ai/function/MyCalculator.java
@@ -2,10 +2,31 @@ package com.ai.function;
import dev.langchain4j.agent.tool.Tool;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Random;
+
public class MyCalculator {
- @Tool("路飞算法")
- public int luffy(int a, int b){
- return (a + b) / (a - b);
+ private int films = 10;
+
+ private static Map agentMap = new HashMap<>();
+
+ static{
+ agentMap.put(1, "艾莲乔");
+ agentMap.put(2, "星见雅");
+ agentMap.put(3, "妮可");
+ agentMap.put(4, "安比");
+ agentMap.put(5, "耀佳音");
+ }
+
+ @Tool("用若干菲林抽若干代理人")
+ public void raffle(int raffleNum){
+ Random random = new Random();
+ for(int i = 0; i < raffleNum; i++){
+ int randomNumber = random.nextInt(5) + 1;
+ String agent = agentMap.get(randomNumber);
+ System.out.println("获得代理人:" + agent);
+ }
}
}
diff --git a/src/main/java/com/ai/http/chat.http b/src/main/java/com/ai/http/chat.http
index a95fa9b..2306d78 100644
--- a/src/main/java/com/ai/http/chat.http
+++ b/src/main/java/com/ai/http/chat.http
@@ -15,4 +15,4 @@ GET http://localhost:8080/langchain/high/memory-chat?memoryId=1&input=详细介
GET http://localhost:8080/langchain/zhipu/img?input=请画一张魔兽世界里的兽人高举锤子的图
### 测试 LangChainController 的 highlevel chat 接口
-GET http://localhost:8080/langchain/high/call?input=我的两个数分别是9和3,请用路飞算法计算结果
+GET http://localhost:8080/langchain/high/call?input=用5个菲林抽取5个代理人
diff --git a/src/main/java/com/ai/service/NormalRequestService.java b/src/main/java/com/ai/service/NormalRequestService.java
new file mode 100644
index 0000000..a443df2
--- /dev/null
+++ b/src/main/java/com/ai/service/NormalRequestService.java
@@ -0,0 +1,53 @@
+package com.ai.service;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.mashape.unirest.http.HttpResponse;
+import com.mashape.unirest.http.Unirest;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+
+@Service
+public class NormalRequestService {
+
+ public String chat(String userMessage) {
+ try {
+ HttpResponse response = Unirest.post("https://api.deepseek.com/chat/completions")
+ .header("Authorization", "Bearer sk-3043bb4777404970a22c7544dd30aaa2")
+ .header("Content-Type", "application/json")
+ .body("{\n" +
+ " \"model\": \"deepseek-chat\",\n" +
+ " \"messages\": [\n" +
+ " {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n" +
+ " {\"role\": \"user\", \"content\": \"" + userMessage + "\"}\n" +
+ " ],\n" +
+ " \"stream\": false\n" +
+ " }")
+ .asString();
+
+ // 检查响应状态码
+ if (response.getStatus() == 200) {
+ try {
+ // 使用 Jackson 解析 JSON 响应
+ ObjectMapper mapper = new ObjectMapper();
+ Map jsonResponse = mapper.readValue(response.getBody(), Map.class);
+
+ // 假设响应中包含一个名为 "content" 的字段
+ String content = (String) jsonResponse.get("content");
+ if (content != null) {
+ System.out.println("响应内容: " + content);
+ } else {
+ System.out.println("响应中未找到 'content' 字段。");
+ }
+ } catch (Exception e) {
+ System.err.println("解析响应时出错: " + e.getMessage());
+ }
+ } else {
+ System.err.println("请求失败,状态码: " + response.getStatus());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return "你好," + userMessage;
+ }
+}
diff --git a/src/main/java/com/ai/service/OllamaAssist.java b/src/main/java/com/ai/service/OllamaAssist.java
new file mode 100644
index 0000000..89ce502
--- /dev/null
+++ b/src/main/java/com/ai/service/OllamaAssist.java
@@ -0,0 +1,8 @@
+package com.ai.service;
+
+import dev.langchain4j.service.SystemMessage;
+
+public interface OllamaAssist {
+ @SystemMessage("你是一个助手,可以使用工具来回答问题")
+ String chat(String userMessage);
+}