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

Prompt多版本测试指南:如何科学评估不同提示词的效果

对于现代AI开发来说,同一个需求,不同的提示表达方式往往会产生截然不同的结果。因此,如何设计、测试和优化提示词成为了一项关键技能。

本文将深入探讨Prompt多版本测试的技术方法,帮助你系统性地评估不同提示词的效果,找出最适合特定任务的表达方式。无论你是AI产品经理、开发人员,还是个人用户,掌握这些技术都将大幅提升你与AI交互的效率和质量。

为什么需要Prompt多版本测试?

在开始探讨具体测试方法前,我们需要理解为什么Prompt测试如此重要:

  1. 模型理解的不确定性:即使是最先进的模型,对不同表达方式的理解也存在差异。
  2. 任务复杂性:复杂任务往往需要精心设计的提示词才能获得满意结果。
  3. 资源优化:更高效的提示词可以减少token使用量,降低API调用成本。
  4. 一致性保证:通过测试找出稳定性更高的提示词,确保模型输出的一致性。
  5. 优化用户体验:当构建AI产品时,提示词质量直接影响最终用户体验。

正如软件开发需要测试一样,Prompt工程同样需要系统性的测试方法来评估和优化效果。接下来,我们将介绍一套完整的技术框架,帮助你进行科学的Prompt多版本测试。

Prompt测试的技术框架

1. 确定测试目标与指标

在开始任何测试前,首先要明确测试目标和评估指标。这些指标应该直接反映提示词在特定任务上的表现。

常见的测试指标包括:

  • 准确性:模型输出与预期答案的匹配程度
  • 一致性:在多次运行中产生相似结果的能力
  • 相关性:输出内容与问题的相关程度
  • 完整性:是否完整回答了所有问题
  • 创造性:在创意任务中的表现
  • 效率:完成任务所需的token数量
  • 响应时间:生成回答所需的时间

示例设计:

测试目标:优化客户服务AI的问题回答提示词
评估指标:
- 准确性:回答的事实正确率(1-5分)
- 完整性:是否覆盖问题的所有方面(1-5分)
- 简洁性:是否直接回答,不含冗余信息(1-5分)
- 口吻一致性:是否保持企业品牌语调(1-5分)

2. 设计测试变量

确定了测试目标后,需要明确哪些变量将被测试,哪些将保持不变。

常见的测试变量包括:

  • 提示结构:如何组织提示词的结构和格式
  • 指令细节:任务描述的具体程度
  • 角色设定:赋予AI的身份或角色
  • 示例数量:提供的少样本学习示例数量
  • 思维链:是否要求模型逐步推理
  • 输出格式:规定输出的具体格式要求
  • 上下文信息:提供的背景资料多少

变量控制示例:

固定变量:
- 使用模型:GPT-4
- 温度参数:0.7
- 输入内容:相同的10个客户问题测试变量:
- 版本A:简洁指令 + 无角色设定
- 版本B:简洁指令 + 客服专家角色
- 版本C:详细指令 + 无角色设定
- 版本D:详细指令 + 客服专家角色

3. 搭建测试环境

有效的Prompt测试需要一个结构化的环境,以确保结果的可靠性和可比性。

测试环境搭建要点:

  • 版本控制:使用专业工具管理不同版本的提示词
  • 数据集准备:创建代表性的测试用例集
  • 参数一致性:确保除测试变量外,其他参数保持一致
  • 结果记录:建立系统记录测试结果的机制
  • 自动化流程:如可能,设置自动化测试流程

在这方面,像Prompt Minder这样的专业工具提供了强大而简单的一站式提示词管理解决方案,能极大提高测试效率。Prompt Minder可以帮助你管理多个提示词版本,进行系统性比较,并提供详细的性能分析报告。

4. 实施A/B测试

A/B测试是评估不同提示词效果的核心方法,它允许我们直接比较不同版本的性能差异。

A/B测试的技术实施流程:

  1. 随机分配:随机将测试用例分配给不同的提示词版本
  2. 并行测试:同时运行不同版本以减少环境变量影响
  3. 盲测评估:评估者不知道哪个结果来自哪个版本,以避免偏见
  4. 统计分析:使用统计方法分析性能差异的显著性

代码示例:使用Python实现简单的A/B测试

import openai
import random
import pandas as pd
from tqdm import tqdm# 准备提示词版本
prompts = {"version_A": "回答以下客户问题,保持简洁明了:{question}","version_B": "你是一位专业客服代表。回答以下客户问题,保持简洁明了:{question}","version_C": "回答以下客户问题。确保回答准确、全面、有帮助且符合公司政策:{question}","version_D": "你是一位专业客服代表。回答以下客户问题。确保回答准确、全面、有帮助且符合公司政策:{question}"
}# 准备测试数据
test_questions = ["你们的退货政策是什么?","我的订单什么时候到货?",# ... 更多测试问题
]# 结果存储
results = []# 执行测试
for question in tqdm(test_questions):for version, prompt_template in prompts.items():prompt = prompt_template.format(question=question)# 调用API获取回答response = openai.ChatCompletion.create(model="gpt-4",messages=[{"role": "user", "content": prompt}],temperature=0.7)answer = response.choices[0].message.contenttokens = response.usage.total_tokens# 存储结果results.append({"question": question,"prompt_version": version,"answer": answer,"tokens": tokens,# 稍后添加评分})# 转换为数据框以便分析
df = pd.DataFrame(results)

