7. 质量与测试
7.1 提示词单元测试
测试框架
智能农业解决方案使用专门的提示词测试框架,确保Prompt质量和稳定性:
测试框架选择
LangSmith:
- LangChain官方测试框架
- 支持Prompt测试和评估
- 集成LangChain生态
PromptTest:
- 自定义测试框架
- 支持农业领域特定测试
- 集成CI/CD流程
测试框架实现
import pytest
from prompt_test import PromptTester, TestCase
class AgriculturalPromptTester(PromptTester):
def __init__(self):
super().__init__()
self.test_cases = []
def add_test_case(self, test_case: TestCase):
"""添加测试用例"""
self.test_cases.append(test_case)
def run_tests(self):
"""运行所有测试"""
results = []
for test_case in self.test_cases:
result = self.run_single_test(test_case)
results.append(result)
return results
def run_single_test(self, test_case: TestCase):
"""运行单个测试"""
# 执行Prompt
output = self.execute_prompt(test_case.prompt, test_case.input)
# 评估结果
score = self.evaluate(output, test_case.expected_output)
return {
"test_case": test_case.name,
"passed": score >= test_case.threshold,
"score": score,
"output": output
}
测试用例设计
病虫害识别测试用例
测试用例1:标准水稻稻瘟病识别
test_case_1 = TestCase(
name="标准水稻稻瘟病识别",
prompt=PEST_DISEASE_IDENTIFICATION_PROMPT,
input={
"image": "rice_blast_image.jpg",
"crop_type": "水稻",
"growth_stage": "抽穗期"
},
expected_output={
"pest_disease_type": "病害",
"pest_disease_name": "稻瘟病",
"severity": "中度",
"confidence": 0.9
},
threshold=0.85
)
测试用例2:复杂病虫害识别
test_case_2 = TestCase(
name="复杂病虫害识别",
prompt=PEST_DISEASE_IDENTIFICATION_PROMPT,
input={
"image": "complex_pest_image.jpg",
"crop_type": "小麦",
"growth_stage": "拔节期"
},
expected_output={
"pest_disease_type": "虫害",
"pest_disease_name": "蚜虫",
"severity": "重度",
"confidence": 0.9
},
threshold=0.85
)
7.2 模型测试
模型评估指标
分类模型评估
准确率(Accuracy):
- 定义:正确预测的样本数占总样本数的比例
- 目标值:≥90%
精确率(Precision):
- 定义:预测为正类的样本中,实际为正类的比例
- 目标值:≥90%
召回率(Recall):
- 定义:实际为正类的样本中,被正确预测为正类的比例
- 目标值:≥90%
F1分数(F1-Score):
- 定义:精确率和召回率的调和平均数
- 目标值:≥90%
回归模型评估
均方误差(MSE):
- 定义:预测值与真实值差的平方的平均值
- 目标值:≤100(产量预测,单位:公斤/亩)
平均绝对误差(MAE):
- 定义:预测值与真实值差的绝对值的平均值
- 目标值:≤50(产量预测,单位:公斤/亩)
决定系数(R²):
- 定义:模型解释的方差占总方差的比例
- 目标值:≥0.85
测试数据集
数据集划分
训练集:70%
- 用于模型训练
- 包含各种作物、各种病虫害类型
验证集:15%
- 用于模型调优
- 用于超参数选择
测试集:15%
- 用于模型评估
- 不参与训练过程