For custom fields per tag, you probably want to store/structure data in the database, and this will require a plugin.
You can work around that limitation and use a theme component if you only need to format the post content itself (like adding consistent sections or templates), but this data would live in the post body as normal text, so it’s pretty limited if you want to query it or structure it for use in other parts of Discourse.