5. 执行对照测试

除了A/B测试,对照测试也是一种强大的评估方法,特别适合针对特定问题的精细优化。

对照测试步骤:

  1. 基准建立:创建代表当前最佳实践的基准提示词
  2. 变体创建:针对基准提示词创建多个变体,每个变体只修改一个方面
  3. 一对一比较:将每个变体与基准进行一对一比较
  4. 增量评估:评估每个变化带来的增量效果

对照测试实例:

基准提示词:
"分析以下客户反馈,提取关键问题点并提出解决方案。{feedback}"变体1 - 添加角色定位:
"作为一名客户体验专家,分析以下客户反馈,提取关键问题点并提出解决方案。{feedback}"变体2 - 添加思维链要求:
"分析以下客户反馈,提取关键问题点并提出解决方案。首先识别情感,然后列出所有问题点,最后为每个问题点提供具体解决方案。{feedback}"变体3 - 添加输出结构:
"分析以下客户反馈,提取关键问题点并提出解决方案。以JSON格式输出,包含'情感'、'问题点'和'解决方案'字段。{feedback}"

6. 自动提示优化技术

除了手动测试,现代Prompt工程还可以利用自动优化技术来提升效率。

自动优化方法包括:

  1. 梯度搜索:使用梯度下降等算法优化提示词中的关键参数
  2. 进化算法:应用遗传算法生成和筛选提示词变体
  3. 强化学习:通过反馈信号指导提示词的优化方向
  4. 元提示学习:使用模型自身生成并评估提示词变体

自动优化代码示例:使用简单的进化算法

import random
import numpy as np
from copy import deepcopy# 定义提示词结构
prompt_components = {"role": ["", "作为一名客户服务专家,", "作为一名技术支持人员,"],"instruction": ["回答问题:", "请详细回答以下问题:", "请提供关于以下问题的专业见解:"],"format": ["", "请以要点形式回答。", "请给出详细的解释和示例。"],"question": "{question}"  # 固定部分
}# 评分函数(示例)
def evaluate_prompt(prompt, test_questions, evaluation_function):scores = []for question in test_questions:filled_prompt = prompt.replace("{question}", question)# 调用API获取回答response = get_model_response(filled_prompt)  # 假设函数# 评估回答score = evaluation_function(response, question)  # 假设函数scores.append(score)return np.mean(scores)# 进化算法
def evolve_prompts(generations=10, population_size=20, mutation_rate=0.3):# 初始化种群population = []for _ in range(population_size):individual = {"role": random.choice(prompt_components["role"]),"instruction": random.choice(prompt_components["instruction"]),"format": random.choice(prompt_components["format"]),}prompt = individual["role"] + individual["instruction"] + individual["format"] + prompt_components["question"]individual["prompt"] = promptindividual["fitness"] = 0  # 初始适应度population.append(individual)# 进化过程for gen in range(generations):# 评估适应度for individual in population:individual["fitness"] = evaluate_prompt(individual["prompt"], test_questions,evaluation_function)# 选择population.sort(key=lambda x: x["fitness"], reverse=True)parents = population[:population_size//2]# 生成新一代offspring = []while len(offspring) < population_size - len(parents):# 交叉parent1, parent2 = random.sample(parents, 2)child = {}for key in ["role", "instruction", "format"]:child[key] = parent1[key] if random.random() < 0.5 else parent2[key]# 变异if random.random() < mutation_rate:mutation_key = random.choice(["role", "instruction", "format"])child[mutation_key] = random.choice(prompt_components[mutation_key])child["prompt"] = child["role"] + child["instruction"] + child["format"] + prompt_components["question"]offspring.append(child)# 更新种群population = parents + offspringprint(f"Generation {gen+1}, Best fitness: {parents[0]['fitness']}")return parents[0]  # 返回最佳个体

7. 构建评估矩阵

为了全面评估提示词的表现,建立一个多维度的评估矩阵至关重要。

评估矩阵构建方法:

  1. 定义评估维度:根据任务目标确定需要评估的维度
  2. 设计打分标准:为每个维度创建明确的评分标准
  3. 权重分配:根据重要性为不同维度分配权重
  4. 评分实施:使用人工评估或自动化方法进行打分
  5. 汇总分析:计算加权得分并进行比较

评估矩阵示例:

维度1:准确性(权重40%)
5分:所有信息完全准确
4分:存在微小事实错误,不影响整体
3分:部分事实错误,但主要信息准确
2分:存在重大事实错误
1分:大部分信息不准确维度2:完整性(权重30%)
5分:完全回答问题,覆盖所有方面
4分:回答大部分问题,遗漏细微方面
3分:回答核心问题,但遗漏重要细节
2分:仅部分回答问题
1分:未能有效回答问题维度3:简洁性(权重15%)
5分:极其简洁,无任何冗余
4分:简洁,极少冗余
3分:有部分冗余,但不影响理解
2分:冗长,有大量不必要内容
1分:极其冗长,主要内容被淹没维度4:语气合适性(权重15%)
5分:语气完美符合品牌要求
4分:语气大体符合,有小偏差
3分:语气基本可接受
2分:语气多处不符合要求
1分:语气完全不符合要求

