1. 项目创建
依赖:
```xml
com.alibaba.cloud.ai
spring-ai-starter-model-aliyun-dashscope
```
或使用 Gradle:
```gradle
dependencies {
implementation 'com.alibaba.cloud.ai:spring-ai-starter-model-aliyun-dashscope'
}
```
2. 配置
application.yml:
```yaml
spring:
ai:
alibaba:
dashscope:
api-key: ${DASHSCOPE_API_KEY}
chat:
options:
model: qwen-turbo
temperature: 0.7
max-tokens: 2000
```
application.properties:
```properties
spring.ai.alibaba.dashscope.api-key=${DASHSCOPE_API_KEY}
spring.ai.alibaba.dashscope.chat.options.model=qwen-turbo
spring.ai.alibaba.dashscope.chat.options.temperature=0.7
spring.ai.alibaba.dashscope.chat.options.max-tokens=2000
```
3. Chat Client
使用 ChatClient:
```java
@Service
public class ChatService {
private final ChatClient chatClient;
public ChatService(ChatClient chatClient) {
this.chatClient = chatClient;
}
public String chat(String message) {
return chatClient.call(message);
}
public String chatWithPrompt(String userMessage) {
Prompt prompt = new Prompt(new UserMessage(userMessage));
ChatResponse response = chatClient.call(prompt);
return response.getResult().getOutput().getContent();
}
}
```
流式响应:
```java
@Service
public class ChatService {
private final StreamingChatClient streamingChatClient;
public ChatService(StreamingChatClient streamingChatClient) {
this.streamingChatClient = streamingChatClient;
}
public Flux streamChat(String message) {
return streamingChatClient.stream(message)
.map(response -> response.getResult().getOutput().getContent());
}
}
```
4. 模型选择
支持的模型:
qwen-turbo - 通义千问 Turbo 模型(快速响应)qwen-plus - 通义千问 Plus 模型(平衡性能)qwen-max - 通义千问 Max 模型(最强性能)
配置不同模型:
```yaml
spring:
ai:
alibaba:
dashscope:
chat:
options:
model: qwen-max # 使用最强模型
temperature: 0.7
max-tokens: 2000
```
5. Prompt Template
定义模板:
```java
@Service
public class PromptService {
private final PromptTemplate promptTemplate;
public PromptService() {
this.promptTemplate = new PromptTemplate(
"请用{style}风格回答以下问题:{question}"
);
}
public String generatePrompt(String style, String question) {
Map variables = Map.of(
"style", style,
"question", question
);
return promptTemplate.render(variables);
}
}
```
使用 ChatClient:
```java
@Service
public class ChatService {
private final ChatClient chatClient;
private final PromptTemplate promptTemplate;
public ChatService(ChatClient chatClient) {
this.chatClient = chatClient;
this.promptTemplate = new PromptTemplate(
"请用{style}风格回答以下问题:{question}"
);
}
public String chatWithStyle(String style, String question) {
Prompt prompt = promptTemplate.create(Map.of(
"style", style,
"question", question
));
ChatResponse response = chatClient.call(prompt);
return response.getResult().getOutput().getContent();
}
}
```
6. Embedding
配置:
```yaml
spring:
ai:
alibaba:
dashscope:
embedding:
options:
model: text-embedding-v1
```
使用 EmbeddingClient:
```java
@Service
public class EmbeddingService {
private final EmbeddingClient embeddingClient;
public EmbeddingService(EmbeddingClient embeddingClient) {
this.embeddingClient = embeddingClient;
}
public List embed(String text) {
EmbeddingResponse response = embeddingClient.embedForResponse(
List.of(text)
);
return response.getResult().getOutput();
}
public List> embedBatch(List texts) {
EmbeddingResponse response = embeddingClient.embedForResponse(texts);
return response.getResult().getOutput();
}
}
```
7. 多轮对话
维护对话上下文:
```java
@Service
public class ConversationService {
private final ChatClient chatClient;
private final List conversationHistory = new ArrayList<>();
public ConversationService(ChatClient chatClient) {
this.chatClient = chatClient;
}
public String chat(String userMessage) {
conversationHistory.add(new UserMessage(userMessage));
Prompt prompt = new Prompt(conversationHistory);
ChatResponse response = chatClient.call(prompt);
String assistantMessage = response.getResult().getOutput().getContent();
conversationHistory.add(new AssistantMessage(assistantMessage));
return assistantMessage;
}
public void clearHistory() {
conversationHistory.clear();
}
}
```