当前位置: 首页 > news >正文

8.Spring Ai Alibaba招聘助手实战

Spring AI Alibaba招聘助手实战

  • 智能简历筛选助手
  • 该助手借助 Spring AI 的特性结合人工智能技术,为企业提供快速查看应聘候选人的信息及与候选人岗位的匹配度的服务。

一、🏗️搭建环境

① 创建工程,引入依赖

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-dashscope</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>

② 创建配置文件

server.port=8007
spring.application.name=SpringAiAlibabaAll
spring.ai.dashscope.api-key=sk-b723dfc465939f17

二、📚创建RAG知识库

用全部候选人的简历构建一个简历知识库

2.1 📄创建txt文本

命名“李四简历.txt”,放到resource目录下

在这里插入图片描述

教育经历
北京大学 软件工程 本科 2005.09 - 2009.06
主修课程:Java语言开发、C语言开发、操作系统、编译原理、计算机网络、算法导论、电商商务、电子基础、高等数学、概率论与统计、离散数学。
工作经验
阿里巴巴有限公司 算法工程师
2009-7-1 - 2015-7-10
拥有五年以上的算法工程师经验,熟悉各种开发语言的使用,比如Java、C++、C#等,熟练使用各种主流深度学习框架,能独立开发出高质量、高性能的算法模型,精通数据结构、算法及机器学习模型的实现与优化,在多个项目中负责算法模型的设计与开发,包括基于深度学习的图像识别、语音识别及自然语言处理等方向。。
小米科技有限公司 算法工程师
2015-8-1 - 2020-3-1
担任小米科技有限公司算法工程师,负责参与开发高性能机器学习算法。在项目中,我使用Python和MATLAB编写了多种算法模型,并且实现了GPU加速计算,使得算法在处理大规模复杂数据时表现优异。
就职于小米科技有限公司,作为算法工程师,全程参与了一款自动驾驶系统的开发。在项目中,我主要通过深度学习、目标检测等技术,实现了车辆识别、道路分割等多项技术难点,使得系统在真实道路环境下表现出了较高的稳定性和可靠性。
在小米科技有限公司,我作为算法工程师负责了一项推荐系统的研发。该系统基于用户行为数据,使用协同过滤和深度学习技术,为用户推荐最优质的内容。在项目中,我优化了多种推荐算法,优化推荐精度达到了90%以上。

2.2 🛠️添加配置类(RAG)

@Configuration
public class RagConfig {@BeanVectorStore vectorStore(EmbeddingModel embeddingModel) {SimpleVectorStore simpleVectorStore =SimpleVectorStore.builder(embeddingModel).build();//提取文本内容String filepath = "李四简历.txt";TextReader textReader = new TextReader(filepath);textReader.getCustomMetadata().put("filepath",filepath);List<Document> documents = textReader.get();//段落切分TokenTextSplitter splitter =new TokenTextSplitter(1200,350, 5,100, true);splitter.apply(documents);//向量化存储simpleVectorStore.add(documents);return simpleVectorStore;}
}
  • 通过以上过程,一个简单的 RAG 知识库就创建完成了,使用时直接在向量库中检索即可

三、🛠️创建工具类

3.1 🧰创建工具

