尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

手搓开源AI编程助手:基于DeepSeek-Coder的轻量级Claude Code复刻实践

手搓开源AI编程助手:基于DeepSeek-Coder的轻量级Claude Code复刻实践 1. 项目缘起为什么我要“手搓”一个Claude Code最近几个月AI编程助手领域可以说是风起云涌。从GitHub Copilot到Amazon CodeWhisperer再到后来者居上的Claude Code几乎每个开发者都在讨论如何利用这些工具来提升自己的编码效率。我自己也是这些工具的深度用户尤其是Claude Code它在代码理解、重构建议和复杂逻辑生成上的表现确实让我印象深刻。但用着用着一个想法就冒了出来这些工具的核心能力我们能不能自己动手用开源的方式“复刻”出来一部分不是说要完全替代那些商业产品而是想探索一下在有限的资源和算力下我们能实现到什么程度以及这个过程本身能带来多少学习和理解。这就是“mini-cc”这个项目的起点。它的全称是“mini Claude Code”目标很明确构建一个轻量级、可本地部署、具备基础代码理解和生成能力的开源AI编程助手原型。我知道要完全达到Claude Code的水平需要海量的高质量代码数据、顶尖的模型架构和巨大的计算资源这远非个人或小团队能及。但“手搓”的意义不在于一比一的复刻而在于“拆解”和“理解”。通过自己动手把“黑盒”打开一条缝看看里面到底有哪些齿轮在转动每个部分是如何协同工作的。这个过程对于想深入理解AI如何应用于编程这个领域的开发者来说价值可能比直接使用一个完美的工具更大。所以这个项目更像是一次深度探索的实验。它不追求功能的全面而是聚焦于几个核心场景比如给定一个函数签名和简单的自然语言描述能否生成可运行的函数体或者给定一段代码能否准确地提取出它的功能摘要再或者能否对代码中的潜在bug或风格问题给出建议围绕这些具体问题我们来搭建系统、选择模型、设计流程并最终验证效果。这整个过程就是我想通过这篇博文分享给大家的。2. 核心架构拆解mini-cc的“五脏六腑”要构建一个AI编程助手哪怕是一个简化版也需要一个清晰的架构。我们不能直接把一个大模型扔给用户就说这是助手中间需要很多环节来“翻译”用户意图、“理解”代码上下文、“约束”模型输出并最终“呈现”一个可用的结果。mini-cc的架构设计就是围绕这个流程展开的。2.1 整体工作流从问题到代码的旅程当用户向mini-cc提出一个请求比如“写一个Python函数计算斐波那契数列的第n项”系统内部会经历一个标准化的处理链条。这个链条可以概括为四个主要阶段意图解析、上下文构建、模型推理和后处理。首先意图解析。用户的输入可能是模糊的、口语化的。这一步的任务就是将其转化为机器可处理的、结构化的任务描述。例如从上面的请求中我们需要提取出编程语言是Python任务类型是“函数生成”核心目标是“计算斐波那契数列”关键参数是“第n项”。在mini-cc的初期版本我采用了一套基于关键词匹配和简单规则的方法虽然不如大语言模型LLM自己理解得那么灵活但对于明确指令的解析足够高效且没有额外的延迟和成本。接下来是上下文构建。这是决定生成代码质量的关键一步。一个函数不会凭空产生它需要考虑当前的代码文件里已经有什么避免命名冲突、利用已有变量、项目遵循什么样的代码规范缩进、命名约定、以及需要导入哪些库。mini-cc会扫描用户正在编辑的文件提取相关的类、函数、变量名和导入语句将这些信息作为“上下文”打包。同时我设计了一个简单的“项目配置文件”可以预定义一些规则比如“使用snake_case命名函数”、“最大行宽为88”遵循Black格式化标准。这些上下文信息会被精心组织成一个提示词Prompt模板的一部分。然后进入核心的模型推理阶段。准备好的提示词会被发送给我们选定的开源代码大模型。提示词的质量直接决定了模型的输出质量。我的设计是采用“角色设定任务描述上下文格式要求”的结构。例如“你是一个专业的Python程序员。请根据以下要求生成代码。当前文件已有以下内容[插入上下文]。请生成一个名为fibonacci的函数它接受一个整数参数n并返回斐波那契数列的第n项。要求函数必须包含文档字符串使用递归实现并处理n0的边界情况。请只输出最终的函数代码不要有任何解释。”最后是后处理。模型生成的文本可能包含多余的说明、错误的缩进或者不符合项目规范的格式。后处理模块会进行清理提取出代码块通常位于之间调用代码格式化工具如blackfor Python,prettierfor JavaScript进行标准化最后再将其插入到用户光标所在的位置或者创建一个新文件。2.2 技术选型在理想与现实间权衡架构确定了接下来就是具体的技术选型。每一个选择背后都是性能、成本、易用性和能力之间的权衡。模型层是核心中的核心。完全复刻Claude 3 Opus那样的顶级模型不现实。我的目标是在有限的资源消费级GPU甚至只有CPU下找到一个能力足够强的开源替代品。经过一番调研和测试我最终选定了DeepSeek-Coder系列模型。选择它的理由很充分首先它是专门为代码任务训练的在HumanEval、MBPP等主流代码生成基准测试上表现非常亮眼甚至接近一些早期的闭源模型。其次它提供了多种尺寸的版本从1.3B、6.7B到33B参数。对于mini-cc原型我选择了DeepSeek-Coder-6.7B-Instruct这个版本。6.7B的参数规模在RTX 4070这样的消费级显卡上可以流畅地进行推理需要量化同时保持了不错的代码生成和理解能力。最后它的许可协议MIT非常友好允许商用和修改这对于开源项目至关重要。服务化与推理框架。我们不能直接去加载PyTorch的模型文件需要一个高效的推理服务器。这里我选择了vLLM。它是一个专为LLM设计的高吞吐量、低延迟的推理和服务框架。它的核心优势在于其创新的PagedAttention注意力算法可以极大地优化显存使用尤其是在处理多个并发请求时。通过vLLM我可以轻松地将DeepSeek-Coder模型部署为一个HTTP API服务mini-cc的后端通过调用这个API来获取模型的生成结果。相比直接使用Transformers库vLLM在生成速度上有数倍的提升。后端与交互层。为了让mini-cc能够集成到开发环境中我设计了两种交互方式。第一种是命令行接口CLI使用Python的argparse库开发。用户可以在终端中直接输入命令例如mini-cc generate --lang python --desc “quick sort function”就能快速获得代码片段适合一次性任务或脚本编写。第二种也是更重要的是IDE/编辑器插件。我首先为VS Code开发了一个插件。插件后端是一个用FastAPI编写的轻量级Web服务它负责协调意图解析、上下文收集、调用vLLM API以及后处理的所有流程。VS Code插件则负责捕获用户输入、获取当前编辑器的上下文通过VS Code API并将结果插入编辑器。这种架构将核心逻辑与编辑器前端解耦未来可以相对容易地适配到JetBrains全家桶或Vim/Neovim。提示词工程。这是连接用户和模型的“翻译官”其设计需要大量实验和迭代。我构建了一个可配置的提示词模板系统。模板中包含了几个变量部分$role模型角色、$context代码上下文、$task用户任务、$format输出格式要求。通过大量的测试我总结出一些对代码生成特别有效的技巧比如在任务描述中明确要求“逐步思考”尽管模型不一定输出思考过程但这能提高最终答案的准确性要求模型“检查自己的代码是否存在语法错误”在上下文里提供几个类似的函数作为示例Few-shot Learning效果比单纯的描述要好得多。注意提示词的设计没有银弹。对于不同的模型甚至同一模型的不同版本最优的提示词可能不同。在mini-cc中我将提示词模板做成了可配置的JSON文件方便用户根据自己常用的任务类型和模型特性进行调整和优化。3. 从零到一的实现踩坑记有了设计图和零件清单接下来就是组装和调试。这个过程远非一帆风顺几乎每一步都遇到了预料之中和预料之外的坑。我把这些经历记录下来或许能帮你绕过一些弯路。3.1 环境搭建与模型部署的“水土不服”第一步把模型跑起来。我按照vLLM的官方文档准备在一台搭载RTX 4070 12GB显存的机器上部署DeepSeek-Coder-6.7B-Instruct。第一个坑显存不足。直接加载FP16精度的6.7B模型显存占用轻松超过13GB我的12GB显卡瞬间告急。解决方案是量化。vLLM支持AWQActivation-aware Weight Quantization和GPTQ两种主流的量化方式。我选择了AWQ因为它通常在精度损失和推理速度之间取得了更好的平衡。使用autoawq库可以很方便地将原始模型转换为AWQ量化格式。命令大致如下# 这是一个示例具体参数需参考模型和工具的最新文档 python -m vllm.entrypoints.quantize \ --model deepseek-ai/deepseek-coder-6.7b-instruct \ --quantization awq \ --output ./deepseek-coder-6.7b-instruct-awq \ --dtype half量化后模型大小缩小了近4倍显存占用降到3GB左右顺利加载。第二个坑依赖冲突。vLLM、Transformers、PyTorch以及CUDA驱动版本之间有着严格的兼容性矩阵。我一开始使用了最新的PyTorch 2.3和vLLM 0.4.1结果在加载某些特定结构的模型时出现了奇怪的错误。经过排查发现是某个底层CUDA内核编译不兼容。最终的稳定组合是CUDA 11.8 PyTorch 2.1.2 vLLM 0.3.3。这里的教训是在AI工程领域并非越新越好追求“稳定可用的组合”往往比追求“最新特性”更重要。务必仔细查阅你所用模型和推理框架的官方推荐环境。第三个坑API服务的长时稳定性。vLLM启动服务很简单python -m vllm.entrypoints.api_server --model ./my-quantized-model --port 8000。但在长时间运行后偶尔会出现服务无响应的情况。这通常是因为内存碎片或某些请求超时导致工作进程卡死。我的解决办法是结合使用进程管理工具。我采用了gunicorn作为WSGI服务器来管理多个vLLM工作进程并配合supervisor来监控进程状态一旦崩溃就自动重启。同时在mini-cc的后端代码中加入了完善的重试和超时机制。对于一次请求如果5秒内未收到响应则自动重试一次最多两次并在日志中记录超时情况便于后续分析。3.2 上下文管理的“尺度”难题模型有了服务稳了接下来就要解决“给模型看什么”的问题。上下文管理听起来简单就是把当前文件内容塞进去但实际操作起来分寸很难拿捏。问题一上下文太长模型“失焦”。最初我简单地把整个当前编辑的文件内容可能有好几百行都作为上下文喂给模型。结果发现当文件很大时模型生成代码的质量会显著下降有时甚至会生成与当前函数完全无关的、来自文件其他部分的代码。这是因为模型的注意力被分散了。Transformer模型虽然有上下文窗口比如DeepSeek-Coder是16K但有效处理长上下文的能力依然有限尤其是当关键信息被淹没在大量无关文本中时。解决方案智能上下文截取。我实现了一个简单的“相关性扫描”算法。当用户将光标置于某个函数体内或选中了一段代码时mini-cc的后端会做以下几件事解析当前文件的抽象语法树AST精确识别光标所在的函数、类或代码块。向上查找该作用域的直接依赖包括父类、在当前函数中被调用的其他函数、以及导入的模块。只将这些“直接相关”的代码片段通常不超过10-20行以及文件顶部的导入语句作为主要上下文。同时提供一个“项目级”的上下文缓存存储一些高频使用的工具函数、通用配置类的代码片段通过一个简单的指纹去重在需要时可以少量附加。通过这种方式我们将上下文长度从数百行压缩到几十行确保了模型能够聚焦于最相关的信息生成结果的相关性和准确性大幅提升。问题二格式混乱导致模型误解。直接从编辑器获取的代码文本可能包含折叠区域、多个光标位置或者一些特殊的IDE标记。这些噪声如果直接放入提示词会严重干扰模型。解决方案代码清洗与规范化。在构建上下文字符串之前增加一个清洗步骤使用语言特定的解析器如Python的ast模块尝试解析代码片段。如果解析失败说明这段文本可能不是有效的代码或包含噪声则对其进行简单的正则过滤移除明显的非代码行如// region folded这类注释。对所有保留下来的代码统一用格式化工具如black的format_str函数进行一次格式化确保缩进、空格等风格一致。这不仅能减少噪声还能让模型看到“整洁”的代码有助于它生成同样整洁的代码。3.3 提示词工程的“蝴蝶效应”提示词的微小改动可能会对输出结果产生巨大影响。为了找到一个相对稳定可靠的模板我进行了大量的A/B测试。案例生成一个数据库连接工具函数。初始提示词“写一个Python函数来连接MySQL数据库。”模型输出生成了一个非常基础的函数使用了不推荐的MySQLdb库没有错误处理没有连接池密码硬编码在代码里。这显然不可用。迭代后的提示词你是一个经验丰富的后端开发工程师遵循最佳安全实践。 任务创建一个可重用的MySQL数据库连接工具。 要求 1. 使用 pymysql 库。 2. 函数名为 get_mysql_connection。 3. 从环境变量 DB_HOST, DB_USER, DB_PASSWORD, DB_NAME 读取配置。 4. 实现连接池使用 DBUtils.PersistentDB 或类似机制。 5. 包含完善的异常处理连接失败、操作超时等并记录日志使用 logging 模块。 6. 函数返回一个可用的连接对象。 7. 代码风格需符合 PEP 8。 请只输出最终的函数代码不要有任何额外的解释。模型输出这次生成了一个结构完整、考虑周全的函数包含了连接池、环境变量配置、异常处理和日志记录代码质量可以直接用于生产环境原型。这个对比实验让我深刻认识到模糊的需求得到模糊的结果而精确的、带有约束和上下文的需求才能得到高质量的产出。在mini-cc中我预设了几种针对不同场景优化过的提示词模板如“生成CRUD函数”、“生成单元测试”、“代码重构建议”用户可以根据任务类型选择。同时我也开放了高级设置允许经验丰富的用户完全自定义提示词模板。4. 能力边界实测mini-cc能做什么不能做什么经过一系列开发和调优是时候给mini-cc做个“体检”了。我设计了一系列测试从简单到复杂来客观评估它的能力边界。这不仅能告诉我们现在做到了什么更能明确未来的改进方向。4.1 基础代码生成从“填空题”到“命题作文”这是最核心的功能。我将其分为几个难度等级进行测试Level 1: 单函数生成填空题。任务明确上下文简单。例如“写一个Python函数判断一个字符串是否是回文。”结果成功率高接近100%。生成的代码通常正确、简洁并且能考虑到边缘情况如忽略大小写和标点。mini-cc在这方面表现稳定可靠可以作为日常的“代码片段补全器”。Level 2: 基于上下文的函数生成命题作文。在已有的代码文件中根据已有的类和函数添加一个新功能。例如在一个处理用户数据的类UserManager中要求“添加一个根据邮箱前缀查找用户的方法”。结果表现良好成功率约85%。模型能够正确理解UserManager的现有方法命名风格如find_by_id,save并生成风格一致的新方法find_by_email_prefix。关键在于上下文的提供是否精准。如果UserManager的代码结构清晰mini-cc就能很好地融入。Level 3: 复杂算法与逻辑实现。例如“实现一个Python函数使用Dijkstra算法计算图中单源最短路径。”结果表现中等成功率约60%-70%。模型能够生成基本正确的算法骨架但在一些细节上容易出错比如优先队列heapq的使用、距离字典的初始化、以及节点不可达情况的处理。它需要非常精确的提示词来约束细节比如明确要求“使用heapq实现最小优先队列”、“将无法到达的节点距离设为float(‘inf’)”。这说明对于复杂的逻辑模型需要更多引导。4.2 代码理解与摘要当好一个“代码翻译官”除了生成理解现有代码也是一个重要能力。我测试了它的代码摘要和解释功能。代码摘要给出一段约50行的Python数据处理函数要求用一句话概括其功能。结果令人惊喜。mini-cc生成的摘要通常非常准确能够抓住核心数据转换逻辑例如“该函数读取CSV文件过滤出状态为‘active’的用户计算其平均年龄并将结果写入新的JSON文件。” 这比许多简单的基于规则的方法要强得多。代码解释针对一段包含递归和复杂条件判断的代码要求逐行解释其逻辑。结果尚可但有时会“过度解释”或“错误关联”。模型能正确解释大部分语句但偶尔会对某些行的作用产生误解或者添加一些原文中没有隐含的“设计意图”。例如它可能会说“这里使用列表推导是为了提高性能”而实际上原作者可能只是觉得那样写更简洁。这说明它的“解释”是基于模式识别和概率生成的并非真正“理解”了作者的原始意图。4.3 缺陷与局限认清现实的鸿沟在测试中mini-cc或者说其背后的6.7B模型也暴露出了明显的局限性这也是当前开源小模型的普遍问题。1. 逻辑一致性不足。当任务需要多步推理且前后步骤严格依赖时模型容易“顾此失彼”。例如要求生成一个函数先验证输入再处理数据最后格式化输出。模型可能会生成一个完美的验证逻辑和一个完美的输出格式化但中间的数据处理步骤却与前后文不匹配或者漏掉了关键步骤。2. 对复杂项目结构理解有限。虽然我们通过智能上下文截取缓解了问题但当代码依赖关系跨越多个文件、涉及复杂的面向对象设计模式时mini-cc就显得力不从心了。它很难理解一个庞大代码库的完整架构因此生成的代码在跨模块集成时可能需要人工进行大量调整。3. “幻觉”问题依然存在。模型有时会生成看似合理、但完全错误的代码。最常见的是“API幻觉”生成使用了某个库根本不存在的函数或参数。例如在生成FastAPI路由时它可能会用一个不存在的app.post(“/item”, status_code201)装饰器参数实际上status_code是app.post装饰器内部函数的参数。这是因为它在训练数据中看到了太多类似的模式进行了错误的组合。4. 实时性与资源消耗。即使在量化后在CPU上运行推理的速度依然较慢生成20行代码可能需要10-15秒这对于追求流畅交互的IDE插件来说是个挑战。在GPU上速度很快1-3秒但这意味着用户需要有显卡资源。这是一个在能力、成本和体验之间的永恒权衡。提示这些局限性并非不可逾越。对于逻辑一致性问题可以通过更精细的“思维链”提示例如要求模型先输出步骤规划再生成代码来改善。对于项目结构理解可以探索建立轻量级的代码图索引。而“幻觉”问题则需要引入后置的代码验证环节比如用语言服务器LSP进行快速语法和类型检查或者对生成的API调用进行简单的存根验证。5. 工程化与优化让原型变得可用一个能跑通的demo和一个可用的工具之间隔着工程化的鸿沟。为了让mini-cc从实验台走向办公桌我在性能、用户体验和可扩展性上做了不少工作。5.1 性能优化与“等待”斗争速度是交互式工具的生命线。优化主要从两个层面入手推理速度和系统响应。推理加速除了使用vLLM和量化模型我还启用了推测解码。这是一种让模型同时预测多个后续token的技术对于代码生成这种token间关联性较强的任务能带来显著的加速比在我的测试中提升约30%-50%。在vLLM的启动参数中可以加入--speculative-model small-model来指定一个更小的“草稿模型”辅助加速。我选择了一个更小的代码模型如CodeLlama-1B作为草稿模型与DeepSeek-Coder-6.7B配合使用。请求批处理与缓存当VS Code插件在用户输入时实时触发代码补全建议类似于IntelliSense时可能会产生大量的小请求。为了应对这种情况我实现了一个简单的请求批处理队列。将短时间内如100毫秒内来自同一用户的多个相似请求如连续输入字符触发的补全合并为一个批次发送给推理服务器vLLM可以高效地并行处理批次请求大幅提升吞吐量。同时对于常见的、确定的代码片段生成请求如“生成一个标准的Python__init__方法”我建立了一个内存缓存。相同的提示词命中缓存时直接返回结果完全绕过模型推理响应时间降到毫秒级。异步与非阻塞设计整个后端服务采用完全的异步架构基于asyncio和FastAPI。当模型在进行耗时推理时服务器不会阻塞可以继续处理其他轻量级请求如配置读取、心跳检测。前端插件在发起生成请求后会显示一个加载动画并保持UI可响应避免编辑器卡死。5.2 用户体验打磨细节决定成败一个工具好不好用往往体现在细节上。交互设计VS Code插件提供了多种触发方式命令面板通过CtrlShiftP输入“Mini-CC: Generate function”等命令。右键菜单在编辑器内右键选择“用Mini-CC生成代码”。自定义快捷键我预设了CtrlAltG作为快速生成快捷键。内联建议在用户输入注释如# TODO: 需要实现一个排序函数后插件会自动在行尾提供一个“灯泡”提示点击即可生成代码。增量生成与编辑用户不必一次性接受模型生成的全部代码。插件提供了一个交互式界面生成的代码会显示在一个可编辑的预览窗格中用户可以像在普通编辑器中一样修改它然后选择“全部插入”或“仅插入选中部分”。更重要的是用户可以在生成的代码基础上提出新的修改要求。例如生成了一个函数后用户可以选中它然后输入“为这个函数添加类型注解”mini-cc会根据选中的代码和新的指令生成修改后的版本。这实现了与模型的“多轮对话”大大提升了实用性。配置与个性化不是所有团队或个人的编码风格都一样。我在插件设置中暴露了丰富的配置项模型端点高级用户可以连接自己部署的其他模型如CodeLlama、StarCoder。提示词模板可以编辑默认模板或为特定文件类型.py,.js,.go指定不同的模板。代码风格可以绑定项目已有的格式化工具black,prettier及其配置文件的路径。上下文范围用户可以调整上下文收集的“广度”例如是否包含同一目录下的其他文件。5.3 可扩展性设计面向未来的插件系统从一开始我就希望mini-cc不是一个封闭的系统。它的核心是一个协调器Orchestrator而具体的功能可以由“插件”来实现。插件架构我定义了一个简单的插件接口。一个插件需要实现两个主要方法can_handle(intent: str) - bool和process(context: CodeContext, task: Task) - str。例如我可以写一个“单元测试生成插件”它专门识别“生成测试”、“写个test”这类意图然后使用针对测试生成优化过的提示词模板和上下文收集策略来处理请求。工具调用集成这是让AI编程助手真正强大的功能。我设计了一个初步的“工具调用”框架。模型在生成代码的过程中如果意识到需要某些外部信息比如“当前项目的依赖列表是什么”、“这个API的准确参数格式是怎样的”它可以输出一个特殊的JSON格式请求。后端拦截到这个请求后会调用相应的工具如执行pip list命令、查询本地API文档数据库获取结果再将结果补充到上下文中让模型继续生成。虽然mini-cc目前内置的工具还很有限如文件读取、命令执行但这个框架为未来集成更强大的工具代码搜索、网络查询奠定了基础。6. 开源与社区一个人的火花与众人的火焰项目基本成型后我决定将其在GitHub上开源。这不仅仅是为了分享更是相信“众人拾柴火焰高”一个开放的社区能推动项目走得更远。仓库结构我尽量让项目结构清晰便于他人理解和贡献。mini-cc/ ├── server/ # 核心后端服务 (FastAPI vLLM客户端) │ ├── core/ # 意图解析、上下文管理、提示词工程 │ ├── plugins/ # 插件系统实现 │ └── tools/ # 工具调用框架 ├── vscode-extension/ # VS Code插件前端 ├── cli/ # 命令行工具 ├── models/ # 模型下载与量化脚本.gitignore ├── configs/ # 默认配置文件与提示词模板 ├── examples/ # 使用示例和演示代码 ├── tests/ # 单元测试和集成测试 └── docs/ # 详细的使用和开发文档文档与示例我花了大量时间编写README不仅说明如何安装和运行还详细解释了架构设计、配置含义并提供了从简单到复杂的多个使用示例。一个清晰的“快速开始”指南能极大降低新用户的尝试成本。收获与挑战开源后我收到了很多宝贵的反馈。有开发者帮忙修复了Windows路径处理的bug有人贡献了针对Go语言的提示词模板还有人为项目添加了Docker支持使得部署变得更加简单。这些贡献让mini-cc变得比我自己闭门造车时更健壮、更通用。当然挑战也随之而来。问题跟踪Issue里开始出现各种环境下的报错、对新模型如Qwen-Coder的支持请求、以及对更复杂功能如代码修复、PR描述生成的期待。管理这些期望规划开发路线图成为了新的课题。我学会了为项目设立明确的阶段目标并坦诚地沟通当前版本的局限性引导社区贡献朝着核心方向努力。开源的价值回过头看开源“手搓”项目的最大价值或许不在于代码本身而在于它提供了一个可审计、可学习、可修改的蓝本。任何开发者都可以下载mini-cc在自己的机器上运行它查看每一行代码是如何将用户指令变成模型提示词再如何将模型输出变成编辑器中的代码。这个过程本身就是一次对AI编程助手工作原理的深度浸入式学习。而社区的每一次讨论、每一个PR都在共同探索这个领域的边界和可能性。这远比单纯使用一个闭源的、魔法般的工具要有趣和有意义得多。
返回列表