PlanTask
PlanTask ไธญ้ดไปถ
adk/middlewares/plantask
๐ก ๆฌไธญ้ดไปถๅจ v0.8.0 ็ๆฌๅผๅ ฅใ
ๆฆ่ฟฐ
plantask ๆฏไธไธชไปปๅก็ฎก็ไธญ้ดไปถ๏ผ่ฎฉ Agent ๅฏไปฅๅๅปบๅ็ฎก็ไปปๅกๅ่กจใไธญ้ดไปถ้่ฟ BeforeAgent ้ฉๅญๆณจๅ
ฅๅไธชๅทฅๅ
ท๏ผ
- TaskCreate: ๅๅปบไปปๅก
- TaskGet: ๆฅ็ไปปๅก่ฏฆๆ
- TaskUpdate: ๆดๆฐไปปๅก
- TaskList: ๅๅบๆๆไปปๅก
ไธป่ฆ็จ้๏ผ
- ่ท่ธชๅคๆไปปๅก็่ฟๅบฆ
- ๆๅคงไปปๅกๆๆๅฐๆญฅ้ชค
- ็ฎก็ไปปๅก้ด็ไพ่ตๅ ณ็ณป
ๆถๆ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Agent โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ BeforeAgent: ๆณจๅ
ฅไปปๅกๅทฅๅ
ท โ โ
โ โ - TaskCreate โ โ
โ โ - TaskGet โ โ
โ โ - TaskUpdate โ โ
โ โ - TaskList โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Backend โ
โ โ
โ ๅญๅจ็ปๆ: โ
โ baseDir/ โ
โ โโโ .highwatermark # ID ่ฎกๆฐๅจ โ
โ โโโ 1.json # ไปปๅก #1 โ
โ โโโ 2.json # ไปปๅก #2 โ
โ โโโ ... โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
้ ็ฝฎ
type Config struct {
Backend Backend // ๅญๅจๅ็ซฏ๏ผๅฟ
ๅกซ
BaseDir string // ไปปๅกๆไปถ็ฎๅฝ๏ผๅฟ
ๅกซ
}
- ๆณจๆ่ฟไธช Backend ็ๅฎ็ฐ๏ผๅบ่ฏฅๆฏ session ็ปดๅบฆ้็ฆป็๏ผไธๅ็ session ๅฏนๅบไธๅ็ Backend๏ผไปปๅกๅ่กจ๏ผ
Backend ๆฅๅฃ
type Backend interface {
LsInfo(ctx context.Context, req *LsInfoRequest) ([]FileInfo, error)
Read(ctx context.Context, req *ReadRequest) (string, error)
Write(ctx context.Context, req *WriteRequest) error
Delete(ctx context.Context, req *DeleteRequest) error
}
ไปปๅก็ปๆ
type task struct {
ID string `json:"id"` // ไปปๅก ID
Subject string `json:"subject"` // ๆ ้ข
Description string `json:"description"` // ๆ่ฟฐ
Status string `json:"status"` // ็ถๆ
Blocks []string `json:"blocks"` // ้ปๅกๅชไบไปปๅก
BlockedBy []string `json:"blockedBy"` // ่ขซๅชไบไปปๅก้ปๅก
ActiveForm string `json:"activeForm"` // ่ฟ่กๆถๆๆก
Owner string `json:"owner"` // ่ด่ดฃ agent
Metadata map[string]any `json:"metadata"` // ่ชๅฎไนๆฐๆฎ
}
็ถๆ
| ็ถๆ | ่ฏดๆ |
pending | ๅพ ๅค็๏ผ้ป่ฎค๏ผ |
in_progress | ่ฟ่กไธญ |
completed | ๅทฒๅฎๆ |
deleted | ๅ ้ค๏ผไผๅ ๆๆไปถ๏ผ |
็ถๆๆต่ฝฌ๏ผpending โ in_progress โ completed๏ผไปปไฝ็ถๆ้ฝๅฏไปฅ็ดๆฅ deletedใ
ๅทฅๅ ท
TaskCreate
ๅๅปบไปปๅกใ
| ๅๆฐ | ็ฑปๅ | ๅฟ ๅกซ | ่ฏดๆ |
subject | string | ๆฏ | ๆ ้ข |
description | string | ๆฏ | ๆ่ฟฐ |
activeForm | string | ๅฆ | ่ฟ่กๆถๆๆก๏ผๆฏๅฆ"ๆญฃๅจ่ฟ่กๆต่ฏ" |
metadata | object | ๅฆ | ่ชๅฎไนๆฐๆฎ |
ไปไนๆถๅ็จ๏ผ
- ไปปๅกๆฏ่พๅคๆ๏ผๆ 3 ๆญฅไปฅไธ
- ็จๆท็ปไบไธๅ ไบๆ ่ฆๅ
- ้่ฆ่ฎฉ็จๆท็ๅฐ่ฟๅบฆ
ไปไนๆถๅไธ็จ๏ผ
- ๅฐฑไธไธช็ฎๅไปปๅก
- ไธไธคไธๅฐฑ่ฝๆๅฎ็ไบ
TaskGet
ๆฅ็ไปปๅก่ฏฆๆ ใ
| ๅๆฐ | ็ฑปๅ | ๅฟ ๅกซ | ่ฏดๆ |
taskId | string | ๆฏ | ไปปๅก ID |
่ฟๅไปปๅก็ๅฎๆดไฟกๆฏ๏ผๆ ้ขใๆ่ฟฐใ็ถๆใไพ่ตๅ ณ็ณป็ญใ
TaskUpdate
ๆดๆฐไปปๅกใ
| ๅๆฐ | ็ฑปๅ | ๅฟ ๅกซ | ่ฏดๆ |
taskId | string | ๆฏ | ไปปๅก ID |
subject | string | ๅฆ | ๆฐๆ ้ข |
description | string | ๅฆ | ๆฐๆ่ฟฐ |
activeForm | string | ๅฆ | ๆฐ็่ฟ่กๆถๆๆก |
status | string | ๅฆ | ๆฐ็ถๆ |
addBlocks | []string | ๅฆ | ๆทปๅ ่ขซ้ปๅก็ไปปๅก |
addBlockedBy | []string | ๅฆ | ๆทปๅ ้ปๅก่ชๅทฑ็ไปปๅก |
owner | string | ๅฆ | ่ด่ดฃ agent |
metadata | object | ๅฆ | ่ชๅฎไนๆฐๆฎ๏ผ่ฎพ null ๅ ้ค๏ผ |
ๆณจๆ๏ผ
status: "deleted"ไผ็ดๆฅๅ ๆไปปๅกๆไปถ- ๅ ไพ่ตๆถไผๆฃๆฅๅพช็ฏไพ่ต
- ๆๆไปปๅก้ฝๅฎๆๅไผ่ชๅจๆธ ็
TaskList
ๅๅบๆๆไปปๅก๏ผไธ้่ฆๅๆฐใ
่ฟๅๆฏไธชไปปๅก็ๆ่ฆ๏ผIDใ็ถๆใๆ ้ขใ่ด่ดฃ agentใไพ่ตๅ ณ็ณปใ
ไฝฟ็จ็คบไพ
ctx := context.Background()
// plantask middleware ๆญฃๅธธๆ
ๅตไธๅบ่ฏฅ session ็ปดๅบฆ็
// ไธๅ็ session ๅฏนๅบไธๅ็ไปปๅกๅ่กจ
middleware, err := plantask.New(ctx, &plantask.Config{
Backend: myBackend,
BaseDir: "/tasks",
})
if err != nil {
return err
}
agent, err := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Model: myModel,
Handlers: []adk.ChatModelAgentMiddleware{middleware},
})
ๅ ธๅๆต็จ
1. ๆถๅฐๅคๆไปปๅก
โ
โผ
2. TaskCreate ๅๅปบไปปๅก
- #1: ๅๆ้ๆฑ
- #2: ๅไปฃ็
โ
โผ
3. TaskUpdate ่ฎพ็ฝฎไพ่ต
- #2 ไพ่ต #1
- #3 ไพ่ต #2
โ
โผ
4. TaskList ็็ๆๅฅไปปๅก
โ
โผ
5. TaskUpdate ๅผๅงๅนฒๆดป
- #1 ๆนๆ in_progress
โ
โผ
6. ๅนฒๅฎไบ TaskUpdate
- #1 ๆนๆ completed
โ
โผ
7. ๅพช็ฏ 4-6 ็ดๅฐๅ
จ้จๅฎๆ
โ
โผ
8. ่ชๅจๆธ
็
ไพ่ต็ฎก็
- blocks: ๆๅฎๆไบ๏ผ่ฟไบไปปๅกๆ่ฝๅผๅง
- blockedBy: ่ฟไบไปปๅกๅฎๆไบ๏ผๆๆ่ฝๅผๅง
Task #1 (blocks: ["2"]) โโโโโบ Task #2 (blockedBy: ["1"])
#1 ๅฎๆๅ #2 ๆ่ฝๅผๅง
ๅพช็ฏไพ่ตไผๆฅ้๏ผ
#1 blocks #2
#2 blocks #1 โ ไธ่ก๏ผๅพช็ฏไบ
่ชๅจๆธ ็
ๆๆไปปๅก้ฝ completed ๅ๏ผไผ่ชๅจๆไปปๅกๆไปถ้ฝๅ ๆใ
ๆณจๆไบ้กน
- ไปปๅกๆไปถไปฅ JSON ๆ ผๅผๅญๅจๅจ
BaseDir็ฎๅฝไธ๏ผๆไปถๅไธบ{id}.json .highwatermarkๆไปถ็จไบ่ฎฐๅฝๅทฒๅ้ ็ๆๅคงไปปๅก ID๏ผ็กฎไฟ ID ไธ้ๅค- ๆๆๅทฅๅ ทๆไฝ้ฝๆไบๆฅ้ไฟๆค๏ผๅนถๅๅฎๅ จ
- ๅทฅๅ ท็ description ้ๅทฒ็ปๅ ๅซไบ่ฏฆ็ป็ไฝฟ็จๆๅ๏ผAgent ไผๆ นๆฎ่ฟไบๆๅๆฅไฝฟ็จๅทฅๅ ท
ๅค่ฏญ่จๆฏๆ
ๅทฅๅ
ท็ description ๆฏๆไธญ่ฑๆๅๆข๏ผ้่ฟ adk.SetLanguage() ่ฎพ็ฝฎ๏ผ
// ไฝฟ็จไธญๆ description
adk.SetLanguage(adk.LanguageChinese)
// ไฝฟ็จ่ฑๆ description๏ผ้ป่ฎค๏ผ
adk.SetLanguage(adk.LanguageEnglish)
่ฟไธช่ฎพ็ฝฎๆฏๅ จๅฑ็๏ผไผๅฝฑๅๆๆ ADK ๅ ็ฝฎ็ prompt ๅๅทฅๅ ท descriptionใ