Spring AI 评估大模型生成内容,保障大模型性能

前面文章都是介绍如何使用大模型,本文将从另外一个角度来学习 Spring AI,如何评估大模型的性能。 并看下Spring AI 框架如何实现评估测试的。

为什么要评估测试(Evaluation Testing)

随着大模型技术的推进,评测其性能和能力的需求也日益增长,这不仅仅是技术层面的需求,更关系到商业决策和公众认知。 为什么需要大模型评估测试?主要原因如下;

  • 模型好坏的统一判断标准:如果不构建一个客观公正和定量的模型评测体系,则无法判断众多大模型之间的能力高低,用户无法了解模型的真实能力和实际效果。
  • 模型迭代优化的依据:对于开发者而言,如果不能定量评估模型的能力,则无法跟踪模型能力的变化,无法知道模型的优势和劣势,从而无法有针对的指定模型提升策略,影响模型的迭代升级。
  • 监管安全的要求考虑:对于法律、医疗等关乎社会安全的领域,需要对大模型进行系统的评测,以确认大模型适合在该领域进行使用,而不会造成安全事故。
  • 领域基础模型的选择依据:在不同的领域下,大模型的能力表现各有优劣,需要引入评测体系对大模型在各个领域下的能力进行统一测试,选择出最适合该特定领域的大模型作为基座,从而更好的产业落地。

大模型的评估标准是什么

大模型的评估需要一套标准,所有按照一套标准进行评估,比较才会有公平性,就以 SuperCLUE 为例。

SuperCLUE是一个综合性大模型评测基准,评测主要聚焦于大模型的四个能力象限,包括语言理解与生成、专业技能与知识、Agent智能体和安全性,进而细化为12项基础能力。

评估基准

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

多维度的评测方案

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

根据评测我们可以从大范围内选择适合我们的模型,在此基础上我们可能对模型进行微调等,在微调后我们就需要对微调的模型,使用一些测试数据,对模型进行评估测试。

Spring AI 框架如何支持评估测试

Spring AI 主要测试 AI 应用程序需要评估生成的内容,以确保 AI 模型没有产生幻觉反应。

第一种方式:使用AI自身评估

用于评估响应的 Spring AI 接口定义为 Evaluator

@FunctionalInterface
public interface Evaluator {
    EvaluationResponse evaluate(EvaluationRequest evaluationRequest)
}

评估的输入 EvaluationRequest 定义为

public class EvaluationRequest {

	private final String userText;

	private final List<Content> dataList;

	private final String responseContent;

	public EvaluationRequest(String userText, List<Content> dataList, String responseContent) {
		this.userText = userText;
		this.dataList = dataList;
		this.responseContent = responseContent;
	}

  ...
}

  • userText: 用户的输入文本
  • dataList: 附加到原始输入的上下文数据
  • reponseContent: AI 模型的响应内容

第二种方式:RelevancyEvaluator

它使用 AI 模型进行评估。未来版本中将提供更多实现。 RelevancyEvaluator 使用输入 ( userText ) 和 AI 模型的输出 ( chatResponse ) 来提出问题:

Your task is to evaluate if the response for the query is in line with the context information provided.\n 
You have two options to answer. Either YES/ NO.\n Answer - YES, if the response for the query is in line with context information otherwise NO.\n 
Query: \n {query}\n 
Response: \n {response}\n 
Context: \n {context}\n 
Answer: "

例如:该测试对加载到 Vector Store 中的 PDF 文档执行 RAG 查询,然后评估响应是否与用户文本相关。

