Spring Boot 및 Spring AI를 사용하여 생성 인공 지능 애플리케이션 구축
업계 리더인 Spring+AI는 강력하고 유연한 API와 고급 기능을 통해 다양한 산업에 선도적인 솔루션을 제공합니다. 이 주제에서는 다양한 분야의 Spring+AI 적용 사례를 살펴보겠습니다. 각 사례에서는 Spring+AI가 어떻게 특정 요구 사항을 충족하고 목표를 달성하며 이러한 교훈을 더 넓은 범위의 애플리케이션으로 확장하는지 보여줍니다. 이 주제가 여러분이 Spring+AI의 무한한 가능성을 더 깊이 이해하고 활용하는 데 영감을 줄 수 있기를 바랍니다.
스프링 프레임워크는 소프트웨어 개발 분야에서 20년 넘게 활동해왔고, 스프링 부트 1.0 버전이 출시된 지 10년이 지났습니다. 이제 Spring이 개발자를 반복적인 작업에서 해방시키고 비즈니스 가치 제공에 중점을 두는 독특한 스타일을 만들었다는 사실에는 누구도 이의를 제기할 수 없습니다. 시간이 지남에 따라 Spring의 기술적 깊이는 계속 증가하여 광범위한 개발 영역과 기술을 포괄합니다. 반면에, 보다 전문적인 솔루션이 시도되고, 개념 증명이 생성되고, 궁극적으로 프로젝트라는 이름 아래 홍보되면서 기술적 범위가 계속 확장됩니다.
Spring + AI 프로젝트는 참조 문서에 따르면 생성 인공 지능 계층의 필요성이 애플리케이션에 도입될 때 개발 프로세스를 단순화하는 것을 목표로 하는 예입니다. 개발자는 다시 한번 반복적인 작업에서 벗어나 간단한 인터페이스를 통해 사전 훈련된 모델(실제 처리 알고리즘 포함)과 직접 상호 작용할 수 있습니다.
Spring AI를 통해 직접 생성적 사전 훈련된 변환기(GPT)와 프로그래밍 방식으로 상호 작용함으로써 사용자(개발자)는 광범위한 기계 학습 지식을 가질 필요가 없습니다. 그러나 엔지니어로서 저는 이러한 개발자 도구가 사용하기 쉽고 빠르며 결과를 생성할 수 있음에도 불구하고 먼저 기본 개념을 이해하는 데 자제하고 주의를 기울여야 한다고 강력하게 생각합니다. 또한 이 경로를 따르면 출력의 가치가 더 높아질 수 있습니다.
Purpose
이 문서에서는 Spring AI를 Spring Boot 애플리케이션에 통합하고 프로그래밍 방식으로 OpenAI와 상호 작용하는 방법을 소개합니다. 우리는 디자인이 일반적으로 최첨단 활동이라고 가정합니다. 따라서 실험 중에 사용된 프롬프트는 유익하지만 그다지 적용 가능하지는 않습니다. 여기서 초점은 통신 인터페이스인 Spring AI API에 있습니다.
구현 전
우선, 더 나은 품질을 제공하고 시간을 절약하며 비용을 절감하기를 바라는 것 외에도 GPT 솔루션을 사용하는 이유를 명확히 해야 합니다.
프로덕션 AI는 시간이 많이 걸리는 많은 작업을 수행하고 결과를 더 빠르고 효율적으로 생성하는 데 능숙하다고 합니다. 더욱이, 이러한 결과가 경험 많고 지능적인 인간에 의해 추가로 검증되면 유용한 결과를 얻을 가능성이 높아집니다.
다음으로 바로 구현에 들어가고 싶은 유혹을 물리치고 최소한 시간을 내어 일반적인 개념에 익숙해지세요. 생성 AI 개념에 대한 심층적인 탐구는 이 기사의 범위를 훨씬 벗어납니다. 그러나 상호 작용에 참여하는 "주요 행위자"에 대해서는 아래에서 간략하게 설명합니다.
스테이지 - 생성 AI는 인공 지능의 일부입니다.
입력 - 제공된 데이터(입력)
출력 - 계산 결과(출력)
대형 언어 모델(LLM) - 출력을 생성하는 미세 조정된 알고리즘 해석된 입력을 기반으로
프롬프트 단어 - 입력이 모델에 전달되는 최첨단 인터페이스
프롬프트 단어 템플릿 - 구조화된 매개변수 프롬프트의 구성을 허용하는 구성 요소
토큰 - 알고리즘이 내부적으로 입력을 토큰으로 변환하고 그런 다음 이 토큰을 사용하여 결과를 컴파일하고 최종적으로
모델의 환경 창 - 모델이 호출당 토큰 수를 제한하는 임계값(일반적으로 사용되는 토큰이 많을수록 작업 비용이 더 많이 듭니다) 에서 출력을 구성합니다.
마지막으로 구현을 시작할 수 있지만 구현이 진행됨에 따라 처음 두 단계를 검토하고 최적화하는 것이 좋습니다.
프롬프트 단어
이 연습에서는 다음을 요청합니다.
Write {count = three} reasons why people in {location = Romania} should consider a {job = software architect} job. These reasons need to be short, so they fit on a poster. For instance, "{job} jobs are rewarding."
上面内容代表了提示词模板。按照建议,应作为提示词的一部分提供清晰的主题,清晰的任务含义以及额外的有用信息,以提高结果的准确性。
提示词包含三个参数
count - 希望作为输出的原因数量
job - 感兴趣的领域或工作
location - 工作申请者所在的国家,城镇,地区等
概念验证
在这篇文章中,简单的概念验证目标如下:
将 Spring AI 集成到Spring Boot应用程序并使用它
允许客户端通过应用程序与 Open AI 进行通信
客户端向应用程序发出参数化的HTTP请求
应用程序使用一个提示词来创建输入,发送给 Open AI 并获取输出
应用程序将响应发送给客户端
图片
项目设置
Java 21
Maven 3.9.2
Spring Boot – v. 3.2.2
Spring AI – v. 0.8.0-SNAPSHOT (仍在开发,实验性)
代码实现
Spring AI 集成
通常,这是一个基本步骤,不一定值得一提。然而,因为 Spring AI 目前以快照形式发布,为了能够集成 Open AI 自动配置依赖,你需要添加一个引用到 Spring 快照仓库。
<repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository></repositories>
下一步是添加 spring-ai-openai-spring-boot-starter Maven 依赖项。
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId><version>0.8.0-SNAPSHOT</version></dependency>
Open AI ChatClient 现在是应用程序类路径的一部分。它是用来向 Open AI 发送输入并获取输出的组件。
为了能够连接到AI模型,需要在 application.properties 文件中设置 spring.ai.openai.api-key 属性。
spring.ai.openai.api-key = api-key-value
它的值代表了用户的有效API密钥,用户将通过此密钥进行通信。通过访问[资源2],可以注册或登录并生成一个。
客户端 - Spring Boot应用程序通信
概念验证的第一部分是客户端应用程序(例如浏览器,curl等)与开发的应用程序之间的通信。这是通过一个 REST 控制器实现的,可以通过HTTP GET请求访问。
URL路径是 /job-reasons,还有之前在定义提示时概述的三个参数,这将导致如下格式:
/job-reasons?count={count}&job={job}&locatinotallow={location}
和相应的控制器:
@RestControllerpublic class OpenAiController { @GetMapping("/job-reasons")public ResponseEntity<String> jobReasons(@RequestParam(value = "count", required = false, defaultValue = "3") int count, @RequestParam("job") String job, @RequestParam("location") String location) {return ResponseEntity.ok().build();}}
由于来自 Open AI 的响应将是一个字符串,因此控制器返回一个封装了字符串的ResponseEntity。如果我们运行应用程序并发出请求,当前响应体部分没有返回任何内容。
客户端 - Open AI 通信
Spring AI 目前主要关注处理语言并产生语言或数字的AI模型。在前一类别中, Open AI 模型的例子包括GPT4-openai或GPT3.5-openai。
为了与这些AI模型(实际上是指 Open AI 算法)进行交互, Spring AI 提供了一个统一的接口。
ChatClient接口目前支持文本输入和输出,并具有简单的契约。
@FunctionalInterfacepublic interface ChatClient extends ModelClient<Prompt, ChatResponse> {default String call(String message) {Prompt prompt = new Prompt(new UserMessage(message));return call(prompt).getResult().getOutput().getContent();} ChatResponse call(Prompt prompt);}
确实如此,功能接口的实际方法通常是被使用的方法。
在我们的概念验证中,这正是我们所需要的,一种调用 Open AI 并发送目标参数化 Prompt 作为参数的方式。我们定义了以下的OpenAiService,在其中注入了一个 ChatClient 的实例。
@Servicepublic class OpenAiService { private final ChatClient client; public OpenAiService(OpenAiChatClient aiClient) {this.client = aiClient;} public String jobReasons(int count, String domain, String location) {final String promptText = """Write {count} reasons why people in {location} should consider a {job} job.These reasons need to be short, so they fit on a poster.For instance, "{job} jobs are rewarding.""""; final PromptTemplate promptTemplate = new PromptTemplate(promptText);promptTemplate.add("count", count);promptTemplate.add("job", domain);promptTemplate.add("location", location); ChatResponse response = client.call(promptTemplate.create());return response.getResult().getOutput().getContent();}}
如果应用程序正在运行,那么可以从浏览器执行以下请求:
http://localhost:8080/gen-ai/job-reasons?count=3&job=software%20architect&locatinotallow=Romania
这下面的结果被检索出来的结果:
利润丰裕的职业:软件架构师的工作提供了有竞争力的薪酬和出色的增长机会,确保在罗马尼亚的财务稳定和成功。
热门职业:随着技术需求的持续增长,软件架构师在罗马尼亚和全世界都备受追捧,提供了丰富的就业前景和就业保障。
创造性问题解决:软件架构师在设计和开发创新软件解决方案中扮演着至关重要的角色,使他们可以释放他们的创造力,并对各种行业产生重大影响。
这就是我们所期望的——一个简易的接口,通过它,可以要求 Open AI GPT模型写出一些原因,解释为何在特定地点的特定工作具有吸引力。
调整和观察
到目前为止,开发的简单概念验证主要使用了默认的配置。
ChatClient实例可以通过各种属性根据所需需要来配置。虽然这超出了本文的范围,但在这里举两个例子。
spring.ai.openai.chat.options.model 指定要使用的AI模型。默认为'gpt-35-turbo',但'gpt-4'和'gpt-4-32k'指定的是最新版本。虽然这些版本都是可用的,但你可能无法使用按使用量付费的计划来访问这些版本,但 Open AI 网站上有更多的信息可以帮助你了解如何适应它。
另一个值得一提的属性是 spring.ai.openai.chat.options.temperature。根据参考文档,采样温度控制了“回应的创新性”。据说,较高的值会让输出“更随机”,而较低的值会“更专注和决定性”。默认值为0.8,如果我们将其降低到0.3,重启应用并再次使用相同的请求参数询问,下面的结果将被检索出来。
有利可图的职业机会:罗马尼亚的软件架构师工作提供有竞争力的薪水和极好的成长前景,对于寻求财务稳定和职业发展的个人来说,这是一个吸引人的职业选择。
具有挑战性和智能刺激的工作:作为一名软件架构师,你将负责设计和实现复杂的软件系统,解决复杂的技术问题,并与有才华的团队合作。这个角色提供了持续的学习机会和在尖端技术上工作的机会。
高需求和工作保障:随着对技术和数字化转型的依赖增加,各行各业对熟练软件架构师的需求在上升。选择在罗马尼亚的软件架构师工作确保了工作安全和广泛的就业选择,无论是在本地还是国际上。
可以看出,这种情况下的输出更具描述性。
最后一个考虑因素是与获取的输出的结构相关的。拥有将实际接收的有效载荷映射到Java对象(例如,类或记录)的能力将非常方便。截至目前,表示形式是文本形式,实现也是如此。输出解析器可能实现这一点,类似于Spring JDBC的映射结构。
在这个概念验证中,我们使用了一个BeanOutputParser,它允许直接将结果反序列化到Java记录中,如下所示:
public record JobReasons(String job, String location, List<String> reasons) {}
通过将 {format} 作为提示文本的一部分,并将其作为指示提供给 AI 模型。
OpenAiService 方法变为:
public JobReasons formattedJobReasons(int count, String job, String location) {final String promptText = """Write {count} reasons why people in {location} should consider a {job} job.These reasons need to be short, so they fit on a poster.For instance, "{job} jobs are rewarding."{format}"""; BeanOutputParser<JobReasons> outputParser = new BeanOutputParser<>(JobReasons.class); final PromptTemplate promptTemplate = new PromptTemplate(promptText);promptTemplate.add("count", count);promptTemplate.add("job", job);promptTemplate.add("location", location); promptTemplate.add("format", outputParser.getFormat());promptTemplate.setOutputParser(outputParser); final Prompt prompt = promptTemplate.create(); ChatResponse response = client.call(prompt);return outputParser.parse(response.getResult().getOutput().getContent());}
再次调用时,输出如下:
{"job":"software architect","location":"Romania","reasons":["High demand","Competitive salary","Opportunities for growth"]}
格式符合预期,但解释的原因似乎较少,这意味着需要进行额外的调整以达到更好的可用性。然而,从概念验证的角度来看,这是可接受的,因为焦点是形式。
结论
提示设计是任务的重要部分 - 提示越清晰,输入越好,输出的质量也就越高。
使用 Spring AI 与各种聊天模型进行集成非常简单 - 本篇文章展示了一个 Open AI 的集成。
然而,对于 Gen AI 或者几乎任何技术来说,首先至少要熟悉基本概念是非常重要的。然后,尝试理解如何进行通讯的魔法,最后再开始编写“生产”代码。
最后但同样重要的是,建议进一步探索 Spring AI API,以了解实现并随着其不断发展和改进保持最新状态。
위 내용은 Spring Boot 및 Spring AI를 사용하여 생성 인공 지능 애플리케이션 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











이 기사에서는 데비안 시스템에서 Apache의 로그 형식을 사용자 정의하는 방법에 대해 설명합니다. 다음 단계는 구성 프로세스를 안내합니다. 1 단계 : Apache 구성 파일 액세스 Debian 시스템의 기본 Apache 구성 파일은 일반적으로 /etc/apache2/apache2.conf 또는 /etc/apache2/httpd.conf에 있습니다. 다음 명령을 사용하여 루트 권한으로 구성 파일을 엽니 다.

Tomcat 로그는 메모리 누출 문제를 진단하는 열쇠입니다. Tomcat 로그를 분석하면 메모리 사용 및 가비지 수집 (GC) 동작에 대한 통찰력을 얻을 수 있으며 메모리 누출을 효과적으로 찾아서 해결할 수 있습니다. 다음은 Tomcat 로그를 사용하여 메모리 누출 문제를 해결하는 방법입니다. 1. GC 로그 분석 먼저 자세한 GC 로깅을 활성화하십시오. 다음 JVM 옵션을 Tomcat 시작 매개 변수에 추가하십시오. -xx : printgcdetails-xx : printgcdatestamps-xloggc : gc. 분석 gc.log

Debian Systems에서 readDIR 함수는 디렉토리 내용을 읽는 데 사용되지만 반환하는 순서는 사전 정의되지 않습니다. 디렉토리에 파일을 정렬하려면 먼저 모든 파일을 읽은 다음 QSORT 기능을 사용하여 정렬해야합니다. 다음 코드는 데비안 시스템에서 readdir 및 qsort를 사용하여 디렉토리 파일을 정렬하는 방법을 보여줍니다.#포함#포함#포함#포함#포함 // QsortIntCompare (constvoid*a, constVoid*b) {returnStrcmp (*(*)

Debian Systems에서 ReadDir 시스템 호출은 디렉토리 내용을 읽는 데 사용됩니다. 성능이 좋지 않은 경우 다음과 같은 최적화 전략을 시도해보십시오. 디렉토리 파일 수를 단순화하십시오. 대규모 디렉토리를 가능한 한 여러 소규모 디렉토리로 나누어 읽기마다 처리 된 항목 수를 줄입니다. 디렉토리 컨텐츠 캐싱 활성화 : 캐시 메커니즘을 구축하고 정기적으로 캐시를 업데이트하거나 디렉토리 컨텐츠가 변경 될 때 캐시를 업데이트하며 readDir로 자주 호출을 줄입니다. 메모리 캐시 (예 : Memcached 또는 Redis) 또는 로컬 캐시 (예 : 파일 또는 데이터베이스)를 고려할 수 있습니다. 효율적인 데이터 구조 채택 : 디렉토리 트래버스를 직접 구현하는 경우 디렉토리 정보를 저장하고 액세스하기 위해보다 효율적인 데이터 구조 (예 : 선형 검색 대신 해시 테이블)를 선택하십시오.

이 기사에서는 데비안 시스템에서 iptables 또는 UFW를 사용하여 방화벽 규칙을 구성하고 Syslog를 사용하여 방화벽 활동을 기록하는 방법에 대해 설명합니다. 방법 1 : iptablesiptables 사용은 데비안 시스템의 강력한 명령 줄 방화벽 도구입니다. 기존 규칙보기 : 다음 명령을 사용하여 현재 iptables 규칙을보십시오. Sudoiptables-L-N-V 특정 IP 액세스 허용 : 예를 들어, IP 주소 192.168.1.100 허용 포트 80 : Sudoiptables-eActip-ptcp-d- 포트80-S192.16

이 안내서는 데비안 시스템에서 syslog를 사용하는 방법을 배우도록 안내합니다. Syslog는 로깅 시스템 및 응용 프로그램 로그 메시지를위한 Linux 시스템의 핵심 서비스입니다. 관리자가 시스템 활동을 모니터링하고 분석하여 문제를 신속하게 식별하고 해결하는 데 도움이됩니다. 1. syslog에 대한 기본 지식 syslog의 핵심 기능에는 다음이 포함됩니다. 로그 메시지 중앙 수집 및 관리; 다중 로그 출력 형식 및 대상 위치 (예 : 파일 또는 네트워크) 지원; 실시간 로그보기 및 필터링 기능 제공. 2. Syslog 설치 및 구성 (RSYSLOG 사용) Debian 시스템은 기본적으로 RSYSLOG를 사용합니다. 다음 명령으로 설치할 수 있습니다 : sudoaptupdatesud

Debian Mail 서버에 SSL 인증서를 설치하는 단계는 다음과 같습니다. 1. OpenSSL 툴킷을 먼저 설치하십시오. 먼저 OpenSSL 툴킷이 이미 시스템에 설치되어 있는지 확인하십시오. 설치되지 않은 경우 다음 명령을 사용하여 설치할 수 있습니다. 개인 키 및 인증서 요청 생성 다음에 다음, OpenSSL을 사용하여 2048 비트 RSA 개인 키 및 인증서 요청 (CSR)을 생성합니다.

데비안 메일 서버의 방화벽 구성은 서버 보안을 보장하는 데 중요한 단계입니다. 다음은 iptables 및 방화구 사용을 포함하여 일반적으로 사용되는 여러 방화벽 구성 방법입니다. iptables를 사용하여 iptables를 설치하도록 방화벽을 구성하십시오 (아직 설치되지 않은 경우) : sudoapt-getupdatesudoapt-getinstalliptablesview 현재 iptables 규칙 : sudoiptables-l configuration
