diff --git a/pom.xml b/pom.xml index 68623a0..5b77481 100644 --- a/pom.xml +++ b/pom.xml @@ -27,12 +27,12 @@ spring-boot-starter-web com.alibaba.cloud.ai spring-ai-alibaba-starter 1.0.0-M3.3 - --> + - + org.springframework.boot diff --git a/src/main/java/com/xs/ai/SpringAiDemoApplication.java b/src/main/java/com/xs/ai/SpringAiDemoApplication.java index 6b52452..8164cc3 100644 --- a/src/main/java/com/xs/ai/SpringAiDemoApplication.java +++ b/src/main/java/com/xs/ai/SpringAiDemoApplication.java @@ -29,7 +29,7 @@ public class SpringAiDemoApplication { // In the real world, ingesting documents would often happen separately, on a CI // server or similar. @Bean - CommandLineRunner ingestTermOfServiceToVectorStore(EmbeddingModel embeddingModel, VectorStore vectorStore, + CommandLineRunner ingestTermOfServiceToVectorStore(VectorStore vectorStore, @Value("classpath:rag/terms-of-service.txt") Resource termsOfServiceDocs) { return args -> { diff --git a/src/main/java/com/xs/ai/controller/OpenAiController.java b/src/main/java/com/xs/ai/controller/OpenAiController.java index 8e79916..c0f962a 100644 --- a/src/main/java/com/xs/ai/controller/OpenAiController.java +++ b/src/main/java/com/xs/ai/controller/OpenAiController.java @@ -46,14 +46,17 @@ public class OpenAiController { """) .defaultAdvisors( new PromptChatMemoryAdvisor(chatMemory), - new QuestionAnswerAdvisor(vectorStore, SearchRequest.query("预定航班")), // RAG + //new QuestionAnswerAdvisor(vectorStore, SearchRequest.query("预定航班")), // RAG + //每一次对话拦截后,搜索附加上后再给大模型 + //new QuestionAnswerAdvisor(vectorStore, SearchRequest.defaults()), // RAG new LoggingAdvisor()) .defaultFunctions("getBookingDetails", "changeBooking", "cancelBooking") // FUNCTION CALLING .build(); } - + @Autowired + VectorStore vectorStore; @CrossOrigin @GetMapping(value = "/ai/generateStreamAsString", produces = MediaType.TEXT_EVENT_STREAM_VALUE) @@ -62,6 +65,7 @@ public class OpenAiController { //return chatClient.stream(prompt); Flux content = chatClient.prompt() .system(s -> s.param("current_date", LocalDate.now().toString())) + .advisors(new QuestionAnswerAdvisor(vectorStore, SearchRequest.query(message))) //.advisors(a -> a.param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId).param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 100)) .advisors(a -> a.param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 100)) .user(message) diff --git a/src/main/java/com/xs/ai/services/CustomerSupportAssistant.java b/src/main/java/com/xs/ai/services/CustomerSupportAssistant.java index a5f8769..bbd4885 100644 --- a/src/main/java/com/xs/ai/services/CustomerSupportAssistant.java +++ b/src/main/java/com/xs/ai/services/CustomerSupportAssistant.java @@ -12,7 +12,8 @@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - */ + *//* + package com.xs.ai.services; @@ -30,9 +31,11 @@ import java.time.LocalDate; import static org.springframework.ai.chat.client.advisor.AbstractChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY; import static org.springframework.ai.chat.client.advisor.AbstractChatMemoryAdvisor.CHAT_MEMORY_RETRIEVE_SIZE_KEY; +*/ /** * * @author Christian Tzolov - */ + *//* + @Service public class CustomerSupportAssistant { @@ -58,13 +61,13 @@ public class CustomerSupportAssistant { .defaultAdvisors( new PromptChatMemoryAdvisor(chatMemory), // Chat Memory // new VectorStoreChatMemoryAdvisor(vectorStore)), - + new QuestionAnswerAdvisor(vectorStore, SearchRequest.defaults()), // RAG // new QuestionAnswerAdvisor(vectorStore, SearchRequest.defaults() // .withFilterExpression("'documentType' == 'terms-of-service' && region in ['EU', 'US']")), - + new LoggingAdvisor()) - + .defaultFunctions("getBookingDetails", "changeBooking", "cancelBooking") // FUNCTION CALLING .build(); @@ -81,4 +84,4 @@ public class CustomerSupportAssistant { .content(); } -} \ No newline at end of file +}*/ diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 5a42f29..113a31f 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,4 +1,5 @@ -spring.ai.dashscope.api-key= ${ALI_AI_KEY} -spring.ai.dashscope.chat.options.model=deepseek-v3 +spring.ai.dashscope.api-key=sk-6f67708d074d4d3fbdea96071209b60f +#spring.ai.dashscope.chat.options.model=deepseek-r1 +spring.ai.dashscope.chat.options.model=qwen-max diff --git a/src/main/resources/rag/terms-of-service.txt b/src/main/resources/rag/terms-of-service.txt index 3e73bc8..ccfc7b2 100644 --- a/src/main/resources/rag/terms-of-service.txt +++ b/src/main/resources/rag/terms-of-service.txt @@ -10,4 +10,6 @@ 3. 取消预订 - 最晚在航班起飞前 48 小时取消。 - 取消费用:经济舱 75 美元,豪华经济舱 50 美元,商务舱 25 美元。 -- 退款将在 7 个工作日内处理。 \ No newline at end of file +- 退款将在 7 个工作日内处理。 +4. 查询航班 +- 航班最早是7点,最晚是22点,请注意出行时间 \ No newline at end of file