三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

AI LeetCode侧边栏:苏格拉底式算法引导工具部署与使用指南

AI LeetCode侧边栏:苏格拉底式算法引导工具部署与使用指南

这次我们来看一个专门为 LeetCode 刷题者设计的 AI 侧边栏工具。它不是一个直接给你答案的“作弊器”,而是一个采用苏格拉底式提问法,引导你一步步自己找到解题思路的智能助手。对于正在准备技术面试、希望真正提升算法能力的开发者来说,这是一个能让你摆脱“一看就会,一写就废”困境的实用工具。

这个工具的核心价值在于“引导”而非“给予”。它不会直接输出完整的代码,而是通过提问、提示关键概念、分析边界条件等方式,帮助你激活已有的知识,构建解题逻辑。这比直接看题解更能锻炼思维,也更符合面试中面试官期望的思考过程。

本文将带你全面了解这个 AI LeetCode 侧边栏:从它的核心能力、安装部署方式,到如何与浏览器集成、进行实际解题互动,再到其背后的技术实现思路和常见问题排查。无论你是想将其作为个人学习工具,还是研究如何将类似 AI 助手集成到自己的产品中,这篇文章都能提供清晰的路径。

1. 核心能力速览

能力项说明
项目类型浏览器扩展 / AI 编程助手
核心功能在 LeetCode 题目页面侧边栏提供苏格拉底式提示,引导用户思考解题步骤。
AI 交互模式对话式提示,逐步引导,不直接提供完整代码解决方案。
集成平台主流浏览器(如 Chrome、Edge 等基于 Chromium 的浏览器)。
启动/使用方式安装浏览器扩展后,访问 LeetCode 题目页面自动激活侧边栏。
硬件门槛无特殊要求。扩展本身不进行本地模型推理,依赖后端 AI API 服务。
是否支持 API是。扩展前端与后端 AI 服务通过 API 通信,后端服务可自部署或使用第三方。
是否支持批量任务不直接支持。主要用于单题交互式学习,但可记录对话历史用于复习。
适合场景个人算法学习、面试准备、理解解题思路、锻炼问题分解能力。

2. 适用场景与使用边界

这个 AI 侧边栏工具主要服务于以下几类用户:

  1. 算法学习者:正在系统学习数据结构和算法,需要有人引导思考,而不是直接看答案。
  2. 求职面试者:针对技术面试中的算法题进行练习,模拟面试官追问的场景,训练解题表述能力。
  3. 教育工作者:可以将其作为辅助教学工具,演示如何引导学生思考复杂的编程问题。
  4. 工具开发者:对构建交互式 AI 编程助手感兴趣,可参考其前端集成与提示词设计思路。

它能解决的核心问题

  • 思维惰性:打破遇到难题就立即查看完整题解的依赖,培养独立分析问题的习惯。
  • 思路卡壳:在某个具体步骤(如选择数据结构、确定循环边界)上卡住时,获得针对性提示。
  • 知识串联:帮助你将题目与已知的算法模式(如双指针、动态规划、回溯)联系起来。
  • 面试模拟:提供类似技术面试的互动体验,面试官通常会通过提问来考察你的思考过程。

不适合的场景与使用边界

  • 寻求即时答案:如果你希望快速获取某道题的 AC 代码,这个工具不是最佳选择,它旨在延长你的思考过程。
  • 完全零基础:工具假设使用者具备基础的编程语法和数据结构知识。它引导的是解题策略,而非教授基础语法。
  • 离线环境:该工具通常需要连接后端 AI 服务(如 OpenAI GPT、Claude 或开源模型 API),无法在完全离线的环境下工作。
  • 直接用于提交:工具生成的对话和提示不能作为最终的解题代码提交,你需要理解后自己编写实现。

合规与版权提醒

  • 该工具是对 LeetCode 平台的辅助学习,请勿用于任何自动化提交、刷分或干扰平台正常运行的行为。
  • 使用 AI 服务时,请注意用户协议,避免向 API 发送敏感或个人代码(如果自建服务需注意数据安全)。
  • 尊重 LeetCode 平台的题目版权,所有题目内容归属 LeetCode。

3. 环境准备与前置条件

