string? predicate is what you want:
> (string? "foo") #t > (string? #\f) #f > (string? (list #\f #\o #\o)) #f
isinstance is "UnPythonic" and has a discussion on "duck typing", in that their solution just asks if you can concatenate a string to an unknown object. I'm not sure how to address this. You could literally ask if (string-append an-object "") works w/o throwing an exception, but would anyone do this?
(define (is-string? s) (with-handlers ((not-break-exn? (lambda (exn) #f))) (let ((s2 (string-append s ""))) #t)))