From 4b7c345d75b78af181197dce18bdef2fce659a88 Mon Sep 17 00:00:00 2001 From: mlogclub Date: Mon, 13 Apr 2026 19:45:52 +0800 Subject: [PATCH] feat: refactor candidate loader to encapsulate skill definition retrieval and loading logic --- internal/ai/skills/candidate_loader.go | 10 ++++++++-- internal/ai/skills/matcher.go | 5 +++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/internal/ai/skills/candidate_loader.go b/internal/ai/skills/candidate_loader.go index 64394aa..8009895 100644 --- a/internal/ai/skills/candidate_loader.go +++ b/internal/ai/skills/candidate_loader.go @@ -9,11 +9,17 @@ import ( "github.com/mlogclub/simple/sqls" ) -func findManualSkillDefinition(skillCode string) *models.SkillDefinition { +func newCandidateLoader() *candidateLoader { + return &candidateLoader{} +} + +type candidateLoader struct{} + +func (l *candidateLoader) findManualSkillDefinition(skillCode string) *models.SkillDefinition { return repositories.SkillDefinitionRepository.GetByCode(sqls.DB(), skillCode) } -func loadCandidateSkills(aiAgent *models.AIAgent) []models.SkillDefinition { +func (l *candidateLoader) loadCandidateSkills(aiAgent *models.AIAgent) []models.SkillDefinition { if aiAgent == nil { return nil } diff --git a/internal/ai/skills/matcher.go b/internal/ai/skills/matcher.go index b1fb9af..f1c084e 100644 --- a/internal/ai/skills/matcher.go +++ b/internal/ai/skills/matcher.go @@ -17,8 +17,9 @@ type intentTriggerConfig struct { // MatchSkill 对单个 SkillDefinition 执行命中判断。 func MatchSkill(execCtx context.Context, ctx RuntimeContext, aiAgent *models.AIAgent, aiConfig *models.AIConfig) (*models.SkillDefinition, string, *RouteTrace, error) { + loader := newCandidateLoader() if strs.IsNotBlank(ctx.ManualSkillCode) { - skill := findManualSkillDefinition(ctx.ManualSkillCode) + skill := loader.findManualSkillDefinition(ctx.ManualSkillCode) if skill == nil || skill.Status != enums.StatusOk { return nil, "", nil, errorsx.InvalidParam("Skill 不存在或未启用") } @@ -28,7 +29,7 @@ func MatchSkill(execCtx context.Context, ctx RuntimeContext, aiAgent *models.AIA }, nil } - candidates := loadCandidateSkills(aiAgent) + candidates := loader.loadCandidateSkills(aiAgent) trace := &RouteTrace{ Status: "started", CandidateSkillCodes: make([]string, 0, len(candidates)),