基于DeepSeek + VSCode 實現(xiàn)AI輔助編程
隨著人工智能技術的飛速發(fā)展,AI 輔助編程逐漸成為提升開發(fā)效率、優(yōu)化代碼質(zhì)量的重要工具。本文通過結合 DeepSeek 的強大語言模型和 VSCode 的高效開發(fā)環(huán)境,展示了如何利用 AI 輔助編程完成一個經(jīng)典的 MapReduce 詞頻統(tǒng)計任務。這一實踐不僅展示了 AI 在編程中的應用潛力,還為開發(fā)者提供了一個高效、便捷的開發(fā)流程示例,幫助讀者快速上手 AI 輔助編程,并探索其在實際項目中的應用價值。
實驗環(huán)境:
- VSCode
- Cline
- DeepSeek
- Ubuntu 22.04
- Hadoop 3.3.5
以上實驗環(huán)境并不要求完全一致,能實現(xiàn)效果即可。
安裝與配置Cline
Cline 是一個 VSCode 插件,可以接入 DeepSeek 的 API,用于生成代碼、解釋代碼或者修復代碼問題。在VSCode左側(cè)“擴展”中搜索Cline并下載
圖片
安裝完成后,我們點擊右上角齒輪圖案進入設置,選擇當前的AI輔助編程使用的大模型。對于DeepSeek,我們有兩種方案:
- 使用已經(jīng)安裝好的本地Ollama服務:https://dblab.xmu.edu.cn/blog/5816/ 可以參考這篇博客中的Ollama安裝DeepSeek-r1,輸入對應的Ollama服務地址,如http://localhost:11434,如果Ollama服務正確運行,則會顯示你已經(jīng)安裝的模型,如下圖中的deepseek-r1-1.5b:latest
圖片
- 可以使用DeepSeek提供的API,至https://platform.deepseek.com/usage 中就可以購買并獲得API
配置完成后就可以開始使用Cline,具體的功能可以對照下圖
圖片
AI輔助編程-以詞頻統(tǒng)計案例為例實現(xiàn)
為了更好地展示AI輔助編程的效果,筆者在這采用使用DeepSeek API的方式,這樣的請求方式能使用滿血的DeepSeek,方便讀者們看到效果,實際實驗的過程中,使用自己安裝的DeepSeek 7b也是可以的。
為了更好地實現(xiàn)輔助編程,我首先用maven創(chuàng)建了一個干凈的新項目,項目的架構圖為
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依賴環(huán)境 -->
<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框架實現(xiàn)詞頻統(tǒng)計,要求輸出詞頻排序結果
**輸入數(shù)據(jù)**
1. txt格式
2. 請你隨意生成三個txt內(nèi)容用于測試,文件不用很大,每個文件有幾條數(shù)據(jù)即可
**開發(fā)要求**
1. 在我當前創(chuàng)建好的maven項目中開發(fā)
2. 輸入數(shù)據(jù)和輸出數(shù)據(jù)都保存在本地,不需要使用HDFS
3. 直接返回代碼,告訴我我該怎么做。
之后Cline根據(jù)我的要求,編寫好對應的promt去請求DeepSeek,并依次創(chuàng)建了測試數(shù)據(jù)文件
圖片
接著又依次根據(jù)我的需求,創(chuàng)建了
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的環(huán)境變量(也就是說用hadoop指令需要到我安裝的hadoop目錄/usr/local/hadoop下),因此我提示了Cline這一點
圖片
在這之后,項目成功被打包為jar包,并執(zhí)行,輸出結果至創(chuàng)建好的/output文件夾
圖片
最終效果
最終Cline + DeepSeek自動創(chuàng)建的項目結構為:
圖片
output文件夾中成功輸出了詞頻統(tǒng)計:
圖片
本文驗證了AI輔助編程在MapReduce開發(fā)中的有效性,其代碼生成效率與質(zhì)量均達到專業(yè)開發(fā)標準。未來隨著AI模型對分布式系統(tǒng)知識的深化,該方法有望成為大規(guī)模數(shù)據(jù)處理任務的首選開發(fā)模式。