type BaseModel[M any] interface {
Generate(ctx context.Context, input []M, opts ...Option) (M, error)
Stream(ctx context.Context, input []M, opts ...Option) (*schema.StreamReader[M], error)
}
type AgenticModel = BaseModel[*schema.AgenticMessage]
实现可替换:eino-ext 提供了 OpenAI、Ark、Claude、Ollama 等多种实现,业务代码只依赖接口,切换模型只需改构造逻辑。
func newAgenticModel(ctx context.Context) (einomodel.AgenticModel, error) {
modelType := strings.ToLower(os.Getenv("MODEL_TYPE"))
timeout := 3 * time.Minute
if modelType == "ark" {
return agenticark.New(ctx, &agenticark.Config{
APIKey: os.Getenv("ARK_API_KEY"),
Model: firstEnv("ARK_MODEL", "ARK_MODEL_ID"),
BaseURL: os.Getenv("ARK_BASE_URL"),
Timeout: &timeout,
})
}
// 切换模型 新增 if modelType
return agenticopenai.New(ctx, &agenticopenai.Config{
APIKey: os.Getenv("OPENAI_API_KEY"),
Model: firstEnv("OPENAI_MODEL", "OPENAI_MODEL_ID"),
BaseURL: os.Getenv("OPENAI_BASE_URL"),
ByAzure: os.Getenv("OPENAI_BY_AZURE") == "true",
Timeout: &timeout,
Include: []openairesponses.ResponseIncludable{
openairesponses.ResponseIncludableReasoningEncryptedContent,
},
})
}
切换模型只需新增 if modelType
github.com\cloudwego\eino-ext\components\model\agenticark@v0.2.0-beta.1

里面同一配置模型,实例化模型,实现Stream 、Generate 具体方法。

支持以上各种模型接口。