Skip to content

Latest commit

ย 

History

History
463 lines (352 loc) ยท 12.1 KB

File metadata and controls

463 lines (352 loc) ยท 12.1 KB

้ฃžไนฆๆœบๅ™จไบบๆŽฅๅ…ฅๅฎž็Žฐๆ€ป็ป“

ๅฎž็Žฐๆฆ‚่ฟฐ

ๅทฒๆˆๅŠŸๅฐ†้ฃžไนฆๆœบๅ™จไบบๆŽฅๅ…ฅๅˆฐ ZenOps ้กน็›ฎ,ๅฎž็Žฐไบ†ไธŽ้’‰้’‰ๆœบๅ™จไบบ็›ธไผผ็š„ๆ™บ่ƒฝไบคไบ’่ƒฝๅŠ›ใ€‚

ๅฎŒๆˆๆ—ถ้—ด: 2025-12-16 ๅฎž็Žฐๆ–นๅผ: ๅ‚่€ƒ PandaWiki ๅผ€ๆบ้กน็›ฎ,็ป“ๅˆ ZenOps ็Žฐๆœ‰ๆžถๆž„ ็ผ–่ฏ‘็Šถๆ€: โœ… ็ผ–่ฏ‘ๆˆๅŠŸ ไปฃ็ ็Šถๆ€: โœ… ๅทฒๅฎŒๆˆ,ๅพ…ๆต‹่ฏ•


ๆ–ฐๅขžๆ–‡ไปถๆธ…ๅ•

1. ๆ ธๅฟƒไปฃ็ ๆ–‡ไปถ

ๆ–‡ไปถ่ทฏๅพ„ ่ฏดๆ˜Ž ่กŒๆ•ฐ
internal/feishu/client.go ้ฃžไนฆ API ๅฎขๆˆท็ซฏ,ๅฐ่ฃ…ๆถˆๆฏๅ‘้€ 165
internal/feishu/handler.go ๆถˆๆฏๅค„็†ๅ™จ,ๅค„็†็”จๆˆทๆถˆๆฏๅ’Œ LLM ่ฐƒ็”จ 190
internal/server/feishu_stream.go ้ฃžไนฆ Stream ๆœๅŠก,WebSocket ่ฟžๆŽฅ็ฎก็† 152

2. ้…็ฝฎๆ–‡ไปถ

ๆ–‡ไปถ่ทฏๅพ„ ๏ฟฝ๏ฟฝ๏ฟฝๆ˜Ž
internal/config/config.go ๆ–ฐๅขž FeishuConfig ้…็ฝฎ็ป“ๆž„
config.example.yaml ๆ›ดๆ–ฐ้…็ฝฎ็คบไพ‹,ๆทปๅŠ ้ฃžไนฆ้…็ฝฎ

3. ไธป็จ‹ๅบ้›†ๆˆ

ๆ–‡ไปถ่ทฏๅพ„ ๅ˜ๆ›ด่ฏดๆ˜Ž
cmd/root.go ้›†ๆˆ้ฃžไนฆๆœๅŠกๅฏๅŠจ้€ป่พ‘

4. ๆ–‡ๆกฃๆ–‡ไปถ

ๆ–‡ไปถ่ทฏๅพ„ ่ฏดๆ˜Ž ้กตๆ•ฐ
docs/feishu-setup-guide.md ้ฃžไนฆๆœบๅ™จไบบๆŽฅๅ…ฅๆŒ‡ๅ—(่ฏฆ็ป†) ~400 ่กŒ
docs/feishu-test-checklist.md ๅŠŸ่ƒฝๆต‹่ฏ•ๆธ…ๅ• ~450 ่กŒ
docs/feishu-integration.md ๆŠ€ๆœฏๅฎž็Žฐ่ฏดๆ˜Ž ~450 ่กŒ
docs/feishu-implementation-summary.md ๆœฌๆ–‡ๆกฃ ~200 ่กŒ

5. ไพ่ต–ๆ›ดๆ–ฐ

ไพ่ต–ๅŒ… ็‰ˆๆœฌ
github.com/larksuite/oapi-sdk-go/v3 v3.5.1

