956 lines
56 KiB
Markdown
956 lines
56 KiB
Markdown
|
|
# OpenAI兼容-Batch
|
|||
|
|
|
|||
|
|
更新时间:2025-09-30 11:41:15
|
|||
|
|
|
|||
|
|
[产品详情](https://www.aliyun.com/product/bailian)
|
|||
|
|
|
|||
|
|
[我的收藏](https://help.aliyun.com/my_favorites.html)
|
|||
|
|
|
|||
|
|
阿里云百炼提供与OpenAI兼容的Batch接口,支持以文件方式批量提交任务并异步执行,在非高峰时段离线处理大规模数据,任务完成或达到最长等待时间时返回结果,费用仅为实时调用的50%。
|
|||
|
|
|
|||
|
|
> 如需在控制台操作,请参见[批量推理](https://help.aliyun.com/zh/model-studio/batch-inference)。
|
|||
|
|
|
|||
|
|
## **前提条件**
|
|||
|
|
|
|||
|
|
- 已开通阿里云百炼服务,并已获取API Key:[获取API Key](https://help.aliyun.com/zh/model-studio/get-api-key)。
|
|||
|
|
|
|||
|
|
> 建议您[配置API Key到环境变量](https://help.aliyun.com/zh/model-studio/configure-api-key-through-environment-variables)中以降低API Key的泄露风险。
|
|||
|
|
|
|||
|
|
- 如果您使用OpenAI Python SDK调用Batch接口,请通过以下命令安装最新版OpenAI SDK。
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```shell
|
|||
|
|
pip3 install -U openai
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 支持的模型
|
|||
|
|
|
|||
|
|
北京地域
|
|||
|
|
|
|||
|
|
新加坡地域
|
|||
|
|
|
|||
|
|
- **文本生成模型**
|
|||
|
|
- [通义千问 Max](https://help.aliyun.com/zh/model-studio/models#cfc131abafghw):qwen3-max、qwen-max、qwen-max-latest
|
|||
|
|
- [通义千问 Plus](https://help.aliyun.com/zh/model-studio/models#6c45e49509gtr):qwen-plus、qwen-plus-latest
|
|||
|
|
- [通义千问 Flash](https://help.aliyun.com/zh/model-studio/models#d617df95f1g9h):qwen-flash
|
|||
|
|
- [通义千问 Turbo](https://help.aliyun.com/zh/model-studio/models#8708390fdb66x):qwen-turbo、qwen-turbo-latest
|
|||
|
|
- [通义千问 Long](https://help.aliyun.com/zh/model-studio/models#27b2b3a15d5c6):qwen-long、qwen-long-latest
|
|||
|
|
- [QwQ](https://help.aliyun.com/zh/model-studio/models#874b221f2cx9k):qwq-plus
|
|||
|
|
- [QwQ-Preview](https://help.aliyun.com/zh/model-studio/models#18e88cc886ll3):qwq-32b-preview
|
|||
|
|
- **多模态模型**
|
|||
|
|
- [视觉理解](https://help.aliyun.com/zh/model-studio/vision):qwen3-vl-plus、qwen-vl-max、qwen-vl-max-latest、qwen-vl-plus、qwen-vl-plus-latest
|
|||
|
|
- [文字提取](https://help.aliyun.com/zh/model-studio/qwen-vl-ocr):qwen-vl-ocr
|
|||
|
|
- [全模态](https://help.aliyun.com/zh/model-studio/user-guide/qwen-omni):qwen-omni-turbo
|
|||
|
|
|
|||
|
|
- [**文本向量模型**](https://help.aliyun.com/zh/model-studio/user-guide/embedding)**:**text-embedding-v1、text-embedding-v2、text-embedding-v3、text-embedding-v4
|
|||
|
|
|
|||
|
|
- **第三方模型:**deepseek-r1、deepseek-v3
|
|||
|
|
|
|||
|
|
## **计费**
|
|||
|
|
|
|||
|
|
Batch调用的费用为实时调用的50%,具体请参见[模型列表](https://help.aliyun.com/zh/model-studio/models#9f8890ce29g5u)。
|
|||
|
|
|
|||
|
|
Batch推理不支持以下服务或优惠:[预付费](https://common-buy.aliyun.com/?commodityCode=sfm_llminference_spn_public_cn)(节省计划)、[免费额度](https://help.aliyun.com/zh/model-studio/new-free-quota)、[Context Cache](https://help.aliyun.com/zh/model-studio/context-cache)等。
|
|||
|
|
|
|||
|
|
## **快速开始**
|
|||
|
|
|
|||
|
|
在正式Batch任务开始之前,您可使用测试模型`batch-test-model`进行全链路闭环测试,包括验证输入数据、创建任务、查询任务及下载结果文件等流程。请注意:
|
|||
|
|
|
|||
|
|
- 测试文件不仅需满足[输入文件格式](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#578afe12c1uvz)要求,还需满足单文件大小不超过**1MB**,且文件行数不超过**100行**的要求;
|
|||
|
|
- 并发限制:最大并行任务数2个;
|
|||
|
|
- 资源使用:测试模型不走推理流程,因此不产生模型推理费用。
|
|||
|
|
|
|||
|
|
具体步骤如下:
|
|||
|
|
|
|||
|
|
1. **准备测试文件**
|
|||
|
|
|
|||
|
|
- 将包含请求信息的示例文件[test_model.jsonl](https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250403/ilveat/test_model.jsonl)下载到本地,并确保其与下方的Python脚本置于同一目录下。
|
|||
|
|
|
|||
|
|
- 示例内容:model参数设置为`batch-test-model`,url设置为`/v1/chat/ds-test `。
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{"custom_id":"1","method":"POST","url":"/v1/chat/ds-test","body":{"model":"batch-test-model","messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"你好!有什么可以帮助你的吗?"}]}}
|
|||
|
|
{"custom_id":"2","method":"POST","url":"/v1/chat/ds-test","body":{"model":"batch-test-model","messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"What is 2+2?"}]}}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **运行脚本**
|
|||
|
|
|
|||
|
|
- 执行此Python脚本。
|
|||
|
|
|
|||
|
|
> 如果需要调整文件路径或其他参数,请根据实际情况修改代码。
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
import os
|
|||
|
|
from pathlib import Path
|
|||
|
|
from openai import OpenAI
|
|||
|
|
import time
|
|||
|
|
|
|||
|
|
# 初始化客户端
|
|||
|
|
client = OpenAI(
|
|||
|
|
# 若没有配置环境变量,可用阿里云百炼API Key将下行替换为:api_key="sk-xxx",但不建议在生产环境中直接将API Key硬编码到代码中,以减少API Key泄露风险.
|
|||
|
|
# 新加坡和北京地域的API Key不同。获取API Key:https://help.aliyun.com/zh/model-studio/get-api-key
|
|||
|
|
api_key=os.getenv("DASHSCOPE_API_KEY"),
|
|||
|
|
# 以下是北京地域base-url,如果使用新加坡地域的模型,需要将base_url替换为:https://dashscope-intl.aliyuncs.com/compatible-mode/v1
|
|||
|
|
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1" # 阿里云百炼服务的base_url
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
def upload_file(file_path):
|
|||
|
|
print(f"正在上传包含请求信息的JSONL文件...")
|
|||
|
|
file_object = client.files.create(file=Path(file_path), purpose="batch")
|
|||
|
|
print(f"文件上传成功。得到文件ID: {file_object.id}\n")
|
|||
|
|
return file_object.id
|
|||
|
|
|
|||
|
|
def create_batch_job(input_file_id):
|
|||
|
|
print(f"正在基于文件ID,创建Batch任务...")
|
|||
|
|
# 请注意:此处endpoint参数值需和输入文件中的url字段保持一致.测试模型(batch-test-model)填写/v1/chat/ds-test,Embedding文本向量模型填写/v1/embeddings,其他模型填写/v1/chat/completions
|
|||
|
|
batch = client.batches.create(input_file_id=input_file_id, endpoint="/v1/chat/ds-test", completion_window="24h")
|
|||
|
|
print(f"Batch任务创建完成。 得到Batch任务ID: {batch.id}\n")
|
|||
|
|
return batch.id
|
|||
|
|
|
|||
|
|
def check_job_status(batch_id):
|
|||
|
|
print(f"正在检查Batch任务状态...")
|
|||
|
|
batch = client.batches.retrieve(batch_id=batch_id)
|
|||
|
|
print(f"Batch任务状态: {batch.status}\n")
|
|||
|
|
return batch.status
|
|||
|
|
|
|||
|
|
def get_output_id(batch_id):
|
|||
|
|
print(f"正在获取Batch任务中执行成功请求的输出文件ID...")
|
|||
|
|
batch = client.batches.retrieve(batch_id=batch_id)
|
|||
|
|
print(f"输出文件ID: {batch.output_file_id}\n")
|
|||
|
|
return batch.output_file_id
|
|||
|
|
|
|||
|
|
def get_error_id(batch_id):
|
|||
|
|
print(f"正在获取Batch任务中执行错误请求的输出文件ID...")
|
|||
|
|
batch = client.batches.retrieve(batch_id=batch_id)
|
|||
|
|
print(f"错误文件ID: {batch.error_file_id}\n")
|
|||
|
|
return batch.error_file_id
|
|||
|
|
|
|||
|
|
def download_results(output_file_id, output_file_path):
|
|||
|
|
print(f"正在打印并下载Batch任务的请求成功结果...")
|
|||
|
|
content = client.files.content(output_file_id)
|
|||
|
|
# 打印部分内容以供测试
|
|||
|
|
print(f"打印请求成功结果的前1000个字符内容: {content.text[:1000]}...\n")
|
|||
|
|
# 保存结果文件至本地
|
|||
|
|
content.write_to_file(output_file_path)
|
|||
|
|
print(f"完整的输出结果已保存至本地输出文件result.jsonl\n")
|
|||
|
|
|
|||
|
|
def download_errors(error_file_id, error_file_path):
|
|||
|
|
print(f"正在打印并下载Batch任务的请求失败信息...")
|
|||
|
|
content = client.files.content(error_file_id)
|
|||
|
|
# 打印部分内容以供测试
|
|||
|
|
print(f"打印请求失败信息的前1000个字符内容: {content.text[:1000]}...\n")
|
|||
|
|
# 保存错误信息文件至本地
|
|||
|
|
content.write_to_file(error_file_path)
|
|||
|
|
print(f"完整的请求失败信息已保存至本地错误文件error.jsonl\n")
|
|||
|
|
|
|||
|
|
def main():
|
|||
|
|
# 文件路径
|
|||
|
|
input_file_path = "test_model.jsonl" # 可替换为您的输入文件路径
|
|||
|
|
output_file_path = "result.jsonl" # 可替换为您的输出文件路径
|
|||
|
|
error_file_path = "error.jsonl" # 可替换为您的错误文件路径
|
|||
|
|
try:
|
|||
|
|
# Step 1: 上传包含请求信息的JSONL文件,得到输入文件ID,如果您需要输入OSS文件,可将下行替换为:input_file_id = "实际的OSS文件URL或资源标识符"
|
|||
|
|
input_file_id = upload_file(input_file_path)
|
|||
|
|
# Step 2: 基于输入文件ID,创建Batch任务
|
|||
|
|
batch_id = create_batch_job(input_file_id)
|
|||
|
|
# Step 3: 检查Batch任务状态直到结束
|
|||
|
|
status = ""
|
|||
|
|
while status not in ["completed", "failed", "expired", "cancelled"]:
|
|||
|
|
status = check_job_status(batch_id)
|
|||
|
|
print(f"等待任务完成...")
|
|||
|
|
time.sleep(10) # 等待10秒后再次查询状态
|
|||
|
|
# 如果任务失败,则打印错误信息并退出
|
|||
|
|
if status == "failed":
|
|||
|
|
batch = client.batches.retrieve(batch_id)
|
|||
|
|
print(f"Batch任务失败。错误信息为:{batch.errors}\n")
|
|||
|
|
print(f"参见错误码文档: https://help.aliyun.com/zh/model-studio/developer-reference/error-code")
|
|||
|
|
return
|
|||
|
|
# Step 4: 下载结果:如果输出文件ID不为空,则打印请求成功结果的前1000个字符内容,并下载完整的请求成功结果到本地输出文件;
|
|||
|
|
# 如果错误文件ID不为空,则打印请求失败信息的前1000个字符内容,并下载完整的请求失败信息到本地错误文件.
|
|||
|
|
output_file_id = get_output_id(batch_id)
|
|||
|
|
if output_file_id:
|
|||
|
|
download_results(output_file_id, output_file_path)
|
|||
|
|
error_file_id = get_error_id(batch_id)
|
|||
|
|
if error_file_id:
|
|||
|
|
download_errors(error_file_id, error_file_path)
|
|||
|
|
print(f"参见错误码文档: https://help.aliyun.com/zh/model-studio/developer-reference/error-code")
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"An error occurred: {e}")
|
|||
|
|
print(f"参见错误码文档: https://help.aliyun.com/zh/model-studio/developer-reference/error-code")
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
main()
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **验证测试结果**
|
|||
|
|
|
|||
|
|
- 任务状态显示`completed`。
|
|||
|
|
|
|||
|
|
- 结果文件`result.jsonl`:包含固定响应`{"content":"This is a test result."}`。
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
{"id":"a2b1ae25-21f4-4d9a-8634-99a29926486c","custom_id":"1","response":{"status_code":200,"request_id":"a2b1ae25-21f4-4d9a-8634-99a29926486c","body":{"created":1743562621,"usage":{"completion_tokens":6,"prompt_tokens":20,"total_tokens":26},"model":"batch-test-model","id":"chatcmpl-bca7295b-67c3-4b1f-8239-d78323bb669f","choices":[{"finish_reason":"stop","index":0,"message":{"content":"This is a test result."}}],"object":"chat.completion"}},"error":null}
|
|||
|
|
{"id":"39b74f09-a902-434f-b9ea-2aaaeebc59e0","custom_id":"2","response":{"status_code":200,"request_id":"39b74f09-a902-434f-b9ea-2aaaeebc59e0","body":{"created":1743562621,"usage":{"completion_tokens":6,"prompt_tokens":20,"total_tokens":26},"model":"batch-test-model","id":"chatcmpl-1e32a8ba-2b69-4dc4-be42-e2897eac9e84","choices":[{"finish_reason":"stop","index":0,"message":{"content":"This is a test result."}}],"object":"chat.completion"}},"error":null}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
> 如遇到错误,请参考[错误信息](https://help.aliyun.com/zh/model-studio/error-code)进行解决。
|
|||
|
|
|
|||
|
|
**通过测试验证后,**您可以通过以下步骤来执行正式的Batch任务流程。
|
|||
|
|
|
|||
|
|
1. 参考[输入文件格式](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#578afe12c1uvz)要求准备输入文件,并将文件中的model参数设置为[支持的模型](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#80d1d39cf85zk),url设置为:
|
|||
|
|
|
|||
|
|
1. Embedding文本向量模型填写`/v1/embeddings`;
|
|||
|
|
2. 其他模型填写`/v1/chat/completions`。
|
|||
|
|
|
|||
|
|
2. 替换上面Python脚本中的endpoint;
|
|||
|
|
|
|||
|
|
**重要**
|
|||
|
|
|
|||
|
|
请确保脚本中的endpoint与输入文件中的url参数保持一致。
|
|||
|
|
|
|||
|
|
3. 运行脚本,等待任务完成,若任务成功,将在同一目录下生成输出结果文件`result.jsonl`。
|
|||
|
|
|
|||
|
|
> 若任务失败,则程序退出并打印错误信息。
|
|||
|
|
|
|||
|
|
> 如果存在错误文件ID,将在同一目录下生成错误文件`error.jsonl`以供检查。
|
|||
|
|
|
|||
|
|
> 在过程中发生的异常会被捕获,并打印错误信息。
|
|||
|
|
|
|||
|
|
## 数据文件格式说明
|
|||
|
|
|
|||
|
|
### **输入文件格式**
|
|||
|
|
|
|||
|
|
Batch任务的输入文件为 JSONL 文件,格式要求如下:
|
|||
|
|
|
|||
|
|
- 每行一个 JSON 格式的请求。
|
|||
|
|
- 单个 Batch 任务最多包含 **50,000 个**请求。
|
|||
|
|
- 单个 Batch 任务的所有请求都必须选用同一个模型。
|
|||
|
|
- Batch 文件最大**500 MB。**
|
|||
|
|
- 文件中单行最大 **6 MB。**
|
|||
|
|
- 单行的请求内容需遵循各模型上下文长度的限制。
|
|||
|
|
|
|||
|
|
#### **请求示例**
|
|||
|
|
|
|||
|
|
您可通过下方工具选择模型,以查看对应的jsonl请求示例,可将其复制到您的输入文件中。
|
|||
|
|
|
|||
|
|
**选择模型系列:** 文本生成模型 视觉理解模型 文字提取模型 全模态模型 通用文本向量模型
|
|||
|
|
|
|||
|
|
**选择模型:** qwen3-max qwen-max qwen-max-latest qwen-plus(思考模式) qwen-plus(非思考模式) qwen-plus-latest(思考模式) qwen-plus-latest(非思考模式) qwen-flash(思考模式) qwen-flash(非思考模式) qwen-turbo(思考模式) qwen-turbo(非思考模式) qwen-turbo-latest(思考模式) qwen-turbo-latest(非思考模式) qwen-long qwen-long-latest qwq-plus qwq-32b-preview deepseek-r1 deepseek-v3
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
{"custom_id":"1","method":"POST","url":"/v1/chat/completions","body":{"model":"qwen3-max","messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"你好!有什么可以帮助你的吗?"}]}}
|
|||
|
|
{"custom_id":"2","method":"POST","url":"/v1/chat/completions","body":{"model":"qwen3-max","messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"What is 2+2?"}]}}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**重要**
|
|||
|
|
|
|||
|
|
- 在创建Batch任务的接口中,endpoint参数值必须和请求示例中的url字段保持一致;
|
|||
|
|
- 同一任务的批量请求务必选择同一模型,其思考模式(若支持)也须保持一致。
|
|||
|
|
|
|||
|
|
#### **请求参数**
|
|||
|
|
|
|||
|
|
| | | | |
|
|||
|
|
| ---- | ---- | ---- | ---- |
|
|||
|
|
| | | | |
|
|||
|
|
|
|||
|
|
| **字段** | **类型** | **必选** | **描述** |
|
|||
|
|
| -------------------- | -------- | -------- | ------------------------------------------------------------ |
|
|||
|
|
| custom_id | String | 是 | 用户自定义的请求ID,每一行表示一条请求,每一条请求有一个唯一的 `custom_id`。Batch任务结束后,可以在结果文件中找到该 `custom_id` 对应的请求结果。 |
|
|||
|
|
| method | String | 是 | 请求方法,当前只支持POST。 |
|
|||
|
|
| url | String | 是 | API关联的URL,需和[创建Batch任务](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#ad26763d91p5o)时的endpoint字段保持一致。Embedding文本向量模型填写`/v1/embeddings`;测试模型`batch-test-model`填写`/v1/chat/ds-test`;其他模型填写`/v1/chat/completions`。 |
|
|||
|
|
| body | Object | 是 | 模型调用的请求体,包含调用模型所需的全部参数,如`model`、`messages`、`enable_thinking`,`thinking_budget`等。请求体中的参数与实时推理接口所支持的参数保持一致。更多参数详情请参考 [OpenAI兼容API](https://help.aliyun.com/zh/model-studio/use-qwen-by-calling-api)。如果您需要进一步扩展,比如支持更多参数(如`max_tokens`, `temperature`等),也可以添加到 `body` 中,参数之间通过英文逗号隔开。示例: `{"custom_id":"1","method":"POST","url":"/v1/chat/completions","body":{"model":"qwen-turbo-latest","stream":true,"enable_thinking":true,"thinking_budget":50,"messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"你是谁?"}],"max_tokens": 1000,"temperature":0.7}} {"custom_id":"2","method":"POST","url":"/v1/chat/completions","body":{"model":"qwen-turbo-latest","stream":true,"enable_thinking":true,"thinking_budget":50,"messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"What is 2+2?"}],"max_tokens": 1000,"temperature":0.7}}` |
|
|||
|
|
| body.model | String | 是 | 本次Batch任务使用的模型。**重要**同一任务的批量请求务必选择同一模型,其思考模式(若支持)也须保持一致。 |
|
|||
|
|
| body.messages | Array | 是 | 消息列表。 `[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "What is 2+2?"} ]` |
|
|||
|
|
| body.enable_thinking | Boolean | 否 | 表示是否开启深度思考。默认为false。设置`enable_thinking` 为 true,qwen3-vl-plus,qwen-plus,qwen-flash,qwen-turbo,qwen-plus-latest、qwen-turbo-latest将开启推理模式,模型会先输出思考过程,再输出回答内容,思考过程在reasoning_content字段输出。**重要**该参数对 qwq-plus 与 deepseek-r1 模型无效。 |
|
|||
|
|
| body.thinking_budget | Integer | 否 | 思考过程最大 Token 数。`thinking_budget`的设置不会影响大模型的思考过程。如果模型思考过程生成的 Token 数超过`thinking_budget`,推理内容会进行截断并立刻开始生成最终回复内容。**重要**该参数对qwq-plus 与 deepseek-r1 模型无效。 |
|
|||
|
|
|
|||
|
|
#### **CSV文件转换为JSONL文件**
|
|||
|
|
|
|||
|
|
如果您有一份第一列为请求id(custom_id)第二列为内容(content)的 CSV 文件,您可以通过下方Python代码快速创建一份符合Batch任务格式的JSONL文件。此特定格式的 CSV 文件应与下方的Python脚本放置在同一目录中。
|
|||
|
|
|
|||
|
|
也可以使用本文提供的模板文件,具体步骤如下:
|
|||
|
|
|
|||
|
|
1. 将模板文件下载到本地,并与下方的Python脚本置于同一目录下;
|
|||
|
|
2. 这里的CSV模板文件格式是第一列为请求id(custom_id),第二列为内容(content),您可以将您的业务问题粘贴到这个文件中。
|
|||
|
|
|
|||
|
|
运行下方 Python 脚本代码后,将在同一目录下生成一个符合Batch任务文件格式的名为`input_demo.jsonl`的JSONL文件。
|
|||
|
|
|
|||
|
|
> 如果需要调整文件路径或其他参数,请根据实际情况修改代码。
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
import csv
|
|||
|
|
import json
|
|||
|
|
def messages_builder_example(content):
|
|||
|
|
messages = [{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": content}]
|
|||
|
|
return messages
|
|||
|
|
|
|||
|
|
with open("input_demo.csv", "r") as fin:
|
|||
|
|
with open("input_demo.jsonl", 'w', encoding='utf-8') as fout:
|
|||
|
|
csvreader = csv.reader(fin)
|
|||
|
|
for row in csvreader:
|
|||
|
|
body = {"model": "qwen-turbo", "messages": messages_builder_example(row[1])}
|
|||
|
|
# 选择Embedding文本向量模型进行调用时,url的值需填写"/v1/embeddings",其他模型填写/v1/chat/completions
|
|||
|
|
request = {"custom_id": row[0], "method": "POST", "url": "/v1/chat/completions", "body": body}
|
|||
|
|
fout.write(json.dumps(request, separators=(',', ':'), ensure_ascii=False) + "\n", )
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **输出文件格式**
|
|||
|
|
|
|||
|
|
JSONL文件,每行一个JSON,对应一个请求结果。
|
|||
|
|
|
|||
|
|
#### 返回示例
|
|||
|
|
|
|||
|
|
一个单行内容示例:
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```plaintext
|
|||
|
|
{"id":"73291560-xxx","custom_id":"1","response":{"status_code":200,"request_id":"73291560-7616-97bf-87f2-7d747bbe84fd","body":{"created":1742303743,"usage":{"completion_tokens":7,"prompt_tokens":26,"total_tokens":33},"model":"qwen-max","id":"chatcmpl-73291560-7616-97bf-87f2-7d747bbe84fd","choices":[{"finish_reason":"stop","index":0,"message":{"content":"2+2 equals 4."}}],"object":"chat.completion"}},"error":null}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
一个多行内容示例:
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```plaintext
|
|||
|
|
{"id":"c308ef7f-xxx","custom_id":"1","response":{"status_code":200,"request_id":"c308ef7f-0824-9c46-96eb-73566f062426","body":{"created":1742303743,"usage":{"completion_tokens":35,"prompt_tokens":26,"total_tokens":61},"model":"qwen-max","id":"chatcmpl-c308ef7f-0824-9c46-96eb-73566f062426","choices":[{"finish_reason":"stop","index":0,"message":{"content":"你好!当然可以。无论是需要信息查询、学习资料、解决问题的方法,还是其他任何帮助,我都在这里为你提供支持。请告诉我你需要什么方面的帮助?"}}],"object":"chat.completion"}},"error":null}
|
|||
|
|
{"id":"73291560-xxx","custom_id":"2","response":{"status_code":200,"request_id":"73291560-7616-97bf-87f2-7d747bbe84fd","body":{"created":1742303743,"usage":{"completion_tokens":7,"prompt_tokens":26,"total_tokens":33},"model":"qwen-max","id":"chatcmpl-73291560-7616-97bf-87f2-7d747bbe84fd","choices":[{"finish_reason":"stop","index":0,"message":{"content":"2+2 equals 4."}}],"object":"chat.completion"}},"error":null}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
深度思考模型,返回示例:
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```plaintext
|
|||
|
|
{"id":"6bcfa649-ac02-9de6-836c-f2fdefe8c4ae","custom_id":"1","response":{"status_code":200,"request_id":"6bcfa649-ac02-9de6-836c-f2fdefe8c4ae","body":{"created":1747103521,"usage":{"completion_tokens":106,"prompt_tokens":22,"completion_tokens_details":{"reasoning_tokens":50},"total_tokens":128},"model":"qwen-turbo-latest","id":"chatcmpl-6bcfa649-ac02-9de6-836c-f2fdefe8c4ae","choices":[{"finish_reason":"stop","index":0,"message":{"role":"assistant","content":"我是通义千问,是阿里巴巴集团旗下的通义实验室研发的超大规模语言模型。我能够回答问题、创作文字、逻辑推理、编程等多种任务。你可以叫我Qwen或者通义千问。有什么我可以帮你的吗?","reasoning_content":"好的,用户问“你是谁?”,我需要给出一个准确且友好的回答。首先,我应该明确自己的身份,即通义千问,由阿里巴巴集团旗下的通义实验室研发。接下来,要说明我的主要功能,"}}],"object":"chat.completion"}},"error":null}
|
|||
|
|
{"id":"d4117b6f-efcf-90e7-b2ee-a064264d4619","custom_id":"2","response":{"status_code":200,"request_id":"d4117b6f-efcf-90e7-b2ee-a064264d4619","body":{"created":1747103521,"usage":{"completion_tokens":63,"prompt_tokens":26,"completion_tokens_details":{"reasoning_tokens":50},"total_tokens":89},"model":"qwen-turbo-latest","id":"chatcmpl-d4117b6f-efcf-90e7-b2ee-a064264d4619","choices":[{"finish_reason":"stop","index":0,"message":{"role":"assistant","content":"2 + 2 equals 4.","reasoning_content":"Okay, the user is asking \"What is 2+2?\" That's a straightforward arithmetic question. Let me think about how to approach this.\n\nFirst, I know that 2 plus 2 is a basic math problem. In standard arithmetic,"}}],"object":"chat.completion"}},"error":null}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### **返回参数**
|
|||
|
|
|
|||
|
|
| | | | |
|
|||
|
|
| ---- | ---- | ---- | ---- |
|
|||
|
|
| | | | |
|
|||
|
|
|
|||
|
|
| **字段** | **类型** | **必选** | **描述** |
|
|||
|
|
| ----------------- | -------- | -------- | ------------------------------- |
|
|||
|
|
| id | String | 是 | 请求ID。 |
|
|||
|
|
| custom_id | String | 是 | 用户自定义的请求ID。 |
|
|||
|
|
| response | Object | 否 | 请求结果。 |
|
|||
|
|
| error | Object | 否 | 异常响应结果。 |
|
|||
|
|
| error.code | String | 否 | 错误码。 |
|
|||
|
|
| error.message | String | 否 | 错误信息。 |
|
|||
|
|
| completion_tokens | Integer | 否 | 完成生成所需的token数。 |
|
|||
|
|
| prompt_tokens | Integer | 否 | prompt的token数。 |
|
|||
|
|
| reasoning_tokens | Integer | 否 | 深度思考模型的思考过程token数。 |
|
|||
|
|
| model | String | 否 | 本次任务进行推理的模型。 |
|
|||
|
|
| reasoning_content | String | 否 | 深度思考模型的思考过程。 |
|
|||
|
|
|
|||
|
|
#### JSONL文件转换为CSV文件
|
|||
|
|
|
|||
|
|
相比于JSONL文件,CSV文件通常只包含必要的数据值,没有额外的键名或其他元数据,非常适合用于自动化脚本和Batch任务。如果您需要将Batch输出的 JSONL 文件转换成 CSV 文件,可以使用以下Python代码实现。
|
|||
|
|
|
|||
|
|
请确保将 `result.jsonl` 文件与下方的 Python 脚本放在同一目录下,运行下方脚本代码后会生成一个名为 `result.csv` 的 CSV 文件。
|
|||
|
|
|
|||
|
|
> 如果需要调整文件路径或其他参数,请根据实际情况修改代码。
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
import json
|
|||
|
|
import csv
|
|||
|
|
columns = ["custom_id",
|
|||
|
|
"model",
|
|||
|
|
"request_id",
|
|||
|
|
"status_code",
|
|||
|
|
"error_code",
|
|||
|
|
"error_message",
|
|||
|
|
"created",
|
|||
|
|
"content",
|
|||
|
|
"usage"]
|
|||
|
|
|
|||
|
|
def dict_get_string(dict_obj, path):
|
|||
|
|
obj = dict_obj
|
|||
|
|
try:
|
|||
|
|
for element in path:
|
|||
|
|
obj = obj[element]
|
|||
|
|
return obj
|
|||
|
|
except:
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
with open("result.jsonl", "r") as fin:
|
|||
|
|
with open("result.csv", 'w', encoding='utf-8') as fout:
|
|||
|
|
rows = [columns]
|
|||
|
|
for line in fin:
|
|||
|
|
request_result = json.loads(line)
|
|||
|
|
row = [dict_get_string(request_result, ["custom_id"]),
|
|||
|
|
dict_get_string(request_result, ["response", "body", "model"]),
|
|||
|
|
dict_get_string(request_result, ["response", "request_id"]),
|
|||
|
|
dict_get_string(request_result, ["response", "status_code"]),
|
|||
|
|
dict_get_string(request_result, ["error", "error_code"]),
|
|||
|
|
dict_get_string(request_result, ["error", "error_message"]),
|
|||
|
|
dict_get_string(request_result, ["response", "body", "created"]),
|
|||
|
|
dict_get_string(request_result, ["response", "body", "choices", 0, "message", "content"]),
|
|||
|
|
dict_get_string(request_result, ["response", "body", "usage"])]
|
|||
|
|
rows.append(row)
|
|||
|
|
writer = csv.writer(fout)
|
|||
|
|
writer.writerows(rows)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
> 当CSV文件中包含中文字符,并且使用Excel打开时遇到乱码问题时,可以使用文本编辑器(如Sublime)将CSV文件的编码转换为GBK,然后再用Excel打开。另一种方法是在Excel中新建一个Excel文件,并在导入数据时指定正确的编码格式UTF-8。
|
|||
|
|
|
|||
|
|
## **具体流程**
|
|||
|
|
|
|||
|
|
### **1. 准备与上传文件**
|
|||
|
|
|
|||
|
|
> 如果您需要[使用OSS文件创建Batch任务](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#f667257850olj),可跳过此步骤。
|
|||
|
|
|
|||
|
|
创建Batch任务前,需要您将准备好的符合[输入文件格式](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#578afe12c1uvz)要求的JSONL文件,通过以下的文件上传接口上传后,获取`file_id`,通过purpose参数指定上传文件的用途为`batch`。
|
|||
|
|
|
|||
|
|
您可以上传Batch任务的单个文件最大为500 MB;当前阿里云账号下的百炼存储空间支持的最大文件数为10000个,文件总量不超过100 GB,文件暂时没有有效期。当您的文件空间达到限制后,可以通过[删除文件](https://help.aliyun.com/zh/model-studio/openai-file-interface#a1edc56340slx)接口删除不需要的文件以释放空间。
|
|||
|
|
|
|||
|
|
OpenAI Python SDK
|
|||
|
|
|
|||
|
|
curl
|
|||
|
|
|
|||
|
|
#### 请求示例
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
import os
|
|||
|
|
from pathlib import Path
|
|||
|
|
from openai import OpenAI
|
|||
|
|
|
|||
|
|
client = OpenAI(
|
|||
|
|
# 若没有配置环境变量,可用阿里云百炼API Key将下行替换为:api_key="sk-xxx"。但不建议在生产环境中直接将API Key硬编码到代码中,以减少API Key泄露风险。
|
|||
|
|
# 新加坡和北京地域的API Key不同。获取API Key:https://help.aliyun.com/zh/model-studio/get-api-key
|
|||
|
|
api_key=os.getenv("DASHSCOPE_API_KEY"),
|
|||
|
|
# 以下是北京地域base-url,如果使用新加坡地域的模型,需要将base_url替换为:https://dashscope-intl.aliyuncs.com/compatible-mode/v1
|
|||
|
|
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", # 阿里云百炼服务的base_url
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# test.jsonl 是一个本地示例文件,purpose必须是batch
|
|||
|
|
file_object = client.files.create(file=Path("test.jsonl"), purpose="batch")
|
|||
|
|
|
|||
|
|
print(file_object.model_dump_json())
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
测试文件test.jsonl内容:
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```plaintext
|
|||
|
|
{"custom_id":"1","method":"POST","url":"/v1/chat/completions","body":{"model":"qwen-plus","messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"你好!有什么可以帮助你的吗?"}]}}
|
|||
|
|
{"custom_id":"2","method":"POST","url":"/v1/chat/completions","body":{"model":"qwen-plus","messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"What is 2+2?"}]}}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 返回示例
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"id": "file-batch-xxx",
|
|||
|
|
"bytes": 437,
|
|||
|
|
"created_at": 1742304153,
|
|||
|
|
"filename": "test.jsonl",
|
|||
|
|
"object": "file",
|
|||
|
|
"purpose": "batch",
|
|||
|
|
"status": "processed",
|
|||
|
|
"status_details": null
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **2. 创建Batch任务**
|
|||
|
|
|
|||
|
|
您可以通过两种方式使用`input_file_id`参数创建Batch任务:一是传入[准备与上传文件](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#a6e2ba320a8nt)接口返回的文件ID;二是传入[OSS文件URL或资源标识符](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#f667257850olj)。第二种方式无需调用上传文件接口,避免上传文件的数量和总容量限制。
|
|||
|
|
|
|||
|
|
接口限流:每个阿里云主账号**每分钟1000次**,最大运行任务数**1000个**(包括所有未结束的任务,超过最大任务数,需要等任务结束后才能再创建)。
|
|||
|
|
|
|||
|
|
OpenAI Python SDK
|
|||
|
|
|
|||
|
|
curl
|
|||
|
|
|
|||
|
|
#### 请求示例
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
import os
|
|||
|
|
from openai import OpenAI
|
|||
|
|
|
|||
|
|
client = OpenAI(
|
|||
|
|
# 若没有配置环境变量,可用阿里云百炼API Key将下行替换为:api_key="sk-xxx"。但不建议在生产环境中直接将API Key硬编码到代码中,以减少API Key泄露风险。
|
|||
|
|
# 新加坡和北京地域的API Key不同。获取API Key:https://help.aliyun.com/zh/model-studio/get-api-key
|
|||
|
|
api_key=os.getenv("DASHSCOPE_API_KEY"),
|
|||
|
|
# 以下是北京地域base-url,如果使用新加坡地域的模型,需要将base_url替换为:https://dashscope-intl.aliyuncs.com/compatible-mode/v1
|
|||
|
|
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", # 阿里云百炼服务的base_url
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
batch = client.batches.create(
|
|||
|
|
input_file_id="file-batch-xxx", # 上传文件返回的id或OSS文件URL或OSS文件资源标识符
|
|||
|
|
endpoint="/v1/chat/completions", # Embedding文本向量模型填写/v1/embeddings,测试模型batch-test-model填写/v1/chat/ds-test,其他模型填写/v1/chat/completions
|
|||
|
|
completion_window="24h",
|
|||
|
|
metadata={'ds_name':"任务名称",'ds_description':'任务描述'} # metadata数据,非必填字段,用于创建任务名称、描述
|
|||
|
|
)
|
|||
|
|
print(batch)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### **输入参数配置**
|
|||
|
|
|
|||
|
|
| | | | | |
|
|||
|
|
| ---- | ---- | ---- | ---- | ---- |
|
|||
|
|
| | | | | |
|
|||
|
|
|
|||
|
|
| **字段** | **类型** | **传参方式** | **必选** | **描述** |
|
|||
|
|
| ----------------------- | -------- | ------------ | -------- | ------------------------------------------------------------ |
|
|||
|
|
| input_file_id | String | Body | 是 | 用于指定文件ID、OSS文件URL或OSS文件资源标识符,作为Batch任务的输入文件。您可以通过以下任一方式提供此参数:[准备与上传文件](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#a6e2ba320a8nt)接口返回的文件ID,如`file-batch-xxx`;[使用OSS文件创建Batch任务](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#f667257850olj)。 |
|
|||
|
|
| endpoint | String | Body | 是 | 访问路径,需和输入文件中的url字段保持一致。Embedding文本向量模型填写`/v1/embeddings`测试模型`batch-test-model`填写`/v1/chat/ds-test`其他模型填写`/v1/chat/completions` |
|
|||
|
|
| completion_window | String | Body | 是 | 等待时间,支持最短等待时间24h,最长等待时间336h,仅支持整数。支持"h"和"d"两个单位,如"24h"或"14d"。 |
|
|||
|
|
| metadata | Map | Body | 否 | 任务扩展元数据,以键值对形式附加信息。 |
|
|||
|
|
| metadata.ds_name | String | Body | 否 | 任务名称。示例:`"ds_name":"Batch任务"`限制:长度不超过100个字符。若重复定义该字段,以最后一次传入的值为准。 |
|
|||
|
|
| metadata.ds_description | String | Body | 否 | 任务描述。示例:`"ds_description":"Batch推理任务测试"`限制:长度不超过200个字符。若重复定义该字段,以最后一次传入的值为准。 |
|
|||
|
|
|
|||
|
|
#### 返回示例
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"id": "batch_xxx",
|
|||
|
|
"object": "batch",
|
|||
|
|
"endpoint": "/v1/chat/completions",
|
|||
|
|
"errors": null,
|
|||
|
|
"input_file_id": "file-batch-xxx",
|
|||
|
|
"completion_window": "24h",
|
|||
|
|
"status": "validating",
|
|||
|
|
"output_file_id": null,
|
|||
|
|
"error_file_id": null,
|
|||
|
|
"created_at": 1742367779,
|
|||
|
|
"in_progress_at": null,
|
|||
|
|
"expires_at": null,
|
|||
|
|
"finalizing_at": null,
|
|||
|
|
"completed_at": null,
|
|||
|
|
"failed_at": null,
|
|||
|
|
"expired_at": null,
|
|||
|
|
"cancelling_at": null,
|
|||
|
|
"cancelled_at": null,
|
|||
|
|
"request_counts": {
|
|||
|
|
"total": 0,
|
|||
|
|
"completed": 0,
|
|||
|
|
"failed": 0
|
|||
|
|
},
|
|||
|
|
"metadata": {
|
|||
|
|
"ds_name": "任务名称",
|
|||
|
|
"ds_description": "任务描述"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 返回参数
|
|||
|
|
|
|||
|
|
| | | |
|
|||
|
|
| ---- | ---- | ---- |
|
|||
|
|
| | | |
|
|||
|
|
|
|||
|
|
| **字段** | **类型** | **描述** |
|
|||
|
|
| ----------------------- | -------- | ------------------------------------------------------------ |
|
|||
|
|
| id | String | Batch任务 ID。 |
|
|||
|
|
| object | String | 对象类型,固定值`batch`。 |
|
|||
|
|
| endpoint | String | 访问路径。 |
|
|||
|
|
| errors | Map | 错误信息。 |
|
|||
|
|
| input_file_id | String | 文件ID或OSS文件 URL或OSS文件资源标识符。 |
|
|||
|
|
| completion_window | String | 等待时间,支持最短等待时间24h,最长等待时间336h,仅支持整数。支持"h"和"d"两个单位,如"24h"或"14d"。 |
|
|||
|
|
| status | String | 任务状态,包括validating、failed、in_progress、finalizing、completed、expired、cancelling、cancelled。 |
|
|||
|
|
| output_file_id | String | 执行成功请求的输出文件id。 |
|
|||
|
|
| error_file_id | String | 执行错误请求的输出文件id。 |
|
|||
|
|
| created_at | Integer | 任务创建的Unix 时间戳(秒)。 |
|
|||
|
|
| in_progress_at | Integer | 任务开始运行的Unix时间戳(秒)。 |
|
|||
|
|
| expires_at | Integer | 任务开始超时的时间戳(秒)。 |
|
|||
|
|
| finalizing_at | Integer | 任务最后开始时间戳(秒)。 |
|
|||
|
|
| completed_at | Integer | 任务完成的时间戳(秒)。 |
|
|||
|
|
| failed_at | Integer | 任务失败的时间戳(秒)。 |
|
|||
|
|
| expired_at | Integer | 任务超时的时间戳(秒)。 |
|
|||
|
|
| cancelling_at | Integer | 任务设置为取消中的时间戳(秒)。 |
|
|||
|
|
| cancelled_at | Integer | 任务取消的时间戳(秒)。 |
|
|||
|
|
| request_counts | Map | 不同状态的请求数量。 |
|
|||
|
|
| metadata | Map | 附加信息,键值对。 |
|
|||
|
|
| metadata.ds_name | String | 当前任务的任务名称。 |
|
|||
|
|
| metadata.ds_description | String | 当前任务的任务描述。 |
|
|||
|
|
|
|||
|
|
### 3. 查询**与管理Batch任务**
|
|||
|
|
|
|||
|
|
#### 查询**Batch任务详情**
|
|||
|
|
|
|||
|
|
通过传入[创建Batch任务](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#5c05b52932th8)返回的Batch任务ID,来查询指定Batch任务的信息。当前仅支持查询30天之内创建的Batch任务。
|
|||
|
|
|
|||
|
|
接口限流:每个阿里云主账号**每分钟1000次**(由于Batch任务执行需要一些时间,建议创建Batch任务之后,每分钟调用1次该查询接口获取任务信息)。
|
|||
|
|
|
|||
|
|
OpenAI Python SDK
|
|||
|
|
|
|||
|
|
curl
|
|||
|
|
|
|||
|
|
#### 请求示例
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
import os
|
|||
|
|
from openai import OpenAI
|
|||
|
|
|
|||
|
|
client = OpenAI(
|
|||
|
|
# 若没有配置环境变量,可用阿里云百炼API Key将下行替换为:api_key="sk-xxx"。但不建议在生产环境中直接将API Key硬编码到代码中,以减少API Key泄露风险。
|
|||
|
|
# 新加坡和北京地域的API Key不同。获取API Key:https://help.aliyun.com/zh/model-studio/get-api-key
|
|||
|
|
api_key=os.getenv("DASHSCOPE_API_KEY"),
|
|||
|
|
# 以下是北京地域base-url,如果使用新加坡地域的模型,需要将base_url替换为:https://dashscope-intl.aliyuncs.com/compatible-mode/v1
|
|||
|
|
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
|
|||
|
|
)
|
|||
|
|
batch = client.batches.retrieve("batch_id") # 将batch_id替换为Batch任务的id
|
|||
|
|
print(batch)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### **输入参数配置**
|
|||
|
|
|
|||
|
|
| | | | | |
|
|||
|
|
| ---- | ---- | ---- | ---- | ---- |
|
|||
|
|
| | | | | |
|
|||
|
|
|
|||
|
|
| **字段** | **类型** | **传参方式** | **必选** | **描述** |
|
|||
|
|
| -------- | -------- | ------------ | -------- | ------------------------------------------------------------ |
|
|||
|
|
| batch_id | String | Path | 是 | 需要查询的Batch任务的ID([创建Batch任务](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#5c05b52932th8)返回的Batch任务ID),以batch开头,例如“batch_xxx”。 |
|
|||
|
|
|
|||
|
|
#### **返回示例**
|
|||
|
|
|
|||
|
|
请参见[创建Batch任务](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#5c05b52932th8)的返回示例。
|
|||
|
|
|
|||
|
|
#### **返回参数**
|
|||
|
|
|
|||
|
|
请参见[创建Batch任务](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#5c05b52932th8)的返回参数。
|
|||
|
|
|
|||
|
|
返回参数中`output_file_id`和`error_file_id`可以通过[下载Batch结果文件](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#0c3e41006bkox)获取内容。
|
|||
|
|
|
|||
|
|
#### **查询Batch任务列表**
|
|||
|
|
|
|||
|
|
您可以使用 `batches.list()` 方法查询 Batch 任务列表,并通过分页机制逐步获取完整的任务列表。
|
|||
|
|
|
|||
|
|
- 使用 `after` 参数:传入上一页最后一个Batch任务的 ID,以获取下一页数据。
|
|||
|
|
- 使用 `limit` 参数:设定返回的任务数量。
|
|||
|
|
- 支持通过`input_file_ids`等参数进行过滤查询。
|
|||
|
|
|
|||
|
|
接口限流:每个阿里云主账号**每分钟100次**。
|
|||
|
|
|
|||
|
|
OpenAI Python SDK
|
|||
|
|
|
|||
|
|
curl
|
|||
|
|
|
|||
|
|
#### **请求示例**
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
import os
|
|||
|
|
from openai import OpenAI
|
|||
|
|
|
|||
|
|
client = OpenAI(
|
|||
|
|
# 若没有配置环境变量,可用阿里云百炼API Key将下行替换为:api_key="sk-xxx"。但不建议在生产环境中直接将API Key硬编码到代码中,以减少API Key泄露风险。
|
|||
|
|
# 新加坡和北京地域的API Key不同。获取API Key:https://help.aliyun.com/zh/model-studio/get-api-key
|
|||
|
|
api_key=os.getenv("DASHSCOPE_API_KEY"),
|
|||
|
|
# 以下是北京地域base-url,如果使用新加坡地域的模型,需要将base_url替换为:https://dashscope-intl.aliyuncs.com/compatible-mode/v1
|
|||
|
|
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
|
|||
|
|
)
|
|||
|
|
batches = client.batches.list(after="batch_xxx", limit=2,extra_query={'ds_name':'任务名称','input_file_ids':'file-batch-xxx,file-batch-xxx','status':'completed,expired','create_after':'20250304000000','create_before':'20250306123000'})
|
|||
|
|
print(batches)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### **输入参数配置**
|
|||
|
|
|
|||
|
|
| | | | | |
|
|||
|
|
| ---- | ---- | ---- | ---- | ---- |
|
|||
|
|
| | | | | |
|
|||
|
|
|
|||
|
|
| **字段** | **类型** | **传参方式** | **必选** | **描述** |
|
|||
|
|
| -------------- | -------- | ------------ | -------- | ------------------------------------------------------------ |
|
|||
|
|
| after | String | Query | 否 | 用于分页的游标,参数`after`的取值为Batch任务ID,表示查询该ID之后的数据。分页查询时,可以将返回结果中的最后一个Batch任务ID(last_id)赋值给该参数,以获取下一页的数据。例如,若本次查询返回了20行数据,且最后一个Batch任务 ID(即last_id)是batch_xxx,则后续查询时可以设置`after=batch_xxx`,以获取列表的下一页。 |
|
|||
|
|
| limit | Integer | Query | 否 | 每次查询返回的Batch任务数量,范围[1,100],默认20。 |
|
|||
|
|
| ds_name | String | Query | 否 | 根据任务名称进行模糊筛选,输入任意连续字符片段即可匹配包含该内容的任务名称(如输入“Batch”可匹配“ Batch任务”、“Batch任务_20240319”等)。 |
|
|||
|
|
| input_file_ids | String | Query | 否 | 筛选多个文件ID,以英文逗号分隔,最多可填写20个。[准备与上传文件](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#a6e2ba320a8nt)返回的文件ID或[OSS文件URL或资源标识符](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#f667257850olj)。 |
|
|||
|
|
| status | String | Query | 否 | 筛选多个状态,以英文逗号分隔,包括validating、failed、in_progress、finalizing、completed、expired、cancelling、cancelled。 |
|
|||
|
|
| create_after | String | Query | 否 | 筛选在此时间点之后创建的任务,格式:`yyyyMMddHHmmss`。例如,您想筛选2025年03月04日00点00分00秒时间点之后创建的任务,可写为`20250304000000`。 |
|
|||
|
|
| create_before | String | Query | 否 | 筛选在此时间点之前创建的任务,格式:`yyyyMMddHHmmss`。例如,您想筛选2025年3月4日12点30分0秒时间点之前创建的任务,可写为`20250304123000`。 |
|
|||
|
|
|
|||
|
|
#### **返回示例**
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"object": "list",
|
|||
|
|
"data": [
|
|||
|
|
{
|
|||
|
|
"id": "batch_xxx",
|
|||
|
|
"object": "batch",
|
|||
|
|
"endpoint": "/v1/chat/completions",
|
|||
|
|
"errors": null,
|
|||
|
|
"input_file_id": "file-batch-xxx",
|
|||
|
|
"completion_window": "24h",
|
|||
|
|
"status": "completed",
|
|||
|
|
"output_file_id": "file-batch_output-xxx",
|
|||
|
|
"error_file_id": null,
|
|||
|
|
"created_at": 1722234109,
|
|||
|
|
"in_progress_at": 1722234109,
|
|||
|
|
"expires_at": null,
|
|||
|
|
"finalizing_at": 1722234165,
|
|||
|
|
"completed_at": 1722234165,
|
|||
|
|
"failed_at": null,
|
|||
|
|
"expired_at": null,
|
|||
|
|
"cancelling_at": null,
|
|||
|
|
"cancelled_at": null,
|
|||
|
|
"request_counts": {
|
|||
|
|
"total": 100,
|
|||
|
|
"completed": 95,
|
|||
|
|
"failed": 5
|
|||
|
|
},
|
|||
|
|
"metadata": {}
|
|||
|
|
},
|
|||
|
|
{ ... }
|
|||
|
|
],
|
|||
|
|
"first_id": "batch_xxx",
|
|||
|
|
"last_id": "batch_xxx",
|
|||
|
|
"has_more": true
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### **返回参数**
|
|||
|
|
|
|||
|
|
| | | |
|
|||
|
|
| ---- | ---- | ---- |
|
|||
|
|
| | | |
|
|||
|
|
|
|||
|
|
| **字段** | **类型** | **描述** |
|
|||
|
|
| -------- | -------- | -------------------------------------------- |
|
|||
|
|
| object | String | 类型,固定值list。 |
|
|||
|
|
| data | Array | Batch任务对象,参见创建Batch任务的返回参数。 |
|
|||
|
|
| first_id | String | 当前页第一个 Batch任务 ID。 |
|
|||
|
|
| last_id | String | 当前页最后一个Batch任务 ID。 |
|
|||
|
|
| has_more | Boolean | 是否有下一页。 |
|
|||
|
|
|
|||
|
|
#### **取消Batch任务**
|
|||
|
|
|
|||
|
|
通过传入[创建Batch任务](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#5c05b52932th8)返回的Batch任务ID,来取消指定的Batch任务。
|
|||
|
|
|
|||
|
|
接口限流:每个阿里云主账号**每分钟1000次**。
|
|||
|
|
|
|||
|
|
OpenAI Python SDK
|
|||
|
|
|
|||
|
|
curl
|
|||
|
|
|
|||
|
|
#### 请求示例
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
import os
|
|||
|
|
from openai import OpenAI
|
|||
|
|
|
|||
|
|
client = OpenAI(
|
|||
|
|
# 若没有配置环境变量,可用阿里云百炼API Key将下行替换为:api_key="sk-xxx"。但不建议在生产环境中直接将API Key硬编码到代码中,以减少API Key泄露风险。
|
|||
|
|
# 新加坡和北京地域的API Key不同。获取API Key:https://help.aliyun.com/zh/model-studio/get-api-key
|
|||
|
|
api_key=os.getenv("DASHSCOPE_API_KEY"),
|
|||
|
|
# 以下是北京地域base-url,如果使用新加坡地域的模型,需要将base_url替换为:https://dashscope-intl.aliyuncs.com/compatible-mode/v1
|
|||
|
|
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", # 阿里云百炼服务的base_url
|
|||
|
|
)
|
|||
|
|
batch = client.batches.cancel("batch_id") # 将batch_id替换为Batch任务的id
|
|||
|
|
print(batch)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### **输入参数配置**
|
|||
|
|
|
|||
|
|
| | | | | |
|
|||
|
|
| ---- | ---- | ---- | ---- | ---- |
|
|||
|
|
| | | | | |
|
|||
|
|
|
|||
|
|
| **字段** | **类型** | **传参方式** | **必选** | **描述** |
|
|||
|
|
| -------- | -------- | ------------ | -------- | ------------------------------------------------------- |
|
|||
|
|
| batch_id | String | Path | 是 | 需要取消的Batch任务的id,以batch开头,例如“batch_xxx”。 |
|
|||
|
|
|
|||
|
|
#### **返回示例**
|
|||
|
|
|
|||
|
|
请参见[创建Batch任务](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#5c05b52932th8)的返回示例。
|
|||
|
|
|
|||
|
|
#### **返回参数**
|
|||
|
|
|
|||
|
|
请参见[创建Batch任务](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#5c05b52932th8)的返回参数。
|
|||
|
|
|
|||
|
|
### **4. 下载Batch结果文件**
|
|||
|
|
|
|||
|
|
在Batch推理任务结束后,您可以通过接口下载结果文件。
|
|||
|
|
|
|||
|
|
> 您可以通过[查询Batch任务详情](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#9eb7dc5460fd7)或通过[查询Batch任务列表](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#0f2a6fe7378pc)返回参数中的`output_file_id`获取下载文件的`file_id`。仅支持下载以`file-batch_output`开头的`file_id`对应的文件。
|
|||
|
|
|
|||
|
|
OpenAI Python SDK
|
|||
|
|
|
|||
|
|
curl
|
|||
|
|
|
|||
|
|
您可以通过`content`方法获取Batch任务结果文件内容,并通过`write_to_file`方法将其保存至本地。
|
|||
|
|
|
|||
|
|
#### 请求示例
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
import os
|
|||
|
|
from openai import OpenAI
|
|||
|
|
|
|||
|
|
client = OpenAI(
|
|||
|
|
# 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:api_key="sk-xxx",
|
|||
|
|
# 新加坡和北京地域的API Key不同。获取API Key:https://help.aliyun.com/zh/model-studio/get-api-key
|
|||
|
|
api_key=os.getenv("DASHSCOPE_API_KEY"),
|
|||
|
|
# 以下是北京地域base-url,如果使用新加坡地域的模型,需要将base_url替换为:https://dashscope-intl.aliyuncs.com/compatible-mode/v1
|
|||
|
|
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
|
|||
|
|
)
|
|||
|
|
content = client.files.content(file_id="file-batch_output-xxx")
|
|||
|
|
# 打印结果文件内容
|
|||
|
|
print(content.text)
|
|||
|
|
# 保存结果文件至本地
|
|||
|
|
content.write_to_file("result.jsonl")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 返回示例
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{"id":"c308ef7f-xxx","custom_id":"1","response":{"status_code":200,"request_id":"c308ef7f-0824-9c46-96eb-73566f062426","body":{"created":1742303743,"usage":{"completion_tokens":35,"prompt_tokens":26,"total_tokens":61},"model":"qwen-plus","id":"chatcmpl-c308ef7f-0824-9c46-96eb-73566f062426","choices":[{"finish_reason":"stop","index":0,"message":{"content":"你好!当然可以。无论是需要信息查询、学习资料、解决问题的方法,还是其他任何帮助,我都在这里为你提供支持。请告诉我你需要什么方面的帮助?"}}],"object":"chat.completion"}},"error":null}
|
|||
|
|
{"id":"73291560-xxx","custom_id":"2","response":{"status_code":200,"request_id":"73291560-7616-97bf-87f2-7d747bbe84fd","body":{"created":1742303743,"usage":{"completion_tokens":7,"prompt_tokens":26,"total_tokens":33},"model":"qwen-plus","id":"chatcmpl-73291560-7616-97bf-87f2-7d747bbe84fd","choices":[{"finish_reason":"stop","index":0,"message":{"content":"2+2 equals 4."}}],"object":"chat.completion"}},"error":null}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### **输入参数配置**
|
|||
|
|
|
|||
|
|
| | | | | |
|
|||
|
|
| ---- | ---- | ---- | ---- | ---- |
|
|||
|
|
| | | | | |
|
|||
|
|
|
|||
|
|
| **字段** | **类型** | **传参方式** | **必选** | **描述** |
|
|||
|
|
| -------- | -------- | ------------ | -------- | ------------------------------------------------------------ |
|
|||
|
|
| file_id | string | Path | 是 | 需要下载的文件的ID,[查询Batch任务详情](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#9eb7dc5460fd7)或通过[查询Batch任务列表](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#0f2a6fe7378pc)返回参数中的`output_file_id`值。 |
|
|||
|
|
|
|||
|
|
#### **返回结果**
|
|||
|
|
|
|||
|
|
Batch任务结果的JSONL文件,格式请参考[输出文件格式](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#5d7e13e043cxu)。
|
|||
|
|
|
|||
|
|
## **扩展功能**
|
|||
|
|
|
|||
|
|
### **使用OSS文件创建Batch任务**
|
|||
|
|
|
|||
|
|
[创建Batch任务](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#ad26763d91p5o)时,为避免上传文件的数量和总容量限制,您可通过`input_file_id`参数直接传入符合[输入文件格式](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#578afe12c1uvz)要求的OSS文件URL或资源标识符,无需调用接口上传文件。根据数据安全需求,可选择以下两种方式:
|
|||
|
|
|
|||
|
|
**使用建议**
|
|||
|
|
|
|||
|
|
- **数据安全要求**
|
|||
|
|
- 高安全性场景:优先采用[方式二:使用OSS文件资源标识符](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#1aa802dd30mm7),保障访问权限控制;
|
|||
|
|
- 普通场景:可选择[方式一:使用OSS文件URL](https://help.aliyun.com/zh/model-studio/batch-interfaces-compatible-with-openai?spm=a2c4g.11186623.0.0.759763718fX3zK#16725fdb6aui3),但存在链接泄露风险,您可进入目标bucket页面选择**权限控制**管理权限。
|
|||
|
|
- **地域选择原则**
|
|||
|
|
- 建议您使用与阿里云百炼服务同地域`cn-beijing`的Bucket。
|
|||
|
|
|
|||
|
|
#### **方式一:使用OSS文件URL**
|
|||
|
|
|
|||
|
|
1. **获取文件URL:**
|
|||
|
|
|
|||
|
|
1. OSS管理控制台方式:
|
|||
|
|
|
|||
|
|
1. 进入**[\**Bucket列表\**](https://oss.console.aliyun.com/bucket)**页面,找到目标Bucket并单击名称;
|
|||
|
|
|
|||
|
|
2. 在**文件列表**中定位目标文件,单击右侧**详情**按钮;
|
|||
|
|
|
|||
|
|
> 您可在**文件列表**中新建子文件夹如Batch/20250317并上传文件,示例[test.jsonl](https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250319/gkflof/test.jsonl)。
|
|||
|
|
|
|||
|
|
3. 在弹出面板中,单击**复制文件URL**。
|
|||
|
|
|
|||
|
|
2. SDK方式:生成OSS文件URL,参考[使用预签名URL下载文件](https://help.aliyun.com/zh/oss/developer-reference/download-using-a-presigned-url)。
|
|||
|
|
|
|||
|
|
2. **参数配置**:参数`input_file_id`填写OSS文件URL,示例:
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
input_file_id="https://testbucket.oss-cn-beijing.aliyuncs.com/xxx/xxx/Batch/20250317/test.jsonl?Expires=xxx"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### **方式二:使用OSS文件资源标识符**
|
|||
|
|
|
|||
|
|
1. **授权阿里云百炼访问当前账号下的OSS Bucket:**
|
|||
|
|
|
|||
|
|
参阅[OSS服务关联角色授权步骤](https://help.aliyun.com/zh/model-studio/user-guide/oss-data-import-authorization-guide?spm=a2c4g.11186623.help-menu-2400256.d_1_8_0_2.6a316c77ulo2FN#718b8754273gb)完成授权并对目标Bucket[添加标签](https://help.aliyun.com/zh/model-studio/user-guide/oss-data-import-authorization-guide?spm=a2c4g.11186623.help-menu-2400256.d_1_8_0_2.6a316c77ulo2FN#136548e70b7ez)。
|
|||
|
|
|
|||
|
|
2. **参数配置**:
|
|||
|
|
|
|||
|
|
1. 参数`input_file_id`填写OSS文件的资源标识符,格式为`oss:{region}:{bucket}/{file_path}`,示例:
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
input_file_id="oss:cn-beijing:bucketTest/Batch/20250313/test.jsonl"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. 参数说明表:
|
|||
|
|
|
|||
|
|
| | | | |
|
|||
|
|
| ---- | ---- | ---- | ---- |
|
|||
|
|
| | | | |
|
|||
|
|
|
|||
|
|
| **字段** | **类型** | **必选** | **描述** |
|
|||
|
|
| --------- | -------- | -------- | -------------------------------------------- |
|
|||
|
|
| region | String | 是 | OSS的bucket所在地域,如`cn-beijing`。 |
|
|||
|
|
| bucket | String | 是 | OSS的bucket名称,如`bucketTest`。 |
|
|||
|
|
| file_path | String | 是 | OSS文件路径,如`Batch/20250313/test.jsonl`。 |
|
|||
|
|
|
|||
|
|
### **Batch支持任务完成通知**
|
|||
|
|
|
|||
|
|
Batch任务提交后可通过查询接口实时获取任务状态和执行信息,但频繁查询长时间运行的任务会导致效率低下,因此,Batch任务提供以下两种异步通知方式来获取**任务完成**的通知:
|
|||
|
|
|
|||
|
|
- **Callback回调:**需要您提供一个公网可访问的API接口,任务完成后将自动推送状态到指定URL。适用于已有公网资源的场景,对接简单。
|
|||
|
|
- **EventBridge消息队列:**无需公网接口,但需要您自行创建RocketMQ消息队列来接收通知,适用于无公网服务的内部系统环境。
|
|||
|
|
|
|||
|
|
您可以根据具体需求和现有条件选择合适的通知方式,以提高任务管理的效率。
|
|||
|
|
|
|||
|
|
**Callback回调**
|
|||
|
|
|
|||
|
|
**EventBridge消息队列**
|
|||
|
|
|
|||
|
|
## 错误码
|
|||
|
|
|
|||
|
|
如果调用失败并返回报错信息,请参见[错误信息](https://help.aliyun.com/zh/model-studio/error-code)进行解决。
|
|||
|
|
|
|||
|
|
## **常见问题**
|
|||
|
|
|
|||
|
|
1. **这几个模块的Batch定价,对应的模型也有基础限流吗?**
|
|||
|
|
|
|||
|
|
答:实时调用才会有RPM(Requests Per Minute:每分钟处理请求数)限流,Batch调用没有 RPM 限流。
|
|||
|
|
|
|||
|
|
2. **使用Batch调用,是否需要下单,在哪里下单?**
|
|||
|
|
|
|||
|
|
答:Batch是一种调用方式,无需额外下单。该调用方式为后付费计价模式,按照Batch接口调用直接付费。
|
|||
|
|
|
|||
|
|
3. **提交的Batch调用请求,后台如何处理? 是根据提交请求的先后顺序来执行吗?**
|
|||
|
|
|
|||
|
|
答:不是排队机制,是调度机制,根据资源情况来调度和执行Batch请求任务。
|
|||
|
|
|
|||
|
|
4. **提交的Batch调用请求,实际执行完成需要多长时间?**
|
|||
|
|
|
|||
|
|
答:Batch任务的执行时间取决于系统的资源分配情况。
|
|||
|
|
|
|||
|
|
在系统资源紧张时,任务可能无法在设定的最长等待时间内全部完成。
|
|||
|
|
|
|||
|
|
因此,对模型推理的时效性有严格要求的场景,建议使用实时调用;而对于处理大规模数据且对时效性有一定容忍度的场景,推荐使用Batch调用。
|