引言
随着人工智能技术的飞速发展,大型语言模型(large language models, llms)已成为自然语言处理领域的研究热点。ollama是一个强大的工具,它使得在本地部署和管理这些大型语言模型变得更加便捷。本文档旨在指导java开发者如何在java应用程序中调用基于ollama部署的本地大型语言模型,实现文本生成、问答、文本分类等多种自然语言处理任务。
环境准备
- 安装ollama和模型加载: 该内容已经在之间文档进行说明,这里不再赘述,读者可以查看之前的文档内容。。
- java环境: java我们现在java 17进行开发,因为我们依赖的io.springboot.ai,从查看资料的结果看,需要基于java17或者以上才能进行开发,不然可能在程序启动的时候存在如下报错
ollamachatclient.class
类文件具有错误的版本 61.0, 应为 52.0
请删除该文件或确保该文件位于正确的类路径子目录中。
java调用ollama
我们通过基于一个springboot和maven方式并且通过接口展示的方式进行举例,我们程序代码的结果如下
1. pom.xml设置
我们设置我们的pom.xml中的内容如下
<?xml version="1.0" encoding="utf-8"?> <project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version>3.2.5</version> <relativepath/> <!-- lookup parent from repository --> </parent> <groupid>org.example</groupid> <artifactid>testai</artifactid> <version>1.0-snapshot</version> <properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <java.version>17</java.version> <project.build.sourceencoding>utf-8</project.build.sourceencoding> </properties> <dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> <dependency> <groupid>io.springboot.ai</groupid> <artifactid>spring-ai-ollama-spring-boot-starter</artifactid> <version>1.0.0</version> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-devtools</artifactid> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupid>org.projectlombok</groupid> <artifactid>lombok</artifactid> <optional>true</optional> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-test</artifactid> <scope>test</scope> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-web</artifactid> <version>6.1.6</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-maven-plugin</artifactid> <configuration> <excludes> <exclude> <groupid>org.projectlombok</groupid> <artifactid>lombok</artifactid> </exclude> </excludes> </configuration> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>spring milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> </project>
2. application.properties设置
我们设置我们的application.properties中的内容如下
server.port=8099 spring.ai.ollama.base-url=http://10.31.128.110:9999 spring.ai.ollama.chat.options.model=qwen2-7b:latest
其中上述的内容中spring.ai.ollama.base-url为你本地使用ollama搭建的大模型地址,spring.ai.ollama.chat.options.model则是你在文档搭建的大模型名称
3. application启动设置
我们设置testaiapplication主程序启动的代码如下
package org.example; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.scheduling.annotation.enableasync; @enableasync @springbootapplication public class testaiapplication { public static void main(string[] args) { springapplication.run(testaiapplication.class, args); } }
4. 接口暴露
我们编写aicontroller暴露对应的接口内容
package org.example.controller; import org.springframework.ai.ollama.ollamachatclient; import org.springframework.beans.factory.annotation.autowired; import org.springframework.beans.factory.annotation.qualifier; import org.springframework.web.bind.annotation.getmapping; import org.springframework.web.bind.annotation.requestparam; import org.springframework.web.bind.annotation.restcontroller; @restcontroller public class aicontroller { @autowired @qualifier("ollamachatclient") private ollamachatclient ollamachatclient; @getmapping("/ollama/chat/v1") public string ollamachat(@requestparam string msg) { return this.ollamachatclient.call(msg); } }
5. 程序启动
编写好对应的代码以后,我们可以启动我们的程序
2024-09-18t15:10:34.292+08:00 info 16896 — [ restartedmain] o.s.b.w.embedded.tomcat.tomcatwebserver : tomcat started on port 8099 (http) with context path ‘’
2024-09-18t15:10:34.328+08:00 info 16896 — [ restartedmain] org.example.testaiapplication : started testaiapplication in 7.331 seconds (process running for 8.44)
6. 测试验证
通过上述代码我们可以知道,我们暴露的接口是/ollama/chat/v1,我们打开浏览器,测试对应的接口信息,调用接口如下:http://127.0.0.1:8099/ollama/chat/v1?msg=你是谁
我们可以得到大模型返回的结果如下:
注意事项
- 安全性: 考虑到api可能暴露在公网,务必采取适当的安全措施,如使用https、api密钥验证等。
- 资源管理: 大型语言模型运行时消耗大量计算资源。监控和限制并发请求,避免资源耗尽。
- 错误处理: 实际应用中要增加异常处理逻辑,确保程序健壮性。
结语
通过上述步骤,你可以在java应用程序中无缝集成基于ollama的本地大型语言模型,为你的项目增添强大的自然语言处理能力。随着ollama及其支持的模型不断更新,持续探索和优化模型调用策略,将能进一步提升应用性能和用户体验。
到此这篇关于java调用基于ollama本地大模型的实现的文章就介绍到这了,更多相关java调用ollama本地大模型内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论