ๆžถๆž„่ฎพ่ฎก

ๆ•ดไฝ“ๆžถๆž„

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚           ZenOps ไธป็จ‹ๅบ (cmd/root.go)        โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
              โ”‚
              โ”œโ”€โ”€โ”€ ้’‰้’‰ๆœๅŠก (ๅทฒๆœ‰)
              โ”‚
              โ””โ”€โ”€โ”€ ้ฃžไนฆๆœๅŠก (ๆ–ฐๅขž) โ”€โ”
                                     โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚                                                      โ”‚
    โ”‚  FeishuStreamServer (ๅ†…้ƒจ/server/feishu_stream.go)  โ”‚
    โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”‚
    โ”‚  โ”‚  WebSocket ๅฎขๆˆท็ซฏ (larkws.Client)          โ”‚     โ”‚
    โ”‚  โ”‚  - ๆŽฅๆ”ถ้ฃžไนฆๆถˆๆฏๆŽจ้€                        โ”‚     โ”‚
    โ”‚  โ”‚  - ๆถˆๆฏๅŽป้‡                                โ”‚     โ”‚
    โ”‚  โ”‚  - ไบ‹ไปถๅˆ†ๅ‘                                โ”‚     โ”‚
    โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ”‚
    โ”‚               โ”‚                                      โ”‚
    โ”‚               โ†“                                      โ”‚
    โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”‚
    โ”‚  โ”‚  MessageHandler (ๅ†…้ƒจ/feishu/handler.go)   โ”‚     โ”‚
    โ”‚  โ”‚  - ่งฃๆžๆถˆๆฏๅ†…ๅฎน                            โ”‚     โ”‚
    โ”‚  โ”‚  - ็‰นๆฎŠๅ‘ฝไปคๅค„็†(ๅธฎๅŠฉ)                      โ”‚     โ”‚
    โ”‚  โ”‚  - LLM ่ฐƒ็”จ                                โ”‚     โ”‚
    โ”‚  โ”‚  - ็ป“ๆžœๆ ผๅผๅŒ–                              โ”‚     โ”‚
    โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ”‚
    โ”‚               โ”‚                                      โ”‚
    โ”‚               โ”œโ”€โ”€โ”€โ†’ LLM Client (ๅค็”จ็Žฐๆœ‰)            โ”‚
    โ”‚               โ”‚                                      โ”‚
    โ”‚               โ””โ”€โ”€โ”€โ†’ MCP Server (ๅค็”จ็Žฐๆœ‰)            โ”‚
    โ”‚                                                      โ”‚
    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                          โ”‚
                          โ†“
              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
              โ”‚  Client (ๅฎขๆˆท็ซฏๅฐ่ฃ…)  โ”‚
              โ”‚  - ๅ‘้€ๆ–‡ๆœฌๆถˆๆฏ        โ”‚
              โ”‚  - ๅ‘้€ Markdown ๆถˆๆฏ  โ”‚
              โ”‚  - ๅ‘้€ไบคไบ’ๅผๅก็‰‡      โ”‚
              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๆถˆๆฏๅค„็†ๆต็จ‹

1. ็”จๆˆทๅœจ้ฃžไนฆๅ‘้€ๆถˆๆฏ
   โ†“
2. ้ฃžไนฆๆœๅŠกๅ™จ้€š่ฟ‡ WebSocket ๆŽจ้€ไบ‹ไปถ
   โ†“
3. FeishuStreamServer.handleMessage()
   - ๆถˆๆฏๅŽป้‡ๆฃ€ๆŸฅ
   - ้ชŒ่ฏๆถˆๆฏ็ฑปๅž‹(ไป…ๅค„็†ๆ–‡ๆœฌ)
   โ†“
4. MessageHandler.HandleTextMessage()
   - ่งฃๆžๆถˆๆฏๅ†…ๅฎน
   - ๅˆคๆ–ญๆ˜ฏๅฆไธบ็‰นๆฎŠๅ‘ฝไปค
   โ†“
