refactor(instruction): simplify NewService initialization and update import paths

This commit is contained in:
mlogclub
2026-04-18 11:09:05 +08:00
parent 023ec7373b
commit 9756780aec
2 changed files with 21 additions and 38 deletions
+7 -24
View File
@@ -3,7 +3,7 @@ package instruction
import ( import (
"strings" "strings"
runtimetooling "cs-agent/internal/ai/runtime/tooling" "cs-agent/internal/ai/runtime/tooling"
"cs-agent/internal/models" "cs-agent/internal/models"
) )
@@ -14,36 +14,19 @@ type Service struct {
toolAppendixProvider *ToolAppendixProvider toolAppendixProvider *ToolAppendixProvider
} }
func NewService( func NewService() *Service {
assembler *Assembler,
governanceProvider *GovernanceInstructionProvider,
skillProvider *SkillInstructionProvider,
toolProvider *ToolAppendixProvider,
) *Service {
if assembler == nil {
assembler = NewAssembler()
}
if governanceProvider == nil {
governanceProvider = NewGovernanceInstructionProvider()
}
if skillProvider == nil {
skillProvider = NewSkillInstructionProvider()
}
if toolProvider == nil {
toolProvider = NewToolAppendixProvider()
}
return &Service{ return &Service{
assembler: assembler, assembler: NewAssembler(),
governanceInstructionProvider: governanceProvider, governanceInstructionProvider: NewGovernanceInstructionProvider(),
skillInstructionProvider: skillProvider, skillInstructionProvider: NewSkillInstructionProvider(),
toolAppendixProvider: toolProvider, toolAppendixProvider: NewToolAppendixProvider(),
} }
} }
func (s *Service) Build( func (s *Service) Build(
aiAgent models.AIAgent, aiAgent models.AIAgent,
selectedSkill *models.SkillDefinition, selectedSkill *models.SkillDefinition,
toolDefinitions []runtimetooling.MCPToolDefinition, toolDefinitions []tooling.MCPToolDefinition,
extraToolCodes map[string]string, extraToolCodes map[string]string,
) AssemblyResult { ) AssemblyResult {
governanceInstruction := "" governanceInstruction := ""
@@ -4,22 +4,22 @@ import (
"context" "context"
"strings" "strings"
runtimeinstruction "cs-agent/internal/ai/runtime/instruction" "cs-agent/internal/ai/runtime/instruction"
einoagents "cs-agent/internal/ai/runtime/internal/impl/agents" "cs-agent/internal/ai/runtime/internal/impl/agents"
einocallbacks "cs-agent/internal/ai/runtime/internal/impl/callbacks" "cs-agent/internal/ai/runtime/internal/impl/callbacks"
"cs-agent/internal/ai/runtime/registry" "cs-agent/internal/ai/runtime/registry"
runtimetooling "cs-agent/internal/ai/runtime/tooling" "cs-agent/internal/ai/runtime/tooling"
"cs-agent/internal/models" "cs-agent/internal/models"
"github.com/cloudwego/eino/adk" "github.com/cloudwego/eino/adk"
einobasetool "github.com/cloudwego/eino/components/tool" "github.com/cloudwego/eino/components/tool"
"github.com/cloudwego/eino/compose" "github.com/cloudwego/eino/compose"
) )
type AgentFactory struct { type AgentFactory struct {
chatModelFactory *ChatModelFactory chatModelFactory *ChatModelFactory
toolFactory *ToolFactory toolFactory *ToolFactory
instructionService *runtimeinstruction.Service instructionService *instruction.Service
handlerService *AgentHandlerService handlerService *AgentHandlerService
} }
@@ -38,31 +38,31 @@ type BuildCustomerServiceAgentInput struct {
SelectedSkill *models.SkillDefinition SelectedSkill *models.SkillDefinition
// InstructionToolDefinitions 用于生成 instruction 中的工具说明。 // InstructionToolDefinitions 用于生成 instruction 中的工具说明。
// 它描述“当前允许模型理解和使用的 MCP 工具范围”。 // 它描述“当前允许模型理解和使用的 MCP 工具范围”。
InstructionToolDefinitions []runtimetooling.MCPToolDefinition InstructionToolDefinitions []tooling.MCPToolDefinition
// DynamicMCPToolDefinitions 用于接入 Eino tool_search middleware 的动态工具集合。 // DynamicMCPToolDefinitions 用于接入 Eino tool_search middleware 的动态工具集合。
// 这些工具默认不直接挂在 ToolsNode 上,而是经 tool_search 选择后再暴露给模型。 // 这些工具默认不直接挂在 ToolsNode 上,而是经 tool_search 选择后再暴露给模型。
DynamicMCPToolDefinitions []runtimetooling.MCPToolDefinition DynamicMCPToolDefinitions []tooling.MCPToolDefinition
// StaticTools 为当前运行时直接挂载到 ToolsNode 的固定工具,例如 Graph Tool。 // StaticTools 为当前运行时直接挂载到 ToolsNode 的固定工具,例如 Graph Tool。
StaticTools []einobasetool.BaseTool StaticTools []tool.BaseTool
// StaticToolCodes 为固定工具的 modelName -> toolCode 映射,用于 trace 和运行日志归因。 // StaticToolCodes 为固定工具的 modelName -> toolCode 映射,用于 trace 和运行日志归因。
StaticToolCodes map[string]string StaticToolCodes map[string]string
// StaticToolMetadata 为固定工具的 modelName -> metadata 映射,用于 trace 和运行日志归因。 // StaticToolMetadata 为固定工具的 modelName -> metadata 映射,用于 trace 和运行日志归因。
StaticToolMetadata map[string]registry.ToolMetadata StaticToolMetadata map[string]registry.ToolMetadata
// Collector 用于收集运行链路中的 tool trace、graph trace 等调试信息。 // Collector 用于收集运行链路中的 tool trace、graph trace 等调试信息。
Collector *einocallbacks.RuntimeTraceCollector Collector *callbacks.RuntimeTraceCollector
} }
func NewAgentFactory() *AgentFactory { func NewAgentFactory() *AgentFactory {
return &AgentFactory{ return &AgentFactory{
chatModelFactory: NewChatModelFactory(), chatModelFactory: NewChatModelFactory(),
toolFactory: NewToolFactory(), toolFactory: NewToolFactory(),
instructionService: runtimeinstruction.NewService(nil, nil, nil, nil), instructionService: instruction.NewService(),
handlerService: NewAgentHandlerService(nil), handlerService: NewAgentHandlerService(nil),
} }
} }
// BuildCustomerServiceAgent 根据装配输入构建客服 ChatModelAgent。 // BuildCustomerServiceAgent 根据装配输入构建客服 ChatModelAgent。
func (f *AgentFactory) BuildCustomerServiceAgent(ctx context.Context, input BuildCustomerServiceAgentInput) (*einoagents.CustomerServiceAgent, error) { func (f *AgentFactory) BuildCustomerServiceAgent(ctx context.Context, input BuildCustomerServiceAgentInput) (*agents.CustomerServiceAgent, error) {
chatModel, err := f.chatModelFactory.Build(ctx, input.AIConfig) chatModel, err := f.chatModelFactory.Build(ctx, input.AIConfig)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -71,7 +71,7 @@ func (f *AgentFactory) BuildCustomerServiceAgent(ctx context.Context, input Buil
if err != nil { if err != nil {
return nil, err return nil, err
} }
allTools := make([]einobasetool.BaseTool, 0, len(input.StaticTools)) allTools := make([]tool.BaseTool, 0, len(input.StaticTools))
allTools = append(allTools, input.StaticTools...) allTools = append(allTools, input.StaticTools...)
instructionResult := f.instructionService.Build(input.AIAgent, input.SelectedSkill, input.InstructionToolDefinitions, input.StaticToolCodes) instructionResult := f.instructionService.Build(input.AIAgent, input.SelectedSkill, input.InstructionToolDefinitions, input.StaticToolCodes)
handlers := make([]adk.ChatModelAgentMiddleware, 0, 3) handlers := make([]adk.ChatModelAgentMiddleware, 0, 3)
@@ -105,5 +105,5 @@ func (f *AgentFactory) BuildCustomerServiceAgent(ctx context.Context, input Buil
if err != nil { if err != nil {
return nil, err return nil, err
} }
return &einoagents.CustomerServiceAgent{Inner: inner}, nil return &agents.CustomerServiceAgent{Inner: inner}, nil
} }