Browse Source

基础调用

master
周开红 8 months ago
parent
commit
7b69e544ca
  1. 8
      pom.xml
  2. 2
      src/main/java/com/xs/ai/SpringAiDemoApplication.java
  3. 8
      src/main/java/com/xs/ai/controller/OpenAiController.java
  4. 15
      src/main/java/com/xs/ai/services/CustomerSupportAssistant.java
  5. 5
      src/main/resources/application.properties
  6. 4
      src/main/resources/rag/terms-of-service.txt

8
pom.xml

@ -27,12 +27,12 @@
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>
</dependency> </dependency>
<!-- <!--
通义
通义-->
<dependency> <dependency>
<groupId>com.alibaba.cloud.ai</groupId> <groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter</artifactId> <artifactId>spring-ai-alibaba-starter</artifactId>
<version>1.0.0-M3.3</version> <version>1.0.0-M3.3</version>
</dependency>-->
</dependency>
<!-- <!--
openAI openAI
@ -49,12 +49,12 @@
</dependency>--> </dependency>-->
<!--ollama-->
<!--ollama
<dependency> <dependency>
<groupId>org.springframework.ai</groupId> <groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-ollama-spring-boot-starter</artifactId> <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
</dependency>
</dependency>  -->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>

2
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 // In the real world, ingesting documents would often happen separately, on a CI
// server or similar. // server or similar.
@Bean @Bean
CommandLineRunner ingestTermOfServiceToVectorStore(EmbeddingModel embeddingModel, VectorStore vectorStore,
CommandLineRunner ingestTermOfServiceToVectorStore(VectorStore vectorStore,
@Value("classpath:rag/terms-of-service.txt") Resource termsOfServiceDocs) { @Value("classpath:rag/terms-of-service.txt") Resource termsOfServiceDocs) {
return args -> { return args -> {

8
src/main/java/com/xs/ai/controller/OpenAiController.java

@ -46,14 +46,17 @@ public class OpenAiController {
""") """)
.defaultAdvisors( .defaultAdvisors(
new PromptChatMemoryAdvisor(chatMemory), new PromptChatMemoryAdvisor(chatMemory),
new QuestionAnswerAdvisor(vectorStore, SearchRequest.query("预定航班")), // RAG
//new QuestionAnswerAdvisor(vectorStore, SearchRequest.query("预定航班")), // RAG
//每一次对话拦截后搜索附加上后再给大模型
//new QuestionAnswerAdvisor(vectorStore, SearchRequest.defaults()), // RAG
new LoggingAdvisor()) new LoggingAdvisor())
.defaultFunctions("getBookingDetails", "changeBooking", "cancelBooking") // FUNCTION CALLING .defaultFunctions("getBookingDetails", "changeBooking", "cancelBooking") // FUNCTION CALLING
.build(); .build();
} }
@Autowired
VectorStore vectorStore;
@CrossOrigin @CrossOrigin
@GetMapping(value = "/ai/generateStreamAsString", produces = MediaType.TEXT_EVENT_STREAM_VALUE) @GetMapping(value = "/ai/generateStreamAsString", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
@ -62,6 +65,7 @@ public class OpenAiController {
//return chatClient.stream(prompt); //return chatClient.stream(prompt);
Flux<String> content = chatClient.prompt() Flux<String> content = chatClient.prompt()
.system(s -> s.param("current_date", LocalDate.now().toString())) .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_CONVERSATION_ID_KEY, chatId).param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 100))
.advisors(a -> a.param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 100)) .advisors(a -> a.param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 100))
.user(message) .user(message)

15
src/main/java/com/xs/ai/services/CustomerSupportAssistant.java

@ -12,7 +12,8 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/
*//*
package com.xs.ai.services; 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_CONVERSATION_ID_KEY;
import static org.springframework.ai.chat.client.advisor.AbstractChatMemoryAdvisor.CHAT_MEMORY_RETRIEVE_SIZE_KEY; import static org.springframework.ai.chat.client.advisor.AbstractChatMemoryAdvisor.CHAT_MEMORY_RETRIEVE_SIZE_KEY;
*/
/** /**
* * @author Christian Tzolov * * @author Christian Tzolov
*/
*//*
@Service @Service
public class CustomerSupportAssistant { public class CustomerSupportAssistant {
@ -58,13 +61,13 @@ public class CustomerSupportAssistant {
.defaultAdvisors( .defaultAdvisors(
new PromptChatMemoryAdvisor(chatMemory), // Chat Memory new PromptChatMemoryAdvisor(chatMemory), // Chat Memory
// new VectorStoreChatMemoryAdvisor(vectorStore)), // new VectorStoreChatMemoryAdvisor(vectorStore)),
new QuestionAnswerAdvisor(vectorStore, SearchRequest.defaults()), // RAG new QuestionAnswerAdvisor(vectorStore, SearchRequest.defaults()), // RAG
// new QuestionAnswerAdvisor(vectorStore, SearchRequest.defaults() // new QuestionAnswerAdvisor(vectorStore, SearchRequest.defaults()
// .withFilterExpression("'documentType' == 'terms-of-service' && region in ['EU', 'US']")), // .withFilterExpression("'documentType' == 'terms-of-service' && region in ['EU', 'US']")),
new LoggingAdvisor()) new LoggingAdvisor())
.defaultFunctions("getBookingDetails", "changeBooking", "cancelBooking") // FUNCTION CALLING .defaultFunctions("getBookingDetails", "changeBooking", "cancelBooking") // FUNCTION CALLING
.build(); .build();
@ -81,4 +84,4 @@ public class CustomerSupportAssistant {
.content(); .content();
} }
}
}*/

5
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

4
src/main/resources/rag/terms-of-service.txt

@ -10,4 +10,6 @@
3. 取消预订 3. 取消预订
- 最晚在航班起飞前 48 小时取消。 - 最晚在航班起飞前 48 小时取消。
- 取消费用:经济舱 75 美元,豪华经济舱 50 美元,商务舱 25 美元。 - 取消费用:经济舱 75 美元,豪华经济舱 50 美元,商务舱 25 美元。
- 退款将在 7 个工作日内处理。
- 退款将在 7 个工作日内处理。
4. 查询航班
- 航班最早是7点,最晚是22点,请注意出行时间
Loading…
Cancel
Save