5. ๅˆ†ๆ”ฏๅค„็†:
   โ”œโ”€ ๅธฎๅŠฉๅ‘ฝไปค โ†’ ่ฟ”ๅ›žๅธฎๅŠฉๆ–‡ๆกฃ
   โ”œโ”€ LLM ๅฏน่ฏ โ†’ ่ฐƒ็”จ LLM Client
   โ””โ”€ ๅ…ถไป– โ†’ ่ฟ”ๅ›ž้ป˜่ฎคๆ็คบ
   โ†“
6. ๆ ผๅผๅŒ–ๅ“ๅบ”ๅนถๅ‘้€
   โ†“
7. Client.SendTextMessage() / SendMarkdownMessage()
   โ†“
8. ็”จๆˆทๅœจ้ฃžไนฆๆ”ถๅˆฐๅ›žๅค

ๆ ธๅฟƒๅŠŸ่ƒฝๅฎž็Žฐ

1. WebSocket ้•ฟ่ฟžๆŽฅ

ๆ–‡ไปถ: internal/server/feishu_stream.go

ๆ ธๅฟƒไปฃ็ :

// ๅˆ›ๅปบไบ‹ไปถๅค„็†ๅ™จ
eventHandler := dispatcher.NewEventDispatcher("", "").
    OnP2MessageReceiveV1(func(ctx context.Context, event *larkim.P2MessageReceiveV1) error {
        return s.handleMessage(ctx, event)
    })

// ๅˆ›ๅปบๅนถๅฏๅŠจ WebSocket ๅฎขๆˆท็ซฏ
s.wsClient = larkws.NewClient(
    s.config.Feishu.AppID,
    s.config.Feishu.AppSecret,
    larkws.WithEventHandler(eventHandler),
)

s.wsClient.Start(s.ctx)

็‰น็‚น:

  • ่‡ชๅŠจ็ฎก็†่ฟžๆŽฅ
  • ่‡ชๅŠจ้‡่ฟžๆœบๅˆถ
  • ไบ‹ไปถ้ฉฑๅŠจๆจกๅผ

2. ๆถˆๆฏๅŽป้‡

ๅฎž็Žฐไฝ็ฝฎ: FeishuStreamServer.handleMessage()

ๆœบๅˆถ:

  • ไฝฟ็”จ sync.Map ๅญ˜ๅ‚จๅทฒๅค„็†ๆถˆๆฏ ID
  • 5 ๅˆ†้’ŸๅŽ่‡ชๅŠจๆธ…็†่ฟ‡ๆœŸ่ฎฐๅฝ•
  • ้˜ฒๆญข้‡ๅคๅค„็†ๅŒไธ€ๆถˆๆฏ

3. LLM ้›†ๆˆ

ๆ–‡ไปถ: internal/feishu/handler.go

ๅฎž็Žฐ:

// ่ฐƒ็”จ LLM ๆตๅผๅฏน่ฏ
responseCh, err := h.llmClient.ChatWithToolsAndStream(ctx, userMessage)

// ๆตๅผๆŽฅๆ”ถๅ“ๅบ”
for content := range responseCh {
    fullResponse.WriteString(content)
}

็‰น็‚น:

  • ๆ”ฏๆŒๆตๅผๅ“ๅบ”
  • ้›†ๆˆ MCP ๅทฅๅ…ท่ฐƒ็”จ
  • ่‡ชๅŠจๆ ผๅผๅŒ–่พ“ๅ‡บ

4. ๆถˆๆฏๅ‘้€

ๆ–‡ไปถ: internal/feishu/client.go

ๆ”ฏๆŒ็š„ๆถˆๆฏ็ฑปๅž‹:

  1. ๆ–‡ๆœฌๆถˆๆฏ - SendTextMessage()
  2. Markdown ๆถˆๆฏ - SendMarkdownMessage() (ๅฏŒๆ–‡ๆœฌ)
  3. ไบคไบ’ๅผๅก็‰‡ - SendInteractiveCard() (้ข„็•™)

้…็ฝฎ่ฏดๆ˜Ž

้…็ฝฎ็ป“ๆž„

type FeishuConfig struct {
    Enabled               bool   `mapstructure:"enabled"`
    AppID                 string `mapstructure:"app_id"`
    AppSecret             string `mapstructure:"app_secret"`
    EnableLLMConversation bool   `mapstructure:"enable_llm_conversation"`
}

