ๅทฒๆๅๅฐ้ฃไนฆๆบๅจไบบๆฅๅ ฅๅฐ ZenOps ้กน็ฎ,ๅฎ็ฐไบไธ้้ๆบๅจไบบ็ธไผผ็ๆบ่ฝไบคไบ่ฝๅใ
ๅฎๆๆถ้ด: 2025-12-16 ๅฎ็ฐๆนๅผ: ๅ่ PandaWiki ๅผๆบ้กน็ฎ,็ปๅ ZenOps ็ฐๆๆถๆ ็ผ่ฏ็ถๆ: โ ็ผ่ฏๆๅ ไปฃ็ ็ถๆ: โ ๅทฒๅฎๆ,ๅพ ๆต่ฏ
| ๆไปถ่ทฏๅพ | ่ฏดๆ | ่กๆฐ |
|---|---|---|
internal/feishu/client.go |
้ฃไนฆ API ๅฎขๆท็ซฏ,ๅฐ่ฃ ๆถๆฏๅ้ | 165 |
internal/feishu/handler.go |
ๆถๆฏๅค็ๅจ,ๅค็็จๆทๆถๆฏๅ LLM ่ฐ็จ | 190 |
internal/server/feishu_stream.go |
้ฃไนฆ Stream ๆๅก,WebSocket ่ฟๆฅ็ฎก็ | 152 |
| ๆไปถ่ทฏๅพ | ๏ฟฝ๏ฟฝ๏ฟฝๆ |
|---|---|
internal/config/config.go |
ๆฐๅข FeishuConfig ้ ็ฝฎ็ปๆ |
config.example.yaml |
ๆดๆฐ้ ็ฝฎ็คบไพ,ๆทปๅ ้ฃไนฆ้ ็ฝฎ |
| ๆไปถ่ทฏๅพ | ๅๆด่ฏดๆ |
|---|---|
cmd/root.go |
้ๆ้ฃไนฆๆๅกๅฏๅจ้ป่พ |
| ๆไปถ่ทฏๅพ | ่ฏดๆ | ้กตๆฐ |
|---|---|---|
docs/feishu-setup-guide.md |
้ฃไนฆๆบๅจไบบๆฅๅ ฅๆๅ(่ฏฆ็ป) | ~400 ่ก |
docs/feishu-test-checklist.md |
ๅ่ฝๆต่ฏๆธ ๅ | ~450 ่ก |
docs/feishu-integration.md |
ๆๆฏๅฎ็ฐ่ฏดๆ | ~450 ่ก |
docs/feishu-implementation-summary.md |
ๆฌๆๆกฃ | ~200 ่ก |
| ไพ่ตๅ | ็ๆฌ |
|---|---|
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. ็จๆทๅจ้ฃไนฆๆถๅฐๅๅค
ๆไปถ: 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)็น็น:
- ่ชๅจ็ฎก็่ฟๆฅ
- ่ชๅจ้่ฟๆบๅถ
- ไบไปถ้ฉฑๅจๆจกๅผ
ๅฎ็ฐไฝ็ฝฎ: FeishuStreamServer.handleMessage()
ๆบๅถ:
- ไฝฟ็จ
sync.Mapๅญๅจๅทฒๅค็ๆถๆฏ ID - 5 ๅ้ๅ่ชๅจๆธ ็่ฟๆ่ฎฐๅฝ
- ้ฒๆญข้ๅคๅค็ๅไธๆถๆฏ
ๆไปถ: internal/feishu/handler.go
ๅฎ็ฐ:
// ่ฐ็จ LLM ๆตๅผๅฏน่ฏ
responseCh, err := h.llmClient.ChatWithToolsAndStream(ctx, userMessage)
// ๆตๅผๆฅๆถๅๅบ
for content := range responseCh {
fullResponse.WriteString(content)
}็น็น:
- ๆฏๆๆตๅผๅๅบ
- ้ๆ MCP ๅทฅๅ ท่ฐ็จ
- ่ชๅจๆ ผๅผๅ่พๅบ
ๆไปถ: internal/feishu/client.go
ๆฏๆ็ๆถๆฏ็ฑปๅ:
- ๆๆฌๆถๆฏ -
SendTextMessage() - Markdown ๆถๆฏ -
SendMarkdownMessage()(ๅฏๆๆฌ) - ไบคไบๅผๅก็ -
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 ่ก | ้ฃไนฆไปฃ็ ๆดๅฐ |
- ๅฎๅ จๅค็จ็ฐๆ็ LLM Client
- ๅฎๅ จๅค็จ็ฐๆ็ MCP Server
- ไธ้้ๆๅกๅนถ่ก่ฟ่ก,ไบไธๅนฒๆฐ
- ไฝฟ็จ้ฃไนฆๅฎๆน SDK,API ่ฐ็จ็ฎๅ
- Token ็ฎก็็ฑ SDK ่ชๅจๅค็
- ไปฃ็ ๆป้็บฆ 500 ่ก
- ้ข็ไบไบคไบๅผๅก็ๆฅๅฃ
- ๅฏ่ฝปๆพๆทปๅ ๆฐ็ๆถๆฏ็ฑปๅๆฏๆ
- ๅฏๆฉๅฑ็จๆทไฟกๆฏ่ทๅๅ่ฝ
- ๅฎๅ็้่ฏฏๅค็
- ๆถๆฏๅป้ๆบๅถ
- ่ชๅจๆธ ็ๆบๅถ
- ไผ้ ๅๆญขๆฏๆ
ๅ็ฝฎๆกไปถ:
- ๅจ้ฃไนฆๅผๆพๅนณๅฐๅๅปบๅบ็จ
- ้
็ฝฎ
config.yaml - ็ผ่ฏๅนถๅฏๅจ ZenOps
ๆต่ฏๆญฅ้ชค:
./zenops run --config config.yaml้ขๆ่พๅบ:
[INFO] Starting Feishu Stream server...
[INFO] Feishu client created, app_id cli_xxx
[INFO] Feishu Stream server started successfully
| ๆต่ฏ้กน | ๆไฝ | ้ขๆ็ปๆ |
|---|---|---|
| ็ง่-ๅธฎๅฉ | ๅ้ "ๅธฎๅฉ" | ่ฟๅๅธฎๅฉๆๆกฃ |
| ็พค่-ๅธฎๅฉ | @ๆบๅจไบบ ๅ้ "ๅธฎๅฉ" | ่ฟๅๅธฎๅฉๆๆกฃ |
| LLM ๅฏน่ฏ | ๅ้ "ไฝ ๅฅฝ" | LLM ็ๆๅๅค |
| ไบๅนณๅฐๆฅ่ฏข | ๅ้ "ๆฅ่ฏข้ฟ้ไบ ECS" | ่ฟๅๅฎไพๅ่กจ |
่ฏฆ็ปๆต่ฏๆธ ๅ่ฏทๅ่: feishu-test-checklist.md
ๅทฒๆไพๅฎๆด็ๆๆกฃๆฏๆ:
ๆไปถ: docs/feishu-setup-guide.md
ๅ ๅฎน:
- ้ฃไนฆๅบ็จๅๅปบๆญฅ้ชค
- ๆ้้ ็ฝฎ่ฏดๆ
- ZenOps ้ ็ฝฎ่ฏดๆ
- ๅ่ฝๆต่ฏๆๅ
- ๅธธ่ง้ฎ้ขๆๆฅ
- ็ไบง้จ็ฝฒๅปบ่ฎฎ
ๆไปถ: docs/feishu-test-checklist.md
ๅ ๅฎน:
- ๅ็ฝฎๆกไปถๆฃๆฅ
- ้ ็ฝฎ้ช่ฏ
- 17 ้กนๅ่ฝๆต่ฏ
- ๆง่ฝๆต่ฏ
- ้่ฏฏๅค็ๆต่ฏ
- ๆต่ฏ็ปๆ่ฎฐๅฝ่กจ
ๆไปถ: docs/feishu-integration.md
ๅ ๅฎน:
- ๆ ธๅฟ็นๆง่ฏดๆ
- ๆถๆ่ฎพ่ฎกๅพ
- ๅฎ็ฐ็ป่
- ไธ้้ๅฏนๆฏ
- ๆง่ฝ็น็น
- ๆฉๅฑๆง่ฏดๆ
-
ๆถๆฏ็ฑปๅ
- โ ๆฏๆๆๆฌๆถๆฏ
- โ ๆไธๆฏๆๅพ็ใๆไปถ็ญๅฏๅชไฝ
- โ ๆไธๆฏๆ่ฏญ้ณๆถๆฏ
-
ไบคไบๆนๅผ
- โ ๆฏๆๅ่ๅ็พค่
- โ ๆไธๆฏๆไบคไบๅผๅก็
- โ ๆไธๆฏๆๆ้ฎๅ่ฐ
-
ไผ่ฏ็ฎก็
- โ ๆฏๆๅๆฌก้ฎ็ญ
- โ ๆไธๆฏๆๅค่ฝฎๅฏน่ฏไธไธๆ
- โ ๆไธๆฏๆไผ่ฏๅๅฒ
-
ๆ้ๆงๅถ
- โ ๆๆ ็จๆท็ฝๅๅ
- โ ๆๆ ็พค็ปๆ้ๆงๅถ
- โ ๆๆ ไฝฟ๏ฟฝ๏ฟฝ้ข็้ๅถ
- ๆถๆฏๅ้้ข็: 100 ๆฌก/ๅ้(ไผไธๅบ็จ)
- Token ๆๆๆ: 2 ๅฐๆถ(SDK ่ชๅจๅทๆฐ)
- WebSocket ่ฟๆฅ: ้่ฆ็จณๅฎ็ฝ็ป
-
ๅขๅ ็จๆทไฟกๆฏ่ทๅ
- ๅจๆถๆฏๅค็ๆถ่ทๅ็จๆทๆต็งฐ
- ่ฎฐๅฝ็จๆทไฟกๆฏ็จไบๆฅๅฟ
-
ๅฎๅ้่ฏฏๆ็คบ
- ๆดๅๅฅฝ็้่ฏฏๆถๆฏ
- ๆไพ้ฎ้ขๆๆฅๅปบ่ฎฎ
-
ๅขๅ ๆฅๅฟ็บงๅซๆงๅถ
- ๆฏๆๅจๆ่ฐๆดๆฅๅฟ็บงๅซ
- ๅๅฐ Debug ๆฅๅฟ่พๅบ
-
ๆฏๆ้ฃไนฆ AI ๆตๅผๅก็
- ๅ่้้็ๅก็ๅฎ็ฐ
- ๅฎ็ฐๆๅญๆบๆๆ
-
ๆฏๆๅค่ฝฎๅฏน่ฏ
- ่ฎฐๅฝไผ่ฏไธไธๆ
- ๆฏๆไธไธๆๅ ณ่ๆฅ่ฏข
-
ๆ้ๆงๅถ
- ็จๆท็ฝๅๅ
- ็พค็ปๆ้็ฎก็
-
ๅฏๅชไฝๆฏๆ
- ๆฏๆๅพ็ๆถๆฏ
- ๆฏๆๆไปถไธไผ /ไธ่ฝฝ
-
ไบคไบๅขๅผบ
- ไบคไบๅผๅก็
- ๆ้ฎๅ่ฐๅค็
-
็ๆงๅ่ญฆ
- Prometheus ๆๆ ๅฏผๅบ
- Grafana ไปช่กจ็
- โ ๆ ธๅฟๅ่ฝๅฎ็ฐ (100%)
- โ ไปฃ็ ็ผ่ฏ้่ฟ (100%)
- โ ๆๆกฃ็ผๅๅฎๆ (100%)
- โณ ๅ่ฝๆต่ฏ (ๅพ ๆง่ก)
- โณ ็ไบง้จ็ฝฒ (ๅพ ๆง่ก)
- ๅฏ่ฏปๆง: โญโญโญโญโญ (5/5)
- ๅฏ็ปดๆคๆง: โญโญโญโญโญ (5/5)
- ๆฉๅฑๆง: โญโญโญโญโ (4/5)
- ๆง่ฝ: โญโญโญโญโ (4/5)
- ๆๆกฃ: โญโญโญโญโญ (5/5)
โ ้ๅ็ๅบๆฏ:
- ไผไธๅ ้จ่ฟ็ปดๅข้
- ้่ฆ้ฃไนฆๆบๅจไบบไบคไบ
- ๅคไบๅนณๅฐ็ฎก็
- CI/CD ๆฅ่ฏข
โ ไธ้ๅ็ๅบๆฏ:
- ้่ฆๅคๆไบคไบๅผๅก็
- ้่ฆๅค่ฝฎๅฏน่ฏไธไธๆ
- ้่ฆๅฏๅชไฝๆถๆฏๅค็
- ็ซๅณๆง่ก: ๆ็ งๆต่ฏๆธ ๅ่ฟ่กๅ่ฝ๏ฟฝ๏ฟฝ่ฏ
- ้ช่ฏ้่ฟๅ: ้จ็ฝฒๅฐๆต่ฏ็ฏๅข
- ็จณๅฎ่ฟ่กๅ: ๆจๅนฟๅฐ็ไบง็ฏๅข
ๅฎ็ฐ่ : Claude (AI Assistant) ้กน็ฎ: ZenOps ๆฅๆ: 2025-12-16 ็ๆฌ: v1.0