AigcCopyPipelineTest - 大模型文案生成链路测试
概述
AigcCopyPipelineTest 是用于测试大语言模型(LLM)文案生成功能的全链路集成测试类。该测试验证营销文案、评价回复等多种文案生成场景。
测试文件位置
api/tests/api/AigcCopyPipelineTest.php测试分组
/**
* @group aigc-e2e
*/包含的测试方法
1. testMarketingCopyGeneration
测试目标: 验证营销文案生成功能
测试流程:
构建营销文案参数
↓
调用 /api/app/copy/marketing 接口
↓
验证返回的文案内容
↓
断言文案长度和质量请求参数:
[
'platform' => 'xiaohongshu', // 发布平台
'style' => 'literary', // 文案风格
'sellingPoints' => [ // 核心卖点
'sea-view',
'afternoon-tea',
'spa'
],
'wordLimit' => 'medium', // 字数要求
'withEmoji' => true, // 是否添加 Emoji
'extraDesc' => '请突出海边度假的惬意氛围', // 补充要求
'stream' => false, // 是否流式输出
]平台选项:
xiaohongshu- 小红书moments- 朋友圈wechat- 公众号weibo- 微博
风格选项:
literary- 文艺清新promotion- 激情促销guide- 干货攻略
字数选项:
short- 100字以内medium- 100-300字long- 300-500字extra- 500字以上
关键断言:
- API 返回 code 为 0
content字段不为空- 文案长度至少 10 个字符
预期输出:
=== Testing Marketing Copy Generation ===
Sending marketing copy generation request...
Parameters: {...}
Response: {...}
✓ Marketing copy generated successfully
✓ Content length: 156 characters
✓ Generated content preview: 今天来到这家海景酒店,...
✅ Marketing Copy Generation test passed!2. testReviewReplyGeneration
测试目标: 验证评价回复生成功能
请求参数:
[
'review' => '酒店环境非常好,服务也很热情,就是早餐种类有点少,希望能改进一下。',
'tone' => 'grateful',
'compensation' => 'breakfast',
'compensationDetail' => '下次入住赠送双人早餐',
'wordLimit' => 'medium',
'extraDesc' => '请表达感谢并承诺改进早餐',
'stream' => false,
]语气选项:
apology- 真诚道歉grateful- 热情感谢explanation- 客观解释
补偿选项:
none- 不补偿breakfast- 赠送早餐fruit- 赠送果盘upgrade- 房型升级other- 其他补偿
关键断言:
- API 返回 code 为 0
content字段不为空- 回复长度至少 10 个字符
预期输出:
=== Testing Review Reply Generation ===
Sending review reply generation request...
Parameters: {...}
Response: {...}
✓ Review reply generated successfully
✓ Content length: 128 characters
✓ Generated reply: 非常感谢您的评价...
✅ Review Reply Generation test passed!3. testMultiplePlatformCopyGeneration
测试目标: 验证不同平台和风格的组合测试
测试矩阵:
- 平台: xiaohongshu, moments, wechat, weibo
- 风格: literary, promotion, guide
关键断言:
- 每个组合都能正常返回文案
预期输出:
=== Testing Multiple Platform Copy Generation ===
Testing platform: xiaohongshu, style: literary
✓ xiaohongshu/literary: 145 chars
Testing platform: xiaohongshu, style: promotion
✓ xiaohongshu/promotion: 132 chars
...
✅ Multiple Platform Copy Generation test completed!4. testVolcengineArkConnection
测试目标: 验证火山引擎 ARK 接口连通性
请求方法: POST /api/app/volcengine/ark
请求参数:
[
'model' => 'doubao-seed-2-0-lite-260215',
'messages' => [
[
'role' => 'user',
'content' => '你好,请用一句话介绍自己'
]
],
'options' => [
'temperature' => 0.7,
'max_tokens' => 100,
],
]关键断言:
- API 返回格式正确
- messages 数组包含响应内容
预期输出:
=== Testing Volcengine ARK Connection ===
ARK API response received
✓ ARK response: 你好!我是豆包...
✅ Volcengine ARK Connection test passed!测试配置
环境变量
| 变量名 | 默认值 | 说明 |
|---|---|---|
API_BASE_URL | http://localhost:8000 | API 服务器基础 URL |
可配置参数
// HTTP 客户端配置
'timeout' => 60, // 请求超时时间(秒)相关接口
营销文案生成
接口: POST /api/app/copy/marketing
控制器: app/aigc/controller/ApiCopy.php::generateMarketing()
服务: app/aigc/service/UnifiedLlmService.php::generate()
请求参数:
platform- 发布平台style- 文案风格sellingPoints- 核心卖点数组wordLimit- 字数要求withEmoji- 是否添加 EmojiextraDesc- 补充要求stream- 是否流式输出
内部使用的 LLM 参数:
[
'provider' => 'volcengine',
'model' => 'doubao-seed-2-0-lite-260215',
'messages' => [
['role' => 'user', 'content' => $generatedPrompt]
],
'options' => [
'temperature' => 0.7,
'max_tokens' => 1000,
'stream' => false,
],
]评价回复生成
接口: POST /api/app/copy/review-reply
控制器: app/aigc/controller/ApiCopy.php::generateReviewReply()
服务: app/aigc/service/UnifiedLlmService.php::generate()
请求参数:
review- 客户评价内容tone- 回复语气compensation- 补偿方案compensationDetail- 补偿详情wordLimit- 字数要求extraDesc- 补充要求stream- 是否流式输出
火山引擎 ARK 接口
接口: POST /api/app/volcengine/ark
控制器: app/aigc/controller/ApiVolcengine.php::ark()
服务: app/aigc/service/VolcengineService.php::ark()
运行测试
运行整个测试类
cd api
vendor/bin/phpunit tests/api/AigcCopyPipelineTest.php仅运行营销文案测试
vendor/bin/phpunit tests/api/AigcCopyPipelineTest.php --filter testMarketingCopyGeneration仅运行评价回复测试
vendor/bin/phpunit tests/api/AigcCopyPipelineTest.php --filter testReviewReplyGeneration仅运行多平台测试
vendor/bin/phpunit tests/api/AigcCopyPipelineTest.php --filter testMultiplePlatformCopyGeneration仅运行 ARK 连通性测试
vendor/bin/phpunit tests/api/AigcCopyPipelineTest.php --filter testVolcengineArkConnection注意事项
⚠️ 重要提醒:
- 成本考虑 - 每次调用 LLM 都会产生费用
- 流式输出 - 测试使用
stream: false进行非流式输出测试 - 提示词质量 - 生成的文案质量取决于提示词的设计
- 模型可用性 - 确保使用的模型已开通且有配额
故障排查
问题: 文案生成失败
原因: LLM 服务不可用或配额不足
解决:
- 检查火山引擎 API 配置
- 确认账户有足够的配额
- 查看后端日志获取详细错误
问题: 返回的文案太短
原因: max_tokens 限制或模型提前停止
解决:
- 增加 max_tokens 参数
- 调整 temperature 参数
- 优化提示词使其更明确
问题: 文案质量不符合预期
原因: 提示词设计不够好
解决:
- 优化
extraDesc提供更详细的指导 - 调整
style参数 - 提供更多的示例
扩展测试
如需扩展测试,可以考虑添加:
- 更多平台测试 - 添加新的发布平台
- 更多卖点测试 - 测试各种卖点组合
- 流式输出测试 - 测试 SSE 流式输出
- 多语言测试 - 测试不同语言的文案生成
- 质量评估测试 - 添加简单的文案质量评估
- A/B 测试 - 比较不同模型或参数的效果
- 错误处理测试 - 测试各种错误场景
提示词模板
营销文案提示词模板
你是一位专业的酒店营销文案专家。请为以下场景生成一段吸引人的营销种草话术。
【发布平台】:{platform}
【文案风格】:{style}
【核心卖点】:{sellingPoints}
【字数要求】:{wordLimit}
【特殊要求】:{withEmoji}
【补充要求】:{extraDesc}
请直接输出文案内容,不要包含任何额外说明或解释。评价回复提示词模板
你是一位专业的酒店客诉处理专家。请为以下客户评价生成一段得体的回复。
【客户评价】:
{review}
【回复语气】:{tone}
【补偿方案】:{compensation}
【补偿详情】:{compensationDetail}
【字数要求】:{wordLimit}
【补充要求】:{extraDesc}
请直接输出回复内容,不要包含任何额外说明或解释。