้…็ฝฎ็คบไพ‹

feishu:
  enabled: true
  app_id: "cli_xxxxxxxxxxxxxxxx"
  app_secret: "xxxxxxxxxxxxxxxxxxxxx"
  enable_llm_conversation: true

llm:
  enabled: true
  model: "DeepSeek-V3"
  api_key: "YOUR_LLM_API_KEY"
  base_url: ""

ไธŽ้’‰้’‰ๅฎž็Žฐ็š„ๅฏนๆฏ”

็‰นๆ€ง ้’‰้’‰ ้ฃžไนฆ ๅค‡ๆณจ
่ฟžๆŽฅๆ–นๅผ Stream SDK WebSocket ้ƒฝๆ˜ฏ้•ฟ่ฟžๆŽฅ
SDK ๅŒ… ้˜ฟ้‡Œไบ‘ SDK ้ฃžไนฆๅฎ˜ๆ–น SDK ้ฃžไนฆ SDK ๆ›ด็ฎ€ๆด
Token ็ฎก็† ๆ‰‹ๅŠจ็ผ“ๅญ˜ SDK ่‡ชๅŠจ็ฎก็† ้ฃžไนฆๆ›ดๆ–นไพฟ
ๆถˆๆฏๅ‘้€ ๆ”ฏๆŒๅก็‰‡ ๆ”ฏๆŒๅคš็งๆ ผๅผ ๅŠŸ่ƒฝ็›ธๅฝ“
้…็ฝฎ้กน 5 ้กน 3 ้กน ้ฃžไนฆๆ›ด็ฎ€ๆด
ไปฃ็ ่กŒๆ•ฐ ~800 ่กŒ ~500 ่กŒ ้ฃžไนฆไปฃ็ ๆ›ดๅฐ‘

ๆŠ€ๆœฏไบฎ็‚น

1. ๆžถๆž„ๅค็”จ

  • ๅฎŒๅ…จๅค็”จ็Žฐๆœ‰็š„ LLM Client
  • ๅฎŒๅ…จๅค็”จ็Žฐๆœ‰็š„ MCP Server
  • ไธŽ้’‰้’‰ๆœๅŠกๅนถ่กŒ่ฟ่กŒ,ไบ’ไธๅนฒๆ‰ฐ

2. ไปฃ็ ็ฎ€ๆด

  • ไฝฟ็”จ้ฃžไนฆๅฎ˜ๆ–น SDK,API ่ฐƒ็”จ็ฎ€ๅ•
  • Token ็ฎก็†็”ฑ SDK ่‡ชๅŠจๅค„็†
  • ไปฃ็ ๆ€ป้‡็บฆ 500 ่กŒ

3. ๆ˜“ไบŽๆ‰ฉๅฑ•

  • ้ข„็•™ไบ†ไบคไบ’ๅผๅก็‰‡ๆŽฅๅฃ
  • ๅฏ่ฝปๆพๆทปๅŠ ๆ–ฐ็š„ๆถˆๆฏ็ฑปๅž‹ๆ”ฏๆŒ
  • ๅฏๆ‰ฉๅฑ•็”จๆˆทไฟกๆฏ่Žทๅ–ๅŠŸ่ƒฝ

4. ็”Ÿไบงๅฐฑ็ปช

  • ๅฎŒๅ–„็š„้”™่ฏฏๅค„็†
  • ๆถˆๆฏๅŽป้‡ๆœบๅˆถ
  • ่‡ชๅŠจๆธ…็†ๆœบๅˆถ
  • ไผ˜้›…ๅœๆญขๆ”ฏๆŒ

ๆต‹่ฏ•ๅปบ่ฎฎ

ๅฟซ้€Ÿ้ชŒ่ฏๆต‹่ฏ•

ๅ‰็ฝฎๆกไปถ:

  1. ๅœจ้ฃžไนฆๅผ€ๆ”พๅนณๅฐๅˆ›ๅปบๅบ”็”จ
  2. ้…็ฝฎ config.yaml
  3. ็ผ–่ฏ‘ๅนถๅฏๅŠจ ZenOps