在安装和使用这个 AI 侧边栏之前,你需要确保满足以下条件:

  1. 浏览器环境

    • 一款基于 Chromium 内核的浏览器,如Google ChromeMicrosoft EdgeBrave。这是安装浏览器扩展的前提。
    • 确保浏览器已更新到较新版本。
  2. AI 服务后端(关键)

    • 该扩展本身只是一个前端界面,它需要与一个能够处理自然语言、理解算法题目的 AI 后端进行通信。
    • 选项A:使用第三方 API:你需要拥有一个可用的 AI API 密钥,例如:
      • OpenAI GPT 系列模型的 API Key。
      • Anthropic Claude 的 API Key。
      • 其他兼容 OpenAI API 格式的开源模型部署服务(如本地部署的 Llama、Qwen 等通过text-generation-webuivLLM提供的 API)。
    • 选项B:自行部署后端:如果你希望完全掌控,可以部署项目的后端服务(如果项目开源了后端代码)。这通常需要:
      • Python 3.8+ 环境。
      • 必要的 Python 包(如fastapi,openai等)。
      • 可访问的服务器或本地主机,用于运行后端并暴露 API 端点。
  3. LeetCode 账户:虽然查看题目不一定需要登录,但为了获得完整的交互体验(如查看题目描述、测试用例),建议拥有一个 LeetCode 账户。

  4. 网络连接:需要能够稳定访问 LeetCode 网站以及你配置的 AI 后端 API 地址。

4. 安装部署与启动方式

由于这是一个浏览器扩展,其“部署”主要分为两步:安装扩展和配置后端。

4.1 安装浏览器扩展

