feat: refactor candidate loader to encapsulate skill definition retrieval and loading logic

This commit is contained in:
mlogclub
2026-04-13 19:45:52 +08:00
parent 1f0406ec91
commit 4b7c345d75
2 changed files with 11 additions and 4 deletions
+8 -2
View File
@@ -9,11 +9,17 @@ import (
"github.com/mlogclub/simple/sqls" "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) 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 { if aiAgent == nil {
return nil return nil
} }
+3 -2
View File
@@ -17,8 +17,9 @@ type intentTriggerConfig struct {
// MatchSkill 对单个 SkillDefinition 执行命中判断。 // MatchSkill 对单个 SkillDefinition 执行命中判断。
func MatchSkill(execCtx context.Context, ctx RuntimeContext, aiAgent *models.AIAgent, aiConfig *models.AIConfig) (*models.SkillDefinition, string, *RouteTrace, error) { 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) { if strs.IsNotBlank(ctx.ManualSkillCode) {
skill := findManualSkillDefinition(ctx.ManualSkillCode) skill := loader.findManualSkillDefinition(ctx.ManualSkillCode)
if skill == nil || skill.Status != enums.StatusOk { if skill == nil || skill.Status != enums.StatusOk {
return nil, "", nil, errorsx.InvalidParam("Skill 不存在或未启用") return nil, "", nil, errorsx.InvalidParam("Skill 不存在或未启用")
} }
@@ -28,7 +29,7 @@ func MatchSkill(execCtx context.Context, ctx RuntimeContext, aiAgent *models.AIA
}, nil }, nil
} }
candidates := loadCandidateSkills(aiAgent) candidates := loader.loadCandidateSkills(aiAgent)
trace := &RouteTrace{ trace := &RouteTrace{
Status: "started", Status: "started",
CandidateSkillCodes: make([]string, 0, len(candidates)), CandidateSkillCodes: make([]string, 0, len(candidates)),