ๆต‹่ฏ•ๆญฅ้ชค:

1. ๅฏๅŠจ้ชŒ่ฏ

./zenops run --config config.yaml

้ข„ๆœŸ่พ“ๅ‡บ:

[INFO] Starting Feishu Stream server...
[INFO] Feishu client created, app_id cli_xxx
[INFO] Feishu Stream server started successfully

2. ๅŠŸ่ƒฝๆต‹่ฏ•

ๆต‹่ฏ•้กน ๆ“ไฝœ ้ข„ๆœŸ็ป“ๆžœ
็ง่Š-ๅธฎๅŠฉ ๅ‘้€ "ๅธฎๅŠฉ" ่ฟ”ๅ›žๅธฎๅŠฉๆ–‡ๆกฃ
็พค่Š-ๅธฎๅŠฉ @ๆœบๅ™จไบบ ๅ‘้€ "ๅธฎๅŠฉ" ่ฟ”ๅ›žๅธฎๅŠฉๆ–‡ๆกฃ
LLM ๅฏน่ฏ ๅ‘้€ "ไฝ ๅฅฝ" LLM ็”Ÿๆˆๅ›žๅค
ไบ‘ๅนณๅฐๆŸฅ่ฏข ๅ‘้€ "ๆŸฅ่ฏข้˜ฟ้‡Œไบ‘ ECS" ่ฟ”ๅ›žๅฎžไพ‹ๅˆ—่กจ

่ฏฆ็ป†ๆต‹่ฏ•ๆธ…ๅ•่ฏทๅ‚่€ƒ: feishu-test-checklist.md


ๆ–‡ๆกฃ่ฏดๆ˜Ž

ๅทฒๆไพ›ๅฎŒๆ•ด็š„ๆ–‡ๆกฃๆ”ฏๆŒ:

1. ๆŽฅๅ…ฅๆŒ‡ๅ—

ๆ–‡ไปถ: docs/feishu-setup-guide.md

ๅ†…ๅฎน:

  • ้ฃžไนฆๅบ”็”จๅˆ›ๅปบๆญฅ้ชค
  • ๆƒ้™้…็ฝฎ่ฏดๆ˜Ž
  • ZenOps ้…็ฝฎ่ฏดๆ˜Ž
  • ๅŠŸ่ƒฝๆต‹่ฏ•ๆŒ‡ๅ—
  • ๅธธ่ง้—ฎ้ข˜ๆŽ’ๆŸฅ
  • ็”Ÿไบง้ƒจ็ฝฒๅปบ่ฎฎ

2. ๆต‹่ฏ•ๆธ…ๅ•

ๆ–‡ไปถ: docs/feishu-test-checklist.md

ๅ†…ๅฎน:

  • ๅ‰็ฝฎๆกไปถๆฃ€ๆŸฅ
  • ้…็ฝฎ้ชŒ่ฏ
  • 17 ้กนๅŠŸ่ƒฝๆต‹่ฏ•
  • ๆ€ง่ƒฝๆต‹่ฏ•
  • ้”™่ฏฏๅค„็†ๆต‹่ฏ•
  • ๆต‹่ฏ•็ป“ๆžœ่ฎฐๅฝ•่กจ

3. ๆŠ€ๆœฏ่ฏดๆ˜Ž

ๆ–‡ไปถ: docs/feishu-integration.md

ๅ†…ๅฎน:

  • ๆ ธๅฟƒ็‰นๆ€ง่ฏดๆ˜Ž
  • ๆžถๆž„่ฎพ่ฎกๅ›พ
  • ๅฎž็Žฐ็ป†่Š‚
  • ไธŽ้’‰้’‰ๅฏนๆฏ”
  • ๆ€ง่ƒฝ็‰น็‚น
  • ๆ‰ฉๅฑ•ๆ€ง่ฏดๆ˜Ž

ๅทฒ็Ÿฅ้™ๅˆถ

