调用大模型 API 解决简单信息处理任务
近年来大模型的发展推动了不同领域的范式变革,大模型强悍的理解、推理和生成能力使得其在各类任务中取得优异表现。
如今,随着大模型相关产业不断成熟,大模型的使用门槛也逐渐降低:不仅不具备大模型硬件本地部署条件的用户可以通过 API 获取大模型服务,且多家服务商提供了多样化的服务可供用户选择,调用 API 的成本也逐渐降低。
本文将以 智谱 AI 开放平台 为例,简要介绍如何调用大模型 API 解决简单信息处理任务,其他平台的使用方法可类推。
如需具体了解智谱 AI 开放平台的详细功能,可以参考 智谱 AI 开放平台开发文档
开发平台准备
进入 智谱 AI 开放平台,注册账号。
点击右上角的用户图标,进入个人中心,点击「实名认证」选项卡完成实名认证。
随后点击右上角的「API 密钥」,创建一个 API 密钥。
点击复制即可复制密钥,这是调用 API 时服务端验证的凭证。
本地环境准备
在本地用于调用 API 的 Python 环境中,安装 zhipuai
包:
1 | pip install zhipuai |
安装完成后,可以参照 接口文档 中的 SDK 代码示例,执行一个简单的 API 调用,测试是否能够成功调用 API。
1 | from zhipuai import ZhipuAI |
这是一个要求智谱 AI 模型为用户创作 slogan 的例子,如果调用成功,将会输出智谱 AI 为用户创作的 slogan:
1 | CompletionMessage(content='"智领变革,图创未来 —— 智谱AI,智慧加速每一步"', role='assistant', tool_calls=None) |
至此,本地环境准备完成。
信息抽取任务应用
在线和本地环境准备完成后,我们就可以使用已有条件解决我们的实际问题了。事实上,我们在利用大模型 API 的理解与生成能力解决实际信息抽取任务中的问题时,都满足一个最基本的流程:
- 构造有利于模型理解的输入。将待处理的数据和要求(体现为提示词 Prompt)转化为模型可理解的格式。这也是 提示工程 的重要一环。
- 调用 API。将构造好的输入传入 API,调用模型进行处理,获取模型的输出。
- 解析输出。将模型输出解析为我们需要的结果。为了提升解析的效率,我们可以在设计提示词时就考虑输出的格式,作为要求的一部分。
下面,我们以抽取主题词为例,展示如何使用大模型 API 解决简单信息抽取任务。
构造输入
我们构造的提示词输入是包含数据和要求的文本。设计提示词存在许多技巧,能够显著提升模型的输出效果,在这里不赘述具体技巧。我们这里直接使用智谱 AI 的 Prompt 优化专家 为我们的任务设计提示词:
(我的输入) 我想要模型是一个能够理解学术论文文本内容的主题词提取专家。
我将向模型提供若干篇学术论文的标题和摘要内容,要求模型为每篇论文按照相关性依次输出和论文研究内容较为相关的五个主题词。
请在设计 prompt 时提供插入论文标题摘要的位置。输出要求仅包含关键词内容。
请使用代码块方式向我提供 prompt。
下面是优化专家提供的 prompt 模板:
1 |
|
整理一下得到我们的 prompt:
1 | ## Goals |
我们在 prompt 中留下占位符,用于插入具体的学术论文标题和摘要。
批量调用 API
实际情况中,我们会有大批量的学术论文需要处理,我们可以使用批量处理的方法调用 API,节省成本的同时提高效率。
每个论文的处理可以视为一个对 API 的请求,我们把每个请求实例化为一个 json,预先生成所有请求的 json,一次性提交给 API。
在智谱 AI 的要求中,每个请求的 json 占据一行,至多 50000 个请求组成一个 .jsonl
文件,单个文件最大 100MB。其他平台要求可参见其文档要求。下面,我们假设我们已经读取了论文的标题、摘要,就可以生成一个待提交的 .jsonl
文件。
1 | content_template = """ |
提交任务:通过 python
然后,我们可以把生成的 .jsonl
文件提交到文件系统:
1 |
|
1 | 1725432608_4dc1a45595254515ba04d446f78e383c |
这段程序会打印一个文件 id,我们可以进一步将这个 id 提交给 API,用于创建任务。
1 | # 创建 batch 任务 |
1 | Batch(id='batch_1831223675418845184', completion_window='24h', created_at=xxxxxxxxx, endpoint='/v4/chat/completions', input_file_id='1725432608_4dc1a45595254515ba04d446f78e383c', object='batch', status='validating', cancelled_at=None, cancelling_at=None, completed_at=None, error_file_id=None, errors=None, expired_at=None, expires_at=None, failed_at=None, finalizing_at=None, in_progress_at=None, metadata={'description': '主题词抽取'}, output_file_id=None, request_counts=BatchRequestCounts(completed=None, failed=None, total=3)) |
这段程序会打印任务 id。服务端会需要一些时间处理任务,我们可以通过任务 id 查询任务的状态。
1 | batch_job = client.batches.retrieve("batch_1831223675418845184") |
1 | Batch(id='batch_1831223675418845184', completion_window='24h', created_at=0000000000000, endpoint='/v4/chat/completions', input_file_id='1725432608_4dc1a45595254515ba04d446f78e383c', object='batch', status='completed', cancelled_at=None, cancelling_at=None, completed_at=0000000000000, error_file_id='', errors=None, expired_at=None, expires_at=None, failed_at=None, finalizing_at=0000000000000, in_progress_at=0000000000000, metadata={'description': '主题词抽取'}, output_file_id='1725435402_e5bcfc2d00a34ce4a0c9ea58c27b1041', request_counts=BatchRequestCounts(completed=3, failed=0, total=3)) |
当任务完成后,我们可以通过 output_file_id
下载结果文件。
1 | from zhipuai import ZhipuAI |
提交任务:通过控制台网页
我们也可以通过控制台网页提交任务。在 BigModel 控制台 - Batch 数据 页面,点击「上传数据」,上传我们生成的 .jsonl
文件。
接着,在 BigModel 控制台 - Batch 任务 界面可以查看任务状态。
如果任务已完成,则可以在状态详情页下载成功文件。
解析输出
我们可以通过解析输出文件,将模型输出的结果解析为我们需要的格式。输出文件同样是一个 .jsonl
文件,每行是一个请求的结果。形如
1 | {"response":{"status_code":200,"body":{"created":1725435303,"usage":{"completion_tokens":38,"prompt_tokens":373,"total_tokens":411},"model":"glm-4","id":"8991732081299811096","choices":[{"finish_reason":"stop","index":0,"message":{"role":"assistant","content":"- 颠覆性技术识别\n- 社会网络分析\n- 突变理论\n- 技术共现网络\n- 语义信息分析"}}],"request_id":"test103"}},"custom_id":"test103","id":"batch_1831223675418845184"} |
我们需要的是 choices
字段中的 message
字段中的 content
。
1 | ids = [] |
1 | ids = [] |
这样,我们就通过调用大模型 API 完成了一个简单的关键词抽取任务。事实上,我们可以通过类似的方法解决更多的信息处理任务,如文本分类、文本生成等,只需要根据具体任务的要求设计好提示词,调用 API,解析输出即可。
- 感谢您的赞赏