8. 使用Prompt Minder进行专业化管理

在实际工作中,手动管理大量提示词版本和测试结果往往效率低下且容易出错。这时,使用专业的提示词管理工具如Prompt Minder可以大幅提升效率。

Prompt Minder提供的关键功能:

  1. 版本控制:跟踪提示词的所有版本历史
  2. A/B测试:内置的测试工具,支持多种测试方法
  3. 性能分析:直观展示不同版本的性能对比
  4. 团队协作:支持多人协同管理提示词
  5. 一键部署:将优化后的提示词一键部署到生产环境

在Prompt Minder中设置测试的步骤:

  1. 创建新项目,导入初始提示词
  2. 创建多个提示词变体,每个变体调整不同的方面
  3. 设置测试参数和评估指标
  4. 运行批量测试,获取性能数据
  5. 基于数据分析,优化提示词
  6. 重复测试-优化循环,直到达到满意效果

高级Prompt测试策略

1. 弹性测试:评估提示词的鲁棒性

弹性测试旨在评估提示词对不同输入变化的适应能力,确保其在实际应用中的稳定性。

弹性测试方法:

  1. 输入变化测试:使用不同表达方式的相似问题测试
  2. 边缘情况测试:使用极端或异常输入测试
  3. 噪声注入:在输入中添加拼写错误、语法错误或冗余信息
  4. 压力测试:测试提示词在复杂或模糊情境下的表现

示例:针对客户服务AI的弹性测试用例

标准输入:
"你们的退货政策是什么?"变体1 - 非正式表达:
"我想退个货,怎么搞?"变体2 - 复杂询问:
"我前天买了个东西,现在想退,但包装已经打开了,而且没找到发票,这种情况能退吗?"变体3 - 带错误:
"你们的退货政策是神马?我想知道能不能退货。"变体4 - 多语言混合:
"What's your 退货 policy?"

2. 对比测试:跨模型比较

不同的模型对相同提示词可能有不同反应,对比测试可以帮助找到最适合特定模型的提示词。

对比测试实施:

  1. 选择代表性模型:选择项目可能使用的不同模型(如GPT-3.5、GPT-4、Claude等)
  2. 使用相同提示集:对所有模型使用相同的提示词集合
  3. 标准化评估:使用一致的指标评估不同模型的表现
  4. 差异分析:分析提示词在不同模型间的表现差异

示例:跨模型提示词优化

models = ["gpt-3.5-turbo", "gpt-4", "claude-v1"]
prompts = {"version_A": "...","version_B": "...",# 更多版本
}cross_model_results = {}for model in models:for version, prompt in prompts.items():# 配置模型参数if "gpt" in model:# OpenAI调用代码response = openai.ChatCompletion.create(...)else:# Claude调用代码response = claude.complete(...)# 记录结果key = f"{model}_{version}"cross_model_results[key] = {"response": response,"metrics": evaluate_response(response)}# 分析结果
model_comparison_df = convert_to_dataframe(cross_model_results)

3. 长期稳定性测试

某些提示词可能在短期测试中表现良好,但随着时间推移或模型更新可能变得不稳定。长期稳定性测试可以评估提示词的持久效果。

长期测试方法:

  1. 定期重测:定期使用相同测试集重新评估提示词
  2. 模型版本测试:在模型更新后进行测试
  3. 长周期监控:在生产环境中长期监控提示词表现
  4. 渐变分析:分析性能随时间的变化趋势

示例:稳定性监控系统设计

def stability_monitoring(prompt_id, test_set, interval_days=7, duration_weeks=8):"""长期监控提示词稳定性"""results = []start_date = datetime.now()end_date = start_date + timedelta(weeks=duration_weeks)current_date = start_datewhile current_date <= end_date:# 获取当前模型版本model_version = get_current_model_version()# 运行测试test_results = run_test_suite(prompt_id, test_set)# 记录结果results.append({"date": current_date,"model_version": model_version,"performance": test_results})# 等待下一测试周期time.sleep(interval_days * 24 * 60 * 60)current_date = datetime.now()# 分析稳定性stability_analysis = analyze_stability(results)return stability_analysis

4. 成本效益分析

在生产环境中,提示词不仅要追求效果,还需考虑成本效益。成本效益分析可以帮助在性能和资源消耗间找到平衡点。

成本效益分析指标:

  1. Token使用量:每次交互的平均token消耗
  2. 性能收益比:性能提升与token增加的比值
  3. 延迟影响:提示词长度对响应时间的影响
  4. 维护成本:维护和更新提示词的复杂度

示例:成本效益计算

def cost_benefit_analysis(prompt_versions, test_cases, model="gpt-4"):results = {}for version, prompt in prompt_versions.items():total_tokens = 0total_score = 0for test in test_cases:# 测试提示词response = test_prompt(model, prompt, test)# 计算tokentokens = response["usage"]["total_tokens"]total_tokens += tokens# 评估质量score = evaluate_response(response["content"], test)total_score += score# 计算平均值avg_tokens = total_tokens / len(test_cases)avg_score = total_score / len(test_cases)# 计算成本(示例)if model == "gpt-4":input_cost = (avg_tokens / 2) * 0.03 / 1000  # 假设输入输出各占一半output_cost = (avg_tokens / 2) * 0.06 / 1000cost = input_cost + output_costelse:cost = avg_tokens * 0.002 / 1000# 计算性能/成本比performance_cost_ratio = avg_score / costresults[version] = {"avg_tokens": avg_tokens,"avg_score": avg_score,"estimated_cost": cost,"performance_cost_ratio": performance_cost_ratio}return results

