feat: add AIAsert

This commit is contained in:
lilong.129
2025-04-27 22:25:06 +08:00
parent 84ff75c3b1
commit 9bcdd5d19a
11 changed files with 523 additions and 62 deletions
+62 -9
View File
@@ -52,23 +52,76 @@ const (
LLMServiceTypeDeepSeekV3 LLMServiceType = "deepseek-v3"
)
// ILLMService 定义了 LLM 服务接口,包括规划和断言功能
type ILLMService interface {
Call(opts *PlanningOptions) (*PlanningResult, error)
Assert(opts *AssertOptions) (*AssertionResponse, error)
}
func WithLLMService(service LLMServiceType) AIServiceOption {
return func(opts *AIServices) {
if service == LLMServiceTypeGPT4o {
var err error
opts.ILLMService, err = NewPlanner(context.Background())
switch service {
case LLMServiceTypeGPT4o:
planner, err := NewPlanner(context.Background())
if err != nil {
log.Error().Err(err).Msg("init gpt-4o llm service failed")
log.Error().Err(err).Msg("init gpt-4o planner failed")
os.Exit(code.GetErrorCode(err))
}
}
if service == LLMServiceTypeUITARS {
var err error
opts.ILLMService, err = NewUITarsPlanner(context.Background())
asserter, err := NewUITarsAsserter(context.Background())
if err != nil {
log.Error().Err(err).Msg("init ui-tars llm service failed")
log.Error().Err(err).Msg("init ui-tars asserter failed")
os.Exit(code.GetErrorCode(err))
}
opts.ILLMService = &combinedLLMService{
planner: planner,
asserter: asserter,
}
case LLMServiceTypeUITARS:
planner, err := NewUITarsPlanner(context.Background())
if err != nil {
log.Error().Err(err).Msg("init ui-tars planner failed")
os.Exit(code.GetErrorCode(err))
}
asserter, err := NewUITarsAsserter(context.Background())
if err != nil {
log.Error().Err(err).Msg("init ui-tars asserter failed")
os.Exit(code.GetErrorCode(err))
}
opts.ILLMService = &combinedLLMService{
planner: planner,
asserter: asserter,
}
}
}
}
// combinedLLMService 实现了 ILLMService 接口,组合了规划和断言功能
type combinedLLMService struct {
planner IPlanner // 提供规划功能
asserter IAsserter // 提供断言功能
}
// IPlanner 定义了规划功能接口
type IPlanner interface {
Call(opts *PlanningOptions) (*PlanningResult, error)
}
// IAsserter 定义了断言功能接口
type IAsserter interface {
Assert(opts *AssertOptions) (*AssertionResponse, error)
}
// Call 执行规划功能
func (c *combinedLLMService) Call(opts *PlanningOptions) (*PlanningResult, error) {
return c.planner.Call(opts)
}
// Assert 执行断言功能
func (c *combinedLLMService) Assert(opts *AssertOptions) (*AssertionResponse, error) {
return c.asserter.Assert(opts)
}