Open domain response generation is the task of creating a response given a user query in any topics/domain. Limited by context and reference information, responses generated by current systems are often "bland" or generic. In this paper, we combine a response generation model with a retrieval system that searches for relevant utterances and responses. The generation model has two main components: a keyword extraction module and a two-stage transformer. The keyword extraction module aims to extract two types of keywords in an unsupervised fashion from the retrieved results: (1) keywords in the query not found in the retrieved utterances (DiffKey), and (2) overlapping keywords among the retrieved responses (SimKey). Given these keywords, the two-stage transformer first decides where to insert the keywords in the response, and the second generates the full response given the location of the keywords. The keyword extraction module and the two-stage transformer are connected in a single network, and so our system is trained end-to-end. Experimental results on Cornell Movie-Dialog corpus, Douban and Weibo demonstrate that our model outperforms state-of-the-art systems in terms of ROUGE, relevance scores and human evaluation.