7. 质量与测试
7.1 提示词单元测试
测试框架
智能金融解决方案使用专门的提示词测试框架,确保Prompt的质量和稳定性:
测试框架特性
- 自动化测试:支持自动化测试Prompt
- 批量测试:支持批量测试多个Prompt
- 结果评估:自动评估测试结果
- 回归测试:支持回归测试,检测Prompt变更影响
测试框架实现
class PromptTestFramework:
def __init__(self, llm_client):
self.llm_client = llm_client
self.test_cases = []
def add_test_case(self, test_case):
"""添加测试用例"""
self.test_cases.append(test_case)
def run_tests(self, prompt_template):
"""运行测试"""
results = []
for test_case in self.test_cases:
# 构建Prompt
prompt = prompt_template.format(**test_case.inputs)
# 调用LLM
response = self.llm_client.generate(prompt)
# 评估结果
evaluation = self.evaluate(response, test_case.expected)
results.append({
"test_case": test_case.name,
"prompt": prompt,
"response": response,
"expected": test_case.expected,
"evaluation": evaluation,
"passed": evaluation["passed"]
})
return results
def evaluate(self, response, expected):
"""评估测试结果"""
# 检查是否包含期望的关键词
keywords_match = all(
keyword in response for keyword in expected.get("keywords", [])
)
# 检查格式是否正确
format_match = self.check_format(response, expected.get("format"))
# 计算相似度
similarity = self.calculate_similarity(response, expected.get("text"))
passed = keywords_match and format_match and similarity > 0.8
return {
"passed": passed,
"keywords_match": keywords_match,
"format_match": format_match,
"similarity": similarity
}
测试用例设计
测试用例结构
每个测试用例包含以下信息:
- 测试名称:测试用例的名称
- 输入数据:测试输入数据
- 期望输出:期望的输出结果
- 评估标准:评估输出的标准
测试用例示例
风控分析Prompt测试用例:
test_cases = [
{
"name": "低风险交易测试",
"inputs": {
"transaction_time": "2024-01-01 10:00:00",
"transaction_amount": 100.00,
"transaction_type": "transfer",
"customer_info": "正常客户,历史交易正常",
"counterparty": "正常账户"
},
"expected": {
"keywords": ["低风险", "通过"],
"format": "json",
"risk_level": "low",
"risk_score_range": (0, 0.3)
}
},
{
"name": "高风险交易测试",
"inputs": {
"transaction_time": "2024-01-01 02:00:00",
"transaction_amount": 1000000.00,
"transaction_type": "transfer",
"customer_info": "新客户,无历史交易",
"counterparty": "高风险账户"
},
"expected": {
"keywords": ["高风险", "人工审核"],
"format": "json",
"risk_level": "high",
"risk_score_range": (0.7, 1.0)
}
}
]
投研分析Prompt测试用例:
test_cases = [
{
"name": "公司财务分析测试",
"inputs": {
"company_name": "腾讯控股",
"stock_code": "00700",
"financial_data": {
"revenue": 1000000000,
"profit": 200000000,
"assets": 5000000000
}
},
"expected": {
"keywords": ["财务状况", "盈利能力", "投资建议"],
"format": "markdown",
"sections": ["财务状况分析", "行业地位分析", "投资建议"]
}
}
]
自动化测试
持续集成
将Prompt测试集成到CI/CD流程中:
# GitHub Actions配置示例
name: Prompt Tests
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.11'
- name: Install dependencies
run: |
pip install -r requirements.txt
- name: Run Prompt tests
run: |
python -m pytest tests/prompt_tests/ -v
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
- name: Generate test report
run: |
python scripts/generate_test_report.py
测试报告
自动生成测试报告:
def generate_test_report(results):
"""生成测试报告"""
total = len(results)
passed = sum(1 for r in results if r["passed"])
failed = total - passed
report = f"""
# Prompt测试报告
## 测试概览
- 总测试数: {total}
- 通过数: {passed}
- 失败数: {failed}
- 通过率: {passed/total*100:.2f}%
## 测试详情
"""
for result in results:
status = "✅ 通过" if result["passed"] else "❌ 失败"
report += f"""
### {result["test_case"]}
- 状态: {status}
- 相似度: {result["evaluation"]["similarity"]:.2f}
"""
return report
7.2 端到端自动化
E2E测试流程
测试场景设计
-
风控检测E2E测试:
- 模拟交易请求
- 调用风控API
- 验证风控结果
- 验证数据库记录
- 验证通知发送
-
投研分析E2E测试:
- 创建投研任务
- 等待任务完成
- 验证报告生成
- 验证报告内容
- 验证报告存储
-
合规审查E2E测试:
- 创建合规审查任务
- 等待审查完成
- 验证审查报告
- 验证风险等级
- 验证处理建议
E2E测试实现
使用Playwright进行E2E测试:
from playwright.sync_api import Page, expect
def test_risk_check_flow(page: Page):
"""测试风控检测流程"""
# 1. 登录系统
page.goto("https://app.example.com/login")
page.fill("#username", "test_user")
page.fill("#password", "test_password")
page.click("button[type='submit']")
# 2. 进入风控页面
page.click("text=风控管理")
# 3. 创建风控检测任务
page.click("button:has-text('新建检测')")
page.fill("#transaction_id", "TXN123456")
page.fill("#amount", "10000")
page.select_option("#transaction_type", "transfer")
page.click("button:has-text('提交')")
# 4. 等待结果
page.wait_for_selector(".risk-result", timeout=10000)
# 5. 验证结果
risk_level = page.text_content(".risk-level")
expect(risk_level).to_contain("低风险")
risk_score = page.text_content(".risk-score")
expect(float(risk_score)).toBeLessThan(0.3)
测试覆盖
功能覆盖
-
API测试:
- 所有API端点测试
- 正常流程测试
- 异常流程测试
- 边界条件测试
-
业务逻辑测试:
- 风控逻辑测试
- 投研逻辑测试
- 合规逻辑测试
- 数据流转测试
-
集成测试:
- 系统间集成测试
- 第三方服务集成测试
- 数据库集成测试
覆盖率目标
- 代码覆盖率:≥80%
- API覆盖率:100%
- 业务场景覆盖率:≥90%
- 关键路径覆盖率:100%