mirror of
https://github.com/massbug/judge4c.git
synced 2025-05-17 23:12:23 +00:00
feat(ai): 添加代码优化功能- 新增代码优化功能,替换原有的复杂度分析功能
- 创建 AI 配置模块,统一处理 OpenAI 相关配置 - 定义新的输入输出类型,优化代码结构 - 更新提示模板,引导 AI 优化代码
This commit is contained in:
parent
a7456cd228
commit
fabdb7c17a
@ -1,34 +1,41 @@
|
|||||||
"use server";
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
AnalyzeComplexityResponse,
|
OptimizeCodeInput,
|
||||||
AnalyzeComplexityResponseSchema,
|
OptimizeCodeOutput,
|
||||||
Complexity,
|
OptimizeCodeOutputSchema
|
||||||
} from "@/types/complexity";
|
} from "@/types/ai-improve";
|
||||||
import { openai } from "@/lib/ai";
|
import { openai } from "@/lib/ai";
|
||||||
import { CoreMessage, generateText } from "ai";
|
import { CoreMessage, generateText } from "ai";
|
||||||
|
|
||||||
export const analyzeComplexity = async (
|
export const optimizeCode = async (
|
||||||
content: string
|
input: OptimizeCodeInput
|
||||||
): Promise<AnalyzeComplexityResponse> => {
|
): Promise<OptimizeCodeOutput> => {
|
||||||
const model = openai("gpt-4o-mini");
|
const model = openai("gpt-4o-mini");
|
||||||
|
|
||||||
const prompt = `
|
const prompt = `
|
||||||
Analyze the time and space complexity of the following programming code snippet.
|
Analyze the following programming code for potential errors, inefficiencies or code style issues.
|
||||||
Determine the Big O notation from this list: ${Complexity.options.join(", ")}.
|
Provide an optimized version of the code with explanations. Focus on:
|
||||||
Provide your response as a JSON object with one key:
|
1. Fixing any syntax errors
|
||||||
1. "time": A string representing the time complexity (e.g., "O(N)", "O(N^2)").
|
2. Improving performance
|
||||||
2. "space": A string representing the space complexity (e.g., "O(1)", "O(N)").
|
3. Enhancing code readability
|
||||||
|
4. Following best practices
|
||||||
|
|
||||||
Code to analyze:
|
Original code:
|
||||||
\`\`\`
|
\`\`\`
|
||||||
${content}
|
${input.code}
|
||||||
\`\`\`
|
\`\`\`
|
||||||
|
|
||||||
Respond ONLY with the JSON object. Do not include any other text or markdown formatting like \`\`\`json before or after the object.
|
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"]
|
||||||
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const messages: CoreMessage[] = [{role: "user", content: prompt}];
|
const messages: CoreMessage[] = [{ role: "user", content: prompt }];
|
||||||
|
|
||||||
let text;
|
let text;
|
||||||
try {
|
try {
|
||||||
@ -53,12 +60,12 @@ export const analyzeComplexity = async (
|
|||||||
}
|
}
|
||||||
|
|
||||||
const validationResult =
|
const validationResult =
|
||||||
AnalyzeComplexityResponseSchema.safeParse(llmResponseJson);
|
OptimizeCodeOutputSchema.safeParse(llmResponseJson);
|
||||||
|
|
||||||
if (!validationResult.success) {
|
if (!validationResult.success) {
|
||||||
console.error("Zod validation failed:", validationResult.error.format());
|
console.error("Zod validation failed:", validationResult.error.format());
|
||||||
throw new Error("Response validation failed");
|
throw new Error("Response validation failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
return validationResult;
|
return validationResult.data;
|
||||||
}
|
};
|
8
src/lib/ai.ts
Normal file
8
src/lib/ai.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import "server-only";
|
||||||
|
|
||||||
|
import { createOpenAI } from "@ai-sdk/openai";
|
||||||
|
|
||||||
|
export const openai = createOpenAI({
|
||||||
|
apiKey: process.env.OPENAI_API_KEY || "",
|
||||||
|
baseURL: process.env.OPENAI_BASE_URL || "",
|
||||||
|
});
|
17
src/types/ai-improve.ts
Normal file
17
src/types/ai-improve.ts
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import { z } from "zod";
|
||||||
|
|
||||||
|
export const OptimizeCodeInputSchema = z.object({
|
||||||
|
code: z.string(),
|
||||||
|
error: z.string().optional(),
|
||||||
|
});
|
||||||
|
|
||||||
|
export type OptimizeCodeInput = z.infer<typeof OptimizeCodeInputSchema>;
|
||||||
|
|
||||||
|
export const OptimizeCodeOutputSchema = z.object({
|
||||||
|
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