注册

IDEA 接入 deepseek,太酷了。

大家好,我是二哥呀。


deepseek 官方并没有出 IntelliJ IDEA 的插件,但作为菜逼程序员的我,却很想体验一下在 IDEA 中装入 deepseek 的感觉。


一共有三种方式,一种是通过 IDEA 官方的 AI Assistant 来调用本地的 deepseek;另外两种是通过 Continue 和 CodeGPT 两款插件来曲线救国。


①、AI Assistant


AI Assistant 是新版 IDEA 自带的一个功能,属于 JetBrains 官方集成的 AI 编程助手,妥妥的嫡长子。



能提供代码补全、代码生成、优化建议、代码解释等功能。


官方已经集成了 openai 的 4o,Google 的gemini 等,开箱即用。


也支持本地 AI,比如说我们在本地已经通过 ollama 运行了 deepseek 7b 版本的大模型,就可以直接点击 connect 跳转到 enable 复选框这里。



测试通过后,我们就可以通过这里调用 deepseek 的大模型,比如说,我们让他对 DeepSeekIntegration 这个类进行解释。



他就能告诉我们:



  • 发现它依赖于okHttp库来处理网络请求。这说明该类主要负责与外部服务 DeepSeek 进行交互。
  • 类中有两个工厂方法:executeStreamChatexecuteStreamChat(List<ChatMsg> list, EventSourceListener listener)。这两个方法都用于创建 EventSource 并发送聊天请求到 DeepSeek。流式交互支持意味着该类可以处理分片传输的数据,逐部分地发送给服务器,然后逐步处理返回的数据。

我超,真的好用啊!


谁告诉我本地的 deepseek 没用的,脸伸过来,我保证不打肿!


这基本的代码学习,很香啊,免费,还特么很到位。


②、安装 Continue


Continue 是一款开源的 AI 代码助手插件,可以无缝安装在 IDEA 或者 VSCode 中。通过 Continue 可以加载任意大模型,从而实现代码的自动补全和聊天体验。



安装方式比较简单,直接在 IDEA 的插件中搜“Continue”关键字,然后选择下载量最高的那个就行了。


安装完成后,也有两种方式,一种是配置 deepseek 的 API Key,这个就需要充值了。



不过由于算力紧张,API 这块经常处于宕机状态。



另外一种,也是连接本地 ollama,然后去加载之前我们运行起来的 deepseek 模型。



最好拉取 coder 版本。



③、安装 CodeGPT


CodeGPT 也是一个由 AI 驱动的代码助手,官方直接说了,可以是 GitHub Copilot 的替代品。



安装完成后,同样需要在 settings 中配置 deepseek API 的 keys。



当然,也可以在这一步中切换到 ollama 的本地 deepseek。



CodeGPT 比较智能的一点是,当你在编辑器中打开了某一个类,它就会自动关联到聊天窗口。



并且能把 deepseek-R1 的整个思考过程展示出来,所以我是强烈大家按照我之前的教程在本地部署一个 7b 的本地版。



比 deepseek 官方稳定多了,毕竟本地没有上万人的同时在线给你竞争。


三分恶面渣逆袭


最近一直在修改面渣逆袭第二版,目前的进展是到并发编程的 25 题,也顺带同步给大家,刚好暑期实习和春招的小伙伴,可以日拱一卒。


25.volatile 怎么保证可见性的?


当线程对 volatile 变量进行写操作时,JVM 会在这个变量写入之后插入一个写屏障指令,这个指令会强制将本地内存中的变量值刷新到主内存中。


三分恶面渣逆袭:volatile写插入内存屏障后生成的指令序列示意图


StoreStore;   // 保证写入之前的操作不会重排
volatile_write(); // 写入 volatile 变量
StoreLoad; // 保证写入后,其他线程立即可见

在 x86 架构下,通常会使用 lock 指令来实现写屏障,例如:


mov [a], 2          ; 将值 2 写入内存地址 a
lock add [a], 0 ; lock 指令充当写屏障,确保内存可见性

当线程对 volatile 变量进行读操作时,JVM 会插入一个读屏障指令,这个指令会强制让本地内存中的变量值失效,从而重新从主内存中读取最新的值。


三分恶面渣逆袭:volatile写插入内存屏障后生成的指令序列示意图


我们来声明一个 volatile 变量 x:


volatile int x = 0

线程 A 对 x 写入后会将其最新的值刷新到主内存中,线程 B 读取 x 时由于本地内存中的 x 失效了,就会从主内存中读取最新的值。


三分恶面渣逆袭:volatile内存可见性


最后,把二哥的座右铭送给大家:没有什么使我停留——除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟


作者:沉默王二
来源:juejin.cn/post/7469051964224471078

0 个评论

要回复文章请先登录注册