网站地图页面模板网站空间购买多钱
网站地图页面模板,网站空间购买多钱,wordpress 最热文章,镇江手机网站建设文章详细介绍了AI评估系统的演进历程#xff0c;从传统算法性能评估到基于LLM的评估系统架构#xff0c;包括单LLM、多LLM、人机协作以及Agent评估系统的实现方法#xff0c;并提供了Python和Java代码示例#xff0c;展示了如何利用大模型进行自动化评估#xff0c;解决了…文章详细介绍了AI评估系统的演进历程从传统算法性能评估到基于LLM的评估系统架构包括单LLM、多LLM、人机协作以及Agent评估系统的实现方法并提供了Python和Java代码示例展示了如何利用大模型进行自动化评估解决了传统评估方法在可扩展性和语义敏感性方面的局限。基于算法的评估系统的研究是指导人工智能发展的前提没有这个前提人工智能只能是人工智障。在 20 世纪中期AI 系统评估主要集中于评估特定任务中的算法性能例如逻辑推理和数值计算。传统的机器学习任务如分类和回归通常使用可编程和统计指标包括准确率、精确率和召回率。随着深度学习的出现AI 系统的复杂性迅速增长促使评估标准发生转变。AI 评估已从预定义的可编程机器指标扩展到更灵活、更鲁棒的评估器用于解决复杂、现实的任务。一个典型的例子是图灵测试它通过人类对话来确定 AI 模型是否能够表现出类似人类的智能行为。 图灵测试为评估人工智能模型提供了基本指导方针特别是在评估人工智能模型在灵活和现实环境中的智能方面。然而随着OpenAI的ChatGPT问世大型语言模型LLMs的快速发展推动了它们在各个领域的应用扩展。其中最具前景的应用之一就是基于自然语言响应的评估系统当然在这个契机下一种新的范式已经出现用 LLMs 取代人类代码和统计指标进行评估LLM 作为评估的范式出现克服了人工评估的可扩展性限制和传统指标的语义不敏感性。LLM评估器系统首先我们要知道什么是LLM as a Judge? 一般 judge模型只是用于评估其他神经网络输出的神经网络 并且在大多数情况下他们评估的是文本生成。这些模型从小型专业分类器类似“垃圾邮件过滤器”但针对毒性分析到大型语言模型LLM既有大型通用型也有小型专属型。在后一种情况下当你用 LLM 作为裁判时你会给它一个提示词因此对于LLM作为judge的过程就是通过输入-输出-得分(得分这里主要是要关注分数怎么设定是0-1还是1-10还是1-100)而从对于LLM评估系统大体可以分为单LLM系统、多LLM系统、人机协作系统。a. 单 LLM 系统单LLM系统主要依赖于单个模型执行来进行任务判断其有效性主要取决于LLM的能力以及处理输入数据的策略。这种方法通常可以分为三个基本组成部分提示工程、微调和模型输出后处理。提示工程 涉及设计清晰且结构化的输入提示以从LLM 裁判那里获得准确且符合上下文的响应。这种方法能够确保 LLM 理解特定复杂任务并能够提供与目标一致的判断。在许多情况下精心设计的提示词能显著减少模型训练的必要性。模型微调微调涉及在特定数据集上训练一个已存在的 LLM以使其适应特定的判断任务。当判断领域涉及高度专业化的知识或细微的决策时它尤其有用。模型输出后处理后处理涉及进一步优化评估结果以提取更精确和可靠的结果。这一步骤通常包括分析初始输出、结果不一致性或者是需要改进的地方随后进行有针对性的调整和深入分析。通过解决这些问题从而确保后处理评估结果不仅准确而且与任务的特定目标和标准相一致。对于企业而言优先考虑提示词工程其次是模型输出处理最后是微调。b.多LLM系统多 LLM 评估利用多个 LLM 的集体智慧来增强评估的鲁棒性和可靠性。通过促进模型间通信或独立聚合其输出这些系统可以有效地减少偏差利用不同模型之间的互补优势提高决策精度并促进对复杂判断的更细致理解。协作指LLM之间动态的信息流动(评估过程的中间数据共享)这对于在判断过程中激发见解和分享理由至关重要。相关研究也表明LLM之间的通信可以通过它们的互动产生涌现能力从而实现更一致的决定过程和更好的判断性能。多LLM 系统可以从 LLM 互动中受益于两种反馈方式合作和竞争。合作多LLM可以通过交互共享信息和推理共同实现一个共同目标从而增强整体评估过程。竞争多LLMs系统也可以从竞争性或对抗性通信中受益即 LLMs 相互辩论或争论以评估彼此的输出从而不断优化。投票选举在LLM之间无交互的多 LLM 系统中多个模型独立生成结果随后通过多数投票、加权平均和优先考虑最高置信度预测等技术多种聚合策略将它们综合为最终决策。这些方法允许每个模型不受干扰地评估并最终从每个模型的响应中提取和结合最有效的元素。c.人机协作系统人机协作系统弥合了自动 LLM 判断与人类监督的必要需求之间的差距特别是在法律、医疗保健和教育等高风险领域。人类评估者要么作为最终决策者要么作为验证和改进模型输出的中介。通过融入人类见解混合系统可以确保最终判断更加可靠并与伦理考量保持一致能够通过反馈循环赋能模型的持续改进。Agent评估器系统随着评估对象从简单的文本响应发展到跨专业领域的复杂多步任务传统的 LLM 作为裁判的方式日益不足它只关注最终输出而未能验证中间步骤或满足专业领域的严格标准。为了弥补这一差距范式正在转向采用去中心化审议、可执行验证和细粒度评估的 Agent 作为裁判以缓解这些局限性。a. 单智能体评估器Agent-as-a-Judge 代表了一个快速发展的领域其已经开始渗透评测系统然而目前单Agent评估系统跟LLM一样存在一个非常重要的问题-自我偏见。这种单智能体带有很强主观性意识对于系统而言存在严重问题。多智能体协作多智能体协作利用集体推理来减轻 Agent-as-a-Judge 系统中的单LLM 偏见。早期系统遵循固定协议的程序范式而近期研究则朝着基于反馈自适应选择智能体的反应式方法发展。投票选举 or 聚合多智能体跟多LLM一样通过选举投票和信息共享来解决单Agent的偏见问题。多任务分解除此之外Agent比多LLM好的一个策略是多任务分解。这是 Agent-as-a-Judge 范式中的一项核心能力它能够将高级评估目标分解为可执行的子任务并根据中间分析动态调整评估轨迹拆解后的任务采用分而治之策略将不同的子任务分配给专门的代理进行系统评估。工具集成与记忆工具集成是 Agent-as-a-Judge 框架的核心能力使评估器能够基于外部证据和明确检查来进行评估。在 Agent-as-a-Judge 框架中工具的一个常见用途是收集支持评估的额外证据。这类证据包括中间产物、执行结果和感知信号这些信号无法通过基于文本的推理可靠地获取。例如在代码相关任务中Agent-as-a-Judge允许评估器检查执行产物或运行自动检查以用于评估的执行反馈【反馈】。当然我们还可以使用工具来验证被评估者的输出或中间推理步骤是否满足明确的正确性约束例如逻辑有效性、数学严谨性或事实一致性。在这些框架中评估器Agent识别需要验证的声明或步骤并调用适当的工具进行检查。然后Agent在上下文中解释这些验证信号以指导最终评估【指导】。对于记忆一般使 Agent-as-a-Judge 框架能够在评估步骤之间保留信息支持多步推理、一致判断和重用先前结果。根据记忆的作用对先前工作分类包括中间状态跟踪和个性化上下文保留。在后期需要调用使用的时候可以根据不同的类别、领域、任务进行使用。多LLM评估器案例Python实现数据用例[ { instruction: Calculate the hypotenuse of a right triangle with legs of 6 cm and 8 cm., input: , output: The hypotenuse of the triangle is 10 cm., model 1 response: \nThe hypotenuse of the triangle is 3 cm., model 2 response: \nThe hypotenuse of the triangle is 12 cm. }, { instruction: Name 3 different animals that are active during the day., input: , output: 1. Squirrel\n2. Eagle\n3. Tiger, model 1 response: \n1. Squirrel\n2. Tiger\n3. Eagle\n4. Cobra\n5. Tiger\n6. Cobra, model 2 response: \n1. Squirrel\n2. Eagle\n3. Tiger } ]评估代码from pathlib import Path import json from openai import OpenAI from tqdm import tqdm with open(config.json, r) as config_file: config json.load(config_file) api_key config[OPENAI_API_KEY] client OpenAI(api_keyapi_key) def run_chatgpt(prompt, client, modelgpt-4-turbo): response client.chat.completions.create( modelmodel, messages[{role: user, content: prompt}], temperature0.0, seed123, ) return response.choices[0].message.content def load_evaluation_data(): json_file eval-example-data.json with open(json_file, r) as file: json_data json.load(file) def format_input(entry): instruction_text ( fBelow is an instruction that describes a task. Write a response that fappropriately completes the request. f\n\n### Instruction:\n{entry[instruction]} ) input_text f\n\n### Input:\n{entry[input]} if entry[input] else instruction_text input_text return instruction_text input_text def generate_model_scores(json_data, json_key, client): scores [] for entry in tqdm(json_data, descScoring entries): prompt ( fGiven the input {format_input(entry)} fand correct output {entry[output]}, fscore the model response {entry[json_key]} f on a scale from 0 to 100, where 100 is the best score. fRespond with the number only. ) score run_chatgpt(prompt, client) try: scores.append(int(score)) except ValueError: continue return scores if __name__ __main__: json_data load_evaluation_data() # for entry in json_data[:5]: # prompt (fGiven the input {format_input(entry)} # fand correct output {entry[output]}, # fscore the model response {entry[model 1 response]} # f on a scale from 0 to 100, where 100 is the best score. # ) for model in (model 1 response, model 2 response): scores generate_model_scores(json_data, model, client) print(f\n{model}) print(fNumber of scores: {len(scores)} of {len(json_data)}) print(fAverage score: {sum(scores) / len(scores):.2f}\n) # Optionally save the scores save_path Path(scores) / fmodel-{model.replace( , -)}.json with open(save_path, w) as file: json.dump(scores, file)Java实现java实现可以看下spring ai的实现这里是通过模型结果和标准结果进行评估。依赖添加dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-openai-spring-boot-starter/artifactId version1.0.0-M3/version /dependency实现自己的一个评估器(官方给的很少就1-2个)package com.ywj.aidemo.evaluate; import com.ywj.aidemo.bean.EvaluateResult; import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.evaluation.EvaluationRequest; import org.springframework.ai.evaluation.EvaluationResponse; import org.springframework.ai.evaluation.Evaluator; import java.util.Collections; public class AnswerConparisonEvaluator implements Evaluator { private static final String DEFAULT_EVALUATION_PROMPT_TEXT Your task is to evaluate if the response for the query\n is in line with the context information provided.\\n\n You have two options to answer. Either YES/ NO.\\n\n Answer - YES, if the response for the query\n is in line with context information otherwise NO.\\n\n Query: \\n {query}\\n\n Response: \\n {response}\\n\n Context: \\n {context}\\n\n Answer: \\n; private final ChatClient.Builder chatClientBuilder; private static final String Agent_EVALUATION_PROMPT_TEXT 任务描述 你需要对agent输出的结果与标准答案进行详细的对比分析并给出一个分数。分数范围为0到100分其中100分表示agent输出结果与标准答案完全一致且准确无误0分表示agent输出结果与标准答案完全不符或存在严重错误。 对比维度 1、内容准确性检查agent输出结果中的关键信息是否与标准答案一致包括事实、数据、结论等。 2、逻辑连贯性评估agent输出结果的逻辑结构是否清晰是否与标准答案的逻辑框架相符。 3、完整性判断agent输出结果是否涵盖了标准答案中的所有重要方面是否存在遗漏。 4、语言表达分析agent输出结果的语言是否流畅、清晰是否存在语法错误或表达不清的地方。 5、细节处理对比agent输出结果和标准答案在细节方面的差异如具体例子、引用等。 打分规则 90-100分agent输出结果在所有维度上与标准答案高度一致几乎没有错误或偏差。 80-89分agent输出结果在大部分维度上与标准答案相符存在少量细节错误或表达不够精准。 70-79分agent输出结果在主要方面与标准答案相符但在某些维度上存在明显不足如逻辑不够清晰或内容有部分遗漏。 60-69分agent输出结果与标准答案有一定相似性但在多个维度上存在较多问题如内容不完整、逻辑混乱等。 0-59分agent输出结果与标准答案不符存在严重错误或偏差无法满足任务要求 具体步骤 阅读标准答案仔细阅读并理解标准答案的内容和要求。 分析agent输出结果逐一对比agent输出结果与标准答案在上述维度上的表现。 记录差异和问题将发现的差异和问题详细记录下来以便在打分时作为参考。 给出分数根据agent输出结果的整体表现按照打分规则给出一个合理的分数。 提供反馈简要说明打分的理由指出agent输出结果的优点和不足之处提出改进建议。 用户问题%s Agent回答%s 标准答案%s Json输出评估结果: ; public AnswerConparisonEvaluator(ChatClient.Builder chatClientBuilder) { this.chatClientBuilder chatClientBuilder; } public EvaluationResponse evaluate(EvaluationRequest evaluationRequest) { String response evaluationRequest.getResponseContent(); String context this.doGetSupportingData(evaluationRequest); EvaluateResult evaluationResponse this.chatClientBuilder.build().prompt() .user((userSpec) - userSpec.text( 任务描述\\n 你需要对agent输出的结果与标准答案进行详细的对比分析并给出一个分数。分数范围为0到100分其中100分表示agent输出结果与标准答案完全一致且准确无误0分表示agent输出结果与标准答案完全不符或存在严重错误。\\n 分数范围为0到100分其中100分表示agent输出结果与标准答案完全一致且准确无误0分表示agent输出结果与标准答案完全不符或存在严重错误\\n\n // 对比维度\\n // 1、内容准确性检查agent输出结果中的关键信息是否与标准答案一致包括事实、数据、结论等。\\n // 2、逻辑连贯性评估agent输出结果的逻辑结构是否清晰是否与标准答案的逻辑框架相符。\\n // 3、完整性判断agent输出结果是否涵盖了标准答案中的所有重要方面是否存在遗漏。\\n // 4、语言表达分析agent输出结果的语言是否流畅、清晰是否存在语法错误或表达不清的地方。\\n // 5、细节处理对比agent输出结果和标准答案在细节方面的差异如具体例子、引用等。\\n\n // 打分规则\\n // 90-100分agent输出结果在所有维度上与标准答案高度一致几乎没有错误或偏差。\\n // 80-89分agent输出结果在大部分维度上与标准答案相符存在少量细节错误或表达不够精准。\\n // 70-79分agent输出结果在主要方面与标准答案相符但在某些维度上存在明显不足如逻辑不够清晰或内容有部分遗漏。\\n // 60-69分agent输出结果与标准答案有一定相似性但在多个维度上存在较多问题如内容不完整、逻辑混乱等。\\n // 0-59分agent输出结果与标准答案不符存在严重错误或偏差无法满足任务要求\\n\n // 具体步骤\\n // 阅读标准答案仔细阅读并理解标准答案的内容和要求。\\n // 分析agent输出结果逐一对比agent输出结果与标准答案在上述维度上的表现。\\n // 记录差异和问题将发现的差异和问题详细记录下来以便在打分时作为参考。\\n // 给出分数根据agent输出结果的整体表现按照打分规则给出一个合理的分数。\\n // 提供反馈简要说明打分的理由指出agent输出结果的优点和不足之处提出改进建议。\\n\n 输出要求\\n 必须包含score 和 feedback字段 \\n\n 用户问题: \\n {query}\\n\n 模型回答: \\n {response}\\n\n 标准答案: \\n {context}\\n\n Answer: \\n) .param(query, evaluationRequest.getUserText()) .param(response, response) .param(context, context)).call().entity(EvaluateResult.class); boolean passing false; float score 0.0F; if (evaluationResponse.score 60) { passing true; score evaluationResponse.score; } return new EvaluationResponse(passing, score, evaluationResponse.feedBack, Collections.emptyMap()); } }可以看到上面有两个一个是比较全面的prompt一个是比较简单的prompt这个就取决你对评估器的要求如果要求比较严格可以使用约束比较强的prompt。由于官方给的评估器很简单这里也是为什么我要自己去实现一个评估器的原因。评估结果Data AllArgsConstructor NoArgsConstructor public class EvaluateResult { public Integer score; public String feedBack; }controller实现package com.ywj.aidemo.controller; import com.ywj.aidemo.evaluate.AnswerConparisonEvaluator; import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.chat.prompt.Prompt; import org.springframework.ai.evaluation.EvaluationRequest; import org.springframework.ai.evaluation.EvaluationResponse; import org.springframework.ai.evaluation.FactCheckingEvaluator; import org.springframework.ai.evaluation.RelevancyEvaluator; import org.springframework.ai.model.Content; import org.springframework.ai.openai.OpenAiChatModel; 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; RestController public class EvaluationController { /** * 方式一 FactCheckingEvaluator (Spring AI 1.0.0-M5 API) * spring ai 文档 https://docs.spring.io/spring-ai/reference/api/testing.html */ private final OpenAiChatModel chatModel; Autowired public EvaluationController(OpenAiChatModel chatModel) { this.chatModel chatModel; } /** * 标准答案和模型输出结果对比 * curl验证 curl --location http://localhost:8089/ai/agent/evaluateResponse?messagespringboot ai 是什么 * */ GetMapping(/ai/agent/evaluateResponse) public MapString, Object evaluateResponse(RequestParam(defaultValue Tell me a joke) String message, RequestParam(required true) String standardResponse){ String response chatModel.call(new Prompt(message)).getResult().getOutput().getContent(); // 方式一自定义评估方法 AnswerConparisonEvaluator factCheckingEvaluator new AnswerConparisonEvaluator(ChatClient.builder(chatModel)); // 方式二 使用官方提供的 // RelevancyEvaluator factCheckingEvaluator new RelevancyEvaluator(ChatClient.builder(chatModel)); // 需要使用 FactCheckingEvaluator (Spring AI 1.0.0-M5 API) EvaluationRequest evaluationRequest new EvaluationRequest(message, List.of(new Content() { Override public String getContent() { return standardResponse; // 标准答案 } Override public MapString, Object getMetadata() { return Map.of(); } }), response); // response 为模型回答 EvaluationResponse evaluationResponse factCheckingEvaluator.evaluate(evaluationRequest); return Map.of(score, evaluationResponse.getScore(), isPass,evaluationResponse.isPass(), modelResponse,response, standardResponse,standardResponse, userQuery,message, feedback,evaluationResponse.getFeedback()); } }调用结果我的问题是地球是距离太阳第几近的行星标准答案是地球是距离太阳第3近的行星模型输出答案是地球是距离太阳第三近的行星。按距离太阳由近及远的顺序地球排 在第三位前面是水星和金星评估得分95.0模型评估反馈回答正确但语言表达较为冗长可以简化。如何学习AI大模型如果你对AI大模型入门感兴趣那么你需要的话可以点击这里大模型重磅福利入门进阶全套104G学习资源包免费分享这份完整版的大模型 AI 学习和面试资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】这是一份大模型从零基础到进阶的学习路线大纲全览小伙伴们记得点个收藏第一阶段从大模型系统设计入手讲解大模型的主要方法第二阶段在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用第三阶段大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统第四阶段大模型知识库应用开发以LangChain框架为例构建物流行业咨询智能问答系统第五阶段大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型第六阶段以SD多模态大模型为主搭建了文生图小程序案例第七阶段以大模型平台应用与开发为主通过星火大模型文心大模型等成熟大模型构建大模型行业应用。100套AI大模型商业化落地方案大模型全套视频教程200本大模型PDF书籍学会后的收获• 基于大模型全栈工程实现前端、后端、产品经理、设计、数据分析等通过这门课可获得不同能力• 能够利用大模型解决相关实际项目需求 大数据时代越来越多的企业和机构需要处理海量数据利用大模型技术可以更好地处理这些数据提高数据分析和决策的准确性。因此掌握大模型应用开发技能可以让程序员更好地应对实际项目需求• 基于大模型和企业数据AI应用开发实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能 学会Fine-tuning垂直训练大模型数据准备、数据蒸馏、大模型部署一站式掌握• 能够完成时下热门大模型垂直领域模型训练能力提高程序员的编码能力 大模型应用开发需要掌握机器学习算法、深度学习框架等技术这些技术的掌握可以提高程序员的编码能力和分析能力让程序员更加熟练地编写高质量的代码。LLM面试题合集大模型产品经理资源合集大模型项目实战合集获取方式有需要的小伙伴可以保存图片到wx扫描二v码免费领取【保证100%免费】