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'
运行脚本:
确保安装了 curl 和 jq(用于解析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'
运行脚本:
确保安装了 curl 和 jq,然后创建脚本文件并赋予执行权限:
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
运行脚本:
确保安装了 curl 和 jq,然后创建脚本文件并赋予执行权限:
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数据。同时,通过通义千问的帮助,我们可以优化请求与响应处理,构建更高效的查询模板。