Shell编程教程:第十部分 - Shell脚本与通义千问API交互

282 阅读3分钟

Shell编程教程:第十部分 - Shell脚本与通义千问API交互

10. Shell脚本与通义千问API交互

在这一部分,我们将学习如何使用cURL命令来调用通义千问API,并处理API返回的JSON数据。此外,我们还将利用通义千问的帮助来优化请求与响应处理,构建更高效的查询模板。

10.1 cURL命令调用API

cURL简介

cURL是一个用于从或向服务器传输数据的强大工具,支持多种协议(HTTP, HTTPS, FTP等)。它可以用于在命令行中测试API请求。

基本语法

curl [OPTIONS] URL

调用API示例

假设我们要调用通义千问API来获取一个问题的答案。

API请求示例

curl -X POST https://api.example.com/api/v1/answer \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{"question": "什么是通义千问?", "model": "qwen"}'

实操案例

假设我们需要创建一个Shell脚本来调用通义千问API,并获取一个问题的答案。

脚本示例

#!/bin/bash
​
API_URL="https://api.example.com/api/v1/answer"
QUESTION="什么是通义千问?"
MODEL="qwen"# 从环境变量中获取API密钥
API_KEY=$QWEN_API_KEY# 构建请求数据
PAYLOAD=$(printf '{"question": "%s", "model": "%s"}' "$QUESTION" "$MODEL")
​
# 发送HTTP请求
RESPONSE=$(curl -s -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $API_KEY" \
  -d "$PAYLOAD" \
  $API_URL)
​
# 解析并打印响应
echo $RESPONSE | jq '.answer'

运行脚本

确保安装了 curljq(用于解析JSON响应),然后创建脚本文件并赋予执行权限:

chmod +x call_qwen_api.sh
export QWEN_API_KEY=your_api_key_here
./call_qwen_api.sh

输出结果

假设API返回的答案是 "通义千问是一个AI助手。",那么脚本的输出将是:

"通义千问是一个AI助手。"

10.2 处理API返回的JSON数据

JSON数据处理

通常,API返回的数据格式为JSON。我们可以使用 jq 工具来解析和提取JSON数据中的特定字段。

基本语法

echo '{"key":"value"}' | jq '.key'

实操案例

假设我们需要从API响应中提取答案部分。

脚本示例

#!/bin/bash
​
API_URL="https://api.example.com/api/v1/answer"
QUESTION="什么是通义千问?"
MODEL="qwen"# 从环境变量中获取API密钥
API_KEY=$QWEN_API_KEY# 构建请求数据
PAYLOAD=$(printf '{"question": "%s", "model": "%s"}' "$QUESTION" "$MODEL")
​
# 发送HTTP请求
RESPONSE=$(curl -s -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $API_KEY" \
  -d "$PAYLOAD" \
  $API_URL)
​
# 解析并打印响应中的答案部分
echo $RESPONSE | jq -r '.answer'

运行脚本

确保安装了 curljq,然后创建脚本文件并赋予执行权限:

chmod +x parse_json_response.sh
export QWEN_API_KEY=your_api_key_here
./parse_json_response.sh

输出结果

假设API返回的答案是 "通义千问是一个AI助手。",那么脚本的输出将是:

通义千问是一个AI助手。

10.3 通义千问辅助:构建查询模板,优化请求与响应处理

通过通义千问的帮助,我们可以构建更高效的查询模板,并优化请求与响应处理的过程。

示例查询

  • “如何优化cURL请求的速度?”
  • “如何处理API请求中的错误?”
  • “如何批量处理API请求?”

实操案例

假设我们需要构建一个脚本,用于批量查询多个问题,并处理潜在的API错误。

脚本示例

#!/bin/bash

API_URL="https://api.example.com/api/v1/answer"
MODEL="qwen"
QUESTIONS=("什么是通义千问?" "通义千问有哪些功能?")

# 从环境变量中获取API密钥
API_KEY=$QWEN_API_KEY

# 遍历问题列表
for QUESTION in "${QUESTIONS[@]}"; do
  # 构建请求数据
  PAYLOAD=$(printf '{"question": "%s", "model": "%s"}' "$QUESTION" "$MODEL")

  # 发送HTTP请求
  RESPONSE=$(curl -s -X POST \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $API_KEY" \
    -d "$PAYLOAD" \
    $API_URL)

  # 检查响应状态码
  STATUS_CODE=$(echo $RESPONSE | jq -r '.status')
  if [ "$STATUS_CODE" != "200" ]; then
    echo "Error: API returned status code $STATUS_CODE"
    continue
  fi

  # 解析并打印响应中的答案部分
  ANSWER=$(echo $RESPONSE | jq -r '.answer')
  echo "Question: $QUESTION"
  echo "Answer: $ANSWER"
done

运行脚本

确保安装了 curljq,然后创建脚本文件并赋予执行权限:

chmod +x batch_query.sh
export QWEN_API_KEY=your_api_key_here
./batch_query.sh

输出结果

假设API返回的答案分别是 "通义千问是一个AI助手。" 和 "通义千问可以回答问题、提供建议等。",那么脚本的输出将是:

Question: 什么是通义千问?
Answer: 通义千问是一个AI助手。
Question: 通义千问有哪些功能?
Answer: 通义千问可以回答问题、提供建议等。

通过上述步骤,我们可以有效地使用cURL来调用通义千问API,并处理返回的JSON数据。同时,通过通义千问的帮助,我们可以优化请求与响应处理,构建更高效的查询模板。