如何使用Spring Boot AI Ollama(Llama3)构建生成式AI应用
我们正在使用Ollama构建Spring AI应用
Ollama 很可能是某个特定的AI模型或服务,可能是因为品牌或风格的原因而以动物“羊驼”命名。然而,由于缺乏进一步的上下文,很难提供关于 Ollama 的具体信息。
通常,像 Ollama 这样的 AI 模型和服务用于各种自然语言处理(NLP)任务,例如:
- 文本生成:根据给定的提示或上下文生成类似人类的文本。
- 语言理解:理解和处理自然语言查询或命令。
- 聊天机器人和对话界面:构建聊天机器人或对话代理,以便用自然语言与用户交互。
- 内容创作:为各种目的生成内容,例如文章、故事或产品描述。
- 从官方网站下载 ollama
下载完成后,安装安装文件并打开 http://localhost:11434/
现在它已经在你的本地成功运行了。
2. “ollama run llama3” 运行此命令以在您的系统中下载llama3。
Spring Boot 设置- 通过 Spring initialize 创建一个包含 web 和 Ollama AI 的 Spring Boot 项目。
- 需要注意的是,这是一个实验性项目,在此阶段只有快照版本可用。
- 创建
application.properties
文件。
spring.application.name=spring-AI
spring.ai.ollama.base-url=http://localhost:11434/api
spring.ai.ollama.model=llama3
server.port=8686
spring.main.allow-bean-definition-overriding=true
- 创建
LlamaResponse
模型以表示服务响应
package com.ai.spring.AI.repsonse;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class LlamaResponse {
private String 消息;
}
- 创建
LlamaAiService
接口
包 com.ai.spring.AI.service;
导入 com.ai.spring.AI.repsonse.LlamaResponse;
公共接口 LlamaAiService {
LlamaResponse generateMessage(String prompt);
LlamaResponse generateJoke(String topic);
}
- 创建
LlamaAiServiceImpl
接口
package com.ai.spring.AI.service.impl;
import com.ai.spring.AI.repsonse.LlamaResponse;
import com.ai.spring.AI.service.LlamaAiService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class LlamaAiServiceImpl implements LlamaAiService {
@Autowired
private OllamaChatClient chatClient;
@Override
public LlamaResponse generateMessage(String promptMessage) {
final String llamaMessage = chatClient.generate(promptMessage);
return new LlamaResponse().setMessage(llamaMessage);
}
@Override
public LlamaResponse generateJoke(String topic) {
final String llamaMessage = chatClient.generate(String.format("告诉我一个关于%s的笑话", topic));
return new LlamaResponse().setMessage(llamaMessage);
}
}
- 创建
ChatClient
接口
包 com.ai.spring.AI.service;
公接口 ChatClient {
字符串 generate(字符串 prompt);
}
. 创建 OllamaChatClient
服务实现
package com.ai.spring.AI.service.impl;
import com.ai.spring.AI.service.ChatClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;
@Component("customOllamaChatClient")
public class OllamaChatClient implements ChatClient {
private final RestTemplate restTemplate;
private final String baseUrl;
private final String model;
public OllamaChatClient(RestTemplate restTemplate, @Value("${spring.ai.ollama.base-url}") String baseUrl, @Value("${spring.ai.ollama.model}") String model) {
this.restTemplate = restTemplate;
this.baseUrl = baseUrl;
this.model = model;
}
@Override
public String generate(String prompt) {
String url = String.format("%s/generate", baseUrl);
Map<String, Object> request = new HashMap<>();
request.put("model", model);
request.put("prompt", prompt);
request.put("stream", false);
try {
// 打印 URL 和请求负载以进行调试
System.out.println("URL: " + url);
System.out.println("Request: " + request);
return restTemplate.postForObject(url, request, String.class);
} catch (HttpClientErrorException e) {
// 记录错误详情
System.err.println("Error: " + e.getStatusCode() + " - " + e.getResponseBodyAsString());
throw e;
}
}
}
. 创建 AppConfig
package com.ai.spring.AI.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class AppConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
代码片段保持不变。
. 创建 LlamaRestController
package com.ai.spring.AI.controller;
import com.ai.spring.AI.repsonse.LlamaResponse;
import com.ai.spring.AI.service.impl.LlamaAiServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@RestController
public class LlamaRestController {
@Autowired
private LlamaAiServiceImpl llamaAiService;
@GetMapping("api/v1/ai/generate")
public ResponseEntity<LlamaResponse> generate(
@RequestParam(value = "promptMessage", defaultValue = "为什么天空是蓝色的?")
String promptMessage) {
final LlamaResponse aiResponse = llamaAiService.generateMessage(promptMessage);
return ResponseEntity.status(HttpStatus.OK).body(aiResponse);
}
@PostMapping("api/v1/ai/generate/joke/{topic}")
public ResponseEntity<LlamaResponse> generateJoke(@PathVariable String topic) {
final LlamaResponse aiResponse = llamaAiService.generateJoke(topic);
return ResponseEntity.status(HttpStatus.OK).body(aiResponse);
}
}
@ 启动您的Spring Boot应用并访问这些URL
http://localhost:8686/api/v1/ai/generate/joke/student
http://localhost:8686/api/v1/ai/生成
检查进入 olama 命令提示符也
感谢你,继续学习!
关注我获取更多精彩内容
ajtech感谢你读到最后。在你离开之前:
[关注我在Medium上的文章](https://medium.com/https:/medium.com/@saijanand)
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