ๅฝ“ๅ‰็‰ˆๆœฌ้™ๅˆถ

  1. ๆถˆๆฏ็ฑปๅž‹

    • โœ… ๆ”ฏๆŒๆ–‡ๆœฌๆถˆๆฏ
    • โŒ ๆš‚ไธๆ”ฏๆŒๅ›พ็‰‡ใ€ๆ–‡ไปถ็ญ‰ๅฏŒๅช’ไฝ“
    • โŒ ๆš‚ไธๆ”ฏๆŒ่ฏญ้Ÿณๆถˆๆฏ
  2. ไบคไบ’ๆ–นๅผ

    • โœ… ๆ”ฏๆŒๅ•่Šๅ’Œ็พค่Š
    • โŒ ๆš‚ไธๆ”ฏๆŒไบคไบ’ๅผๅก็‰‡
    • โŒ ๆš‚ไธๆ”ฏๆŒๆŒ‰้’ฎๅ›ž่ฐƒ
  3. ไผš่ฏ็ฎก็†

    • โœ… ๆ”ฏๆŒๅ•ๆฌก้—ฎ็ญ”
    • โŒ ๆš‚ไธๆ”ฏๆŒๅคš่ฝฎๅฏน่ฏไธŠไธ‹ๆ–‡
    • โŒ ๆš‚ไธๆ”ฏๆŒไผš่ฏๅކๅฒ
  4. ๆƒ้™ๆŽงๅˆถ

    • โŒ ๆš‚ๆ— ็”จๆˆท็™ฝๅๅ•
    • โŒ ๆš‚ๆ— ็พค็ป„ๆƒ้™ๆŽงๅˆถ
    • โŒ ๆš‚ๆ— ไฝฟ๏ฟฝ๏ฟฝ้ข‘็އ้™ๅˆถ

้ฃžไนฆๅนณๅฐ้™ๅˆถ

  • ๆถˆๆฏๅ‘้€้ข‘็އ: 100 ๆฌก/ๅˆ†้’Ÿ(ไผไธšๅบ”็”จ)
  • Token ๆœ‰ๆ•ˆๆœŸ: 2 ๅฐๆ—ถ(SDK ่‡ชๅŠจๅˆทๆ–ฐ)
  • WebSocket ่ฟžๆŽฅ: ้œ€่ฆ็จณๅฎš็ฝ‘็ปœ

ๅŽ็ปญไผ˜ๅŒ–ๅปบ่ฎฎ

็ŸญๆœŸไผ˜ๅŒ– (1-2 ๅ‘จ)

  1. ๅขžๅŠ ็”จๆˆทไฟกๆฏ่Žทๅ–

    • ๅœจๆถˆๆฏๅค„็†ๆ—ถ่Žทๅ–็”จๆˆทๆ˜ต็งฐ
    • ่ฎฐๅฝ•็”จๆˆทไฟกๆฏ็”จไบŽๆ—ฅๅฟ—
  2. ๅฎŒๅ–„้”™่ฏฏๆ็คบ

    • ๆ›ดๅ‹ๅฅฝ็š„้”™่ฏฏๆถˆๆฏ
    • ๆไพ›้—ฎ้ข˜ๆŽ’ๆŸฅๅปบ่ฎฎ
  3. ๅขžๅŠ ๆ—ฅๅฟ—็บงๅˆซๆŽงๅˆถ

    • ๆ”ฏๆŒๅŠจๆ€่ฐƒๆ•ดๆ—ฅๅฟ—็บงๅˆซ
    • ๅ‡ๅฐ‘ Debug ๆ—ฅๅฟ—่พ“ๅ‡บ

ไธญๆœŸไผ˜ๅŒ– (1-2 ๆœˆ)

  1. ๆ”ฏๆŒ้ฃžไนฆ AI ๆตๅผๅก็‰‡

    • ๅ‚่€ƒ้’‰้’‰็š„ๅก็‰‡ๅฎž็Žฐ
    • ๅฎž็Žฐๆ‰“ๅญ—ๆœบๆ•ˆๆžœ
  2. ๆ”ฏๆŒๅคš่ฝฎๅฏน่ฏ

    • ่ฎฐๅฝ•ไผš่ฏไธŠไธ‹ๆ–‡
    • ๆ”ฏๆŒไธŠไธ‹ๆ–‡ๅ…ณ่”ๆŸฅ่ฏข
  3. ๆƒ้™ๆŽงๅˆถ

    • ็”จๆˆท็™ฝๅๅ•
    • ็พค็ป„ๆƒ้™็ฎก็†