通常,开源项目会提供扩展的打包文件(.crx.zip)或发布在 Chrome 网上应用店。我们以开发者模式加载未打包的扩展为例:

  1. 获取扩展源代码:从项目的 GitHub 仓库(例如https://github.com/xxx/ai-leetcode-sidebar)克隆或下载 ZIP 包。
  2. 打开浏览器扩展管理页面:在 Chrome 地址栏输入chrome://extensions/并回车。
  3. 开启开发者模式:在页面右上角,打开“开发者模式”开关。
  4. 加载已解压的扩展程序:点击“加载已解压的扩展程序”按钮。
  5. 选择扩展目录:在弹出的文件选择器中,导航到你下载的项目文件夹,选择包含manifest.json文件的根目录,然后点击“选择文件夹”
  6. 确认安装:如果一切正常,扩展列表中会出现新安装的扩展,并显示其图标和名称。

4.2 配置 AI 后端连接

安装扩展后,通常需要点击扩展图标或进入扩展选项页面进行配置。

  1. 打开扩展选项:在chrome://extensions/页面,找到该扩展,点击“详细信息”,然后找到并点击“扩展程序选项”链接(如果项目提供了选项页)。
    • 或者,直接点击浏览器工具栏上的扩展图标,可能会弹出配置界面。
  2. 设置 API 端点与密钥:在配置页面,你需要填写以下关键信息:
    • API Base URL:你的 AI 后端地址。例如:
      • 使用 OpenAI 官方 API:https://api.openai.com/v1
      • 使用本地部署的兼容 OpenAI 的 API:http://localhost:8000/v1http://your-server-ip:port/v1
    • API Key:对应服务的 API 密钥。如果使用本地部署且未设置密钥,可能留空或填写dummy-key
    • Model Name:指定要使用的模型,如gpt-4-turbo-previewclaude-3-haiku-20240307或本地模型名。
  3. 保存配置:填写完毕后,点击保存或应用按钮。

4.3 验证扩展是否工作

  1. 打开一个新的浏览器标签页,访问任意一道 LeetCode 题目,例如https://leetcode.com/problems/two-sum/
  2. 观察页面。如果扩展正常工作,你应该能在页面右侧或左侧看到一个新增的侧边栏面板。
  3. 侧边栏内可能会有初始提示,如“准备好开始思考了吗?”或一个输入框,等待你发起对话。

5. 功能测试与效果验证

安装配置完成后,我们通过解决一个具体的 LeetCode 题目来测试其核心功能。

测试题目:LeetCode 第 1 题 “两数之和 (Two Sum)”测试目标:验证 AI 助手能否通过提问引导用户得出“使用哈希表”的解题思路,而不是直接给出代码。

5.1 测试步骤

  1. 访问题目页面:在浏览器中打开https://leetcode.com/problems/two-sum/
  2. 激活侧边栏:确保扩展已启用,侧边栏应自动出现。如果没有,尝试刷新页面或检查扩展是否被禁用。
  3. 发起对话:在侧边栏的聊天输入框中,输入一个开场白,例如:

    “我正在尝试解决‘两数之和’这道题。题目要求是在数组中找到两个数,使它们的和等于目标值。你能给我一些提示吗?”

  4. 观察 AI 回应:一个设计良好的苏格拉底式助手可能会这样回应:
    • 引导性提问1:“首先,你能想到最直接的方法是什么?它的时间复杂度是多少?”
    • (你回答:暴力双重循环,O(n²)。)
    • 引导性提问2:“很好。那么,为了优化时间,我们是否可以用空间换时间?有没有一种数据结构可以让我们快速(O(1))查找一个补数(target - current_number)是否存在?”
    • (你可能会想到“集合”或“字典”。)
    • 引导性提问3:“对,哈希表(字典)是个好选择。那么,在遍历数组时,具体如何操作这个哈希表呢?是先全部存入再查找,还是边遍历边处理?”
    • 引导性提问4:“考虑一下,如果数组中有重复的数字,或者目标值恰好是某个数的两倍,你的算法还能正确工作吗?需要处理哪些边界情况?”
  5. 逐步构建思路:跟随 AI 的提问,一步步在脑海中或草稿上构建算法逻辑。最终,你应该能自己推导出使用一次遍历和哈希表记录的经典解法。
  6. 尝试编写代码:根据引导得出的思路,在 LeetCode 的代码编辑器中尝试自己实现。

5.2 预期结果与成功标准

  • 成功标准1:AI 的回复是一系列问题或简短的提示,而不是完整的算法描述或代码块。
  • 成功标准2:提示具有递进性,从暴力解法引导到优化思路,再到具体数据结构和实现细节。
  • 成功标准3:提示能触及关键点,如“时间复杂度”、“空间换时间”、“哈希表”、“一次遍历”、“边界条件(重复、零)”。
  • 成功标准4:通过交互,你能够独立地形成清晰的解题步骤,并成功通过代码实现。

5.3 测试其他功能维度

  • 多轮对话深度:针对一个复杂问题(如动态规划题),测试 AI 是否能进行多轮深入对话,引导你定义状态、找到转移方程。
  • 不同题型适配:尝试数组、链表、树、图、回溯、动态规划等不同类型的题目,观察提示策略是否有所变化。
  • 代码理解提示:如果你已经写了一版有错误的代码,可以将错误信息或思路困惑点输入侧边栏,看 AI 是否能针对你的具体代码逻辑进行提问和引导。

6. 接口 API 与后端集成示例

这个扩展的前端需要与后端 AI 服务通信。理解其 API 调用方式,有助于你自行部署或定制后端。

6.1 前端请求格式(推测)

扩展前端 likely 会向后端发送一个结构化的请求,包含题目信息和用户当前的问题。一个简化的请求示例可能如下:

{ "question_title": "Two Sum", "question_content": "Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target...", "user_message": "我正在尝试解决‘两数之和’这道题。题目要求是在数组中找到两个数,使它们的和等于目标值。你能给我一些提示吗?", "conversation_history": [ {"role": "user", "content": "Hello"}, {"role": "assistant", "content": "I'm here to help you think through LeetCode problems. What problem are you working on?"} ], "hint_level": "socratic" // 可能指定提示风格 }

6.2 后端服务实现示例(Python + FastAPI)

如果你想自己部署一个简单的兼容后端,可以使用以下代码作为起点。这个后端使用 OpenAI 格式的 API,但实际调用的是你配置的模型。

# main.py from fastapi import FastAPI, HTTPException from pydantic import BaseModel from typing import List, Optional import openai # 或使用其他兼容库,如 `litellm` app = FastAPI() # 配置你的 AI 服务 # 方式1: 使用 OpenAI 官方 # openai.api_key = "your-openai-key" # openai.base_url = "https://api.openai.com/v1" # 方式2: 使用本地部署的兼容 OpenAI 的 API (如 text-gen-webui 或 vLLM) openai.api_key = "dummy-key" # 如果本地不需要密钥 openai.base_url = "http://localhost:5000/v1" # 你的本地 API 地址 class ChatMessage(BaseModel): role: str content: str class HintRequest(BaseModel): question_title: str question_content: str user_message: str conversation_history: Optional[List[ChatMessage]] = [] hint_level: str = "socratic" @app.post("/api/generate_hint") async def generate_hint(request: HintRequest): """ 接收前端请求,构造给 AI 模型的系统提示和用户消息,返回 AI 的提示。 """ # 1. 构造系统提示,定义 AI 的“苏格拉底导师”角色 system_prompt = f""" 你是一位经验丰富的算法教练,擅长通过提问引导学生自己找到答案。 当前题目:{request.question_title} 题目描述:{request.question_content[:500]}... (已截断) 你的任务不是直接给出解决方案或代码。而是通过提出引导性问题、提示关键概念、指出可能的优化方向,来帮助学生构建解题思路。 请确保你的回复是简洁的、问题形式的,并且基于当前的对话历史。 """ # 2. 构造消息历史 messages = [ {"role": "system", "content": system_prompt}, ] # 加入历史对话 for msg in request.conversation_history[-6:]: # 保留最近几轮历史 messages.append({"role": msg.role, "content": msg.content}) # 加入用户当前消息 messages.append({"role": "user", "content": request.user_message}) try: # 3. 调用 AI 模型 response = openai.ChatCompletion.create( model="gpt-3.5-turbo", # 或你配置的其他模型名 messages=messages, temperature=0.7, max_tokens=300, # 限制回复长度,保持提示的简洁性 ) ai_hint = response.choices[0].message.content.strip() # 4. 返回结果 return {"hint": ai_hint} except Exception as e: raise HTTPException(status_code=500, detail=f"AI service error: {str(e)}") if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)

6.3 运行与测试后端

  1. 安装依赖:pip install fastapi uvicorn openai(或litellm)。
  2. 将上述代码保存为main.py
  3. 确保你的本地 AI 模型服务(如text-generation-webui--api模式)正在运行,并记下其 API 地址(如http://localhost:5000)。
  4. 修改main.py中的openai.base_url指向你的本地服务地址。
  5. 运行后端:python main.py
  6. 在浏览器扩展的配置中,将API Base URL设置为http://localhost:8000(即你的 FastAPI 后端地址)。
  7. 现在,扩展的前端请求将发送到你的自部署后端,由后端代理请求到你本地的 AI 模型。

7. 资源占用与性能观察

由于该工具的核心是一个轻量级浏览器扩展和一个远程(或本地)API 调用,其资源占用主要集中在两个方面:

  1. 浏览器扩展本身:内存占用极小,通常只有几 MB 到十几 MB。它主要是一个内容脚本(Content Script)和侧边栏 UI,不执行复杂计算。
  2. AI 后端服务
    • 使用云端 API(如 OpenAI):无本地资源占用,性能取决于网络延迟和 API 响应速度。每次提示生成通常需要 2-10 秒。
    • 使用本地部署模型:这是资源消耗的主要部分。
      • 显存/内存:取决于你运行的 AI 模型大小。一个 7B 参数量的模型,以 4-bit 量化加载,可能需要 4-6 GB 显存。如果使用 CPU 推理,则需要足够的系统内存。
      • CPU/GPU 利用率:在生成提示时,对应的计算硬件会有短暂的高利用率。
      • 响应时间:本地模型的首次加载(冷启动)较慢,但后续单次推理速度较快,通常在 1-5 秒内,取决于模型大小和硬件。

性能优化建议

  • 选择合适的模型:用于提示和引导,不需要极强的代码生成能力。一个 7B-13B 参数量的模型(如 CodeLlama、Qwen-Coder、DeepSeek-Coder 的 instruct 版本)在正确提示词引导下,完全足以胜任苏格拉底式提问的任务,且资源需求相对较低。
  • 使用量化模型:优先使用 GPTQ、AWQ、GGUF 等量化格式的模型,可以大幅降低显存和内存占用。
  • 设置合理的上下文长度:题目描述可能较长,但对话历史可以适当截断,只保留最近几轮,以减少 token 消耗和推理时间。
  • 后端服务缓存:对于热门题目,可以考虑在后端对 AI 生成的提示进行缓存,避免对相同问题重复计算。

8. 常见问题与排查方法

问题现象可能原因排查方式解决方案
侧边栏不显示1. 扩展未启用。
2. 未在 LeetCode 域名下激活。
3. 扩展脚本注入失败。
1. 检查chrome://extensions/,确保扩展已启用。
2. 确认当前网址是leetcode.com/problems/*
3. 打开浏览器开发者工具(F12),查看 Console 是否有错误。
1. 启用扩展。
2. 刷新 LeetCode 页面。
3. 尝试重新加载扩展或检查扩展的content_scripts匹配规则。
侧边栏显示但无法交互/无响应1. 后端 API 配置错误。
2. 网络问题导致 API 请求失败。
3. 后端服务未启动或崩溃。
1. 检查扩展配置中的 API URL 和 Key 是否正确。
2. 打开开发者工具(F12)的 Network 面板,查看发送到后端 API 的请求是否返回错误(如 404, 403, 500)。
3. 检查后端服务进程是否运行,查看后端日志。
1. 修正扩展配置。
2. 确保网络可通,检查 CORS 设置(如果后端自部署)。
3. 重启后端服务,检查依赖和环境。
AI 回复不是提示,而是直接给答案1. 系统提示词(System Prompt)未正确设置或未生效。
2. 使用的 AI 模型不适合指导性任务。
1. 检查后端服务中构造system_prompt的代码,确保其明确要求“提问而非解答”。
2. 尝试在用户消息中明确强调“请只提问引导我,不要给代码”。
1. 强化系统提示词,例如:“你是一位严格的教练,只允许通过提问来引导。如果用户直接索要答案,请拒绝并反问一个关键问题。”
2. 更换或微调模型,选择更擅长遵循指令的模型。
API 请求超时1. 网络延迟高。
2. 本地模型推理速度慢。
3. 后端服务处理瓶颈。
1. 测试网络到 API 地址的延迟。
2. 查看后端服务日志,确认单次推理耗时。
3. 监控服务器资源(CPU/GPU/内存)使用率。
1. 优化网络或使用更近的服务器。
2. 为本地模型启用量化,或使用更小的模型。
3. 在后端增加请求超时设置,在前端添加加载状态和重试机制。
提示质量不高,问题不相关1. 模型能力有限。
2. 传入的题目上下文信息不全或格式乱。
3. 对话历史处理不当。
1. 尝试不同的模型。
2. 检查前端发送给后端的question_content是否完整、清晰。
3. 检查对话历史的格式和截断逻辑。
1. 升级模型或使用专门针对代码/数学推理微调的模型。
2. 优化前端提取题目信息的逻辑,确保关键部分(描述、示例)被包含。
3. 优化历史管理,确保核心上下文不丢失。
CORS 错误自部署后端未正确配置跨域资源共享。浏览器开发者工具 Console 中会显示类似Access-Control-Allow-Origin的错误。在后端服务中添加 CORS 中间件。例如在 FastAPI 中:from fastapi.middleware.cors import CORSMiddleware,然后配置允许的前端来源。

9. 最佳实践与使用建议

为了最大化这个工具的学习效果并确保稳定使用,可以参考以下建议:

  1. 明确使用目标:在打开工具前,先自己思考题目 5-10 分钟。明确自己卡在哪个具体环节(是思路方向、数据结构选择,还是边界条件),再向 AI 提问。这样获得的提示会更有针对性。
  2. 主动引导对话:不要只说“帮帮我”。尝试描述你的初步思路和遇到的障碍,例如:“我想到用滑动窗口,但不确定窗口收缩的条件是什么?” AI 的回应会基于你提供的上下文。
  3. 结合官方题解:在使用 AI 引导得出思路后,再去对比 LeetCode 的官方题解或高质量社区题解。这可以验证你的思路,并学习更优雅的代码实现。
  4. 记录对话历史:有价值的引导对话可以保存下来,作为你个人的“解题思路笔记”,方便日后复习。
  5. 后端部署优化
    • 提示词工程:精心设计系统提示词是效果的关键。明确角色、规则和输出格式。
    • 模型选择:对于算法引导,推理能力强的模型比纯代码生成模型可能更合适。可以测试claude-3-haiku,gpt-4,deepseek-coder-instruct等。
    • 服务监控:如果自建服务供多人使用,需要监控 API 调用频率、响应时间和错误率。
  6. 隐私与安全
    • 如果使用第三方 API,请注意其隐私政策,避免发送敏感代码或个人信息。
    • 自建服务时,确保 API 端点有适当的访问控制(如简单的 Token 验证),避免被滥用。
  7. 作为教学工具:教师或导师可以利用此工具,通过观察学生与 AI 的互动过程,来了解学生的思考模式和常见误区,从而进行更有针对性的辅导。

这个 AI LeetCode 侧边栏项目代表了一种更健康的编程辅助方向——它强化的是思维过程,而非结果复制。它的价值不在于帮你快速通过一道题,而在于训练你解决未来无数道题的能力。工具本身安装简单,核心挑战在于后端 AI 服务的选型与提示词调优。建议先从配置一个云端 API 开始体验,理解其工作流程和效果。如果你对提示词工程或本地模型部署感兴趣,再尝试自建后端进行深度定制。把它当作一位严格的陪练,你的算法肌肉才会越练越强。

← 返回列表