@Test
void testEvaluation() {

    dataController.delete();
    dataController.load();
    // 用户的提问
    String userText = "What is the purpose of Carina?";
    // 大模型影响
    String responseContent = ChatClient.builder(chatModel)
            .build().prompt()
            .advisors(new QuestionAnswerAdvisor(vectorStore, SearchRequest.defaults()))
            .user(userText)
            .call()
            .content();
    // 定义一个相关性评估器
    var relevancyEvaluator = new RelevancyEvaluator(ChatClient.builder(chatModel));
    // 将 用户提问 + 模型的响应,一并发给大模型进行评估
    EvaluationRequest evaluationRequest = new EvaluationRequest(userText,
            (List<Content>) response.getMetadata().get(QuestionAnswerAdvisor.RETRIEVED_DOCUMENTS), responseContent);
    // 返回评估结果
    EvaluationResponse evaluationResponse = relevancyEvaluator.evaluate(evaluationRequest);
    // 断言是否大模型是否满足性能需求
    assertTrue(evaluationResponse.isPass(), "Response is not relevant to the question");

}

总结

大模型的评估也是相当重要的,是用好大模型的关键步骤。就像测试一样保障程序尽量少出bug。这个也是一个值得研究的专题,后续也会持续研究,并实践。本文也仅是做一个引入并记录一下。

如何学习AI大模型?

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

  • 15
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我无法直接为您生成代码。但是,我可以为您提供一些指导,以便您开始使用Spring Security框架来实现PBAC模型。 首先,您需要了解什么是PBAC模型。 PBAC(基于角色的访问控制)是一种访问控制模型,其中用户的访问权限由其角色确定。因此,PBAC模型可以表示为具有以下组成部分的权限系统: 1. 用户 2. 角色 3. 权限 4. 资源 在Spring Security中,您可以使用以下组件来实现PBAC模型: 1. Authentication(认证) 2. Authorization(授权) 3. Access Control(访问控制) 下面是一个简单的示例,演示如何使用Spring Security框架实现基于角色的访问控制。 1. 配置授权规则: ```java @Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/admin/**").hasRole("ADMIN") .antMatchers("/user/**").hasRole("USER") .anyRequest().authenticated() .and() .formLogin() .and() .httpBasic(); } @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser("admin").password("{noop}admin").roles("ADMIN") .and() .withUser("user").password("{noop}user").roles("USER"); } } ``` 在这个例子中,我们定义了两个用户角色:ADMIN和USER。ADMIN用户可以访问“/admin/**”路径,而USER用户可以访问“/user/**”路径。任何其他请求都需要进行身份验证才能访问。 2. 创建自定义AccessDecisionVoter: ```java public class PbcaAccessDecisionVoter implements AccessDecisionVoter<Object> { @Override public int vote(Authentication authentication, Object object, Collection<ConfigAttribute> configAttributes) { if (authentication == null) { return ACCESS_DENIED; } int result = ACCESS_ABSTAIN; for (ConfigAttribute attribute : configAttributes) { if (this.supports(attribute)) { result = ACCESS_DENIED; List<GrantedAuthority> authorities = (List<GrantedAuthority>) authentication.getAuthorities(); for (GrantedAuthority authority : authorities) { if (attribute.getAttribute().equals(authority.getAuthority())) { return ACCESS_GRANTED; } } } } return result; } @Override public boolean supports(ConfigAttribute attribute) { return attribute.getAttribute() != null; } @Override public boolean supports(Class<?> clazz) { return true; } } ``` 这个自定义的AccessDecisionVoter实现了AccessDecisionVoter接口,并重写了其中的vote()、supports()和supports()方法。这个自定义的AccessDecisionVoter用于根据用户的角色来决定是否允许访问资源。 3. 配置AccessDecisionManager: ```java @Configuration @EnableGlobalMethodSecurity(prePostEnabled = true) public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration { @Override protected AccessDecisionManager accessDecisionManager() { List<AccessDecisionVoter<? extends Object>> decisionVoters = Arrays.asList(new PbcaAccessDecisionVoter()); return new AffirmativeBased(decisionVoters); } } ``` 在这个例子中,我们定义了一个方法级别的安全配置,并通过@EnableGlobalMethodSecurity注解启用了prePostEnabled选项。我们还配置了一个AccessDecisionManager,该Manager使用我们之前定义的自定义AccessDecisionVoter来做出访问决策。 这是一个简单的示例,演示如何使用Spring Security框架实现基于角色的访问控制。当然,您需要根据您的需求进行更改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值