diff --git a/lua/avante/init.lua b/lua/avante/init.lua
index 8631983..b3a8b71 100644
--- a/lua/avante/init.lua
+++ b/lua/avante/init.lua
@@ -353,6 +353,7 @@ local function call_openai_api_stream(question, code_lang, code_content, on_chun
 end
 
 local function call_ai_api_stream(question, code_lang, code_content, on_chunk, on_complete)
+  code_content = utils.escape(code_content)
   if M.config.provider == "openai" or M.config.provider == "azure" then
     call_openai_api_stream(question, code_lang, code_content, on_chunk, on_complete)
   elseif M.config.provider == "claude" then
diff --git a/lua/avante/utils.lua b/lua/avante/utils.lua
index 6993623..4bc3b41 100644
--- a/lua/avante/utils.lua
+++ b/lua/avante/utils.lua
@@ -4,4 +4,8 @@ function M.trim_suffix(str, suffix)
   return string.gsub(str, suffix .. "$", "")
 end
 
+function M.escape(str)
+  return string.gsub(str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1")
+end
+
 return M