AI工程师的工具箱:2026年必备的30个开发工具
AI工程师的工具箱:2026年必备的30个开发工具
开篇故事:那些能把效率提升5倍的工具
去年有个学员小陈,在一次线上答疑里问了我一个问题:"老张,我感觉写AI项目比写普通Java项目累多了——接口调试慢、向量库不知道里面存了什么、提示词改来改去不知道好不好……感觉效率很低。"
我问他:"你现在用什么工具?"
他说:"IDEA、Postman、MySQL Workbench……就这些。"
我笑了笑,说:"你在用2020年的工具箱开发2026年的项目。"
然后我分享了我自己的工具清单给他。两周后,他发来消息:"老张,我现在一天能干过去三天的活。不夸张。"
我整理了一下自己每天在用的工具,认真数了数——30个。今天,全部分享给你。
每个工具,我都会告诉你:它解决了什么痛点、适合什么场景、和类似工具相比有什么优势。
一、IDE与编码辅助(工具1-6)
工具1:Cursor — AI原生IDE
解决的痛点: IDEA里的Copilot只能补全,无法理解整个项目做跨文件修改。
核心能力:
老张怎么用: 每天早上打开项目,先用 Cmd+K 描述今天要做什么,Cursor帮我生成骨架代码。遇到复杂逻辑,用 @codebase 问"这个Service现在的事务边界是怎么定义的",秒出答案。
费用: $20/月(Pro版)。Java工程师性价比最高的工具投资。
vs IDEA + Copilot: Cursor的项目级理解能力远超Copilot。Copilot适合单文件补全,Cursor适合跨文件重构和设计讨论。
工具2:GitHub Copilot — 最成熟的代码补全
解决的痛点: 重复性代码(CRUD、DTO转换、单元测试)耗时太多。
老张的使用场景:
// 只需写注释,Copilot自动补全整个方法
/**
* 将OrderEntity转换为OrderDTO
* 包含:基本字段映射 + 金额格式化(保留2位小数)+ 状态枚举转中文
*/
// Copilot在这里自动生成完整的转换逻辑
public OrderDTO toDTO(OrderEntity entity) {
// Copilot会自动补全...
}费用: $10/月(个人版)。
实测数据: 在我的Spring Boot项目中,Copilot能自动完成约40%的代码,CRUD类代码能完成70%以上。
工具3:Claude Code — 最强命令行AI助手
解决的痛点: 终端里的复杂操作(git、maven、脚本)需要记很多命令。
最佳使用场景:
- 复杂git操作:
cc "帮我整理最近5次commit,写一个清晰的PR描述" - 文件批处理:
cc "找出src目录下所有没有单元测试的Service类" - 代码审查:
cc "审查这次改动,重点检查线程安全和SQL注入问题"
费用: Claude Pro订阅 $20/月即可使用。
工具4:Amazon Q for IDE — Java专项优化
解决的痛点: Java特有的痛点(Spring配置、AWS集成、Java版本迁移)。
核心功能:
- Java 8 → 17/21 自动迁移(一键分析兼容性问题)
- Spring Boot版本升级辅助
- AWS SDK使用建议
- 安全漏洞扫描
费用: 个人版免费(AWS账号即可)。
工具5:TabNine Enterprise — 本地部署的代码补全
解决的痛点: 代码包含敏感信息,不能上传到云端。
适合场景: 金融、医疗、政府等对代码保密要求高的行业。支持本地私有化部署,代码不出网。
费用: Enterprise版本,按团队定价。
工具6:Sourcegraph Cody — 企业级代码搜索+AI
解决的痛点: 大型微服务项目里,找一个功能点的所有相关代码很耗时。
核心优势: 能跨几百个仓库做语义搜索。问"哪里有调用支付接口的代码",秒出结果。
二、调试与测试工具(工具7-11)
工具7:LangSmith — AI接口全链路追踪
这是AI开发中最重要的调试工具之一,没有之一。
解决的痛点: LLM的调用就像黑盒——调用了什么prompt、返回了什么、Token消耗了多少、哪一步失败了——完全不知道。
Java集成方式(Spring AI):
// application.yml
langchain4j:
langsmith:
enabled: true
api-key: ${LANGSMITH_API_KEY}
project-name: my-rag-project
// 或者手动集成
@Configuration
public class LangSmithConfig {
@Bean
public LangSmithTracer langSmithTracer(
@Value("${langsmith.api-key}") String apiKey,
@Value("${langsmith.project}") String project) {
return LangSmithTracer.builder()
.apiKey(apiKey)
.projectName(project)
.build();
}
}
// 在Service中使用
@Service
public class RagService {
public String answer(String question) {
// LangSmith自动追踪这次调用的:
// - 完整prompt内容
// - 检索到的文档
// - LLM响应
// - 总耗时和Token消耗
return chatClient.prompt().user(question).call().content();
}
}费用: 免费版每月5000次追踪。付费版$39/月。强烈建议付费——它能帮你节省远超$39的调试时间。
工具8:Postman AI — 智能API测试
2026年的Postman已经不只是REST客户端了。
AI增强功能:
- 自动生成测试用例(描述接口功能,AI生成完整测试集)
- 接口文档自动生成
- 响应数据的智能断言
- 基于历史调用自动发现异常
老张怎么用: 测试RAG接口时,用Postman的AI功能自动生成100个测试问题,覆盖边界场景(空问题、超长问题、SQL注入、中英混合等),一键运行。
工具9:Insomnia — 轻量级AI接口调试
vs Postman: 更轻量,响应更快,适合个人开发者。Postman适合团队协作。
特色: 内置GraphQL支持,适合调试支持GraphQL的AI接口。
工具10:RAGAS — RAG系统专项评估
这是RAG开发者必备工具。
评估维度:
| 指标 | 含义 | 理想值 |
|---|---|---|
| faithfulness | 答案是否忠实于检索内容 | > 0.8 |
| answer_relevancy | 答案与问题的相关性 | > 0.7 |
| context_precision | 检索内容的精确度 | > 0.75 |
| context_recall | 检索内容的召回率 | > 0.7 |
Java项目集成(调用Python评估服务):
package com.laozhang.eval;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import lombok.extern.slf4j.Slf4j;
import java.util.*;
/**
* RAGAS评估服务客户端
* 通过HTTP调用Python RAGAS服务
*/
@Slf4j
@Service
public class RagasEvaluationService {
private final RestTemplate restTemplate;
private final String ragasServiceUrl;
public RagasEvaluationService(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
this.ragasServiceUrl = "http://localhost:8000"; // Python RAGAS服务地址
}
/**
* 评估RAG系统输出质量
*/
public RagasScore evaluate(List<RagasSample> samples) {
log.info("开始RAGAS评估,样本数量:{}", samples.size());
EvaluationRequest request = new EvaluationRequest(samples);
EvaluationResponse response = restTemplate.postForObject(
ragasServiceUrl + "/evaluate", request, EvaluationResponse.class
);
if (response != null) {
log.info("RAGAS评估完成:faithfulness={:.3f}, answer_relevancy={:.3f}",
response.faithfulness(), response.answerRelevancy());
}
return response != null ? new RagasScore(
response.faithfulness(),
response.answerRelevancy(),
response.contextPrecision(),
response.contextRecall()
) : RagasScore.empty();
}
/**
* 批量评估并生成报告
*/
public String generateEvaluationReport(List<RagasSample> samples) {
RagasScore score = evaluate(samples);
return """
===== RAG系统评估报告 =====
评估样本数:%d
核心指标:
├── 答案忠实度 (Faithfulness): %.3f %s
├── 答案相关性 (Answer Relevancy): %.3f %s
├── 检索精确度 (Context Precision): %.3f %s
└── 检索召回率 (Context Recall): %.3f %s
综合评分:%.3f
系统级别:%s
==========================
""".formatted(
samples.size(),
score.faithfulness(), grade(score.faithfulness()),
score.answerRelevancy(), grade(score.answerRelevancy()),
score.contextPrecision(), grade(score.contextPrecision()),
score.contextRecall(), grade(score.contextRecall()),
score.overall(),
systemGrade(score.overall())
);
}
private String grade(double score) {
if (score >= 0.8) return "✓ 优秀";
if (score >= 0.6) return "△ 良好";
return "✗ 需改进";
}
private String systemGrade(double overall) {
if (overall >= 0.8) return "生产就绪";
if (overall >= 0.6) return "测试阶段";
return "需要优化";
}
public record RagasSample(String question, String answer, List<String> contexts, String groundTruth) {}
public record EvaluationRequest(List<RagasSample> samples) {}
public record EvaluationResponse(double faithfulness, double answerRelevancy,
double contextPrecision, double contextRecall) {}
public record RagasScore(double faithfulness, double answerRelevancy,
double contextPrecision, double contextRecall) {
double overall() { return (faithfulness + answerRelevancy + contextPrecision + contextRecall) / 4; }
static RagasScore empty() { return new RagasScore(0, 0, 0, 0); }
}
}工具11:DeepEval — 更全面的AI评估框架
vs RAGAS: DeepEval支持更多评估指标(幻觉检测、偏见检测、毒性检测),适合需要全面安全评估的企业项目。
费用: 开源免费。
三、向量数据库管理工具(工具12-15)
工具12:PgVector Studio — PostgreSQL向量可视化
解决的痛点: 向量数据库里存了什么?相似度是多少?完全不可见。
功能:
- 向量数据的2D/3D可视化(t-SNE降维展示)
- 手动执行向量检索并查看结果
- 向量索引性能监控
- 与pgAdmin集成
适用: 使用PgVector的项目(Spring AI默认支持)。
工具13:Qdrant Web UI — Qdrant可视化管理
如果你用Qdrant作为向量库,这是官方自带的Web管理界面。
# docker-compose.yml
services:
qdrant:
image: qdrant/qdrant:latest
ports:
- "6333:6333"
- "6334:6334"
volumes:
- ./qdrant_storage:/qdrant/storage
# Web UI 访问:http://localhost:6333/dashboardSpring AI配置:
spring:
ai:
vectorstore:
qdrant:
host: localhost
port: 6334
collection-name: my-knowledge-base
initialize-schema: true工具14:Weaviate Console — 图谱式向量可视化
特色: 把向量数据可视化为知识图谱,能看到概念之间的关联关系。适合构建知识图谱类项目。
工具15:VectorAdmin — 通用向量数据库管理工具
解决的痛点: 切换不同向量数据库时,每个都有不同的管理工具。
亮点: 支持Pinecone、Weaviate、Qdrant、Chroma一套界面统一管理,还支持批量导入文档。
费用: 开源免费,可自托管。
四、提示词工程工具(工具16-18)
工具16:PromptLayer — 提示词版本管理
解决的痛点: 提示词改来改去,不知道哪个版本最好,也没法回滚。
Java集成:
@Service
public class PromptManagementService {
private final PromptLayerClient promptLayer;
private final ChatClient chatClient;
/**
* 从PromptLayer获取指定版本的提示词模板
*/
public String executeWithTemplate(String templateName, String version, Map<String, String> variables) {
// 从PromptLayer获取提示词模板
String template = promptLayer.getTemplate(templateName, version);
// 填充变量
String filledPrompt = fillTemplate(template, variables);
// 执行并记录
long start = System.currentTimeMillis();
String response = chatClient.prompt().user(filledPrompt).call().content();
long latency = System.currentTimeMillis() - start;
// 上报使用记录
promptLayer.logUsage(templateName, version, latency, response.length());
return response;
}
private String fillTemplate(String template, Map<String, String> variables) {
String result = template;
for (Map.Entry<String, String> entry : variables.entrySet()) {
result = result.replace("{{" + entry.getKey() + "}}", entry.getValue());
}
return result;
}
}工具17:Promptfoo — 提示词自动评测
解决的痛点: 改了一个提示词,不知道到底是变好了还是变坏了。
核心功能: 定义测试用例 → 批量运行 → 对比不同版本的提示词效果。
# promptfoo.yaml 配置示例
prompts:
- "你是专业的Java开发助手。{{question}}"
- "你是经验丰富的Java工程师,请专业地回答:{{question}}"
- "作为Java专家,请简洁准确地回答:{{question}}"
providers:
- openai:gpt-4o
- anthropic:claude-3-5-sonnet-20241022
tests:
- vars:
question: "Java中synchronized和ReentrantLock的区别"
assert:
- type: contains
value: "可重入"
- type: llm-rubric
value: "回答是否包含性能对比分析"费用: 开源免费。
工具18:Brainlid Langchain Prompt IDE — 可视化提示词设计
特色: 拖拽式提示词设计,支持条件分支("如果用户是技术问题,用这个模板;如果是业务问题,用那个模板")。
五、模型监控与可观测性(工具19-22)
工具19:LangFuse — 最完整的AI可观测性平台
这是AI生产系统监控的首选工具。
监控什么:
Spring Boot完整集成:
package com.laozhang.monitor;
import com.langfuse.LangfuseClient;
import com.langfuse.model.CreateTraceBody;
import com.langfuse.model.CreateSpanBody;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.stereotype.Service;
import lombok.extern.slf4j.Slf4j;
import java.util.*;
/**
* LangFuse集成监控
*/
@Slf4j
@Service
public class LangFuseMonitoredRagService {
private final ChatClient chatClient;
private final LangfuseClient langfuse;
public LangFuseMonitoredRagService(ChatClient chatClient, LangfuseClient langfuse) {
this.chatClient = chatClient;
this.langfuse = langfuse;
}
public String answer(String question, String userId) {
// 创建追踪
String traceId = UUID.randomUUID().toString();
langfuse.createTrace(CreateTraceBody.builder()
.id(traceId)
.name("rag-answer")
.userId(userId)
.input(Map.of("question", question))
.build());
String answer = null;
Exception error = null;
long startTime = System.currentTimeMillis();
try {
// 检索span
String retrievalSpanId = UUID.randomUUID().toString();
long retrievalStart = System.currentTimeMillis();
List<String> contexts = performRetrieval(question);
long retrievalDuration = System.currentTimeMillis() - retrievalStart;
langfuse.createSpan(CreateSpanBody.builder()
.id(retrievalSpanId)
.traceId(traceId)
.name("retrieval")
.input(Map.of("query", question))
.output(Map.of("contexts", contexts))
.durationMs(retrievalDuration)
.build());
// 生成span
String generationSpanId = UUID.randomUUID().toString();
long genStart = System.currentTimeMillis();
answer = performGeneration(question, contexts);
long genDuration = System.currentTimeMillis() - genStart;
langfuse.createSpan(CreateSpanBody.builder()
.id(generationSpanId)
.traceId(traceId)
.name("generation")
.input(Map.of("question", question, "context_count", contexts.size()))
.output(Map.of("answer", answer))
.durationMs(genDuration)
.build());
} catch (Exception e) {
error = e;
log.error("RAG执行失败", e);
} finally {
// 更新追踪状态
langfuse.updateTrace(traceId, Map.of(
"output", Map.of("answer", answer != null ? answer : "error"),
"durationMs", System.currentTimeMillis() - startTime,
"status", error == null ? "success" : "error",
"statusMessage", error != null ? error.getMessage() : null
));
}
if (error != null) throw new RuntimeException("RAG执行失败", error);
return answer;
}
/**
* 用户反馈接口(收集good case / bad case)
*/
public void recordFeedback(String traceId, int score, String comment) {
langfuse.createScore(traceId, score, comment);
log.info("用户反馈已记录:traceId={}, score={}", traceId, score);
}
private List<String> performRetrieval(String question) {
// 实际检索逻辑...
return List.of("检索结果1", "检索结果2");
}
private String performGeneration(String question, List<String> contexts) {
String context = String.join("\n", contexts);
return chatClient.prompt().user("基于以下内容回答:\n" + context + "\n\n问题:" + question).call().content();
}
}费用: 开源版免费自托管;云版本免费档足够个人项目,团队版$149/月。
工具20:Helicone — 轻量级AI成本监控
vs LangFuse: Helicone更专注于成本监控,配置更简单(只需改一行base_url)。适合"我只想知道花了多少钱"的场景。
一行接入:
spring:
ai:
openai:
base-url: https://oai.helicone.ai # 改这一行
api-key: ${OPENAI_API_KEY}
# Helicone密钥通过请求头传工具21:Arize Phoenix — 开源LLM可观测性
特色: 完全开源,本地部署,数据不出网。适合对数据安全要求严格的企业。支持OpenTelemetry标准。
// 集成OpenTelemetry追踪
@Configuration
public class PhoenixTracingConfig {
@Bean
public OpenTelemetry openTelemetry() {
return OpenTelemetrySdk.builder()
.setTracerProvider(
SdkTracerProvider.builder()
.addSpanProcessor(BatchSpanProcessor.builder(
OtlpGrpcSpanExporter.builder()
.setEndpoint("http://localhost:4317") // Phoenix地址
.build()
).build())
.build()
)
.build();
}
}工具22:Datadog LLM Observability — 企业级AI监控
适用场景: 已经在用Datadog的大型企业,顺手接入LLM监控。与现有告警体系无缝集成。
六、本地开发工具(工具23-25)
工具23:Ollama — 本地LLM运行最佳选择
解决的痛点: 调试时每次都要用云端API,慢且花钱。
一键运行主流模型:
# 安装后直接运行
ollama run llama3.2 # 3B轻量模型,适合开发调试
ollama run qwen2.5:7b # 通义千问7B,中文效果好
ollama run codellama:13b # 代码专用模型
ollama run deepseek-r1:7b # 推理模型Spring AI集成:
spring:
ai:
ollama:
base-url: http://localhost:11434
chat:
options:
model: qwen2.5:7b
temperature: 0.1
embedding:
options:
model: nomic-embed-text # 专用Embedding模型// 开发环境用Ollama,生产环境用GPT-4o
// 通过Profile切换
@Profile("dev")
@Bean
public ChatModel devChatModel(OllamaApi ollamaApi) {
return new OllamaChatModel(ollamaApi,
OllamaOptions.create().withModel("qwen2.5:7b"));
}
@Profile("prod")
@Bean
public ChatModel prodChatModel(OpenAiApi openAiApi) {
return new OpenAiChatModel(openAiApi,
OpenAiChatOptions.builder().withModel("gpt-4o").build());
}老张的配置: MacBook Pro M3 Max,用Ollama跑qwen2.5:14b,开发调试完全够用,每月节省API费用约$80。
工具24:LM Studio — 带GUI的本地LLM管理
vs Ollama: LM Studio有漂亮的图形界面,适合不喜欢命令行的同学。支持HuggingFace模型的直接下载和运行。
特色: 内置对话界面,可以直接测试模型效果,不需要写代码。
工具25:Jan — 开源本地AI助手
定位: ChatGPT的完全本地替代品。本地运行,数据不出网,支持插件扩展。
适合用途: 本地知识库问答、文档分析、代码review(不需要联网的场景)。
七、知识管理与文档工具(工具26-28)
工具26:Notion AI — AI增强的项目文档管理
解决的痛点: AI项目文档散乱——实验记录、决策日志、问题记录分散各处。
我的Notion AI工作流:
工具27:Obsidian + AI插件 — 知识图谱式笔记
适合场景: 个人知识管理,构建自己的"第二大脑"。
关键插件:
Smart Connections:语义搜索所有笔记Copilot for Obsidian:AI辅助写作和问答Text Generator:基于笔记内容生成新内容
老张的用法: 把读过的所有AI论文摘要存入Obsidian,用Smart Connections做语义搜索,写文章时能快速找到相关内容。
工具28:Mintlify — AI驱动的接口文档自动生成
解决的痛点: AI接口文档需要手动维护,和代码容易不同步。
// 只需写好注释,Mintlify自动生成精美文档网站
/**
* RAG问答接口
* @param question 用户问题(必填,长度1-500字符)
* @param sessionId 会话ID(可选,用于多轮对话)
* @param filters 检索过滤条件(可选,如{"department":"tech"})
* @return 问答结果,包含答案和引用来源
*/
@PostMapping("/api/rag/answer")
public RagResponse answer(@RequestBody RagRequest request) { ... }八、完整工具链推荐(工具29-30)
工具29:Make(原Integromat)— AI工作流自动化
解决的痛点: AI系统需要和企业现有系统(CRM、ERP、Slack、企业微信)集成,每个都要写代码。
无代码连接: Make支持1000+应用的拖拽式集成。AI模型调用 → 结果存数据库 → 发送Slack通知,全程无代码。
工具30:Dify — 开源AI应用构建平台
这是最后压轴工具,也是我认为2026年最被低估的工具之一。
Dify能做什么:
Java对接Dify(用现成的SDK):
package com.laozhang.dify;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import lombok.extern.slf4j.Slf4j;
import reactor.core.publisher.Flux;
import java.util.*;
/**
* Dify API客户端
* 将Dify构建的AI应用集成到Java系统
*/
@Slf4j
@Service
public class DifyClient {
private final WebClient webClient;
private final String apiKey;
public DifyClient(WebClient.Builder builder,
@Value("${dify.api-key}") String apiKey,
@Value("${dify.base-url:https://api.dify.ai/v1}") String baseUrl) {
this.apiKey = apiKey;
this.webClient = builder
.baseUrl(baseUrl)
.defaultHeader("Authorization", "Bearer " + apiKey)
.defaultHeader("Content-Type", "application/json")
.build();
}
/**
* 调用Dify聊天接口
*/
public DifyResponse chat(String question, String conversationId, String userId) {
Map<String, Object> body = new HashMap<>();
body.put("inputs", Map.of());
body.put("query", question);
body.put("response_mode", "blocking");
body.put("user", userId);
if (conversationId != null) {
body.put("conversation_id", conversationId);
}
return webClient.post()
.uri("/chat-messages")
.bodyValue(body)
.retrieve()
.bodyToMono(DifyResponse.class)
.block();
}
/**
* 调用Dify聊天接口(流式)
*/
public Flux<String> chatStream(String question, String userId) {
Map<String, Object> body = Map.of(
"inputs", Map.of(),
"query", question,
"response_mode", "streaming",
"user", userId
);
return webClient.post()
.uri("/chat-messages")
.bodyValue(body)
.retrieve()
.bodyToFlux(String.class)
.filter(line -> line.startsWith("data: "))
.map(line -> line.substring(6))
.filter(data -> !data.equals("[DONE]"));
}
/**
* 上传文档到Dify知识库
*/
public String uploadDocument(String datasetId, String filename, byte[] content) {
return webClient.post()
.uri("/datasets/" + datasetId + "/document/create-by-file")
.bodyValue(buildMultipartBody(filename, content))
.retrieve()
.bodyToMono(Map.class)
.map(resp -> (String) resp.get("id"))
.block();
}
private Map<String, Object> buildMultipartBody(String filename, byte[] content) {
return Map.of("file", content, "filename", filename);
}
public record DifyResponse(String answer, String conversationId, Map<String, Object> metadata) {}
}费用: 社区版开源免费,自托管即可。云版本按用量计费。
九、工具选择指南:不同规模项目的推荐组合
十、FAQ
Q:Cursor和GitHub Copilot需要同时用吗,不重复吗?
A:有重叠,但定位不同。Cursor用于深度项目理解和架构级修改;Copilot用于日常代码补全。如果预算有限,先选Cursor($20/月)。
Q:Ollama本地跑模型需要什么配置?
A:最低要求:16GB内存,跑7B模型没问题。推荐:32GB内存,可跑14B模型,效果接近GPT-3.5。M系列MacBook:M2 Pro以上很流畅。独立显卡:GTX 3080以上,速度比CPU快5-10倍。
Q:LangFuse和Helicone我应该选哪个?
A:刚入门、只关注成本 → Helicone(配置简单,5分钟接入)。需要完整调试能力 → LangFuse(功能全,但配置稍复杂)。数据不能上云 → Arize Phoenix(完全本地)。
Q:RAGAS评估框架需要标注数据吗?
A:是的,需要准备"问题+标准答案"对(Ground Truth)。通常准备100-200对就够做可靠评估。可以用AI辅助生成标准答案,再人工审核,大大降低标注成本。
Q:Dify和自己用Spring AI开发RAG应用,怎么选择?
A:Dify适合:快速验证、非技术团队使用、标准RAG场景。Spring AI适合:高度定制化需求、与现有Java系统深度集成、需要完全掌控代码。两者可以共存:用Dify快速验证,验证后用Spring AI重新实现。
附录:工具配置速查表
Spring Boot项目中集成主要工具的完整配置
<!-- pom.xml 工具依赖汇总 -->
<dependencies>
<!-- Spring AI 核心 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
<!-- LangFuse追踪(社区SDK) -->
<dependency>
<groupId>com.langfuse</groupId>
<artifactId>langfuse-java</artifactId>
<version>1.2.0</version>
</dependency>
<!-- Micrometer(Prometheus监控) -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
<!-- Resilience4j(熔断限流) -->
<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-spring-boot3</artifactId>
</dependency>
<!-- Guava RateLimiter -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>33.0.0-jre</version>
</dependency>
</dependencies># application.yml 完整工具配置
spring:
ai:
openai:
api-key: ${OPENAI_API_KEY}
chat:
options:
model: gpt-4o
temperature: 0.7
ollama:
base-url: http://localhost:11434
chat:
options:
model: qwen2.5:14b
# LangFuse
langfuse:
public-key: ${LANGFUSE_PUBLIC_KEY}
secret-key: ${LANGFUSE_SECRET_KEY}
host: https://cloud.langfuse.com
project: my-project
# Resilience4j配置
resilience4j:
ratelimiter:
instances:
aiService:
limit-for-period: 100
limit-refresh-period: 1s
timeout-duration: 500ms
circuitbreaker:
instances:
aiService:
failure-rate-threshold: 50
wait-duration-in-open-state: 30s
sliding-window-size: 10
# Prometheus监控
management:
endpoints:
web:
exposure:
include: health,prometheus,metrics
metrics:
export:
prometheus:
enabled: true进阶:自动化工具链Pipeline
将上面的工具串联成一条自动化的开发-测试-监控流水线:
实现自动化评测Pipeline
package com.laozhang.pipeline;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import lombok.extern.slf4j.Slf4j;
import java.util.*;
/**
* AI质量自动化评测Pipeline
* 每天凌晨2点自动运行评测,结果推送到Slack
*/
@Slf4j
@Service
public class AutoEvalPipeline {
private final RagasEvaluationService ragasService;
private final DeepEvalService deepEvalService;
private final SlackNotificationService slackService;
private final RagService ragService;
public AutoEvalPipeline(RagasEvaluationService ragasService,
DeepEvalService deepEvalService,
SlackNotificationService slackService,
RagService ragService) {
this.ragasService = ragasService;
this.deepEvalService = deepEvalService;
this.slackService = slackService;
this.ragService = ragService;
}
/**
* 每日自动评测
*/
@Scheduled(cron = "0 0 2 * * ?") // 每天凌晨2点
public void runDailyEvaluation() {
log.info("开始每日AI质量评测...");
try {
// 加载标准测试集
List<RagasEvaluationService.RagasSample> testSamples = loadTestSamples();
// 运行测试:收集实际的RAG输出
List<RagasEvaluationService.RagasSample> samplesWithAnswers = testSamples.stream()
.map(sample -> {
String actualAnswer = ragService.answer(sample.question());
List<String> contexts = ragService.getLastRetrievedContexts();
return new RagasEvaluationService.RagasSample(
sample.question(), actualAnswer, contexts, sample.groundTruth()
);
})
.toList();
// RAGAS评估
RagasEvaluationService.RagasScore score = ragasService.evaluate(samplesWithAnswers);
// 生成报告
String report = generateDailyReport(score);
log.info("评测完成:\n{}", report);
// 质量下降时告警
if (score.overall() < 0.7) {
slackService.sendAlert(
"#ai-quality-alerts",
"RAG质量告警:综合评分 " + String.format("%.2f", score.overall()) + " 低于阈值 0.7\n" + report
);
} else {
slackService.sendMessage("#ai-quality-reports", report);
}
} catch (Exception e) {
log.error("评测Pipeline执行失败", e);
slackService.sendAlert("#ai-quality-alerts", "每日评测失败:" + e.getMessage());
}
}
private List<RagasEvaluationService.RagasSample> loadTestSamples() {
// 从数据库加载固定测试集(100-200个样本)
// 实际实现...
return Collections.emptyList();
}
private String generateDailyReport(RagasEvaluationService.RagasScore score) {
return String.format("""
📊 每日AI质量报告 %s
核心指标:
• 答案忠实度:%.3f %s
• 答案相关性:%.3f %s
• 检索精确度:%.3f %s
• 检索召回率:%.3f %s
综合评分:%.3f(%s)
""",
java.time.LocalDate.now(),
score.faithfulness(), emoji(score.faithfulness()),
score.answerRelevancy(), emoji(score.answerRelevancy()),
score.contextPrecision(), emoji(score.contextPrecision()),
score.contextRecall(), emoji(score.contextRecall()),
score.overall(), grade(score.overall())
);
}
private String emoji(double score) {
return score >= 0.8 ? "✅" : score >= 0.6 ? "⚠️" : "❌";
}
private String grade(double score) {
return score >= 0.8 ? "优秀" : score >= 0.6 ? "良好" : "需改进";
}
}工具学习路线图
按角色推荐的学习顺序
技术栈选型决策树
FAQ(续)
Q:这些工具中哪些有中文支持?
A:绝大多数工具有中文界面或良好的中文文档:LangFuse有中文文档、Dify界面完整中文化、Ollama支持中文模型(通义千问、Qwen系列)。部分工具(如Promptfoo、DeepEval)界面是英文但文档质量高,对英文有基本阅读能力即可。
Q:如果公司网络不能访问境外服务,有哪些替代方案?
A:完整的国内可用替代方案:
- IDE:IDEA + 通义灵码(阿里出品,免费)
- 本地模型:Ollama + 通义千问/Qwen系列
- 监控:Arize Phoenix自部署(完全开源)
- 向量库:PgVector / Milvus(国内团队开发)
- AI平台:Dify自部署 + 阿里DashScope
Q:工具的投入产出比怎么看?
A:我自己的粗算:Cursor每月$20,每天帮我节省约2小时,折合时薪$50的话,月ROI约为 2×20×50-20=$1980。LangFuse帮我定位了3个生产bug,每个bug平均节省半天,月ROI远超订阅费。工具的价值不在于它多贵,在于它帮你节省了多少时间和避免了多少错误。
结语
30个工具,看起来多,但你不需要一次全学。
我的建议:按优先级,一个月攻克1-2个工具,彻底用透。
第一个月:Cursor + LangFuse(IDE + 监控,立竿见影) 第二个月:Ollama + RAGAS(本地调试 + 效果评估) 第三个月:LangSmith + PromptLayer(提示词工程) ……
三个月后,你的开发效率会有质的飞跃。
小陈现在已经是团队里的AI开发效率第一名了。他上周问我:"老张,还有什么工具没告诉我?"
我笑了:"工具永远学不完,但核心能力是——知道什么时候用什么工具。"
