feat(ai): 完成 DeepSeek 大模型官方 API 接入、双模调用、高可用平滑降级与管理后台连通性测试
这个提交包含在:
@@ -160,6 +160,24 @@ describe('T36: 名片 AI 顾问对话 (modules/ai chat)', () => {
|
||||
expect(result.shouldCollectLead).toBe(true);
|
||||
expect(/[\u4e00-\u9fff]/.test(result.reply)).toBe(true);
|
||||
});
|
||||
|
||||
it('当 DeepSeekService 已配置时优先调用大模型,失败时平滑降级', async () => {
|
||||
const mockDeepSeek = {
|
||||
isConfigured: jest.fn().mockReturnValue(true),
|
||||
chatCompletion: jest.fn().mockResolvedValue('这是 DeepSeek 大模型生成的拟人顾问回复'),
|
||||
};
|
||||
service.deepSeekService = mockDeepSeek as any;
|
||||
|
||||
const res = await service.ask(userAsk('你们都有什么服务?'));
|
||||
expect(res.reply).toBe('这是 DeepSeek 大模型生成的拟人顾问回复');
|
||||
expect(mockDeepSeek.chatCompletion).toHaveBeenCalled();
|
||||
|
||||
// 测试异常平滑降级
|
||||
mockDeepSeek.chatCompletion.mockRejectedValue(new Error('Network error'));
|
||||
const fallbackRes = await service.ask(userAsk('你好', { locale: 'zh-CN' }));
|
||||
expect(fallbackRes.reply).toBeTruthy();
|
||||
expect(fallbackRes.reply).toContain('智能顾问');
|
||||
});
|
||||
});
|
||||
|
||||
describe('3. OpenAiChatController /open/ai/chat', () => {
|
||||
|
||||
在新工单中引用
屏蔽一个用户