Initial commit
This commit is contained in:
46
langchain4j-ai-tools/pom.xml
Normal file
46
langchain4j-ai-tools/pom.xml
Normal file
@@ -0,0 +1,46 @@
|
||||
<?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>
|
||||
<parent>
|
||||
<groupId>com.iwe3</groupId>
|
||||
<artifactId>langchain4j-ai-java</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>langchain4j-ai-tools</artifactId>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>17</maven.compiler.source>
|
||||
<maven.compiler.target>17</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
<!--导入低阶依赖-->
|
||||
<dependency>
|
||||
<groupId>dev.langchain4j</groupId>
|
||||
<artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
|
||||
<version>1.9.1-beta17</version>
|
||||
</dependency>
|
||||
<!--导入高阶依赖-->
|
||||
<dependency>
|
||||
<groupId>dev.langchain4j</groupId>
|
||||
<artifactId>langchain4j-spring-boot-starter</artifactId>
|
||||
<version>1.9.1-beta17</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.iwe3.langchain4j;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
@SpringBootApplication
|
||||
public class ToolsApplication {
|
||||
/**
|
||||
* 创建RestTemplate的实例
|
||||
* @return
|
||||
*/
|
||||
@Bean
|
||||
public RestTemplate restTemplate(){
|
||||
return new RestTemplate();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(ToolsApplication.class,args);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.iwe3.langchain4j.config;
|
||||
|
||||
import dev.langchain4j.model.chat.ChatModel;
|
||||
import dev.langchain4j.model.openai.OpenAiChatModel;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Configuration
|
||||
public class LLMConfig {
|
||||
|
||||
@Bean(name = "qwen")
|
||||
public ChatModel chatModelQwen(){
|
||||
/*大模型3件套:apikey ,model-name,base-url */
|
||||
return OpenAiChatModel.builder()
|
||||
.apiKey(System.getenv("DASH_SCOPE_API_KEY"))
|
||||
.modelName("qwen-plus")
|
||||
.baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.iwe3.langchain4j.config;
|
||||
|
||||
import dev.langchain4j.memory.chat.ChatMemoryProvider;
|
||||
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
|
||||
import dev.langchain4j.store.memory.chat.InMemoryChatMemoryStore;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Configuration
|
||||
public class SeparateChatAssistantConfig {
|
||||
|
||||
/**
|
||||
* 聊天记忆提供器
|
||||
* 配置:采用memoryId来完成隔离
|
||||
* @return
|
||||
*/
|
||||
@Bean
|
||||
ChatMemoryProvider chatMemoryProvider() {
|
||||
return memoryId -> MessageWindowChatMemory.builder()
|
||||
.id(memoryId)
|
||||
.maxMessages(10).chatMemoryStore(new InMemoryChatMemoryStore())
|
||||
.build();
|
||||
//如果未来想自定义 -> 则自己写一个类实现 ChatMemoryStore
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.iwe3.langchain4j.service;
|
||||
|
||||
import dev.langchain4j.service.MemoryId;
|
||||
import dev.langchain4j.service.UserMessage;
|
||||
import dev.langchain4j.service.V;
|
||||
import dev.langchain4j.service.spring.AiService;
|
||||
import dev.langchain4j.service.spring.AiServiceWiringMode;
|
||||
|
||||
/**
|
||||
* 知识出处:
|
||||
* https://docs.langchain4j.dev/tutorials/spring-boot-integration/#spring-boot-starter-for-declarative-ai-services
|
||||
*/
|
||||
@AiService(wiringMode = AiServiceWiringMode.EXPLICIT
|
||||
,chatModel = "qwen",
|
||||
tools = {"weatherTools"},
|
||||
chatMemoryProvider = "chatMemoryProvider")
|
||||
public interface ChatAssistant {
|
||||
/**
|
||||
* 聊天
|
||||
* @param memoryId
|
||||
* @param userMessage
|
||||
* @return
|
||||
*/
|
||||
@UserMessage("请用粤语回答问题,并且添加一些表情符号。 {{msg}}")
|
||||
String chat(@MemoryId int memoryId, @V("msg") String userMessage);
|
||||
/**
|
||||
* 普通聊天
|
||||
* @param prompt
|
||||
* @return
|
||||
*/
|
||||
String chat(String prompt);
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.iwe3.langchain4j.tools;
|
||||
|
||||
import dev.langchain4j.agent.tool.P;
|
||||
import dev.langchain4j.agent.tool.Tool;
|
||||
import dev.langchain4j.agent.tool.ToolMemoryId;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
@Component
|
||||
public class WeatherTools {
|
||||
|
||||
@Resource
|
||||
private RestTemplate restTemplate;
|
||||
|
||||
//name 是工具描述 value是工具补充信息
|
||||
@Tool(name = "查询天气",value = "根据城市编码调用高德开发平台,返回对应城市的天气情况")
|
||||
public String queryWeather(@ToolMemoryId int memoryId,
|
||||
@P(value = "城市编码",required = true) String citycode){
|
||||
System.out.println("查询天气情况---> 开始 ---> memoryId=" + memoryId);
|
||||
//高德地图:查询天气
|
||||
//https://lbs.amap.com/api/webservice/guide/api-advanced/weatherinfo
|
||||
var key = "cf6cb4245c630692d2f13c1cd1ad1632";
|
||||
var url = "https://restapi.amap.com/v3/weather/weatherInfo?key="+key+"&city="+citycode+"&extensions=all";
|
||||
return restTemplate.getForObject(url, String.class);
|
||||
}
|
||||
}
|
||||
5
langchain4j-ai-tools/src/main/resources/application.yml
Normal file
5
langchain4j-ai-tools/src/main/resources/application.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
server:
|
||||
port: 9009
|
||||
spring:
|
||||
application:
|
||||
name: langchain4j-ai-tools
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.iwe3.langchain4j;
|
||||
|
||||
import com.iwe3.langchain4j.service.ChatAssistant;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
|
||||
@SpringBootTest
|
||||
class ToolsApplicationTest {
|
||||
|
||||
@Resource
|
||||
private ChatAssistant chatAssistant;
|
||||
|
||||
@Test
|
||||
public void getWeatherByMemoryId(){
|
||||
var res = chatAssistant.chat(1,"成都今天天气如何?城市编码:510100");
|
||||
System.out.println("res = " + res);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getWeather(){
|
||||
var res = chatAssistant.chat("成都今天天气如何?城市编码:510100");
|
||||
System.out.println("res = " + res);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user