实战案例:电商客服AI提示词优化

为了更直观地展示Prompt多版本测试的实际应用,下面通过一个电商客服AI的提示词优化案例进行说明。

1. 项目背景

某电商平台需要优化其客服AI系统,希望通过提示词优化提高回答质量,同时控制API调用成本。

2. 测试目标与指标

主要目标:优化客服AI回答产品、物流、退款三类常见问题的提示词。

评估指标

  • 准确性(40%):答案与事实的符合度
  • 有用性(30%):是否解决客户问题
  • 简洁性(15%):是否简洁直接
  • 友好度(15%):语气是否友好专业

3. 初始提示词与变体设计

初始提示词

你是一个电商平台的客服助手,请回答用户的问题:{question}

变体1 - 详细角色设定

你是[电商名称]的客服助手。你的目标是友好、准确地回答客户问题,使用简洁的语言,提供有用的信息。请回答以下问题:{question}

变体2 - 添加规则与格式

你是电商平台的客服助手。回答用户问题时,请遵循以下规则:
1. 保持简洁,直接回答问题
2. 提供准确信息,不要猜测
3. 友好专业的语气
4. 如果不确定,告知用户联系人工客服问题:{question}

变体3 - 添加思维链

你是电商平台的客服助手。回答以下问题时,请先分析问题类型(产品、物流或退款),然后提供相应的标准回答。确保回答简洁、准确且有帮助。问题:{question}

变体4 - 添加少样本学习

你是电商平台的客服助手。请参考以下示例,以类似的风格回答用户问题:示例1:
问:我的订单什么时候能到?
答:您好!您的订单预计在下单后2-3个工作日内送达。您可以在"我的订单"中查看实时物流状态。如有延误,请随时联系我们。示例2:
问:如何申请退款?
答:您好!申请退款只需在"订单详情"页面点击"申请退款"按钮,选择退款原因并提交。处理时间通常为3-5个工作日。现在,请回答用户的问题:{question}

4. 测试设计与实施

测试数据集:准备30个常见客户问题,每个类别(产品、物流、退款)各10个。

测试流程

  1. 对每个测试问题,使用5个版本的提示词(初始版+4个变体)获取回答
  2. 3名评估者对每个回答在4个维度进行评分
  3. 记录每次调用的token使用量
  4. 使用Prompt Minder平台管理测试过程和结果分析

5. 结果分析与优化

测试结果示例

提示词版本平均准确性平均有用性平均简洁性平均友好度加权总分平均Token性价比
初始版本3.23.04.13.33.271202.73
变体13.83.53.94.13.771452.60
变体24.24.04.33.84.121602.58
变体34.04.23.63.93.981752.27
变体44.54.53.54.34.302301.87

分析见解

  1. 变体2和变体4在质量方面表现最佳,但变体4的token消耗显著高于其他版本
  2. 变体2提供了最佳的性价比,在保持较高性能的同时控制了成本
  3. 所有变体都比初始版本有明显改进,说明结构化提示词确实能提升性能

6. 混合优化

基于测试结果,团队决定创建一个混合版本,结合变体2和变体4的优点:
让我继续完成这篇关于Prompt多版本测试的技术博文:

你是[电商名称]的客服助手。回答用户问题时,请遵循以下规则:
1. 保持简洁,直接回答核心问题
2. 提供准确信息,不要猜测
3. 使用友好专业的语气
4. 如果不确定,告知用户联系人工客服参考示例:
问:我的订单什么时候能到?
答:您好!您的订单预计在下单后2-3个工作日内送达。您可以在"我的订单"中查看实时物流状态。问题:{question}

7. 最终验证

将优化版提示词与前两个最佳版本(变体2和变体4)进行最终对比测试,结果显示:

提示词版本平均准确性平均有用性平均简洁性平均友好度加权总分平均Token性价比
变体24.24.04.33.84.121602.58
变体44.54.53.54.34.302301.87
优化版4.44.34.14.24.291852.32

优化版提示词成功结合了两个最佳版本的优点,在保持高质量输出的同时,将token使用量控制在合理范围内。团队最终决定将优化版部署到生产环境。

使用Prompt Minder进行企业级提示词管理

前面我们详细介绍了Prompt多版本测试的技术方法,但在实际企业应用中,仅掌握技术还不够。如何有效地管理大量提示词,协调团队合作,以及实现提示词从测试到生产的无缝部署,这些都是企业面临的实际挑战。

Prompt Minder作为一站式提示词管理解决方案,为企业提供了强大而简单的功能,帮助解决这些挑战。