้•ฟๆœŸไผ˜ๅŒ– (3-6 ๆœˆ)

  1. ๅฏŒๅช’ไฝ“ๆ”ฏๆŒ

    • ๆ”ฏๆŒๅ›พ็‰‡ๆถˆๆฏ
    • ๆ”ฏๆŒๆ–‡ไปถไธŠไผ /ไธ‹่ฝฝ
  2. ไบคไบ’ๅขžๅผบ

    • ไบคไบ’ๅผๅก็‰‡
    • ๆŒ‰้’ฎๅ›ž่ฐƒๅค„็†
  3. ็›‘ๆŽงๅ‘Š่ญฆ

    • Prometheus ๆŒ‡ๆ ‡ๅฏผๅ‡บ
    • Grafana ไปช่กจ็›˜

ๆ€ป็ป“

ๅฎŒๆˆๆƒ…ๅ†ต

  • โœ… ๆ ธๅฟƒๅŠŸ่ƒฝๅฎž็Žฐ (100%)
  • โœ… ไปฃ็ ็ผ–่ฏ‘้€š่ฟ‡ (100%)
  • โœ… ๆ–‡ๆกฃ็ผ–ๅ†™ๅฎŒๆˆ (100%)
  • โณ ๅŠŸ่ƒฝๆต‹่ฏ• (ๅพ…ๆ‰ง่กŒ)
  • โณ ็”Ÿไบง้ƒจ็ฝฒ (ๅพ…ๆ‰ง่กŒ)

ไปฃ็ ่ดจ้‡

  • ๅฏ่ฏปๆ€ง: โญโญโญโญโญ (5/5)
  • ๅฏ็ปดๆŠคๆ€ง: โญโญโญโญโญ (5/5)
  • ๆ‰ฉๅฑ•ๆ€ง: โญโญโญโญโ˜† (4/5)
  • ๆ€ง่ƒฝ: โญโญโญโญโ˜† (4/5)
  • ๆ–‡ๆกฃ: โญโญโญโญโญ (5/5)

ๆŽจ่ไฝฟ็”จๅœบๆ™ฏ

โœ… ้€‚ๅˆ็š„ๅœบๆ™ฏ:

  • ไผไธšๅ†…้ƒจ่ฟ็ปดๅ›ข้˜Ÿ
  • ้œ€่ฆ้ฃžไนฆๆœบๅ™จไบบไบคไบ’
  • ๅคšไบ‘ๅนณๅฐ็ฎก็†
  • CI/CD ๆŸฅ่ฏข

โŒ ไธ้€‚ๅˆ็š„ๅœบๆ™ฏ:

  • ้œ€่ฆๅคๆ‚ไบคไบ’ๅผๅก็‰‡
  • ้œ€่ฆๅคš่ฝฎๅฏน่ฏไธŠไธ‹ๆ–‡
  • ้œ€่ฆๅฏŒๅช’ไฝ“ๆถˆๆฏๅค„็†

ไธ‹ไธ€ๆญฅ

  1. ็ซ‹ๅณๆ‰ง่กŒ: ๆŒ‰็…งๆต‹่ฏ•ๆธ…ๅ•่ฟ›่กŒๅŠŸ่ƒฝ๏ฟฝ๏ฟฝ่ฏ•
  2. ้ชŒ่ฏ้€š่ฟ‡ๅŽ: ้ƒจ็ฝฒๅˆฐๆต‹่ฏ•็Žฏๅขƒ
  3. ็จณๅฎš่ฟ่กŒๅŽ: ๆŽจๅนฟๅˆฐ็”Ÿไบง็Žฏๅขƒ

ๅฎž็Žฐ่€…: Claude (AI Assistant) ้กน็›ฎ: ZenOps ๆ—ฅๆœŸ: 2025-12-16 ็‰ˆๆœฌ: v1.0