Files
ainovel-clients/tools/plan_chapter.go

58 lines
1.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package tools
import (
"context"
"encoding/json"
"fmt"
"github.com/voocel/agentcore/schema"
"github.com/voocel/ainovel-cli/domain"
"github.com/voocel/ainovel-cli/state"
)
// PlanChapterTool 保存章节构思Agent 自主决定规划粒度。
type PlanChapterTool struct {
store *state.Store
}
func NewPlanChapterTool(store *state.Store) *PlanChapterTool {
return &PlanChapterTool{store: store}
}
func (t *PlanChapterTool) Name() string { return "plan_chapter" }
func (t *PlanChapterTool) Description() string {
return "保存章节写作构思。Agent 自主决定规划粒度,不强制场景拆分"
}
func (t *PlanChapterTool) Label() string { return "规划章节" }
func (t *PlanChapterTool) Schema() map[string]any {
return schema.Object(
schema.Property("chapter", schema.Int("章节号")).Required(),
schema.Property("title", schema.String("章节标题")).Required(),
schema.Property("goal", schema.String("本章目标")).Required(),
schema.Property("conflict", schema.String("核心冲突")).Required(),
schema.Property("hook", schema.String("章末钩子")).Required(),
schema.Property("emotion_arc", schema.String("情绪曲线")),
schema.Property("notes", schema.String("自由备忘(任何你觉得写作时需要记住的东西)")),
)
}
func (t *PlanChapterTool) Execute(_ context.Context, args json.RawMessage) (json.RawMessage, error) {
var plan domain.ChapterPlan
if err := json.Unmarshal(args, &plan); err != nil {
return nil, fmt.Errorf("invalid args: %w", err)
}
if plan.Chapter <= 0 {
return nil, fmt.Errorf("chapter must be > 0")
}
if err := t.store.SaveChapterPlan(plan); err != nil {
return nil, fmt.Errorf("save chapter plan: %w", err)
}
return json.Marshal(map[string]any{
"planned": true,
"chapter": plan.Chapter,
})
}