AI编程Token节流实战
AIç¼ç¨Tokenèæµå®æ
Goodwin 2026-08-09 0 é 读16åé01 å 说ç»è®ºï¼Token 䏿¯"ç"åºæ¥çï¼æ¯"å«å è½½"åºæ¥ç
ä¸ä¸ªææç¨ Cursor éæä¸ä¸ª Next.js + pnpm workspace çä¸åå端项ç®ï¼ä¸ä¸è¡ä¸å¡ä»£ç å èµ·æ¥ä¸ç®å¤ï¼ä½è·äºä¸æä¸ AI ç¼ç¨ï¼è´¦åæ¯æé¢æé«äºå°è¿ååã
æç¬¬ä¸ååºæ¯æ¨¡å涨价äºãç¿»å®ç¨éæç»æåç°ï¼çæ£ç§é±ç䏿¯å次对è¯ââæ¯æ¯æ¬¡æé®ï¼AI é½å¨éæ°æå个ä»åºè¯»ä¸éã
è¿ä¸æ¯ä¸ªä¾ãä½ ç¨ CursorãClaude Code è¿ç±»å·¥å ·å¤çä¸å¤§ååç«¯é¡¹ç®æ¶ï¼å¤§æ¦ä¹éå°è¿ï¼é便é®ä¸ªé®é¢ï¼è¿åº¦æ¡å¡å¨"读åæä»¶"ä¸è½¬å天ï¼ä¸ä¸ªæ¬æ¥å ç§è½çå®çé®é¢ï¼å 为ä¸ä¸æéå¡äºå å个æ å ³æä»¶ï¼ååºæ ¢äºä¸åï¼æåºä¸çè´¦åï¼è¾å ¥ Token æ¯è¾åºçåå åã
é®é¢çæ ¹åä¸å¨æ¨¡åè´µä¸è´µï¼å¨äºæä»¬è®© AI 读äºå¤ªå¤å®æ ¹æ¬ä¸éè¦è¯»çä¸è¥¿ã
è¿ç¯æç« ä¸è®²æä¹"å缩"ä»£ç ææ¬ââ飿¯æ²»æ ãæèçæ¯å¦ä¸æ¡è·¯ï¼è®© AI å¨è¯»ä»£ç ä¹åï¼å ç¥é该读åªäºãä¸è¯¥è¯»åªäºãåçå±é¢æè§£åæ¡ææ¯è·¯çº¿ï¼å®æå±é¢æåä¸ä¸ªå¯è¿è¡ç代ç éª¨æ¶æåå¨ï¼æåç»ä¸ä»½å½å弿ºçæç横åéååèã
éè¦æå说æï¼ææ¥äºç½ä¸æµä¼ çä¸äºæµè¯æç« ï¼é¨åæ°æ®ææ¾è¢«å¤¸å¤§ï¼æç¯ç¨¿å说æå·¥å ·è½ç 80%-96% ç Tokenï¼ä½è¯¥å·¥å · GitHub 宿¹å®æµçä¸ä½æ°æ¯ 47%-57%ï¼ãæ¬ææ¶åå ·ä½å·¥å ·çæ°æ®ï¼æé½æ æ³¨äºæ¥æºåæ¶é´ï¼ä½ æ¿å»ç¨ä¹å建议èªå·±æ ¸å¯¹ä¸éã
02 å端ä»åºç Token æµªè´¹ï¼æ¯ä½ 以为ç严é
å è¯´æ¸ æ¥æµªè´¹å°åºåçå¨åªãææå端项ç®éæå¸¸è§çåç±»æ¶èååºæ¥ï¼æ¯ä¸ç±»é½é äºçå®åºæ¯ï¼
第ä¸ç±»ï¼æ å·®å«ç®å½æ«æã Cursor ç Explore Agent ç解项ç®ç»ææ¶ï¼ä¼é彿«ææä»¶æ ãåç«¯é¡¹ç®æè¦å½çæ¯ node_modulesââä¸ä¸ª pnpm 项ç®å
ä¾èµç®å½å°±å¯è½ä¸ä¸ä¸ªæä»¶ãå³ä¾¿æ .cursorignoreï¼å¾å¤å¼åè
æ ¹æ¬æ²¡é
ï¼æè
é
å¾ä¸å
¨ãAI æ«ä¸é node_modules éçç±»å声ææä»¶ï¼Token 就已ç»ç§æä¸å¤§æªäºã
第äºç±»ï¼æ´æä»¶è¯»ååä½ã ä½ åªæ³æ¹ utils/format.ts éçä¸ä¸ª formatDate 彿°ï¼AI å´ææ´ä¸ªæä»¶è¯»è¿ä¸ä¸æââè¿åéé¢å¦å¤å
«ä¸ªä½ è¿æ¬¡æ ¹æ¬ä¸ä¼ç¢°çå·¥å
·å½æ°ã大段注éãçè³æµè¯ç¨ç mock æ°æ®ãä¸ä¸ªæä»¶ä¸ç¾è¡ï¼ä½ åªéè¦å
¶ä¸äºåè¡ã
第ä¸ç±»ï¼ä¾èµä¸ä¸æè¿è½½ã ä½ é®"ä¿®æ¹è¿ä¸ªç»ä»¶ç props ç±»å"ï¼AI è§å¾éè¦çè§£ä¸ä¸æ¸¸ï¼äºæ¯æç»ä»¶çç¶ç»ä»¶ãåç»ä»¶ãå¼ç¨çç±»åå®ä¹æä»¶ãçè³ Storybook ç stories å ¨é¨å è½½è¿æ¥ã宿¬ææ¯å¥½çââæ³çè§£ä¸ä¸æââä½å è½½çæ¯"ææç¸å ³æä»¶"è䏿¯"ç¸å ³æä»¶éç¸å ³ççæ®µ"ã
第åç±»ï¼åå²ä¼è¯éå¤å è½½ã ä¸ä¸ªé¿ä¼è¯éä½ é®äºäºæ¬¡é®é¢ï¼å䏿¬¡ AI å·²ç»è¯»è¿ types.ts ç宿´å
容äºï¼ç¬¬å次æ¶åç±»åæ¶å®å读äºä¸éãæ²¡ææ¬å°ç¼åï¼æ²¡æ"æå·²ç»åæè¿è¿ä¸ªæä»¶"çè®°å¿ã
è¿åç±»å èµ·æ¥ï¼å°±æ¯åç«¯é¡¹ç® Token æ¶èå± é«ä¸ä¸çææ¯æ ¹æºã注æä¸ä¸ªè§å¾ï¼ä»åºè¶å¤§ãä¾èµè¶æ·±ãä¼è¯è¶é¿ï¼æµªè´¹è¶ä¸¥éã个人å°é¡¹ç®æç¥ä¸ææ¾ï¼ä¸æ¦å°äºå¢é级 monorepoï¼é®é¢ä¼ææ°çº§æ¾å¤§ã
03 åæ¡ææ¯è·¯çº¿ï¼ä»"åç¼©ææ¬"å°"ç解代ç "
GitHub ä¸è§£å³è¿ä¸ªé®é¢ç弿ºæ¹æ¡ï¼æå¯¹ä»£ç çç解深度ï¼å¯ä»¥åæåæ¡è·¯çº¿ãçè§£äºè¿åæ¡è·¯çº¿çåºå«ï¼éåå°±ä¸ä¼æçã
路线ä¸ï¼ä»£ç éª¨æ¶æåã ç¨ ASTï¼æ½è±¡è¯æ³æ ï¼è§£æä»£ç ï¼åªä¿çå ç»æãå¯¼å ¥è¯å¥ãç±»å彿°çç¾åï¼å ææ¹æ³ä½å é¨çå®ç°ç»èãç¸å½äºç» AI çä¸ä»½"ç®å½å¤§çº²"è䏿¯"å ¨æ"ãä»£è¡¨é¡¹ç®æ¯ Repomixï¼å身为 Repopackï¼GitHub ä¸å¾æ´»è·ï¼å reducethemtokensãè¿ç±»å·¥å ·æéåçåºæ¯æ¯ï¼ä½ æ¥æä¸ä¸ªéçä»åºï¼æ³å¿«é让 AI äºè§£æ´ä½æ¶æï¼ä¸éè¦å®æ·±å ¥æä¸ªå½æ°çå®ç°ã
路线äºï¼ç¬¦å·çº§æ£ç´¢ã ç»æ´ä¸ªä»åºå»ºä¸ä¸ªç¬¦å·ç´¢å¼ï¼å½æ°åãç±»åãåéåï¼ï¼AI æ³æ¾ formatDate çå®ä¹ï¼ç´æ¥æ¥ç´¢å¼æ¿å°ç²¾ç¡®çæä»¶åè¡å·ï¼è䏿¯ grep å
¨æãä»£è¡¨é¡¹ç®æ jcodemunch-mcp çãè¿æ¯éª¨æ¶æåè¿äºä¸æ¥ââå®è½ç²¾åå®ä½å°"ä½ è¦ç飿®µä»£ç "ï¼é¿å
æ´æä»¶è¯»åã
路线ä¸ï¼ç»ç«¯æ¥å¿éåªã åé¢ä¸¤æ¡è·¯çº¿ç®¡çæ¯ä»£ç æä»¶ï¼è¿æ¡ç®¡çæ¯ç»ç«¯è¾åºãGit diffãæå»ºæ¥å¿ãæµè¯æ¥éé乿大éåä½ä¿¡æ¯ä¼è¢«å¡è¿ AI ä¸ä¸æãè¿ç±»å·¥å ·ï¼å¦ RTKï¼è¿æ»¤ææ¥å¿éçåªå£°ï¼åå°é¢å¤ç Token æ¶èãå®åç¬ç¨ä¸å¤ï¼ä½æé åä¸¤ç±»æ¯ææè¡¥å ã
路线åï¼ä»£ç ç¥è¯å¾è°±ã è¿æ¯ç®åææ¯æç度æé«ç䏿¡è·¯çº¿ãå®ä¸åªæ¯å»ºç¬¦å·ç´¢å¼ï¼èæ¯æå»ºä¸å¼ æåå¾ââèç¹æ¯ä»£ç 符å·ï¼è¾¹æ¯å®ä»¬ä¹é´çè°ç¨ãç»§æ¿ãä¾èµå ³ç³»ãAI æ³ç¥é"ä¿®æ¹è¿ä¸ªå½æ°ä¼å½±ååªäºå°æ¹"ï¼ä¸ç¨è¯»æä»¶ï¼ç´æ¥æ¥å¾è°±å°±è½æ¿å°å®æ´çè°ç¨é¾ãCodeGraph æ¯è¿æ¡è·¯çº¿ç代表项ç®ã
è¿åæ¡è·¯çº¿ä¸æ¯æ¿ä»£å ³ç³»ï¼èæ¯éè¿å ³ç³»ï¼éª¨æ¶æåæè½»é使ç²ï¼ç¬¦å·æ£ç´¢ç²¾åä½ä¸çè§£å ³ç³»ï¼å¾è°±æå¼ºå¤§ä½æ¥å ¥ææ¬ä¹æé«ãå®é è½å°å¾å¾æ¯ç»å使ç¨ã
å¼å¾ä¸æçæ¯ï¼å½åå ä¹æææ°å·¥å ·é½å½¢æäºä¸¤ä¸ªææ¯å ±è¯ï¼MCP åè®®ï¼Model Context Protocolï¼CursorãClaude Code ççéç¨ä¸ä¸ææ¥å ¥æ åï¼å Tree-Sitterï¼æ¯æ 30+ è¯è¨çå¢é AST è§£æå¼æï¼ãéåæ¶ä¼å 认åè¿ä¸¤ä¸ªï¼éæææ¬æä½ãå ¼å®¹æ§æå¥½ã
04 æåä¸ä¸ªä»£ç éª¨æ¶æåå¨ï¼30 è¡ TypeScript çææ ¸å¿åç
å 说åç太èãæåä¸ä¸ªæå°å¯è¿è¡ç Demoï¼æ¼ç¤º"éª¨æ¶æå"è¿æ¡è·¯çº¿çæ ¸å¿é»è¾ââç¨ Tree-Sitter è§£æ TypeScript æä»¶ï¼åªä¿çå¯¼å ¥å彿°ç¾åï¼æå½æ°ä½æ¿æ¢æå ä½ç¬¦ã
è¿ä¸ª Demo 䏿¯çäº§çº§å·¥å ·ï¼ä½è½å¸®ä½ 建ç«ç´è§ï¼æè°ç"èæµ"ï¼æ¬è´¨å°±æ¯å¨"读æä»¶"å"åç» AI"ä¹é´å ä¸éè¿æ»¤ã
å è£ ä¾èµï¼
npm i tree-sitter@^0.22.0 tree-sitter-typescript@^0.23.0
æ ¸å¿ä»£ç ï¼æå äºè¯¦ç»æ³¨éï¼å¯ä»¥ç´æ¥å¤å¶è¿è¡ï¼
// skeleton.ts
// ä¸ä¸ªæå°å¯è¿è¡ç代ç éª¨æ¶æåå¨
// ä½ç¨ï¼è§£æ TS æä»¶ï¼ä¿ç导å
¥å彿°ç¾åï¼åé¤å½æ°ä½
import { Parser, Language } from "tree-sitter";
import TypeScript from "tree-sitter-typescript";
// 1. åå§åè§£æå¨ï¼å è½½ TypeScript è¯æ³
const parser = new Parser();
parser.setLanguage(TypeScript.typescript as Language);
/**
* 2. æå代ç 骨æ¶ã
* åçï¼éå ASTï¼éå° function_declaration / method_definition
* åªä¿çç¾åè¡ï¼æ body èç¹æ¿æ¢ä¸ºå ä½ç¬¦ã
*/
function extractSkeleton(source: string): string {
const tree = parser.parse(source);
const lines = source.split("
");
const skipRanges: Arrayï¼[number, number]ï¼ = [];
// éå½éåè¯æ³æ ï¼æ¶ééè¦åé¤çè¡èå´
function walk(node: any) {
const type = node.type;
// å½ä¸å½æ°ä½ææ¹æ³ä½ï¼è®°å½å
¶è¡èå´
if (type === "statement_block" && isInsideFunction(node)) {
const startRow = node.startPosition.row;
const endRow = node.endPosition.row;
// ä¿çèµ·å§çå·¦è±æ¬å·è¡ï¼åé¤å
é¨å®ç°
if (endRow ï¼ startRow) {
skipRanges.push([startRow + 1, endRow]);
}
}
for (const child of node.children) walk(child);
}
// 夿å½å block æ¯å¦å±äºå½æ°/æ¹æ³ä½
function isInsideFunction(node: any): boolean {
let parent = node.parent;
while (parent) {
if (
parent.type === "function_declaration" ||
parent.type === "method_definition" ||
parent.type === "arrow_function"
) {
return true;
}
parent = parent.parent;
}
return false;
}
walk(tree.rootNode);
// 3. æ skipRanges æ¼è£
ç»æï¼è¢«åé¤çè¡æ¿æ¢ä¸ºå ä½ç¬¦
const result: string[] = [];
for (let i = 0; i ï¼ lines.length; i++) {
const inSkip = skipRanges.some(
([s, e]) =ï¼ i ï¼= s && i ï¼= e
);
if (inSkip) {
// èå´å
é¦è¡å å ä½ç¬¦ï¼å
¶ä½è·³è¿
const isRangeStart = skipRanges.some(([s]) =ï¼ s === i);
if (isRangeStart) result.push(" // ... å®ç°ç»èå·²çç¥ ...");
} else {
result.push(lines[i]);
}
}
return result.join("
");
}
// ---- æµè¯ç¨ä¾ ----
const sample = `import { z } from "zod";
// ç¨æ·æ ¡éª schema
export const userSchema = z.object({
name: z.string(),
age: z.number(),
});
export function formatUser(user: User): string {
const name = user.name.trim();
const age = String(user.age);
// ä¸å ä¸å¡é»è¾...
const formatted = name + " (" + age + ")";
return formatted;
}
export function validateInput(raw: unknown) {
const result = userSchema.safeParse(raw);
if (!result.success) {
throw new Error("æ ¡éªå¤±è´¥");
}
return result.data;
}
`;
console.log("===== åå§ä»£ç =====");
console.log(sample);
console.log("
===== éª¨æ¶æåå =====");
console.log(extractSkeleton(sample));
è¿è¡ç»æï¼
===== éª¨æ¶æåå =====
import { z } from "zod";
// ç¨æ·æ ¡éª schema
export const userSchema = z.object({
name: z.string(),
age: z.number(),
});
export function formatUser(user: User): string {
// ... å®ç°ç»èå·²çç¥ ...
}
export function validateInput(raw: unknown) {
// ... å®ç°ç»èå·²çç¥ ...
}
çå°äºåï¼å½æ°ç¾åå ¨ä¿çï¼AI è½ç¥é"è¿ä¸ªæä»¶éæåªäºå½æ°ãåæ°åè¿å弿¯ä»ä¹"ï¼ä½å½æ°ä½ââé£äºå¨è¾å åè¡çå®ç°ç»èââè¢«æ¿æ¢æäºä¸è¡å ä½ç¬¦ã
è¿å°±æ¯èæµçæ¬è´¨ï¼ä¸æ¯åç¼©ææ¬ï¼æ¯è®© AI æ¿å°"å¤ç¨çä¿¡æ¯"èé"å ¨é¨ä¿¡æ¯"ãå½ AI éè¦æä¸ªå½æ°çå ·ä½å®ç°æ¶ï¼å®å¯ä»¥ç¨ç¬¦å·æ£ç´¢ç²¾ç¡®å°åªåé£ä¸ä¸ªå½æ°ä½ï¼è䏿¯æ´æä»¶å è½½ã
æè¿ä¸ªæè·¯æ¾å¤§å°æ´ä¸ªä»åºï¼å éª¨æ¶æ«æå»ºç«å ¨å±è®¤ç¥ï¼åæéæ£ç´¢å è½½å ·ä½çæ®µï¼æåæå»ºè°ç¨å ³ç³»å¾è°±å®ç°ç²¾åèå´è®¡ç®ââè¿å°±æ¯ä»è·¯çº¿ä¸å°è·¯çº¿åç宿´æ¼è¿ã
ä¸é¢è¿ä¸ª Demo 约 60 è¡ï¼æ ¸å¿é»è¾ä¸å° 30 è¡ãçäº§çº§å·¥å ·ï¼RepomixãCodeGraphï¼å¨æ¤åºç¡ä¸å äºå¢éè§£æãå¤è¯è¨éé ãMCP åè®®å°è£ ãSQLite ç´¢å¼æä¹ åçå·¥ç¨è½åï¼ä½æ ¸å¿åçå°±æ¯è¿ä¹æ´ç´ ã
05 CodeGraph 深度æè§£ï¼å®å°åºåäºä»ä¹
èå®åçï¼çä¸ä¸ªå½åç度æé«çå
·ä½é¡¹ç®ãCodeGraphï¼github.com/colbymchenry/codegraphï¼æ¯ GitHub ä¸è¿æè®¨è®ºåº¦å¾é«ç代ç å¾è°±ç±»å·¥å
·ï¼æ ¸å¿åç¹ä¸å¥è¯æ¦æ¬ï¼å¨æ¬å°é¢å
ç´¢å¼ä»£ç çç¥è¯å¾è°±ï¼è®© AI æ¥å¾è°±è䏿¯æ«æä»¶ã
æå æç½ä¸æµä¼ ç说æ³åå®é æ°æ®åä¸ªå¯¹ç §ï¼è¿é¨åå¾éè¦ï¼
ç½ä¸æäºæµè¯æç« ç§°å®"ææ 2.2kãç± Netflix åå·¥ç¨å¸å¢éç»´æ¤ãToken èç 80%-96%"ãææ¥äºä»åºå宿¹ benchmarkï¼è¿ä¸æ¡é½å¯¹ä¸ä¸ãå®é æ 嵿¯ï¼è¯¥é¡¹ç®å¨ GitHub ä¸ç度å¾é«ï¼æªè³ 2026 å¹´ä¸ï¼å¤ä¸ªæ¸ éæ¾ç¤ºææ å¨ä¸çº§ä»¥ä¸ï¼å ·ä½æ°å以ä»åºé¡µé¢ä¸ºåï¼ï¼ä½è æ¯ @colbymchenryï¼å®æ¹å¨ 7 个çå®å¼æºé¡¹ç®ä¸åäºå¯¹ç §æµè¯ï¼ä¸ä½æ°ç»ææ¯ Token åå°çº¦ 47%-57%ãå·¥å ·è°ç¨åå°çº¦ 50%-70%ãææ¬éä½çº¦ 22%-35%ã
æ°æ®å·®å¼ä¸æ¯å°äºââ80% å 50% ç´æ¥å½±åä½ çéåå³çãæåä¸ä¸å®æ¹ benchmark éå 个æä»£è¡¨æ§çæ°æ®ç¹ï¼æ¥æºï¼CodeGraph 宿¹ READMEï¼æµè¯æ¶é´ä¸º 2026 å¹´ 5-6 æï¼æ¨¡å为 Claude Opusï¼æ¯ä¸ªé¡¹ç®è· 4 次åä¸ä½æ°ï¼ï¼
| æµè¯é¡¹ç® | è¯è¨ | è§æ¨¡ | Token åå° | å·¥å ·è°ç¨åå° |
|---|---|---|---|---|
| VS Code | TypeScript | ~10k æä»¶ | 63%-78% | 81%-85% |
| Excalidraw | TypeScript | ~640 æä»¶ | 71%-90% | 82%-96% |
| Django | Python | ~3k æä»¶ | 35%-60% | 53%-77% |
| Alamofire | Swift | ~110 æä»¶ | 43%-64% | 13%-83% |
注æä¸ä¸ªè§å¾ï¼ä»åºè¶å¤§ï¼ææè¶æ¾èãVS Code è¿ç§ä¸çº§æä»¶ç项ç®ï¼Token åå°æææ¾ï¼è Alamofire è¿ç§ç¾æ¥ä¸ªæä»¶çå°é¡¹ç®ï¼å·¥å ·è°ç¨åå°çå¹ åº¦æ³¢å¨å¾å¤§ï¼13%-83%ï¼ãè¿è¯´æå¾è°±ç±»å·¥å ·çä»·å¼åä»åºè§æ¨¡å¼ºç¸å ³ââå°é¡¹ç®æ¬èº«æ«æææ¬å°±ä½ï¼ä¸äºå¾è°±è¾¹é æ¶çæéã
CodeGraph çææ¯æ¶æç¬¦ååé¢è¯´çå
±è¯ï¼åºå±ç¨ Tree-Sitter å AST è§£æï¼ç¬¦å·åè°ç¨å
³ç³»åè¿ SQLite + FTS5 å
¨æç´¢å¼ï¼å¯¹å¤éè¿ MCP åè®®æ´é²æ¥è¯¢æ¥å£ãå®ç工使µç¨æ¯ââä½ è·ä¸æ¬¡ codegraph init -i 建索å¼ï¼ä¹å AI ç¼ç¨å·¥å
·ï¼CursorãClaude Code çï¼å¨æ¢ç´¢ä»£ç åºæ¶ï¼ä¸å spawn ä¸å grep/Read åä»»å¡ï¼èæ¯ç´æ¥æ¥æ¬å°å¾è°±æ¿ç»æåç»æã
ä¸ä¸ªç»èå¼å¾æ³¨æï¼CodeGraph ç benchmark éï¼"æ CodeGraph"çé£ç»å¹¶é裸è·ââAI ä»ç¶è½ç¨å ç½®ç Read/Grep/Bash å·¥å ·ãæä»¥è¿ä¸ª 47%-57% çåå°ï¼æ¯"å¾è°±æ¥è¯¢"ç¸å¯¹"åçæç´¢"çå¢éæ¶çï¼ä¸æ¯ä»é¶å°ä¸ãè¿æ¯é£äºå¼ å£å°±æ¯"ç 90%"ç说æ³é è°±å¾å¤ã
06 横å对æ¯ï¼å½åä¸»æµæ¹æ¡æä¹é
ææç®åè½æå°çãæå®é ç»´æ¤ç代表æ§é¡¹ç®æææ¯è·¯çº¿æ´çæä¸å¼ 表ãéè¦æéï¼å¼æºçæååå¿«ï¼ææ åæ´æ°æ¶é´ä»¥ä½ æ¥é æ¶çä»åºé¡µé¢ä¸ºåï¼ä»¥ä¸æ°æ®ééäº 2026 å¹´ 8 æåã
| é¡¹ç® | ææ¯è·¯çº¿ | æ ¸å¿è½å | éææ¹å¼ | éååºæ¯ |
|---|---|---|---|---|
| CodeGraph | 代ç ç¥è¯å¾è°± | å ¨å±è°ç¨é¾/ä¾èµå¾ãæéå è½½ | MCP / CLI | 大åä»åºãé¿ä¼è¯ã夿ä¾èµ |
| Repomix | 代ç éª¨æ¶æå | ä»åºæå ãè¿æ»¤æ å ³ç®å½ãè½»ééª¨æ¶ | CLI | éçä»åºå¿«é梳çã䏿¬¡æ§åæ |
| jcodemunch-mcp | 符å·çº§æ£ç´¢ | 彿°/类精åå®ä½ãé¿å æ´æä»¶è¯»å | MCP | æ¥å¸¸ç¼ç è°è¯ãä¸åä»åº |
| RTK | ç»ç«¯æ¥å¿éåª | è¿æ»¤ git/æå»º/æµè¯æ¥å¿åªå£° | Shell æä»¶ | è°è¯åºæ¯ãé åå ¶ä»å·¥å · |
| mcp-trim | å·¥å ·è¿åéåª | è£åª MCP å·¥å ·è¿åçåä½å æ°æ® | MCP | å¤å·¥å ·ç»åä¼è¯ |
| code-review-graph | 代ç ç¥è¯å¾è°± | PR æ¹å¨å½±åèå´åæ | API / CLI | 代ç 审æ¥ãCI/CD éæ |
ä»è¿å¼ 表è½çåºå 个ç»è®ºï¼
第ä¸ï¼å¾è°±ç±»å·¥å ·å¨å¤§åä»åºåºæ¯ä¼å¿æææ¾ï¼ä½æ¥å ¥ææ¬ä¹æé«ã CodeGraph éè¦å 建索å¼ãé ç½® MCPï¼å¯¹äºä¸ªäººå°é¡¹ç®å¯è½"æé¸¡ç¨çå"ã
第äºï¼éª¨æ¶ç±»å符å·ç±»å·¥å ·èå¨è½»éã Repomix ä¸ä¸ª CLI å½ä»¤å°±è½è·ï¼äºåéæ¥å ¥ï¼éåå¿«é䏿å䏿¬¡æ§ä»»å¡ã
第ä¸ï¼ç»ç«¯éåªç±»å·¥å ·ä¸è½åç¬æåï¼ä½åè¾ å©ä¸å¯æç¼ºã æå®æµè¿ï¼å¨å·²æä»£ç æ£ç´¢å·¥å ·çåºç¡ä¸å ä¸ä¸ªæ¥å¿éåªï¼è½é¢å¤åæ 10%-20% ç Tokenââè¿é¨åæµªè´¹ä½ ç¨ä»£ç å·¥å ·æ¯ç®¡ä¸å°çã
第åï¼MCP å议已æäºå®æ åã æ°å·¥å ·åºæ¬é½åçæ¯æ MCPï¼è¿æå³çæ¥å ¥ Cursor/Claude Code å ä¹é¶é ç½®ãéåæ¶å¦æä¸¤ä¸ªå·¥å ·è½åå·®ä¸å¤ï¼ä¼å 鿝æ MCP çé£ä¸ªã
07 ååºæ¯éåï¼å«æ¾"æå¥½ç"ï¼æ¾"æåéç"
没æé¶å¼¹ãææå端å¼åè æå¸¸éå°çåç±»åºæ¯ï¼ç»åºå ·ä½çç»å建议ã
åºæ¯ä¸ï¼ä¸ªäººé¡¹ç®ãå°åä»åºãå¿«é䏿ã ä½ ç»´æ¤ä¸ä¸ªå åè¡ç Next.js åºç¨ï¼ç¨ Cursor å¶å°è®© AI 帮å¿ååè½ãè¿ä¸ªé级ï¼åçæç´¢ææ¬ä¸é«ï¼ä¸å¾è°±ç±»å·¥å
·çæ¶çè¦çä¸äºå¦ä¹ ææ¬ã建议ï¼é
好 .cursorignore æé¤ node_modules å .nextï¼å¯éå ä¸ä¸ª Repomix åå¶å°çæ¶ææ¢³çãå¤äºã
åºæ¯äºï¼ä¸åä»åºãæ¥å¸¸ç¼ç ãé¿æä¼è¯ã å¢é级å端项ç®ï¼å ä¸è¡ä»£ç ï¼ä½ æ¯å¤©å¼ç Cursor åå天ãè¿ä¸ªåºæ¯ç¬¦å·çº§æ£ç´¢æ§ä»·æ¯æé«ââAI æ¯æ¬¡é½è½ç²¾åå®ä½å°ç®æ 彿°ï¼ä¸ç¨æ´æä»¶å è½½ã建议ï¼ä¸»åä¸ jcodemunch-mcp è¿ç±» MCP ç¬¦å·æ£ç´¢å·¥å
·ï¼è¾
å©å mcp-trim è£åªå·¥å
·è¿åï¼.cursorignore ä¸å®è¦é
å
¨ãå·¥å
·æ»æ°æ§å¶å¨ 2-3 个ï¼å¤äºåèäºç¸ææ¶ã
åºæ¯ä¸ï¼å¤§å monorepoã夿ä¾èµãä¼ä¸çº§ã pnpm workspace 管åå 个å ï¼æè æ¥æäºä¸ä¸ªåå²å 袱å¾éçè项ç®ãè¿ä¸ªé级ï¼å¾è°±ç±»å·¥å ·çä»·å¼æçæ£æ¾ç°ââå®è½è®© AI çè§£"æ¹è¿ä¸ªå ¬å ±ç»ä»¶ä¼å½±ååªäºä¸å¡çº¿"ï¼è䏿¯ç²ç®å è½½ä¸å æä»¶ã建议ï¼ä¸»å CodeGraph 建å¾è°±ï¼è¾ å©ç¬¦å·æ£ç´¢è¡¥ä½ï¼ç»ç«¯éåªå åºã注æä¼ä¸åºæ¯çå®å ¨è¦æ±ï¼CodeGraph æ¯æå ¨æ¬å°é¨ç½²ï¼ä»£ç ä¸ä¸ä¼ ç¬¬ä¸æ¹ï¼è¿ç¹å¯¹æåè§è¦æ±çå¢éå¾éè¦ã
åºæ¯åï¼ä»£ç 审æ¥ãPR æµç¨ã ä½ æ³å¨ PR åå¹¶å让 AI å®¡æ¥æ¹å¨çå½±åèå´ãè¿ä¸ªåºæ¯æä¸ç¨å·¥å ·ââcode-review-graph ä¸é¨åæ PR diff çå ³è代ç åå½±åé¢ã建议ï¼ä¸»å code-review-graphï¼è¾ 婿¥å¿éåªè¿æ»¤ git diff åªå£°ã
ä¸ç®¡åªä¸ªåºæ¯ï¼è½å°æ¶æä¸ä¸ªååè¦å®ä½ï¼
åè®®ç»ä¸ââä¼å MCPï¼é¿å å·¥å ·é´éé å²çªãå±çº§äºè¡¥ââæ"éª¨æ¶ â ç¬¦å· â å¾è°± â æ¥å¿"åå±ï¼ä¸å±è¦çä¸äºçä¸å±è¡¥ãæ°éç²¾ç®ââåç±»å·¥å ·åªçä¸ä¸ªï¼æ»æ°ä¸è¶ è¿ 3 个ãå·¥å ·æ¬èº«ä¹æ Token å¼éï¼å®çå®ä¹ãè°ç¨ãè¿åé½å ä¸ä¸æï¼ï¼å 太å¤ä¼éå¾å ¶åã
08 å卿åï¼æ²¡æé¶å¼¹ï¼åªæç»å
åå°å¼å¤´é£ä¸ªé®é¢ï¼æé£æå¤ç§çåå Tokenï¼åæ¥æä¹è§£å³çï¼
说å®è¯ï¼æ²¡æä¸æ¥å°ä½çé¶å¼¹ãæåçæ¯ä¸ä»¶äºï¼ç¬¬ä¸ï¼æ .cursorignore é
å
¨äºï¼ä¹åå±
ç¶æ²¡æé¤ .next å storybook-staticï¼ï¼ç¬¬äºï¼æ¥äºä¸ä¸ªç¬¦å·æ£ç´¢ç MCP å·¥å
·ï¼è®© AI å«åæ´æä»¶è¯»ï¼ç¬¬ä¸ï¼é¿ä¼è¯é主å¨ç¨ /clear æ¸
ä¸ä¸æï¼å«è®©åå²åä½å 积ã
ä¸ä»¶äºå èµ·æ¥ï¼Token æ¶èéäºå¤§æ¦ä¸åã䏿¯ 90%ï¼ä½å¤å®å¨ã
代ç å¾è°±ç±»å·¥å ·çæ¹åæ¯å¯¹çââ让 AI ä»"读æä»¶"è¿åå°"æ¥å¾è°±"ï¼è¿å人类工ç¨å¸ç解代ç çæ¹å¼ä¸è´ï¼èµæ·±å·¥ç¨å¸æ¹ä»£ç åä¹ä¸ä¼éè¯»å ¨æï¼èæ¯èåéæä¸å¼ è°ç¨å ³ç³»å¾ï¼ç²¾åå®ä½å°è¦æ¹çå°æ¹ãCodeGraph è¿ç±»å·¥å ·æ¬è´¨å°±æ¯å¨å¸® AI 建è¿å¼ å¾ã
ä½å®ä¸æ¯ä¸è½çãå°é¡¹ç®ä¸äºæ¯æµªè´¹ï¼é
ç½®ä¸å½ç .cursorignore æ¯æ²¡é
æ´åï¼æè§è¿æäººæ src ç» ignore äºï¼ï¼å·¥å
·å 太å¤åèå¢å ä¸ä¸æè´æ
ãéåçæ ¸å¿ä¸æ¯"æ¾æå¼ºçå·¥å
·"ï¼èæ¯"ææ¸
æ¥èªå·±çä»åºéè¦åªä¸å±è¿æ»¤"ã
å¦æä½ ä¹å¨ç¨ AI ç¼ç¨å·¥å ·å¤çä¸å¤§åå端项ç®ï¼æå»ºè®®å åä¸ä»¶äºï¼ç¿»ä¸ä¸ä½ æè¿å 次对è¯ç Token ç¨éæç»ï¼ççè¾å ¥ Token æ¯ä¸æ¯è¿è¶ è¾åºã妿æ¯ï¼è¯´æä½ çä¸ä¸æå è½½æé®é¢ââè¿æ¶ååèèä¸ä»ä¹å·¥å ·ï¼è䏿¯ä¸ä¸æ¥å°±è£ ä¸å MCP æä»¶ã
Token ææ¬æ§å¶æ£å¨ä»"å¯éä¼å"åæ"ææ¯å¢éçåéè½å"ãè¶æ©å»ºç«è¿ä¸ªæè¯ï¼è¶æ©è½å¨ AI ç¼ç¨çæç红å©åææ¬çº¢çº¿ä¹é´æ¾å°å¹³è¡¡ç¹ã
ä½ ç®åå¨ç¨ä»ä¹æ¹æ¡æ§å¶ AI ç¼ç¨ç Token æ¶èï¼ææ²¡æè¸©è¿"å·¥å ·è¶è£ è¶å¤åèæ´è´¹"çåï¼è¯è®ºåºèèï¼ææè¸©è¿çå齿´çåºæ¥ã
Aitishiku.com