Prompt Minder的核心功能

  1. 提示词版本控制

    • 保存所有提示词版本的历史记录
    • 跟踪每个版本的变更内容和作者
    • 支持提示词版本间的差异比较
    • 允许回滚到之前的版本
  2. 综合测试工具

    • 内置A/B测试功能,支持多版本并行测试
    • 提供结构化的评估矩阵和评分系统
    • 自动计算各版本的性能指标
    • 支持成本效益分析
  3. 直观的性能分析

    • 可视化展示不同版本的性能对比
    • 多维度性能指标图表
    • 自动检测性能异常和退化
    • 生成详细的测试报告
  4. 团队协作功能

    • 多用户权限管理
    • 提示词审核和批准流程
    • 团队成员间的评论和讨论
    • 活动日志和变更通知
  5. 一键部署集成

    • 与主流AI服务提供商的API集成
    • 支持测试环境到生产环境的无缝部署
    • 提供回滚机制以应对意外情况
    • API接口方便与现有系统集成

Prompt多版本测试是AI应用开发中至关重要但常被忽视的环节。通过本文介绍的系统化测试方法,你可以科学评估不同提示词的效果,不断优化AI交互体验,同时控制资源成本。

对于个人用户,这些技术可以帮助你获得更精准、更符合预期的AI回应;对于企业用户,专业的提示词管理解决方案如Prompt Minder可以进一步提升团队效率,规范化提示词开发流程,确保AI应用的质量和一致性。

相关文章:

Prompt多版本测试指南:如何科学评估不同提示词的效果

对于现代AI开发来说&#xff0c;同一个需求&#xff0c;不同的提示表达方式往往会产生截然不同的结果。因此&#xff0c;如何设计、测试和优化提示词成为了一项关键技能。 本文将深入探讨Prompt多版本测试的技术方法&#xff0c;帮助你系统性地评估不同提示词的效果&#xff0…...

每日c/c++题 备战蓝桥杯(洛谷P1015 [NOIP 1999 普及组] 回文数)

洛谷P1015 [NOIP 1999 普及组] 回文数 题解 题目描述 P1015 回文数 是NOIP 1999普及组的经典模拟题。题目要求如下&#xff1a; 给定一个数N&#xff08;十进制&#xff09;和进制K&#xff08;2≤K≤16&#xff09;&#xff0c;将N转换为K进制表示后&#xff0c;通过以下操…...

最小单调子序列的长度+联通最小乘积

因为题目ICPC是英文版&#xff0c;基于大家都不怎么看的懂的情况下直接给大家进行题目讲解 题目1&#xff1a; 题目分析&#xff1a; 构造一个长度为n的排列 p&#xff08;里面的数是1-n),不能重复得 max⁡(lis(p),lds(p)) 最小。 其中&#xff0c;lis(p)是 p 的最长递增子序…...

OpenHarmony平台驱动开发(一),ADC

OpenHarmony平台驱动开发&#xff08;一&#xff09; ADC 概述 功能简介 ADC&#xff08;Analog to Digital Converter&#xff09;&#xff0c;即模拟-数字转换器&#xff0c;可将模拟信号转换成对应的数字信号&#xff0c;便于存储与计算等操作。除电源线和地线之外&#…...

数据结构与算法:回溯

回溯 先给出一些leetcode算法题&#xff0c;以后遇见了相关题目再往上增加 主要参考代码随想录 2.1、组合问题 关于去重&#xff1a;两种写法的性能分析 需要注意的是&#xff1a;使用set去重的版本相对于used数组的版本效率都要低很多&#xff0c;大家在leetcode上提交&#x…...

KaiwuDB X 遨博智能 | 构建智能产线监测管理新系统

​01 项目背景 遨博智能作为国内协作机器人行业领军企业&#xff0c;深度布局制造、农业、医疗、教育、民生等场景&#xff0c;出货量连续四年蝉联国内第一、世界第二。随着工业自动化的蓬勃发展&#xff0c;遨博智能生产规模不断扩大&#xff0c;先后在常州、淄博等地建设完成…...

高等数学第三章---微分中值定理与导数的应用(§3.6 函数图像的描绘§3.7 曲率)

3.6 函数图像的描绘 一、曲线的渐近线 对于某些函数&#xff0c;其图形向无穷远处延伸时&#xff0c;会越来越趋近于某一条直线&#xff0c;这条直线被称为曲线的渐近线 (Asymptote)。 1. 定义 若曲线 y f ( x ) yf(x) yf(x) 上一点 P ( x , y ) P(x, y) P(x,y) 沿曲线趋…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】4.2 数据类型转换(CAST函数/自定义函数)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 PostgreSQL数据分析实战&#xff1a;数据清洗之数据类型转换&#xff08;CAST函数/自定义函数&#xff09;4.2 数据类型转换&#xff1a;让数据「格式正确&#xff0c;类型对…...

docker:制作镜像+上传镜像+拉取镜像

1.dockerfile制作镜像 示例内容&#xff1a; 1.创建一个index.js的文件 console.log("hello world")2.在相同目录下创建名为dockerfile的文件 FROM node:alpine COPY index.js /index.js CMD node /index.js3.构建镜像 docker build -t minterra/hello-docker . …...

信息系统监理师第二版教材模拟题第三组(含解析)

信息系统监理师模拟题第三组(30题) 监理基础理论 信息系统工程监理的性质是( ) A. 服务性、独立性、公正性、科学性 B. 强制性、营利性、行政性、技术性 C. 临时性、从属性、随意性、主观性 D. 单一性、封闭性、被动性、保守性答案:A 解析:监理具有服务性、独立性、公正…...

潮乎盲盒商城系统全开源多级分销推广海报奖品兑换试玩概率OSS云存储多端源码

