Cursor
概述
Cursor 是一款基于 VS Code 开发的集成开发环境(IDE),它结合了 VS Code 强大的功能和操作体验,并引入了先进的人工智能技术。人工智能技术可以帮助开发者更高效地编写代码。Cursor 集成了 GPT-4以及Claude-4-sonnet(目前生成代码领域测评最优秀的大模型),是一个优秀的代码生成器,支持多种编程语言,能够快速编写、编辑和生成代码。
使用流程
1.官网www.cursor.com下载安装最新的cursor编译器
2.安装java开发所需的编译插件以及相关插件
3.导入现有java工程或者使用composer创建新工程进行后续开发
操作步骤
步骤一:安装cursor
官网www.cursor.com下载安装最新的cursor编译器
安装好cursor后,打开cursor点击右上角的设置,进行cursor账号登录,如果没有账号可以用邮箱先注册一个
步骤二:安装插件
刚下载的cursor几乎没有任何功能,需要用安装插件的方式来把一个cursor组装为Java开发平台。切换到插件搜索下载即可
中文语言包(插件市场-> 搜索Chinese (Simplified) (简体中文),立马感觉界面亲切很多
java相关插件包(插件市场->搜索Extension Pack for Java)-包含java编译需要的所有基础插件
Lombok Annotations Support for VS Code
使用 Lombok 简化 Java 代码,此插件可提供编译时注解支持
background
Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code
Chrome Extension Developer Tools
Copy Reference
Debugger for Java
Diff Folders
Extension Pack for Java
GitLens — Git supercharged
IntelliCode
IntelliCode API Usage Examples
indent-rainbow-blocks
Language Support for Java(TM) by Red Hat
Markdown All in One
Maven for Java
Project Manager for Java
Project Manager
Prettier - Code formatter
Test Runner for Java
步骤三:快捷键
AI 编程快捷键:解锁智能编码
核心 AI 功能快捷键
AI 聊天与代码生成
Cmd/Ctrl + L - 打开 AI 聊天窗口
Cmd/Ctrl + K - 内联编辑模式
Cmd/Ctrl + I - 打开 AI Composer
Cmd/Ctrl + / - 切换 AI 模型(GPT-4/Claude 3.5等)
智能代码补全
Tab - 接受 AI 建议
Esc - 拒绝 AI 建议
Cmd/Ctrl + → - 逐词接受 AI 建议
Cmd/Ctrl + Shift + E - AI 修复代码错误
代码分析与重构
Cmd/Ctrl + Shift + K - AI 代码分析
Alt/Option + Enter - 快速问答模式
Cmd/Ctrl + . - 切换长上下文聊天模式
文件关联与引用
#file - 在聊天中引用文件
@file - 智能文件关联
Cmd/Ctrl + Enter - 扫描代码库
Cmd/Ctrl + Del - 删除建议
基础编辑快捷键:提升编码速度
光标移动与选择
基础移动
Cmd/Ctrl + ←/→ - 按单词移动
Cmd/Ctrl + ↑/↓ - 文件头/尾
Alt + ←/→ - 按单词跳转
Home/End - 行首/尾
智能选择
Shift + ←/→ - 扩展选择
Cmd/Ctrl + D - 选择下一个匹配项
Cmd/Ctrl + Shift + L - 选择所有匹配项
Alt + Click - 多光标编辑
代码编辑与格式化
行操作
Cmd/Ctrl + X - 剪切行
Alt + ↑/↓ - 移动行
Shift + Alt + ↑/↓ - 复制行
Cmd/Ctrl + Enter - 插入空行
代码格式化
Shift + Alt + F - 格式化文档
Cmd/Ctrl + K Cmd/Ctrl + F - 格式化选中代码
Cmd/Ctrl + / - 切换行注释
Shift + Alt + A - 切换块注释
文件管理快捷键:高效项目导航
文件操作
文件导航
Cmd/Ctrl + P - 快速打开文件
Cmd/Ctrl + Shift + O - 转到符号
Cmd/Ctrl + Tab - 切换文件
Cmd/Ctrl + W - 关闭文件
搜索功能
Cmd/Ctrl + F - 文件内搜索
Cmd/Ctrl + Shift + F - 全局搜索
Cmd/Ctrl + H - 替换
Cmd/Ctrl + Shift + H - 全局替换
窗口管理
编辑器布局
Cmd/Ctrl + \ - 拆分编辑器
Cmd/Ctrl + 1/2/3 - 聚焦编辑器组
Cmd/Ctrl + B - 切换侧边栏
Cmd/Ctrl + J - 切换面板
界面调整
Cmd/Ctrl + =/- - 放大/缩小
Cmd/Ctrl + Shift + E - 文件浏览器
Cmd/Ctrl + Shift + X - 扩展
Cmd/Ctrl + Shift + M - 问题面板
调试与终端快捷键:开发必备
调试操作
基础调试
F5 - 开始/继续调试
F9 - 切换断点
F10 - 单步跳过
F11 - 单步进入
高级调试
Shift + F5 - 停止调试
Shift + F11 - 单步跳出
Cmd/Ctrl + Shift + D - 调试视图
Cmd/Ctrl + - 集成终端
步骤四:配置
配置java, 命令模式下(搜索框输入>进入命令模式)输入java:Help Center进入java帮助页进行相关配置
选择JDK版本
command+shift+p 搜索classpath
配置maven,选择首选项进入设置->maven 进行setttings.xml文件的配置
转化为大写-小写 设置快捷键
command+shift+p 搜索转化为大写/小写
交互方式区别
Cursor 提供了多种与 AI 交互的方式,让我们来了解一下它们的区别,Cursor一共是提供了三种交互方式,分别是Agent模式、Ask模式以及Manual模式
| 特性 | Agent模式 | Ask模式 | Manual模式 |
|---|---|---|---|
| AI参与度 | 高,AI主动协助,全程参与项目开发 | 中,问答式交互,被动响应 | 低,用户完全控制代码编写,AI仅作为参考资源 |
| 上下文理解 | 完整项目,理解项目结构和依赖关系 | 当前文件或选中代码 | 无,不主动理解上下文 |
| 响应速度 | 较慢,需要加载整个项目上下文 | 中等,快速响应特定问题 | 快,传统编辑功能,无AI加载时间 |
| 资源消耗 | 高,适合复杂任务 | 中等,适合中等复杂度任务 | 低,适合简单任务 |
| 适用场景 | 复杂项目开发、重构代码库、解决复杂bug、学习新技术框架、团队协作等 | 特定问题解决、API使用问题、错误解决、代码优化、快速原型等 | 熟悉的技术栈、简单任务、代码审查等 |
| 交互方式 | 对话式,支持多轮对话,主动提供解决方案 | 问答式,用户提问,AI提供代码片段或建议 | 传统编辑,用户手动编写代码,AI仅提供代码补全、语法高亮等基础功能 |
Spring Ai
概述
Spring AI 是一个用于 AI 工程的应用程序框架。 其目标是将 Spring 生态系统设计原则(如可移植性和模块化设计)应用于 AI 领域,并将使用 POJO 作为应用程序的构建块推广到 AI 领域。
Spring AI 的核心是解决了 AI 集成的根本挑战:将您的企业数据和API 与 AI 模型连接起来。
特征
Spring AI 提供以下功能:
•支持所有主要
◦聊天补全
◦嵌入
◦音频转录
◦内容审核
•支持跨 AI 提供商对同步和流式处理 API 选项的可移植 API 支持。此外,还可以访问特定于模型的特征。
•结构化输出 - AI 模型输出到 POJO 的映射。
•支持所有主要的矢量数据库提供商,例如 Apache Cassandra、Azure Vector Search、Chroma、Milvus、MongoDB Atlas、Neo4j、Oracle、PostgreSQL/PGVector、PineCone、Qdrant、Redis 和 Weaviate。
•跨 Vector Store 提供商的可移植 API,包括一种新颖的类似 SQL 的元数据过滤器 API。
•工具/函数调用 - 允许模型请求执行客户端工具和函数,从而根据需要访问必要的实时信息。
•可观察性 - 提供对 AI 相关作的见解。
•用于数据工程的文档注入 ETL 框架。
•AI 模型评估 - 帮助评估生成的内容并防止幻觉响应的实用程序。
•ChatClient API - 用于与 AI 聊天模型通信的 Fluent API,惯用性类似于 WebClient 和 RestClient API。
•Advisors API - 封装重复的生成式 AI 模式,转换发送到和传出语言模型 (LLM) 的数据,并提供跨各种模型和用例的可移植性。
•支持 Chat Conversation Memory and Retrieval Augmented Generation (RAG)。
•Spring Boot 所有 AI 模型和向量存储的自动配置和启动器 - 使用 start.spring.io 选择所需的模型或向量存储。
术语
在与大模型的对话过程中,会有三种基础角色,用来让大模型清楚某句话是谁说的。
system:系统角色,可以理解为全局变量或前置条件,设置上这个角色之后,就会规定大模型的聊天范围,业界通常称之为“人设”。
user:人类角色,代表这句话是人类说的。在包括LangChain在内的很多框架和场景下,user角色也会被写成human。
assistant:AI角色,代表这句话是大模型给我们的返回。在包括LangChain在内的很多框架和场景下,assistant角色也会被写成AI。
实战deepSeek
DeepSeek API 使用与 OpenAI 兼容的 API 格式,通过修改配置,您可以使用 OpenAI SDK 来访问 DeepSeek API。
| PARAM | VALUE |
|---|---|
| base_url * | https://api.deepseek.com |
| api_key | API key |
-
deepseek-chat模型指向 DeepSeek-V3-0324, 通过指定model='deepseek-chat'调用。 -
deepseek-reasoner模型指向 DeepSeek-R1-0528, 通过指定model='deepseek-reasoner'调用。
| 模型名称 | 发布时间 | 主要能力 | 能力特点 | 适用场景 |
|---|---|---|---|---|
| DeepSeek-V3-0324 | 2024-03-24 | 通用对话、代码、知识 | 1.强大的多轮对话能力 2.优秀的知识问答、推理、代码生成等综合能力 3.适合通用 AI 助手、内容创作、代码助手等多种场景 | AI 助手、内容创作、代码助手 |
| DeepSeek-R1-0528 | 2024-05-28 | 数学、科学、推理 | 1.在数学、科学、逻辑推理等任务上表现突出 2.更适合需要复杂推理、严谨逻辑的应用场景 3.可能在通用对话、创作等方面略逊于 V3,但推理能力更强 | 适合数学解题、科学问答、逻辑推理、学术研究等对推理能力要求高的场景 |
api-key获取
进入DeepSeek开放平台platform.deepseek.com/usage,完成账号的注册与充值,点击API keys创建个人专属API key 并保存下来。
手动执行请求
填写上创建的Key后执行curl发起Http请求,可以快速得到响应结果
非流式输出,stream设置为false
curl https://api.deepseek.com/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <DeepSeek API Key>" \
-d '{
"model": "deepseek-chat",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"}
],
"stream": false
}'
{
"id": "a96e527e-fc5b-4da7-a055-5bce0e0283d1",
"object": "chat.completion",
"created": 1750593988,
"model": "deepseek-chat",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello! How can I assist you today? 😊"
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 10,
"completion_tokens": 11,
"total_tokens": 21,
"prompt_tokens_details": {
"cached_tokens": 0
},
"prompt_cache_hit_tokens": 0,
"prompt_cache_miss_tokens": 10
},
"system_fingerprint": "fp_8802369eaa_prod0425fp8"
}
流式输出,stream设置为true
curl https://api.deepseek.com/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-f06e6ee234e64251a84e3c233ccd3a75" \
-d '{
"model": "deepseek-chat",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "hello"}
],
"stream": true
}'
data: {"id":"...","object":"chat.completion.chunk",...,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}
data: {"id":"...","object":"chat.completion.chunk",...,"choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}
data: {"id":"...","object":"chat.completion.chunk",...,"choices":[{"index":0,"delta":{"content":"!"},"finish_reason":null}]}
data: {"id":"...","object":"chat.completion.chunk",...,"choices":[{"index":0,"delta":{"content":" How"},"finish_reason":null}]}
data: {"id":"...","object":"chat.completion.chunk",...,"choices":[{"index":0,"delta":{"content":" can"},"finish_reason":null}]}
data: {"id":"...","object":"chat.completion.chunk",...,"choices":[{"index":0,"delta":{"content":" I"},"finish_reason":null}]}
data: {"id":"...","object":"chat.completion.chunk",...,"choices":[{"index":0,"delta":{"content":" assist"},"finish_reason":null}]}
data: {"id":"...","object":"chat.completion.chunk",...,"choices":[{"index":0,"delta":{"content":" you"},"finish_reason":null}]}
data: {"id":"...","object":"chat.completion.chunk",...,"choices":[{"index":0,"delta":{"content":" today"},"finish_reason":null}]}
data: {"id":"...","object":"chat.completion.chunk",...,"choices":[{"index":0,"delta":{"content":"?"},"finish_reason":null}]}
data: {"id":"...","object":"chat.completion.chunk",...,"choices":[{"index":0,"delta":{"content":" 😊"},"finish_reason":null}]}
data: {"id":"...","object":"chat.completion.chunk",...,"choices":[{"index":0,"delta":{"content":""},"finish_reason":"stop"}],...}
data: [DONE]
代码执行请求
访问start.spring.io/按截图所示勾选依赖,生成spring-ai项目代码框架
project:maven
language:java
spring boot:3.5.3
packaging:jar
java:17
dependencies:Spring Web、OpenAi
将生成代码导入到cursor或者idea中
在resources/application.properties配置spring.ai.openai.api-key、spring.ai.openai.base-url、spring.ai.openai.chat.options.model
# deepseek配置
spring.ai.openai.api-key=换成自己DeepSeek api key
spring.ai.openai.base-url=https://api.deepseek.com
spring.ai.openai.chat.options.model=deepseek-chat
编写Controller
package lqw.spring.ai.tutorial.demo.controller;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
private ChatClient chatClient;
public TestController(ChatClient.Builder builder) {
this.chatClient = builder.build();
}
@GetMapping("/hello")
public String hello(@RequestParam(value = "input", defaultValue = "讲一个笑话") String input) {
return chatClient.prompt(input).call().content();
}
}
用户输入设置用户消息的内容。 这call()method 向 AI 模型发送请求,并且content()方法将 AI 模型的响应作为String
启动DemoApplication
实战通义千问
阿里系通义大模型也同样使用与OpenAI兼容的API格式,通过修改配置,您可以使用OpenAI SDK 来访问通义千问的API
在bailian.console.aliyun.com/?tab=model#…创建个人专属API-KEY(有免费的额度)
手动执行请求
填写上创建的Key后执行curl发起Http请求,可以快速得到响应结果
非流式输出,stream设置为false
curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-plus",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "你是谁?"
}
],
"stream":false
}'
{
"choices": [
{
"message": {
"role": "assistant",
"content": "我是通义千问,阿里巴巴集团旗下的通义实验室自主研发的超大规模语言模型。我能够回答问题、创作文字,如写故事、公文、邮件、剧本等,还能进行逻辑推理、编程等任务。如果你有任何问题或需要帮助,欢迎随时告诉我!"
},
"finish_reason": "stop",
"index": 0,
"logprobs": null
}
],
"object": "chat.completion",
"usage": {
"prompt_tokens": 22,
"completion_tokens": 59,
"total_tokens": 81,
"prompt_tokens_details": {
"cached_tokens": 0
}
},
"created": 1750600429,
"system_fingerprint": null,
"model": "qwen-plus",
"id": "chatcmpl-0e7508dd-5fd9-964b-b732-156e752918a0"
}
流式输出,stream设置为true
curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer sk-66fafc22071d438991e6a8aa5bef94ce" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-plus",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "你是谁?"
}
],
"stream": true
}'
data: {"choices":[{"delta":{"content":"","role":"assistant"},"index":0,"logprobs":null,"finish_reason":null}]}
data: {"choices":[{"finish_reason":null,"logprobs":null,"delta":{"content":"我是"},"index":0}]}
data: {"choices":[{"delta":{"content":"通"},"finish_reason":null,"index":0,"logprobs":null}]}
data: {"choices":[{"delta":{"content":"义"},"finish_reason":null,"index":0,"logprobs":null}]}
data: {"choices":[{"delta":{"content":"千问,阿里巴巴"},"finish_reason":null,"index":0,"logprobs":null}]}
data: {"choices":[{"delta":{"content":"集团旗下的通义"},"finish_reason":null,"index":0,"logprobs":null}]}
data: {"choices":[{"delta":{"content":"实验室自主研发的超"},"finish_reason":null,"index":0,"logprobs":null}]}
data: {"choices":[{"delta":{"content":"大规模语言模型。"},"finish_reason":null,"index":0,"logprobs":null}]}
data: {"choices":[{"delta":{"content":"我能够回答问题"},"finish_reason":null,"index":0,"logprobs":null}]}
data: {"choices":[{"delta":{"content":"、创作文字,"},"finish_reason":null,"index":0,"logprobs":null}]}
data: {"choices":[{"delta":{"content":"如写故事、"},"finish_reason":null,"index":0,"logprobs":null}]}
data: {"choices":[{"delta":{"content":"公文、邮件"},"finish_reason":null,"index":0,"logprobs":null}]}
data: {"choices":[{"delta":{"content":"、剧本等,"},"finish_reason":null,"index":0,"logprobs":null}]}
data: {"choices":[{"delta":{"content":"还能进行逻辑推理"},"finish_reason":null,"index":0,"logprobs":null}]}
data: {"choices":[{"delta":{"content":"、编程,甚至"},"finish_reason":null,"index":0,"logprobs":null}]}
data: {"choices":[{"delta":{"content":"表达观点和玩游戏"},"finish_reason":null,"index":0,"logprobs":null}]}
data: {"choices":[{"delta":{"content":"。我在多国"},"finish_reason":null,"index":0,"logprobs":null}]}
data: {"choices":[{"delta":{"content":"语言上都有很好的"},"finish_reason":null,"index":0,"logprobs":null}]}
data: {"choices":[{"delta":{"content":"掌握,能为你"},"finish_reason":null,"index":0,"logprobs":null}]}
data: {"choices":[{"delta":{"content":"提供多样化的帮助"},"finish_reason":null,"index":0,"logprobs":null}]}
data: {"choices":[{"delta":{"content":"。有什么我可以帮"},"finish_reason":null,"index":0,"logprobs":null}]}
data: {"choices":[{"delta":{"content":"到你的吗?"},"finish_reason":null,"index":0,"logprobs":null}]}
data: {"choices":[{"finish_reason":"stop","delta":{"content":""},"index":0,"logprobs":null}]}
data: [DONE]
代码执行请求
同deepSeek代码执行请求步骤一致,只需修改resources/application.properties配置spring.ai.openai.api-key、spring.ai.openai.base-url、spring.ai.openai.chat.options.model
# 通义千问配置
spring.ai.openai.api-key=换成自己DeepSeek api key
spring.ai.openai.base-url=https://dashscope.aliyuncs.com/compatible-mode
spring.ai.openai.chat.options.model=qwen-plus
流式响应
java Reactor体验
我们经常需要处理数据流。为了更有效地处理数据流,可以使用Reactor库中的Sinks.Many类。这个类提供了一种简单而强大的方式来处理多个事件流,并且可以通过异步或者同步的方式处理这些事件。
private ExecutorService executorService = new ThreadPoolExecutor(10,
10, 0L, TimeUnit.MICROSECONDS, new LinkedBlockingQueue<>(10));
@GetMapping(value = "/test/stream", produces = "text/html;charset=UTF-8")
public Flux<String> testStream() {
Sinks.Many<String> sink = Sinks.many().multicast().onBackpressureBuffer();
executorService.submit(() -> {
for (int i = 0; i < 100; i++) {
sink.tryEmitNext(i + " ");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
});
return sink.asFlux();
}
Sinks.Many用于创建多值(Multi-Value)的发布者(Publisher)的一种机制,它允许用户将数据从一个地方发送到多个订阅者,示例中启动异步线程做写入操作,通过asFlux获取Flux对象;
可以使用asFlux()方法将Sinks.Many对象转换为一个Flux对象,然后使用Flux对象的方法来订阅和处理事件