  • 创建一个工具(Tool),可以用来查询候选人应聘的岗位。
@Component
public class RecruitServiceTool {@Tool(name = "recruit_service", description = "某某是否有资格面试")public Response apply(Request request) {String position = "未知";if (request.name.contains("李四")) {position = "算法工程师";}System.out.println("recruit_service: 工具调用了");return new Response(position);}public record Request(String name) {}public record Response(String position) {}
}

四、👤编写应用的人设

角色与目标:你是一个招聘助手,会针对用户的问题,结合候选人经历,岗位匹配度等专业知识,给用户提供指导。

指导原则:你需要确保给出的建议合理科学,不会对候选人的表现有言论侮辱。

限制:在提供建议时,需要强调在个性建议方面用户仍然需要线下寻求专业咨询。

澄清:在与用户交互过程中,你需要明确回答用户关于招聘方面的问题,对于非招聘方面的问题,你的回应是‘我只是一个招聘助手,不能回答这个问题哦’。

个性化:在回答时,你需要以专业可靠的预期回答,偶尔可以带点幽默感。调节气氛。

五、🎮编写Controller

将人设、知识库、工具通过 Spring AI 框架串联起了,搭建成应用

package com.alibaba.springaialibabaall.controller;import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatOptions;
import com.alibaba.springaialibabaall.tools.RecruitServiceTool;
import org.springframework.ai.chat.messages.Message;
import org.springframework.ai.chat.messages.SystemMessage;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.chat.model.Generation;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.chat.prompt.PromptTemplate;
import org.springframework.ai.document.Document;
import org.springframework.ai.support.ToolCallbacks;
import org.springframework.ai.tool.ToolCallback;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;@RestController
public class ChatController {@Autowiredprivate ChatModel chatModel;@Autowiredprivate VectorStore vectorStore;@Autowiredprivate RecruitServiceTool recruitServiceTool;private static final String SYSTEM_PROMPT = """角色与目标:你是一个招聘助手,会针对用户的问题,结合候选人经历,岗位匹配度等专业知识,给用户提供指导。指导原则:你需要确保给出的建议合理科学,不会对候选人的表现有言论侮辱。限制:在提供建议时,需要强调在个性建议方面用户仍然需要线下寻求专业咨询。澄清:在与用户交互过程中,你需要明确回答用户关于招聘方面的问题,对于非招聘方面的问题,你的回应是'我只是一个招聘助手,不能回答这个问题哦'。个性化:在回答时,你需要以专业可靠的预期回答,偶尔可以带点幽默感。调节气氛。给你提供一个数据参考,并且给你调用岗位投递检索公户请你跟进数据参考与工具返回结果回复用户的请求。""";private static final String USER_PROMPT_TEMPLATE = """给你提供一些数据参考:{info},请回答我的问题:{query}。请你跟进数据参考与工具返回结果回复用户的请求。""";@GetMapping("/ai/agent")public String agent(@RequestParam("query") String query) {//检索挂载信息List<Document> documents = vectorStore.similaritySearch(query);//提取相关信息String info = "";if (documents.size() > 0) {info = documents.get(0).getText();}//构造提示词SystemMessage systemMessage = new SystemMessage(SYSTEM_PROMPT);PromptTemplate promptTemplate = new PromptTemplate(USER_PROMPT_TEMPLATE);Message userMessage = promptTemplate.createMessage(Map.of("info", info, "query", query));//配置 ToolCallingToolCallback[] recruitServiceTools = ToolCallbacks.from(recruitServiceTool);Prompt prompt = new Prompt(List.of(userMessage, systemMessage),DashScopeChatOptions.builder().withToolCallbacks(List.of(recruitServiceTools)).build());//调用List<Generation> results = chatModel.call(prompt).getResults();String content = results.stream().map(x -> x.getOutput().getText()).collect(Collectors.joining());return content;}
}

六、🧪测试

在这里插入图片描述

http://www.dtcms.com/a/399403.html

相关文章:

  • 平凉网站建设平凉杭州电信网站备案
  • 从GitHub下载单个文件夹的完整指南
  • 第二课强登陆网站新型智库建设的意见OA网站建设分析
  • Dify本地化部署和应用
  • 公司网站怎么做才能有官网二字做外贸网站那个平台好
  • linux docker 数据迁移
  • 自动点击器助手 1.1.5 | 支持免root录制点击脚本,一键录制重复点击脚本
  • qwen2.5-vl多模态大模型详解
  • 如何做好一个网站深圳网站和app建设
  • Linux进程概念(1)
  • w32time 服务
  • 视频解析网站怎么做的wordpress阿里云卡死了
  • 审美积累,顶刊论文插图原理图、流程图
  • 网站开发上市公司做彩票网站犯法不
  • python+django/flask在线问诊系统 医院就诊 医生推荐系统
  • 【Qt】QButtonGroup、QToolButton、QStackedWidget的常用用法
  • QT:串口通信、串口发送与接收(2)
  • 【Unity 入门教程】一、前置工作
  • 北京网站建设公司空间续费北京建设工程施工司法解释
  • 需求收集不完整的常见原因有哪些
  • 论坛网站备案开发者选项在哪里打开vivo
  • 谈谈数组和链表的时间复杂度
  • ServletContex读取properties文件,中文乱码
  • todesk取消客户端开机自动启动后,开机仍然会启动客户端,怎么设置?
  • C++编程学习(第36天)
  • 如何快速处理电脑上常常遇到的各种小问题?
  • 卷积神经网络(CNN)的LeNet模型
  • 佛山网站外包什么是网站推广方案
  • 合肥门户网站制作建设佛山cms建站
  • Linux命令大全-usermod命令