一、源码描述 这是一套潮乎盲盒商城源码&#xff0c;仿小叮当盲盒商城&#xff0c;后端Laravel框架前端uniappvue&#xff0c;前后端数据库分离&#xff0c;支持四端同步数据&#xff08;H5小程序等&#xff09;&#xff0c;测试环境: php7.4&#xff0c;mysql5.6&#xff0c;…...

文章记单词 | 第64篇(六级)

一&#xff0c;单词释义 residence [ˈrezɪdəns] n. 住宅&#xff1b;居住&#xff1b;住所&#xff1b;居住期fling [flɪŋ] v. &#xff08;用力地&#xff09;扔&#xff0c;掷&#xff0c;抛&#xff1b;猛动&#xff08;身体或身体部位&#xff09;&#xff1b;急冲&a…...

数据同步实战篇

文章目录 数据同步实战篇1. mysql数据同步1.1 mysql集群部署1.2 数据同步1.2.1 同步复制1.2.2 异步复制1.2.3 半同步复制 2. redis数据同步2.1 redis集群部署2.2 数据同步 3. mq数据同步3.1 mq集群部署3.2 数据同步 4. es数据同步4.1 es集群部署4.2 数据同步 数据同步实战篇 数…...

具身系列——Double DQN算法实现CartPole游戏(强化学习)

完整代码参考&#xff1a; rl/ddqn_cartpole.py 陈先生/ailib - Gitee.com 部分训练得分&#xff1a; Model saved to ./output/best_model.pth New best model saved with average reward: 9.6 Episode: 0 | Train Reward: 25.0 | Epsilon: 0.995 | Best Eval Avg: 9.6…...

以下是在 Ubuntu 上的几款PDF 阅读器,涵盖轻量级、功能丰富和特色工具:

默认工具&#xff1a;Evince&#xff08;GNOME 文档查看器&#xff09; 特点&#xff1a;Ubuntu 预装&#xff0c;轻量快速&#xff0c;支持基本标注和书签。 安装&#xff1a;已预装&#xff0c;或手动安装&#xff1a; sudo apt install evince功能全面&#xff1a;Okular&…...

有关水下图像增强的论文

4.21 TEBCF&#xff1a;Real-World Underwater Image Texture Enhancement Model Based on Blurriness and Color Fusion 基于模糊和颜色融合的现实水下图像纹理增强模型 2022年的一篇文章&#xff0c;基于传统方法&#xff0c;基于不同的色彩方法构建了两个新的融合输入。一…...

Raycaster光线投射

Raycaster光线投射 3D虚拟工厂在线体验 描述 光线投射Raycaster&#xff0c;用于进行raycasting&#xff08;光线投射&#xff09;。 光线投射用于进行鼠标拾取&#xff08;在三维空间中计算出鼠标移过了什么物体&#xff09;。 构造器 Raycaster( origin : Vector3, dire…...

javaEE——单例模式

目录 前言1.概念2. 实现3. 比较和改进总结 前言 本篇文章来介绍单例模式&#xff0c;并讲述在保证线程安全的前提下&#xff0c;单例模式的写法。 1.概念 单例模式是一种设计模式&#xff0c;可以说是写代码的一种模板&#xff0c;如果在一些固定的场景下按照设计模式进行写…...

WSL在D盘安装Ubuntu

目录 前提条件步骤一&#xff1a;查看可用的Linux发行版步骤二&#xff1a;安装Ubuntu 22.04步骤三&#xff1a;导出已安装的Ubuntu到D盘步骤四&#xff1a;注销当前Ubuntu安装步骤五&#xff1a;在D盘导入Ubuntu启动Ubuntu 前提条件 Windows 10或Windows 11系统已启用WSL功能…...

Java并发编程-多线程基础(三)

文章目录 线程间通信线程间通信的核心问题volatile 关键字1. 核心特性2. 使用限制3. 示例 synchronized 关键字1. 核心特性2. 示例 volatile 与 synchronized 的对比Volatile 和 Synchronized 最佳实践 线程间通信 线程间通信的核心问题 多个线程通过共享内存实现信息交换&am…...

React--》掌握react构建拖拽交互的技巧

在这篇文章中将深入探讨如何使用react-dnd&#xff0c;从基础的拖拽操作到更复杂的自定义功能带你一步步走向实现流畅、可控且用户友好的拖拽体验,无论你是刚接触拖拽功能的初学者还是想要精细化拖拽交互的经验开发者&#xff0c;都能从中找到适合自己的灵感和解决方案。 目录 …...

【Qt】常用的类与数据类型

目录 一、Qt常见基本数据类型 二、Qt 字符串类应用 2.1 操作字符串 2.2 查询字符串 三、QMap 类&QHash 类&QVector 类 3.1 QMap 类 3.2 QHash 类 3.3 QVector 类 四、QList 类&QLinkedList 类 4.1 QList 类 4.2 QLinkedList 类 4.3 STL 风格迭代器遍历…...

React实现B站评论Demo

该Demo涉及的技术点 useState函数&#xff08;数据驱动视图&#xff09;子组件的封装条件判断回调函数的封装 1、评论数据 {"list": [{"rpid": 3,"user": {"uid": "13258165","avatar": "http://toutiao.…...

从实列中学习linux shell12 通过Shell脚本来优化MySQL数据库性能,特别是慢SQL跟踪和索引优化

