1. 项目概述一个AI驱动的面试刷题伴侣最近在准备面试尤其是技术岗刷LeetCode、牛客网上的题目是家常便饭。但刷题最大的痛点是什么不是找不到题而是做完之后没人给你反馈。自己写的代码对不对、好不好、有没有更优解往往只能对着标准答案“感觉”一下或者去论坛里等一个不确定的回复。这种反馈的延迟和不确定性对备考效率是致命的。于是我萌生了一个想法能不能让AI来当我的私人面试官它不仅能立刻评判对错还能像资深工程师一样给我的代码风格、时间复杂度和解题思路打分并给出优化建议。这个想法催生了现在这个项目一个集成了多个主流大模型Claude、DeepSeek、GPT以及阿里的通义千问的AI面试刷题系统。它的核心功能很简单你输入题目和你的代码选择你信任的“AI面试官”它就会在几秒内给你一份详细的评估报告。这个系统特别适合正在冲刺秋招、春招或者日常需要保持算法手感的技术人。无论是前端、后端还是算法工程师都能通过它获得即时、专业且多角度的代码评审。我把它做成了一个Web应用前端用Vue 3构建界面清爽交互流畅后端则负责灵活地调度不同的AI模型API。接下来我就把这个项目的设计思路、关键技术实现、以及一路踩过来的坑毫无保留地分享出来。2. 系统核心架构与设计思路2.1 为什么选择多模型架构最初的想法很简单直接用最熟悉的ChatGPTGPT-4的API不就好了但在实际构思中我发现了几个必须使用多模型架构的理由成本与性能的平衡GPT-4的API虽然强大但价格不菲。对于一些相对简单的语法检查、格式规范判断用更轻量、便宜的模型如GPT-3.5-Turbo或DeepSeek完全够用。多模型架构允许系统根据评估任务的复杂度智能或手动选择性价比最高的模型长期来看能省下不少费用。能力的互补性不同的模型有各自的“特长”。例如Claude在长文本理解和遵循复杂指令方面表现突出适合处理需要详细步骤解析的题目DeepSeek作为国产翘楚对中文语境下的问题描述和代码注释理解可能更精准而GPT-4在逻辑推理和代码生成上依然是第一梯队。让用户可以选择就等于提供了不同的“面试官风格”。规避单点故障与速率限制依赖单一API提供商是有风险的。如果该服务出现临时故障、网络波动或达到速率限制整个系统就会瘫痪。接入多个服务商相当于有了备用通道系统的稳定性和可用性大大提升。满足用户偏好与访问便利性有些用户可能已经拥有某个平台的API密钥或者对某个模型有特别的信任感。提供选择权让系统更具包容性和灵活性。基于以上考虑我决定将系统设计为“前端统一交互后端模型路由”的模式。后端作为一个中立的路由器和处理器不绑定任何单一模型而是根据前端的请求去调用对应的AI服务。2.2 前后端技术选型解析前端Vue 3 TypeScript Element PlusVue 3选择Vue 3主要是因为其组合式APIComposition API对于构建这种带有复杂状态逻辑如多模型切换、评估结果的多维度展示的应用非常得心应手。响应式系统清晰开发体验好。TypeScript在涉及多个API接口、复杂数据结构如题目对象、评估报告对象的项目中TypeScript提供的类型安全是必不可少的。它能极大减少运行时错误让代码更健壮尤其是在和后端定义interface时前后端协作效率倍增。Element Plus作为成熟的UI组件库它能快速搭建出美观、一致的管理后台界面。它的ElForm、ElTable、ElCard等组件非常适合用来构建题目列表、代码编辑区和评估报告展示面板。后端Node.js (Express) 或 Python (FastAPI)这是一个关键抉择点我两种方案都实现并对比过Node.js (Express)方案优势在于与JavaScript/TypeScript前端同构上下文切换成本低。对于主要工作是做HTTP路由、拼接Prompt和转发API请求的后端来说完全够用。生态中有axios、dotenv等成熟库。但缺点是在处理复杂的异步流如同时请求多个模型做对比评估和某些AI SDK的兼容性上可能不如Python。Python (FastAPI)方案这是最终我选择的方案。原因有三第一绝大多数AI服务商OpenAI, Anthropic, 阿里云都提供了官方且功能最全的Python SDK集成起来最顺畅代码更简洁。第二FastAPI的异步支持async/await非常出色能轻松处理高并发的AI API调用自动生成交互式API文档的特性也减少了后期维护成本。第三Python在数据序列化如处理评估报告的JSON和简单的机器学习任务如果未来想加入基于历史数据的智能推荐上有天然优势。考虑到系统的核心是稳定、高效地集成多个AI服务Python FastAPI的组合无疑是更专业、风险更低的选择。数据库方面初期为了简化使用SQLite记录用户的刷题历史和评估记录就足够了如果未来用户量增长可以无缝迁移到PostgreSQL。2.3 数据流与核心模块设计整个系统的运行流程可以概括为以下几步用户在前端选择题目或手动输入题目描述在代码编辑器中编写解题代码选择一个目标AI模型如Claude-3-Sonnet。前端发起请求将题目描述、用户代码、所选模型标识打包通过HTTPS发送给后端API。后端路由与处理验证用户身份简单的API Key或Token机制。根据“所选模型标识”加载对应的配置API Base URL, Secret Key等。核心环节构造Prompt。这不是简单地把代码丢给AI而是精心设计一个结构化指令System Prompt告诉AI它现在是一名资深技术面试官需要从哪些维度进行评估。调用对应AI服务的SDK发送请求。AI模型处理模型根据Prompt分析代码生成结构化的评估文本。后端解析与返回收到AI的回复后后端可能需要做一些后处理如尝试将回复解析成JSON提取分数和评语然后将结构化的评估结果返回前端。前端展示前端将评估结果以友好、直观的方式呈现给用户可能包括分数卡片、维度评分柱状图、优化后的代码建议框等。核心模块除了显而易见的前端页面题库、编辑器、结果页和后端路由/api/evaluate外关键在于两个模型管理器Model Manager负责管理所有接入模型的配置信息、认证方式和SDK客户端实例。它提供一个统一的接口如model_manager.evaluate(code, model_name)内部处理不同模型的调用差异。提示词工程模块Prompt Engine这是评估质量的决定性因素。它存储了针对不同题型算法、SQL、系统设计和不同评估深度快速检查、深度分析的Prompt模板。确保AI的输出稳定、符合预期格式。3. 核心实现细节与踩坑实录3.1 前端构建沉浸式刷题工作台前端的目标是打造一个类似IDE集成开发环境的沉浸式体验让用户能专注思考和编码。代码编辑器的选择与集成这是前端的技术核心。我没有使用简单的textarea而是集成了Monaco Editor也就是VS Code使用的编辑器。通过monaco-editor/vue这个库可以相对容易地在Vue中集成。// 示例在Vue组件中初始化Monaco Editor import * as monaco from monaco-editor; import { loader } from monaco-editor/vue; loader.config({ monaco });集成的关键点在于语言高亮的设置如JavaScript、Python、Java和主题配置。我选择了VS Code的vs-dark主题并调整了字体大小和行高以提供舒适的编码环境。一个实用的技巧是启用“迷你地图”minimap和“代码折叠”功能这对于浏览较长的解题代码很有帮助。状态管理与组件通信由于涉及多个交互组件题库侧边栏、编辑器、模型选择器、结果面板状态管理必须清晰。我使用了Vue 3的reactive和computed来创建中心化的状态管理而不是引入Pinia或Vuex因为当前场景的复杂度尚可接受。// 核心状态管理 interface AppState { currentProblem: Problem | null; userCode: string; selectedModel: string; evaluationResult: EvaluationResult | null; isEvaluating: boolean; } const state: AppState reactive({ currentProblem: null, userCode: function twoSum(nums, target) { // 你的代码 here }, selectedModel: gpt-4-turbo, evaluationResult: null, isEvaluating: false, });当用户从题库选择一道题时会触发一个事件同时更新currentProblem和userCode可以预置一些初始代码或解题框架。模型选择器和提交按钮的交互则通过修改selectedModel和触发评估函数来驱动。评估结果的可视化展示AI返回的评估报告通常是长篇大论。直接展示一大段文字体验很差。我的做法是进行结构化解析和可视化。约定输出格式在后端的Prompt中严格要求AI以指定的JSON格式返回例如{ correctness: 85, timeComplexity: O(n), spaceComplexity: O(1), codeStyle: 良好但变量命名可更具体, overallScore: 82, suggestions: [建议使用哈希表来优化查找速度..., 第10行可改为...] }前端解析与渲染前端收到JSON后将分数用仪表盘如echarts-for-vue或进度条展示。将codeStyle和suggestions用清晰的列表和标签展示。对于复杂的优化建议甚至可以实现一个“代码对比视图”将用户原代码和AI建议的优化代码并排显示类似Git diff一目了然。3.2 后端多模型API的统一网关后端的核心是创建一个可靠、可扩展的“模型网关”。环境配置与安全管理绝对不要将API密钥硬编码在代码中我使用.env文件配合pydantic-settings来管理配置。# .env 文件 OPENAI_API_KEYsk-xxx ANTHROPIC_API_KEYsk-ant-xxx DEEPSEEK_API_KEYsk-xxx ALIYUN_ACCESS_KEY_IDxxx ALIYUN_ACCESS_KEY_SECRETxxx # config.py from pydantic_settings import BaseSettings class Settings(BaseSettings): openai_api_key: str anthropic_api_key: str deepseek_api_key: str aliyun_access_key_id: str aliyun_access_key_secret: str class Config: env_file .env settings Settings()在代码中通过settings.openai_api_key来安全引用。同时后端API本身也需要一个简单的认证如要求前端在请求头中携带一个用户Token防止服务被滥用。构建模型抽象层这是后端设计中最精妙的部分。我定义了一个抽象的BaseAIClient类然后为每个模型创建具体的实现类。from abc import ABC, abstractmethod import json from typing import Optional, Dict, Any class BaseAIClient(ABC): abstractmethod async def evaluate_code(self, problem: str, code: str) - Dict[str, Any]: 评估代码返回结构化的结果字典 pass class OpenAIClient(BaseAIClient): def __init__(self, api_key: str): from openai import AsyncOpenAI self.client AsyncOpenAI(api_keyapi_key) async def evaluate_code(self, problem: str, code: str) - Dict[str, Any]: prompt self._build_prompt(problem, code) response await self.client.chat.completions.create( modelgpt-4-turbo-preview, messages[{role: system, content: 你是一名资深技术面试官...}, {role: user, content: prompt}], response_format{ type: json_object } # 强制JSON输出 ) result json.loads(response.choices[0].message.content) return result def _build_prompt(self, problem: str, code: str) - str: # 构建针对OpenAI模型优化的Prompt return f 题目{problem} 用户代码python\n{code}\n 请以JSON格式输出评估结果包含以下字段correctness, timeComplexity, spaceComplexity, codeStyle, overallScore, suggestions。 class ClaudeClient(BaseAIClient): # 类似实现但使用Anthropic SDK和其特定的消息格式 pass class DeepSeekClient(BaseAIClient): # 类似实现调用DeepSeek API pass这样在主路由中代码会变得非常清晰app.post(/evaluate) async def evaluate_code(request: EvaluationRequest): model_name request.model_name problem request.problem code request.code client model_factory.get_client(model_name) # 工厂模式返回对应的Client实例 if not client: raise HTTPException(status_code400, detailUnsupported model) try: result await client.evaluate_code(problem, code) return {success: True, data: result} except Exception as e: # 记录日志并返回用户友好的错误信息 logger.error(fEvaluation failed with {model_name}: {e}) raise HTTPException(status_code500, detailAI evaluation service temporarily unavailable.)异步处理与超时控制AI API调用是网络I/O密集型操作必须使用异步async/await来避免阻塞提高并发能力。同时必须设置合理的超时timeout比如10-30秒防止因为某个API响应慢而拖垮整个请求。在FastAPI中可以使用httpx.AsyncClient或在任务中包装asyncio.wait_for来实现。3.3 提示词工程如何让AI成为合格面试官让AI给出专业、一致的评估关键在于Prompt。经过无数次调试我总结出一个高效的Prompt结构System Prompt (角色定义与规则设定)你是一位来自顶尖科技公司的资深软件工程师现在正在面试一位候选人。你的任务是对候选人提交的代码进行严格而专业的评估。评估必须基于以下维度并以JSON格式输出。 评估维度 1. 正确性 (Correctness): 代码是否能解决题目描述的问题是否考虑了边界情况 (0-100分) 2. 时间复杂度 (Time Complexity): 用大O表示法分析代码的时间复杂度并评价其优劣。 3. 空间复杂度 (Space Complexity): 用大O表示法分析代码的空间复杂度并评价其优劣。 4. 代码风格与可读性 (Code Style): 包括但不限于命名规范、注释清晰度、函数拆分合理性、代码简洁性。 5. 综合得分 (Overall Score): 基于以上维度的加权平均分 (0-100分)。 6. 具体建议 (Suggestions): 提供至少2条具体的、可操作的代码优化或改进建议。 输出格式要求 - 你必须输出一个且仅一个JSON对象。 - JSON对象的键必须与上述维度名称英文完全一致。 - “suggestions”的值必须是一个字符串数组。 - 不要输出任何JSON格式之外的文字、解释或道歉。User Prompt (具体问题与代码)题目描述[这里粘贴具体的算法题目例如给定一个整数数组 nums 和一个整数目标值 target请你在该数组中找出 和为目标值 target 的那两个整数并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是数组中同一个元素在答案里不能重复出现。] 候选人的代码 python def twoSum(nums, target): for i in range(len(nums)): for j in range(i1, len(nums)): if nums[i] nums[j] target: return [i, j]请开始评估。 **关键技巧**在Prompt中明确要求JSON格式输出并给出具体的字段名和类型。对于支持response_format参数的API如OpenAI的GPT-4一定要使用该功能来强制JSON输出这比在指令中要求可靠得多。对于不支持该功能的模型则需要在指令中反复强调并在后端做好解析失败的容错如尝试用正则表达式提取JSON部分。 ## 4. 模型接入实战与API调用详解 ### 4.1 OpenAI (GPT) 系列接入 OpenAI的API是目前最成熟、文档最全的。使用官方openai Python包即可。 python from openai import AsyncOpenAI import os client AsyncOpenAI(api_keyos.getenv(OPENAI_API_KEY)) async def evaluate_with_gpt(problem, code, modelgpt-4-turbo-preview): prompt f... [如上所述的Prompt] ... try: response await client.chat.completions.create( modelmodel, messages[ {role: system, content: 你是一名资深技术面试官...}, {role: user, content: prompt} ], response_format{ type: json_object }, # 关键确保JSON输出 temperature0.2, # 温度调低使输出更确定、更专业 max_tokens1500 ) result_json json.loads(response.choices[0].message.content) return result_json except Exception as e: # 处理可能的API错误如额度不足、超时等 raise注意事项模型选择gpt-4-turbo-preview在成本、速度和能力上比较平衡。gpt-3.5-turbo速度更快、成本极低但评估深度和遵循复杂指令的能力稍弱可用于快速语法检查。Token消耗Prompt和Code都会消耗Token。对于很长的代码成本会显著增加。可以在发送前对代码进行无损压缩删除多余空行、长注释但需谨慎避免影响AI对代码结构的理解。速率限制免费账户和初阶付费账户都有每分钟/每天的请求限制RPM/TPM。在代码中需要实现简单的限流或重试机制避免因超限导致失败。4.2 Anthropic (Claude) 系列接入Anthropic的Claude模型以强大的上下文处理能力著称。接入方式与OpenAI类似。import anthropic from anthropic import AsyncAnthropic client AsyncAnthropic(api_keyos.getenv(ANTHROPIC_API_KEY)) async def evaluate_with_claude(problem, code, modelclaude-3-sonnet-20240229): prompt f... [Prompt内容] ... try: message await client.messages.create( modelmodel, max_tokens1024, temperature0, system你是一名资深技术面试官..., # Claude有独立的system参数 messages[ {role: user, content: prompt} ] ) # Claude的回复在 message.content[0].text 中 response_text message.content[0].text # 尝试解析JSONClaude不一定能100%保证JSON格式需要更健壮的解析 import re json_match re.search(r\{.*\}, response_text, re.DOTALL) if json_match: result_json json.loads(json_match.group()) else: # 降级处理将整个回复作为“评语” result_json {error: Failed to parse JSON, raw_feedback: response_text} return result_json except Exception as e: raise注意事项System PromptClaude的API设计将system作为一个独立参数这与OpenAI不同。实践表明将核心指令放在system中效果更好。JSON输出Claude对response_format的支持不如OpenAI直接。即使Prompt中严格要求它有时也会在JSON外加一些描述性文字。因此后端解析时必须加入正则表达式提取或后处理清洗的逻辑确保程序的鲁棒性。模型选择claude-3-haiku是最快最便宜的适合简单评估claude-3-sonnet在能力和成本上取得平衡claude-3-opus能力最强但价格也最贵适合对评估质量要求极高的场景。4.3 DeepSeek 与 阿里云通义千问接入国产模型的接入是项目的亮点也让系统更具普适性。DeepSeek接入DeepSeek提供了与OpenAI高度兼容的API这使得接入异常简单。from openai import AsyncOpenAI # 注意仍然使用openai包 client AsyncOpenAI( api_keyos.getenv(DEEPSEEK_API_KEY), base_urlhttps://api.deepseek.com # 关键修改base_url ) async def evaluate_with_deepseek(problem, code, modeldeepseek-chat): # 后续调用方式与OpenAI client完全一致 response await client.chat.completions.create( modelmodel, messages[...], # DeepSeek可能暂不支持response_format参数需测试 )这种兼容性设计大大降低了开发成本。需要注意的是模型的名称和具体的参数支持情况如response_format需要查阅DeepSeek的最新文档。阿里云百炼/通义千问接入阿里云的接入稍微复杂一些因为它使用阿里云通用的SDK和签名机制。from alibabacloud_dashscope20230320.client import Client as DashScopeClient from alibabacloud_dashscope20230320 import models as dashscope_models from alibabacloud_tea_openapi import models as open_api_models from alibabacloud_tea_util import models as util_models def create_client(access_key_id: str, access_key_secret: str) - DashScopeClient: config open_api_models.Config( access_key_idaccess_key_id, access_key_secretaccess_key_secret, endpointdashscope.aliyuncs.com, # 服务端点 ) return DashScopeClient(config) async def evaluate_with_ali(problem, code, modelqwen-max): client create_client(settings.aliyun_access_key_id, settings.aliyun_access_key_secret) prompt f... [Prompt内容] ... request dashscope_models.CallModelRequest( modelmodel, input{ messages: [ {role: system, content: 你是一名资深技术面试官...}, {role: user, content: prompt} ] }, parameters{ result_format: message, # 或 text # 可以尝试在parameters里传递类似response_format的指令 } ) try: response client.call_model(request) # 处理响应提取文本内容 result_text response.body.output.text # 解析JSON... return parsed_result except Exception as e: raise注意事项认证方式阿里云使用标准的AccessKey ID/Secret进行签名认证需要安装其SDK。API稳定性国产模型的API迭代可能较快接口和参数可能会有变动需要密切关注官方公告。成本优势在中文语境下的代码理解和生成上国产模型常有不错的表现且成本通常更具竞争力。5. 部署、优化与常见问题排查5.1 前端Vue项目的构建与部署开发完成后使用npm run build生成静态文件位于dist目录。这些文件可以部署到任何静态托管服务上例如Vercel / Netlify连接Git仓库自动部署配置简单自带CDN。GitHub Pages免费适合个人项目展示。自有服务器/Nginx将dist目录下的文件放到Nginx的网站根目录下即可。关键点在于前端应用需要知道后端API的地址。在开发环境中我们使用Vue CLI的代理。在生产环境需要在构建前或运行时指定。// 在 vue.config.js 中配置生产环境API基地址 module.exports { devServer: { proxy: { /api: { target: http://localhost:8000, // 开发后端地址 changeOrigin: true, } } }, // 或者使用环境变量 publicPath: process.env.NODE_ENV production ? /your-sub-path/ : / };更专业的做法是使用.env.production文件VITE_API_BASE_URLhttps://your-backend.com/api然后在Axios的全局配置中使用这个变量。5.2 后端FastAPI服务的生产级部署对于生产环境单纯的uvicorn main:app是不够的。需要使用Gunicorn/Uvicorn WorkerGunicorn作为进程管理器管理多个Uvicorn工作进程提高并发能力。pip install gunicorn uvloop httptools gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app --bind 0.0.0.0:8000设置反向代理Nginx用Nginx处理静态文件、SSL/TLS加密、负载均衡和缓冲保护后端应用。server { listen 80; server_name your-domain.com; # 重定向到HTTPS return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name your-domain.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location /api { proxy_pass http://127.0.0.1:8000; # 转发到Gunicorn proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } location / { root /path/to/your/vue/dist; # 托管前端静态文件 try_files $uri $uri/ /index.html; } }进程管理使用systemd或supervisor来管理Gunicorn进程确保服务在崩溃或服务器重启后能自动恢复。5.3 性能优化与成本控制策略缓存策略对于同一道题目和完全相同的代码评估结果在短时间内是相同的。可以在后端如使用redis或数据库层面建立缓存键为题目ID代码MD5模型名有效期内直接返回缓存结果大幅减少API调用和等待时间。异步评估与队列当用户提交评估时不要同步等待AI返回。可以将评估任务放入一个消息队列如CeleryRedis立即返回一个“任务ID”给前端。前端通过轮询或WebSocket来获取任务结果。这样能避免HTTP连接超时提升用户体验也便于实现批量评估。成本监控与告警为每个AI服务商创建独立的API Key并定期在各自控制台查看使用量和费用。可以写一个简单的脚本每日汇总消耗并发送到钉钉或Slack避免产生意外高额账单。模型降级与熔断在代码中实现简单的熔断机制。如果某个模型的API连续失败多次或响应时间过长系统可以自动将其标记为“不可用”并降级使用另一个备用模型保证核心功能不中断。5.4 常见问题与排查技巧实录在开发和运营过程中我遇到了不少典型问题这里列出一个速查表问题现象可能原因排查步骤与解决方案前端提交后长时间无响应最终超时。1. 后端API调用AI服务超时。2. 网络问题导致请求未到达后端。3. 后端服务进程崩溃。1.检查后端日志查看是否有AI API调用错误如认证失败、额度不足。2.增加超时设置在前端Axios和后端HTTP客户端中设置合理的超时时间如30秒。3.实现异步任务如前所述改用任务队列避免同步阻塞。AI返回的评估结果格式混乱无法解析为JSON。1. Prompt中JSON格式指令不够严格。2. 模型未完全遵循指令。3. 输出被截断。1.强化Prompt在System和User Prompt中反复强调“只输出JSON”。使用“json\n...\n”包裹示例。2.使用API特性优先选用支持response_format: json_object的模型和参数。3.后端容错编写健壮的解析函数先用json.loads()尝试失败则用正则re.search(r\{.*\}, text, re.DOTALL)提取再失败则降级处理原始文本。调用某个特定模型如阿里云总是失败。1. API Key或配置错误。2. SDK版本过旧与最新API不兼容。3. 服务商区域或端点(Endpoint)配置错误。1.核对配置确保环境变量中的Key、Secret、Region完全正确无多余空格。2.升级SDKpip list评估结果质量不高感觉AI在“胡说”。1. Prompt设计不佳指令模糊。2. 使用的模型能力不足如用了GPT-3.5处理复杂递归算法。3. Temperature参数过高导致输出随机性大。1.迭代优化Prompt这是最重要的步骤。加入更具体的评分标准例如“如果代码有语法错误正确性直接判0分”。让AI“扮演”更具体的角色如“你是谷歌的L5级工程师”。2.切换更强模型对于复杂题目指定使用gpt-4或claude-3-opus。3.降低Temperature将其设为0或0.1使输出更确定、更专业。页面在浏览器中正常但部署后前端无法访问后端API。1. 跨域问题CORS。2. 生产环境API地址配置错误。3. Nginx代理配置错误。1.后端配置CORS在FastAPI中正确添加CORS中间件允许前端域名。2.检查环境变量确认生产环境构建时VITE_API_BASE_URL指向了正确的后端公网地址。3.检查Nginx日志sudo tail -f /var/log/nginx/error.log查看代理转发是否有误。我个人最深的一个体会是Prompt工程的质量直接决定了整个系统的用户体验上限。最初我只是简单地说“请评估这段代码”结果AI的回复天马行空有时是散文有时是代码修改但不说原因。经过几十次的迭代才固定下现在这个结构清晰、指令明确的Prompt模板。另一个教训是关于错误处理一开始我以为AI API会永远稳定返回直到一次OpenAI服务抖动导致整个系统挂掉。现在后端对每一个外部调用都做了完善的try-catch和降级处理并且有详细的错误日志运维起来安心多了。这个项目本身也还有很大的进化空间比如引入更多国产模型增加针对特定编程语言如Go、Rust的专项评估甚至利用用户的历史评估数据通过微调一个小模型来预测代码的常见缺陷。但就目前而言它已经成为了我以及身边不少朋友面试准备中一个非常得力的“副驾驶”。
网站建设
高端定制
企业官网