cursor / docs /STARTUP_OPTIMIZATION.md
cacode's picture
Upload 48 files
1766992 verified
# ๅฏๅŠจๆ—ฅๅฟ—ไผ˜ๅŒ–่ฏดๆ˜Ž
## ไผ˜ๅŒ–ๅ‰ vs ไผ˜ๅŒ–ๅŽ
### ไผ˜ๅŒ–ๅ‰๏ผˆ่ฐƒ่ฏ•ๆจกๅผ๏ผ‰
ๅฏๅŠจๆ—ถไผšๆ˜พ็คบๅคง้‡ GIN ๆก†ๆžถ็š„่ฐƒ่ฏ•ไฟกๆฏ๏ผš
```
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
[GIN-debug] GET /health --> main.setupRoutes.func1 (5 handlers)
[GIN-debug] GET / --> cursor2api-go/handlers.(*Handler).ServeDocs-fm (5 handlers)
[GIN-debug] GET /v1/models --> cursor2api-go/handlers.(*Handler).ListModels-fm (6 handlers)
[GIN-debug] POST /v1/chat/completions --> cursor2api-go/handlers.(*Handler).ChatCompletions-fm (6 handlers)
[GIN-debug] GET /static/*filepath --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (5 handlers)
[GIN-debug] HEAD /static/*filepath --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (5 handlers)
INFO[0000] Starting Cursor2API server on port 8002
```
### ไผ˜ๅŒ–ๅŽ๏ผˆ็ฎ€ๆดๆจกๅผ๏ผŒ้ป˜่ฎค๏ผ‰
ๅฏๅŠจๆ—ถๅชๆ˜พ็คบๅฟ…่ฆ็š„ๆœๅŠกไฟกๆฏ๏ผš
```
โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘ Cursor2API Server โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
๐Ÿš€ ๆœๅŠกๅœฐๅ€: http://localhost:8002
๐Ÿ“š API ๆ–‡ๆกฃ: http://localhost:8002/
๐Ÿ’Š ๅฅๅบทๆฃ€ๆŸฅ: http://localhost:8002/health
๐Ÿ”‘ API ๅฏ†้’ฅ: 0000
๐Ÿค– ๆ”ฏๆŒๆจกๅž‹: ไป… `claude-sonnet-4.6` ไธŽ `claude-sonnet-4.6-thinking`๏ผˆthinking ไธบๆดพ็”Ÿๅ…ฌๅผ€ๆจกๅž‹๏ผ‰
โœจ ๆœๅŠกๅทฒๅฏๅŠจ๏ผŒๆŒ‰ Ctrl+C ๅœๆญข
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”
```
## ไธป่ฆๆ”น่ฟ›
### 1. ้ป˜่ฎคไฝฟ็”จ็ฎ€ๆดๆจกๅผ
- ไฟฎๆ”น `.env.example` ไธญ `DEBUG=false`
- ็”Ÿไบง็Žฏๅขƒ้ป˜่ฎคไธๆ˜พ็คบ่ฐƒ่ฏ•ไฟกๆฏ
- ๅฏๅŠจ่พ“ๅ‡บๆ›ดๆธ…็ˆฝใ€ไธ“ไธš
### 2. ็พŽ่ง‚็š„ๅฏๅŠจๆจชๅน…
- ไฝฟ็”จ Unicode ๆก†็บฟๅญ—็ฌฆ็ป˜ๅˆถๆจชๅน…
- ไฝฟ็”จ Emoji ๅ›พๆ ‡ๅขžๅผบๅฏ่ฏปๆ€ง
- ๆธ…ๆ™ฐๅฑ•็คบๅ…ณ้”ฎไฟกๆฏ๏ผš
- ๐Ÿš€ ๆœๅŠกๅœฐๅ€
- ๐Ÿ“š API ๆ–‡ๆกฃ
- ๐Ÿ’Š ๅฅๅบทๆฃ€ๆŸฅ
- ๐Ÿ”‘ API ๅฏ†้’ฅ
- ๐Ÿค– ๆ”ฏๆŒ็š„ๆจกๅž‹
### 3. ๆกไปถๆ€งๆ—ฅๅฟ—่พ“ๅ‡บ
- ๅชๅœจ `DEBUG=true` ๆ—ถๆ˜พ็คบ่ฏฆ็ป†ๆ—ฅๅฟ—
- GIN ็š„ Logger ไธญ้—ดไปถไป…ๅœจ่ฐƒ่ฏ•ๆจกๅผๅฏ็”จ
- ๅ‡ๅฐ‘็”Ÿไบง็Žฏๅขƒ็š„ๆ—ฅๅฟ—ๅ™ช้Ÿณ
### 4. ๆ™บ่ƒฝๆจกๅž‹ๆ˜พ็คบ
- ๆจกๅž‹ๆ•ฐ้‡ > 3 ๆ—ถ๏ผŒๅชๆ˜พ็คบ็ฌฌไธ€ไธชๅ’Œๆ€ปๆ•ฐ
- ้ฟๅ…ๅฏๅŠจไฟกๆฏ่ฟ‡้•ฟ
- ไฟๆŒ่พ“ๅ‡บ็ฎ€ๆด
## ไปฃ็ ๆ”น่ฟ›
### main.go
```go
// ่ฎพ็ฝฎๆ—ฅๅฟ—็บงๅˆซๅ’Œ GIN ๆจกๅผ
if cfg.Debug {
logrus.SetLevel(logrus.DebugLevel)
gin.SetMode(gin.DebugMode)
} else {
logrus.SetLevel(logrus.InfoLevel)
gin.SetMode(gin.ReleaseMode)
}
// ๅชๅœจ Debug ๆจกๅผไธ‹ๅฏ็”จ GIN ็š„ๆ—ฅๅฟ—
if cfg.Debug {
router.Use(gin.Logger())
}
// ๆ‰“ๅฐๅฏๅŠจไฟกๆฏ
printStartupBanner(cfg)
```
### printStartupBanner ๅ‡ฝๆ•ฐ
```go
func printStartupBanner(cfg *config.Config) {
banner := `
โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘ Cursor2API Server โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
`
fmt.Println(banner)
fmt.Printf("๐Ÿš€ ๆœๅŠกๅœฐๅ€: http://localhost:%d\n", cfg.Port)
fmt.Printf("๐Ÿ“š API ๆ–‡ๆกฃ: http://localhost:%d/\n", cfg.Port)
fmt.Printf("๐Ÿ’Š ๅฅๅบทๆฃ€ๆŸฅ: http://localhost:%d/health\n", cfg.Port)
fmt.Printf("๐Ÿ”‘ API ๅฏ†้’ฅ: %s\n", cfg.APIKey)
models := cfg.GetModels()
if len(models) > 3 {
fmt.Printf("๐Ÿค– ๆ”ฏๆŒๆจกๅž‹: %s ็ญ‰ %d ไธชๆจกๅž‹\n", models[0], len(models))
} else {
fmt.Printf("๐Ÿค– ๆ”ฏๆŒๆจกๅž‹: %v\n", models)
}
if cfg.Debug {
fmt.Println("๐Ÿ› ่ฐƒ่ฏ•ๆจกๅผ: ๅทฒๅฏ็”จ")
}
fmt.Println("\nโœจ ๆœๅŠกๅทฒๅฏๅŠจ๏ผŒๆŒ‰ Ctrl+C ๅœๆญข")
fmt.Println("โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”")
}
```
## ไฝฟ็”จๆ–นๆณ•
### ็ฎ€ๆดๆจกๅผ๏ผˆ้ป˜่ฎค๏ผ‰
```bash
./cursor2api-go
```
ๆˆ–่€…ไฝฟ็”จๅฏๅŠจ่„šๆœฌ๏ผš
```bash
./start.sh
```
### ่ฐƒ่ฏ•ๆจกๅผ
**ๆ–นๅผ 1**: ไฟฎๆ”น `.env` ๆ–‡ไปถ
```bash
DEBUG=true
```
**ๆ–นๅผ 2**: ไธดๆ—ถๅฏ็”จ
```bash
DEBUG=true ./cursor2api-go
```
### ่ฐƒ่ฏ•ๆจกๅผไผšๆ˜พ็คบ
- โœ… ่ฏฆ็ป†็š„ GIN ่ทฏ็”ฑไฟกๆฏ
- โœ… ๆฏไธช่ฏทๆฑ‚็š„่ฏฆ็ป†ๆ—ฅๅฟ—
- โœ… x-is-human token ไฟกๆฏ
- โœ… ๆต่งˆๅ™จๆŒ‡็บน้…็ฝฎ
- โœ… ้‡่ฏ•ๅ’Œ้”™่ฏฏๅค„็†่ฏฆๆƒ…
## ไผ˜ๅŠฟ
1. **ๆ›ดไธ“ไธš** - ็ฎ€ๆด็š„่พ“ๅ‡บ้€‚ๅˆ็”Ÿไบง็Žฏๅขƒ
2. **ๆ›ดๆธ…ๆ™ฐ** - ๅ…ณ้”ฎไฟกๆฏไธ€็›ฎไบ†็„ถ
3. **ๆ›ด็พŽ่ง‚** - ไฝฟ็”จ Unicode ๅ’Œ Emoji ๅขžๅผบ่ง†่ง‰ๆ•ˆๆžœ
4. **ๆ›ด็ตๆดป** - ๅฏไปฅ้šๆ—ถๅˆ‡ๆข่ฐƒ่ฏ•ๆจกๅผ
5. **ๆ›ดๅ‹ๅฅฝ** - ๆ–ฐ็”จๆˆทๆ›ดๅฎนๆ˜“็†่งฃๆœๅŠก็Šถๆ€
## ๅ…ผๅฎนๆ€ง
- โœ… ๅฎŒๅ…จๅ‘ๅŽๅ…ผๅฎน
- โœ… ไธๅฝฑๅ“็Žฐๆœ‰ๅŠŸ่ƒฝ
- โœ… ๅฏไปฅ้šๆ—ถๅˆ‡ๆขๆจกๅผ
- โœ… ๆ”ฏๆŒๆ‰€ๆœ‰ๅนณๅฐ๏ผˆWindows/macOS/Linux๏ผ‰
## ๆณจๆ„ไบ‹้กน
1. **้ฆ–ๆฌกไฝฟ็”จ**: ้œ€่ฆๆ›ดๆ–ฐ `.env` ๆ–‡ไปถ๏ผˆๆˆ–ๅˆ ้™คๅŽ้‡ๆ–ฐ็”Ÿๆˆ๏ผ‰
2. **่ฐƒ่ฏ•้—ฎ้ข˜**: ้‡ๅˆฐ้—ฎ้ข˜ๆ—ถ๏ผŒๅปบ่ฎฎๅฏ็”จ `DEBUG=true` ๆŸฅ็œ‹่ฏฆ็ป†ๆ—ฅๅฟ—
3. **็”Ÿไบง้ƒจ็ฝฒ**: ๅปบ่ฎฎไฝฟ็”จ `DEBUG=false` ไปฅ่Žทๅพ—ๆœ€ไฝณๆ€ง่ƒฝๅ’Œ็ฎ€ๆด่พ“ๅ‡บ