how to programmatically change post tags

The key function you’re looking for here is wp_set_post_tags().

To add the tag ‘awesome’ to post 98,

wp_set_post_tags( 98, array( 'awesome' ), true );

Note that the true parameter means that this tag will be added to the existing post tags. If you omit this value, it defaults to false, and the existing post tags will be overwritten with the new ones being passed.

To delete a tag, first pull up a list of the existing post tags using https://codex.wordpress.org/Function_Reference/wp_get_post_tags:

$tags = wp_get_post_tags( 98 );

Then assemble a list of the tags you want to keep (which will exclude the one you’re “deleting”), and replace the existing post tags with the new list:

$tags_to_delete = array( 'radical', 'bodacious' );
$tags_to_keep = array();
foreach ( $tags as $t ) {
    if ( !in_array( $t->name, $tags_to_delete ) ) {
        $tags_to_keep[] = $t->name;
    }
}

wp_set_post_tags( 98, $tags_to_keep, false );