在Shell脚本中优化MySQL数据库性能&#xff0c;特别是慢SQL跟踪和索引优化 可以通过以下步骤实现。以下是一个结构化的解决方案&#xff0c;包含示例代码和详细说明&#xff1a; 1. 启用慢查询日志 目标&#xff1a;动态启用慢查询日志并配置参数&#xff0c;收集慢SQL数据。…...

ES6入门---第三单元 模块一:类、继承

补充&#xff1a; prototype 属性使您有能力向对象添加属性和方法。 object.prototype.namevalue <script>function Person(name, age){this.name name;this.age age;}/* Person.prototype.showName function(){return 名字为: ${this.name};};Person.prototype.showA…...

CSS 变量与原生动态主题实现

CSS 变量与原生动态主题实现 CSS 变量基础 CSS 变量&#xff08;自定义属性&#xff09;是 CSS 语言的一项强大功能&#xff0c;允许我们在样式表中定义和重用值。与 SCSS 或 LESS 等预处理器中的变量不同&#xff0c;CSS 变量在运行时计算&#xff0c;这意味着它们可以动态更…...

Ubuntu 安装 Docker

安装 Docker 1. 卸载旧版本&#xff08;如果有&#xff09; sudo apt-get remove docker docker-engine docker.io containerd runc 2. 更新 APT 包的索引 sudo apt-get update 3. 安装依赖包 sudo apt-get install -y \ca-certificates \curl \gnupg \lsb-release4. 添加…...

SpringMVC——第三章:获取请求数据

假设有这样一个请求&#xff1a;http://localhost:8080/springmvc/register?namezhangsan&password123&emailzhangsanpowernode.com 在SpringMVC中应该如何获取请求提交的数据呢&#xff1f; 在SpringMVC中又应该如何获取请求头信息呢&#xff1f; 在SpringMVC中又应…...

动静态库【Linux操作系统】

文章目录 动静态库制作静态库如何把第三方库安装在Linux系统中&#xff0c;如何使用第3方库方案一&#xff1a;为什么我们之前使用gcc/g编译C/C标准库的时候不用加选项-l xxx呢&#xff1f;方案二&#xff1a;方案三&#xff1a; 为什么不同平台的库不一样呢&#xff1f;动态库…...

Day 4:牛客周赛Round 91

好久没写了&#xff0c;问题还蛮多的。听说这次是苯环哥哥出题 F题 小苯的因子查询 思路 考虑求因子个数&#xff0c;用质因数分解&#xff1b;奇数因子只需要去掉质数为2的情况&#xff0c;用除法。 这里有个比较妙的细节是&#xff0c;提前处理出数字x的最小质因数&#xff0…...

drawDB:打造高效数据库设计流程

drawDB&#xff1a;打造高效数据库设计流程 drawDB 简介资源链接 核心功能详解1. 直观的实体关系图设计2. SQL 脚本生成3. SQL 导入功能4. 本地化存储与分享功能5. 自定义主题与外观 安装和使用教程本地开发环境搭建构建生产版本Docker 部署基本使用方法 应用场景和实际价值适用…...

【心海资源】子比主题新增注册与会员用户展示功能模块及实现方法

内容改写&#xff1a; 本次分享的是子比主题顶部展示注册用户与会员信息的功能模块及其实现方式。 你可以通过两种方式启用该功能&#xff1a; 直接在后台进入“外观 → 小工具”启用该展示模块&#xff0c;操作简便&#xff1b;也可将提供的代码覆盖至子比主题目录中&#…...

gitblit安装教程,搭建一个属于自己的Git版本仓库

本章教程,主要记录如何在Windows服务器上利用gitblit搭建GIT私有化仓库。 一、gitblit简介 官网地址:https://www.gitblit.com/ Gitblit 是一个开源的纯 Java 技术栈,用于管理、查看和服务Git仓库。 它主要设计为一款面向希望托管集中式仓库的小型工作组的工具。 二、基础环…...

2023年第十四届蓝桥杯省赛B组Java题解【简洁易懂】

2023年第十四届蓝桥杯省赛B组Java题解 题型概览与整体分析 题目编号题目名称题型难度核心知识点通过率&#xff08;预估&#xff09;A阶乘求和结果填空★☆☆模运算、数学规律95%B幸运数字结果填空★★☆进制转换、数位和计算80%C数组分割编程题★★☆组合数学、奇偶性分析65…...

Javase 基础加强 —— 01 异常

本系列为笔者学习Javase的课堂笔记&#xff0c;视频资源为B站黑马程序员出品的《黑马程序员JavaAI智能辅助编程全套视频教程&#xff0c;java零基础入门到大牛一套通关》&#xff0c;章节分布参考视频教程&#xff0c;为同样学习Javase系列课程的同学们提供参考。 01 课程安排…...

iview 表单验证问题 Select 已经选择 还是弹验证提示

问题&#xff1a;iview 的 Select 下拉框的时候&#xff0c;数据验证必填&#xff0c;明明选择了数据&#xff0c;却一直提示验证不能通过 html代码&#xff1a; <Form ref"FormData" :model"FormData" :rules"ruleValidate" :label-width&qu…...

OrCAD中离图连接器、端口及网络标签的作用范围与选择指南

