首先看下流程图,大概就是下载ollama客户端后下载llama3.1模型启动服务,使用花生壳内网穿透获得新的API地址,然后SpringBoot中采用OKHttpClient调用。
01、下载安装ollama客户端
官网下载地址: https://ollama.com/download
选择自己的系统,我这里演示Windows的
下载完成后获得.exe文件双击安装,一直下一步就行
安装完成后,Win+R键调出运行窗口:
ollama -v
出现 版本号就成功了
02、下载Llama 3.1 大模型
因为大模型比较大,推荐不要使用默认下载地址(默认下载到C盘)
(1)修改环境变量
搜索环境
新建我这三个变量
OLLAMA_HOST 0.0.0.0:11434
OLLAMA_ORIGINS *
OLLAMA_MODELS [自定义模型存的位置]
(2)下载llama3.1模型
下载地址:https://ollama.com/library/llama3.1
这里家用电脑就选8b就行,复制命令:
ollama run llama3.1
键盘win+R 打开cmd运行上面这个命令
下载完成后随便和他聊会天,测试下
原版的llama3.1-8b模型中文能力几乎没有,后面我出如何改中文模型这里不过多说明
可以对话,就说明安装成功了
03、测试API
上面的cmd不要关!!!
(1)浏览官方API文档
API文档地址:https://github.com/ollama/ollama/blob/main/docs/api.md#create-a-blob
快速上手试一试
打开你的postman,我这里用的是Apifox,都一样,能发post请求就行
返回成我这样就成功了
注:如果出现这个错误
格式化一下就可以
postman里面应该是“美化”,反正都一样。
03、内网穿透
首先下载花生壳客户端
下载地址:花生壳客户端官方下载 - 贝锐花生壳官网
一样获得.exe的安装文件,双击一直下一步安装完成(可以自定义安装路径)
点击添加映射,去网页填上自己的IPV4的地址
最后获得了映射的公网IP
注:关闭之前启动的cmd (重要)
重新用ollama serve启动
ollama serve
第一个报错:是因为开机自动启动ollama,用任务管理器关掉就可以
看到第二个的内容就是正常启动了
将你的内网穿透的地址复制到浏览器如果出现这个就成功了
也可以用postman测试玩一下
04、Spring Boot中api调用
打开你的springboot项目
public String talkToLlama(String text) throws IOException {
String url = "https://你的内网穿透地址/api/chat";//请求地址
OkHttpClient client = new OkHttpClient()
.newBuilder()
.connectTimeout(60, TimeUnit.SECONDS) // 设置连接超时时间
.writeTimeout(60, TimeUnit.SECONDS) // 设置写入超时时间
.readTimeout(60, TimeUnit.SECONDS) // 设置读取超时时间
.build();
// 定义请求体的媒体类型为JSON
MediaType JSON = MediaType.get("application/json; charset=utf-8");
String json = "{\n" +
"\"model\": \"llama3.1\"," +
"\"messages\": [{\"role\": \"user\", \"content\": \""+text+"\"}],"+
"\"stream\": "+false+"}";
RequestBody body = RequestBody.create(json, JSON);
//发送POST请求并获取响应:
Request request = new Request.Builder().url(url)
.header("Authorization", "Bearer " + apiKey)
.header("Content-Type", "application/json") // 显式设置Content-Type头
.post(body) // 使用POST方法并传递请求体
.build();
// 发送请求并获取响应
Response response = client.newCall(request).execute();
String result = response.body().string();
JSONObject returnJsonObject = new JSONObject(result);
JSONObject messages = returnJsonObject.getJSONObject("message");
// 提取 content 的值
String content = messages.getString("content").replace("“", "").replace("\"", "").replace("\r", "").replace("\n", "");
// 输出 content 的值
System.out.println("回答的: " + content);
return content;
}
需要使用的时候调用:
String resultText = talkToLlama("自我介绍下")
总结:
经过实测,虽然llama-8b的使用体验不如ChatGPT-4等成熟的闭源大模型(别拿405b的比较,哪个家用电脑用的起),但是本地运行模式还是有其存在的意义的,对于私密性要求较强的用户,也可以在断网的情况下本地加载运行,不用担心相关信息泄露等等。
免责声名:
一切均严格参照ollama开源策略,没有任何侵权意图,本文章全由自己编写,如出现任何问题请联系我,我将删除。
版权归原作者 猪神-PIGGOD 所有, 如有侵权,请联系我们删除。