mirror of
https://github.com/massbug/judge4c.git
synced 2025-05-17 14:56:36 +00:00
feat(ai-improve): 添加题目详情并优化代码结构
-增加了获取题目详情的功能,如果提供了 problemId - 重构了代码,使其更具可读性和可维护性 - 添加了注释,以提高代码的可理解性 - 优化了提示词,以获得更好的 AI 优化建议
This commit is contained in:
parent
fabdb7c17a
commit
ebea5c986e
@ -1,42 +1,75 @@
|
||||
"use server";
|
||||
|
||||
import {
|
||||
OptimizeCodeInput,
|
||||
OptimizeCodeOutput,
|
||||
OptimizeCodeOutputSchema
|
||||
OptimizeCodeOutputSchema,
|
||||
} from "@/types/ai-improve";
|
||||
import { openai } from "@/lib/ai";
|
||||
import { CoreMessage, generateText } from "ai";
|
||||
import { prisma } from "@/lib/prisma"; // Prisma客户端
|
||||
|
||||
/**
|
||||
* 调用AI优化代码
|
||||
* @param input 包含代码、错误信息、题目ID的输入
|
||||
* @returns 优化后的代码和说明
|
||||
*/
|
||||
export const optimizeCode = async (
|
||||
input: OptimizeCodeInput
|
||||
): Promise<OptimizeCodeOutput> => {
|
||||
const model = openai("gpt-4o-mini");
|
||||
|
||||
const prompt = `
|
||||
Analyze the following programming code for potential errors, inefficiencies or code style issues.
|
||||
Provide an optimized version of the code with explanations. Focus on:
|
||||
1. Fixing any syntax errors
|
||||
2. Improving performance
|
||||
3. Enhancing code readability
|
||||
4. Following best practices
|
||||
|
||||
Original code:
|
||||
\`\`\`
|
||||
${input.code}
|
||||
\`\`\`
|
||||
|
||||
Error message (if any): ${input.error || "No error message provided"}
|
||||
|
||||
Respond ONLY with the JSON object containing the optimized code and explanations.
|
||||
Format:
|
||||
{
|
||||
"optimizedCode": "optimized code here",
|
||||
"explanation": "explanation of changes made",
|
||||
"issuesFixed": ["list of issues fixed"]
|
||||
// 获取题目详情(如果提供了problemId)
|
||||
let problemDetails = "";
|
||||
if (input.problemId) {
|
||||
try {
|
||||
const problem = await prisma.problem.findUnique({
|
||||
where: { problemId: input.problemId },
|
||||
});
|
||||
if (problem) {
|
||||
problemDetails = `
|
||||
Problem Requirements:
|
||||
-------------------
|
||||
Description: ${problem.description}
|
||||
Input: ${problem.inputSpec}
|
||||
Output: ${problem.outputSpec}
|
||||
Test Cases: ${JSON.stringify(problem.testCases)}
|
||||
`;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("Failed to fetch problem details:", error);
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
// 构建AI提示词
|
||||
const prompt = `
|
||||
Analyze the following programming code for potential errors, inefficiencies or code style issues.
|
||||
Provide an optimized version of the code with explanations. Focus on:
|
||||
1. Fixing any syntax errors
|
||||
2. Improving performance
|
||||
3. Enhancing code readability
|
||||
4. Following best practices
|
||||
|
||||
Original code:
|
||||
\`\`\`
|
||||
${input.code}
|
||||
\`\`\`
|
||||
|
||||
Error message (if any): ${input.error || "No error message provided"}
|
||||
|
||||
${problemDetails}
|
||||
|
||||
Respond ONLY with the JSON object containing the optimized code and explanations.
|
||||
Format:
|
||||
{
|
||||
"optimizedCode": "optimized code here",
|
||||
"explanation": "explanation of changes made",
|
||||
"issuesFixed": ["list of issues fixed"]
|
||||
}
|
||||
`;
|
||||
|
||||
// 发送请求给OpenAI
|
||||
const messages: CoreMessage[] = [{ role: "user", content: prompt }];
|
||||
|
||||
let text;
|
||||
try {
|
||||
const response = await generateText({
|
||||
@ -49,6 +82,7 @@ export const optimizeCode = async (
|
||||
throw new Error("Failed to generate response from OpenAI");
|
||||
}
|
||||
|
||||
// 解析LLM响应
|
||||
let llmResponseJson;
|
||||
try {
|
||||
const cleanedText = text.trim();
|
||||
@ -59,13 +93,12 @@ export const optimizeCode = async (
|
||||
throw new Error("Invalid JSON response from LLM");
|
||||
}
|
||||
|
||||
const validationResult =
|
||||
OptimizeCodeOutputSchema.safeParse(llmResponseJson);
|
||||
|
||||
// 验证响应格式
|
||||
const validationResult = OptimizeCodeOutputSchema.safeParse(llmResponseJson);
|
||||
if (!validationResult.success) {
|
||||
console.error("Zod validation failed:", validationResult.error.format());
|
||||
throw new Error("Response validation failed");
|
||||
}
|
||||
|
||||
return validationResult.data;
|
||||
};
|
||||
};
|
||||
|
@ -1,17 +1,19 @@
|
||||
import { z } from "zod";
|
||||
|
||||
// 优化代码的输入类型
|
||||
export const OptimizeCodeInputSchema = z.object({
|
||||
code: z.string(),
|
||||
error: z.string().optional(),
|
||||
code: z.string(), // 用户输入的代码
|
||||
error: z.string().optional(), // 可选的错误信息
|
||||
problemId: z.string().optional(), // 可选的题目ID
|
||||
});
|
||||
|
||||
export type OptimizeCodeInput = z.infer<typeof OptimizeCodeInputSchema>;
|
||||
|
||||
// 优化代码的输出类型
|
||||
export const OptimizeCodeOutputSchema = z.object({
|
||||
optimizedCode: z.string(),
|
||||
explanation: z.string(),
|
||||
issuesFixed: z.array(z.string()).optional(),
|
||||
optimizedCode: z.string(), // 优化后的代码
|
||||
explanation: z.string(), // 优化说明
|
||||
issuesFixed: z.array(z.string()).optional(), // 修复的问题列表
|
||||
});
|
||||
|
||||
export type OptimizeCodeOutput = z.infer<typeof OptimizeCodeOutputSchema>;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user