45 lines
1.6 KiB
JavaScript
45 lines
1.6 KiB
JavaScript
import { NextResponse } from 'next/server';
|
|
import { getDatasetsById } from '@/lib/db/datasets';
|
|
import LLMClient from '@/lib/llm/core/index';
|
|
import { getEvalQuestionPrompt } from '@/lib/llm/prompts/evalQuestion';
|
|
import { extractJsonFromLLMOutput } from '@/lib/llm/common/util';
|
|
|
|
export async function POST(request, { params }) {
|
|
try {
|
|
const { projectId } = params;
|
|
const { datasetId, model, language, questionType = 'open_ended', count = 1 } = await request.json();
|
|
|
|
if (!datasetId || !model) {
|
|
return NextResponse.json({ error: 'Missing required parameters' }, { status: 400 });
|
|
}
|
|
|
|
// 1. 获取原数据集
|
|
const dataset = await getDatasetsById(datasetId);
|
|
if (!dataset) {
|
|
return NextResponse.json({ error: 'Dataset not found' }, { status: 404 });
|
|
}
|
|
|
|
// 2. 构建提示词
|
|
// 将原问题和答案合并作为上下文文本
|
|
const text = `Question: ${dataset.question}\nAnswer: ${dataset.answer}`;
|
|
|
|
const prompt = await getEvalQuestionPrompt(language || 'zh-CN', questionType, { text, number: count }, projectId);
|
|
|
|
// 3. 调用 LLM
|
|
const client = new LLMClient(model);
|
|
|
|
const response = await client.getResponse(prompt);
|
|
const result = extractJsonFromLLMOutput(response);
|
|
|
|
// 结果应该是一个数组
|
|
if (!result || !Array.isArray(result)) {
|
|
throw new Error('Failed to parse LLM output or output is not an array');
|
|
}
|
|
|
|
return NextResponse.json({ success: true, data: result });
|
|
} catch (error) {
|
|
console.error('Generate eval variant failed:', error);
|
|
return NextResponse.json({ error: error.message || 'Internal Server Error' }, { status: 500 });
|
|
}
|
|
}
|