基于DeepSeek + VSCode 实现AI辅助编程

随着人工智能技术的飞速发展,AI 辅助编程逐渐成为提升开发效率、优化代码质量的重要工具。 本文通过结合 DeepSeek 的强大语言模型和 VSCode 的高效开发环境,展示了如何利用 AI 辅助编程完成一个经典的 MapReduce 词频统计任务。 这一实践不仅展示了 AI 在编程中的应用潜力,还为开发者提供了一个高效、便捷的开发流程示例,帮助读者快速上手 AI 辅助编程,并探索其在实际项目中的应用价值。

随着人工智能技术的飞速发展,AI 辅助编程逐渐成为提升开发效率、优化代码质量的重要工具。本文通过结合 DeepSeek 的强大语言模型和 VSCode 的高效开发环境,展示了如何利用 AI 辅助编程完成一个经典的 MapReduce 词频统计任务。这一实践不仅展示了 AI 在编程中的应用潜力,还为开发者提供了一个高效、便捷的开发流程示例,帮助读者快速上手 AI 辅助编程,并探索其在实际项目中的应用价值。

实验环境:

  1. VSCode
  2. Cline
  3. DeepSeek
  4. Ubuntu 22.04
  5. Hadoop 3.3.5

以上实验环境并不要求完全一致,能实现效果即可。

安装与配置Cline

Cline 是一个 VSCode 插件,可以接入 DeepSeek 的 API,用于生成代码、解释代码或者修复代码问题。在VSCode左侧“扩展”中搜索Cline并下载

图片安装完成后,我们点击右上角齿轮图案进入设置,选择当前的AI辅助编程使用的大模型。对于DeepSeek,我们有两种方案:

  1. 使用已经安装好的本地Ollama服务:https://dblab.xmu.edu.cn/blog/5816/ 可以参考这篇博客中的Ollama安装DeepSeek-r1,输入对应的Ollama服务地址,如http://localhost:11434,如果Ollama服务正确运行,则会显示你已经安装的模型,如下图中的deepseek-r1-1.5b:latest

图片

  1. 可以使用DeepSeek提供的API,至https://platform.deepseek.com/usage 中就可以购买并获得API

配置完成后就可以开始使用Cline,具体的功能可以对照下图图片

AI辅助编程-以词频统计案例为例实现

为了更好地展示AI辅助编程的效果,笔者在这采用使用DeepSeek API的方式,这样的请求方式能使用满血的DeepSeek,方便读者们看到效果,实际实验的过程中,使用自己安装的DeepSeek 7b也是可以的。

为了更好地实现辅助编程,我首先用maven创建了一个干净的新项目,项目的架构图为

复制
demo
├─ pom.xml
├─ src
│  └─ main
│     └─ java
└─ target

我本机安装的hadoop版本为3.3.5,因此我提前在pom.xml中引入基础的包,方便AI使用

复制
<?xml versinotallow="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocatinotallow="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example</groupId>
  <artifactId>demo</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>demo</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <hadoop.version>3.3.5</hadoop.version> 
  </properties>

    <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!-- 导入hadoop依赖环境 -->
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>${hadoop.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-hdfs</artifactId>
        <version>${hadoop.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-mapreduce-client-core</artifactId>
        <version>${hadoop.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-client</artifactId>
        <version>${hadoop.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-yarn-api</artifactId>
        <version>${hadoop.version}</version>
    </dependency>
  </dependencies>

  ...
</project>

之后新建对话的第一个问题就详细描述我要完成的任务:

复制
**任务目标**
使用JAVA语言,用MapReduce框架实现词频统计,要求输出词频排序结果

**输入数据**

1. txt格式
2. 请你随意生成三个txt内容用于测试,文件不用很大,每个文件有几条数据即可

**开发要求**

1. 在我当前创建好的maven项目中开发
2. 输入数据和输出数据都保存在本地,不需要使用HDFS
3. 直接返回代码,告诉我我该怎么做。

之后Cline根据我的要求,编写好对应的promt去请求DeepSeek,并依次创建了测试数据文件

图片接着又依次根据我的需求,创建了

WordCountMapper.java 

WordCountReducer.java 

WordCount.java

图片

复制
package com.example;

import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class WordCountMapper extends Mapper<Object, Text, Text, IntWritable> {
    private final static IntWritable one = new IntWritable(1);
    private Text word = new Text();

    public void map(Object key, Text value, Context context) 
            throws IOException, InterruptedException {
        StringTokenizer itr = new StringTokenizer(value.toString());
        while (itr.hasMoreTokens()) {
            word.set(itr.nextToken());
            context.write(word, one);
        }
    }
}
复制
package com.example;

import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
    private IntWritable result = new IntWritable();

    public void reduce(Text key, Iterable<IntWritable> values, Context context)
            throws IOException, InterruptedException {
        int sum = 0;
        for (IntWritable val : values) {
            sum += val.get();
        }
        result.set(sum);
        context.write(key, result);
    }
}
复制
package com.example;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class WordCount {
    public static void main(String[] args) throws Exception {
        if (args.length != 2) {
            System.err.println("Usage: WordCount <input path> <output path>");
            System.exit(-1);
        }

        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf, "word count");
        job.setJarByClass(WordCount.class);
        job.setMapperClass(WordCountMapper.class);
        job.setReducerClass(WordCountReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);

        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));

        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}

之后Cline认为代码编写完成,可以使用maven直接打包,并用hadoop指令运行,但这时候遇到了一个问题,我并没有配置hadoop的环境变量(也就是说用hadoop指令需要到我安装的hadoop目录/usr/local/hadoop下),因此我提示了Cline这一点

图片在这之后,项目成功被打包为jar包,并执行,输出结果至创建好的/output文件夹

图片

最终效果

最终Cline + DeepSeek自动创建的项目结构为:

图片output文件夹中成功输出了词频统计:

图片

本文验证了AI辅助编程在MapReduce开发中的有效性,其代码生成效率与质量均达到专业开发标准。未来随着AI模型对分布式系统知识的深化,该方法有望成为大规模数据处理任务的首选开发模式。

相关资讯

OpenAI首席研究官:DeepSeek独立发现了o1的一些核心思路,奥特曼、LeCun纷纷置评

成本打下来了,需求更多才对? 春节这几天,国内外 AI 圈都被 DeepSeek 刷了屏。 英伟达的股市震荡更是让全世界看得目瞪口呆(参见《英伟达市值蒸发近 6000 亿美元,而 DeepSeek 刚刚又开源新模型》)。

DeepSeek-R1详细解读!

DeepSeek-R1爆火,今天来详细看下。 论文地址::::现有LLMs在推理任务上的改进主要依赖监督微调(SFT)和后训练(Post-Training)方法,但这些方法需要大量人工标注数据且成本高昂。 OpenAI的o1系列模型虽通过扩展推理链(Chain-of-Thought, CoT)提升了性能,但其测试时扩展仍存在挑战。

服务器总是繁忙?DeepSeek-R1本地部署图文版教程来啦

最近一段时间,国产大模型DeepSeek-R1在市场上迅速崛起,成为了众多用户的新宠。 然而,伴随其热度与用户量的急剧攀升,由此导致服务器繁忙的状况频繁出现。 为了摆脱服务器繁忙的困扰,本地部署DeepSeek-R1成为了一个绝佳的解决方案,这不仅减少了对网络连接的依赖,还能增强数据安全性。