一、OrCAD主要连接元素概述 在OrCAD Capture原理图设计环境中&#xff0c;有三种主要的网络连接元素&#xff1a;离图连接器(Off-Page Connector)、端口(Port)和网络标签(Net Alias)。理解它们的作用范围和使用场景对设计清晰、可维护的原理图至关重要。 PS&#xff1a; 电源和…...

dpm_sysfs_add

这段代码是 Linux 内核中**设备电源管理&#xff08;PM&#xff09;子系统**与 **sysfs 文件系统**交互的核心实现&#xff0c;主要功能是为设备创建电源管理相关的 sysfs 属性文件。以下从五个关键维度进行深度解析&#xff1a; --- ### 一、功能架构全景 mermaid graph TD …...

【AI论文】Phi-4-reasoning技术报告

摘要&#xff1a;我们引入了Phi-4-reasoning&#xff0c;这是一种拥有140亿参数的推理模型&#xff0c;在复杂的推理任务中表现出了强大的性能。 通过监督式微调Phi-4&#xff0c;在精心策划的“可教”提示集上进行训练&#xff0c;这些提示集是根据复杂性和多样性的适当水平选…...

Android ART运行时无缝替换Dalvik虚拟机的过程分析

目录 一,概述 二,dex文件优化 一,概述 Android 4.4发布了一个ART运行时&#xff0c;准备用来替换掉之前一直使用的Dalvik虚拟机&#xff0c;希望籍此解决饱受诟病的性能问题。老罗不打算分析ART的实现原理&#xff0c;只是很有兴趣知道ART是如何无缝替换掉原来的Dalvik虚拟机…...

node.js为什么产生?

从官网得知介绍如下 https://nodejs.org/zh-cn/learn/getting-started/introduction-to-nodejs Node.js是一个开源和跨平台的JavaScript运行时环境。 Node.js在浏览器之外运行V8 JavaScript引擎&#xff0c;这是Google Chrome的核心。这使得Node.js具有很高的性能。 Node.js应…...

智能工厂边缘计算:从数据采集到实时决策

智能工厂边缘计算:从数据采集到实时决策 引言 在智能制造场景中,传统云计算架构面临三大核心挑战:平均200ms的网络延迟无法满足实时控制需求,90%的工业数据未被有效利用,以及每月高达15TB的数据传输成本。边缘计算技术通过将计算能力下沉到数据源头,正在构建"端-边…...

个人健康中枢的多元化AI网络革新与精准健康路径探析

引言 随着数字化转型的深入推进,个人健康中枢作为集成化健康管理系统,正在从传统的单一功能向多元化的AI驱动方向快速发展。在这一背景下,新兴网络硬件技术,特别是DPU(数据处理单元)和全光网络的出现,为个人健康中枢的革新提供了前所未有的机遇。本研究将深入探讨这些技…...

前端面试宝典---性能优化

一、加载优化 1. 第三方模块放在CDN 例如 leaflet通过cdn引入&#xff0c;这样就不会占用打包体积了 2. prefetch 预加载 例如&#xff0c;之后马上有个场景需要一个图片&#xff0c;我们就可以通过link 的 prefetch 对资源进行预先加载 再例如&#xff0c;我们公司是无网络开…...

【Springboot进阶】springboot+mybatis+jsqlparser实现数据权限控制

文章目录 SpringBoot JSqlParser MyBatis 数据权限实现方案一、环境准备1. 添加依赖 二、用户上下文管理1. 用户上下文持有类 三、数据权限拦截器实现1. MyBatis拦截器核心类 四、Spring Security集成1. 用户信息注入 五、配置项示例application.yml 六、使用示例1. 业务查询…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】2.3 窗口函数与高级聚合(ROW_NUMBER()/RANK()/SUM() OVER())

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 PostgreSQL窗口函数与高级聚合:从排序到动态分析的全场景应用1. 窗口函数核心概念解析1.1 窗口函数语法结构1.2 核心组成要素2. 排名窗口函数深度解析2.1 ROW_NUMBER():唯一顺序排名示例演示2.2 `RANK…...

python全自动爬取m3u8网页视频(各类网站都通用)

当前人工智能&#xff0c;大语言模型的火热&#xff0c;使得python这门编程语言的使用越来越广泛。最近也开始学习了python&#xff0c;发现它在自动化方面的确有得天独厚的优势。python的简单易用&#xff0c;丰富的开源库&#xff0c;完善的生态&#xff0c;使得它有可能成为…...

C++负载均衡远程调用学习之上报功能与存储线程池

目录 1. Lars-reportV0.1 report模块介绍 2.Lars-reporterV0.1 reporter项目目录构建 3.Lars-ReporterV0.1 数据表和proto协议环境搭建 4.Lars-ReporterV0.1上报请求业务处理 5.Lars-ReporterV0.1上报请求模块的测试 6.Lars-ReporterV0.2开辟存储线程池-网络存储分离 1. L…...

今天python练习题

目录 一、每日一言 二、练习题 三、效果展示 四、下次题目 五、总结 一、每日一言 不要害怕失败&#xff0c;失败可能成为我们前进的动力&#xff01; 二、练习题 有列表lst [[1,2,3],[4,5,6],[7,8,9]],取出其中的元素1/5/9组成新的列表 # 有列表lst [[1,2,3],[4,5,6],[…...

【leetcode100】最长递增子序列

1、题目描述 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 …...