You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GPT-4 API的messages数组中结合固定文本与变量?

GPT-4 API请求中拼接固定文本与变量的正确方式

问题场景

在调用GPT-4 API时,需要在messages数组的content字段中结合固定文本变量(如$intro、$into)和内容变量(如$selectedText、$language),但现有curl请求触发了JSON解析错误,报错信息显示请求的JSON格式无效,还出现了无法解析主机、括号不匹配等问题。

错误原因

原写法中,shell会将单引号内的变量拼接内容按空格拆分,把$into等变量当成独立的URL参数传递给curl,直接破坏了JSON结构,导致OpenAI API无法识别有效请求体。

解决方案

方案1:双引号包裹JSON并转义内部引号

在bash等shell环境中,用双引号包裹整个-d参数内容,同时对JSON内部的双引号进行转义,确保变量被正确解析且JSON结构完整:

curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $api_key" \
  -d "{
  \"model\": \"gpt-4\",
  \"messages\": [{\"role\": \"user\", \"content\": \"$intro$selectedText$into$language\"}],
  \"temperature\": 0.7
  }"

方案2:用printf构造JSON(更可靠)

如果变量包含特殊字符(如双引号、换行),建议先用printf生成标准JSON字符串,再传给curl,避免直接拼接的格式问题:

# 构造JSON payload
json_payload=$(printf '{
  "model": "gpt-4",
  "messages": [{"role": "user", "content": "%s%s%s%s"}],
  "temperature": 0.7
}' "$intro" "$selectedText" "$into" "$language")

# 发起请求
curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $api_key" \
  -d "$json_payload"

方案3:处理变量中的特殊字符

如果变量内容包含双引号、反斜杠等JSON敏感字符,需要先转义这些字符,避免破坏JSON结构:

# 转义变量中的特殊字符
escaped_selectedText=$(echo "$selectedText" | sed 's/"/\\"/g; s/\\/\\\\/g')
escaped_intro=$(echo "$intro" | sed 's/"/\\"/g; s/\\/\\\\/g')

# 再用方案1或2拼接请求

内容的提问来源于stack exchange,提问作者RedCryptonaut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 18:54:59