Eino-ChatModel组件

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 具体方法。

支持以上各种模型接口。