LLM API 调用与 Prompt 工程基础指南

引言

大语言模型(LLM)的强大能力需要通过 API 与合适的 Prompt(提示词)来激发。本文旨在帮助你快速掌握:

  • 如何设计高质量的 Prompt(Zero-shot、Few-shot、System/User Prompt)
  • 如何调整关键参数(温度、流式输出)
  • 如何编写同步、异步(流式调用)的代码(智谱 AI)

无论你是初学者还是开发者,都能从中获得可直接上手的知识。

1. Prompt 设计:让模型听懂你的话

llm-universe 的语境下,给大模型的所有输入 都被称为 Prompt(提示) ,而模型的返回结果 则称为 Completion(完成内容) 。高质量Prompt的设计遵循几个核心原则,并包含以下关键要素:

  • 核心原则与技巧

    • 清晰性 :指令要清晰、明确,避免模糊的表述
    • 上下文背景 :提供足够、且必要的背景信息
    • 简洁性 :避免冗余信息,使Prompt言简意赅
    • 结构化 :善用分隔符帮助模型解析指令,并主动寻求结构化的输出
    • 控制参数 :通过 temperature 参数控制模型输出的随机性与创造性
  • 关键要素 :一个完整的 Prompt 通常包含指令 、上下文背景、输入数据、输出格式等要素

  • 两种主要的 Prompt 类型

llm-universe 项目将 Prompt 分为两大类,各有不同的作用与地位

类型 定义 作用 示例
System Prompt 在整个会话中持续生效的"高级"Prompt 全局设定与角色扮演 。用于定义模型的人设、风格或工作原则,通常会持久影响后续所有对话 "你是一个幽默风趣的个人知识库助手"
User Prompt 用户当前提出的具体问题或指令 下达当前任务。这是最常见的Prompt,需要模型立即做出响应。 "我今天有什么事务?"

1.1 两大核心原则

原则一:编写清晰、具体的指令

模糊的指令会让模型猜测你的意图,结果往往偏离预期。清晰的指令应包含以下要素中的一个或多个:

  • 角色设定(通过 System Prompt)
  • 任务边界(做什么、不做什么)
  • 输出格式(JSON、列表、纯文本等)
  • 长度或风格约束(不超过 200 字、面向儿童等)

模型不会读心术。你的指令越模糊,它越容易跑偏。

❌ 模糊指令 ✅ 清晰指令
"写点关于AI的东西" "请用三个要点向初中生解释人工智能,每点不超过30字。"
"判断情感" "判断下面评论的情感是正面还是负面,只输出一个词。"

实战技巧

  • 使用分隔符 :用 ###"""--- 将指令与输入数据分开。
  • 要求结构化输出"请以 JSON 格式输出,包含以下键:name, age, city"
  • 设定否定条件"不要添加任何额外的解释,只输出数字答案。"

原则二:给予模型充足思考时间(思维链 CoT)

对于数学、逻辑、多步推理任务,直接让模型输出答案容易出错。强制模型先展示推理过程,正确率会大幅提升。

零样本思维链 :在 Prompt 后加上"让我们一步一步思考。"
少样本思维链:给出一个完整的"推理过程 → 答案"示例,让模型模仿。

零样本示例对比:

  • 直接问:"书架上层是下层的3倍,上层拿15本到下层后相等,下层原有多少本?" → 模型可能乱猜。
  • 加CoT:"......请一步一步推理。" → 模型输出:设下层x,上层3x,3x-15=x+15 → 2x=30 → x=15。答案正确。
    少样本示例对比:

问题:小明有 10 个糖果,给了小红 3 个,又买了 5 个,现在有多少? 推理:10 - 3 = 7,7 + 5 = 12。 答案:12

现在回答: 问题:学校图书馆原来有 50 本书,借出 22 本,还回 8 本,又新买 15 本,现在有多少本? 推理:

1.2 Zero-shot、Few-shot

模式 示例数量 适用场景
Zero-shot 0 简单问答、分类
One-shot 1 格式单一的任务
Few-shot 2~5 格式化输出、专业领域

示例(情感分类):

  • Zero-shot:"评论:床太硬了。情感:" → 模型输出"负面"
  • Few-shot:提供 "外卖很快 → 正面;服务差 → 负面" 两个例子,再让模型判断新评论。

2. API 调用

2.1 同步调用

  • 特点 :请求发出后,程序阻塞等待完整结果返回。
  • 适用:翻译、摘要、一次性生成。

示例

python 复制代码
from zai import ZhipuAiClient
client = ZhipuAiClient(api_key=API_KEY)
response = client.chat.completions.create(
    model="glm-4-plus",
    messages=[{"role": "user", "content": "你好"}],
    stream=False
)
print(response.choices[0].message.content)

2.2 流式输出(SSE,异步)

Server-Sent Events (SSE) 是一种服务器向客户端单向推送 数据的技术。在 LLM API 中,开启流式输出后,模型不再等待完整生成结束才返回结果,而是逐字或逐块地将生成的内容实时推送给前端。

  • 特点:逐字返回,打字机效果,首字延迟极低。
  • 适用:聊天机器人、实时交互。

示例

python 复制代码
from zai import ZhipuAiClient
client = ZhipuAiClient(api_key=API_KEY)

stream = client.chat.completions.create(
    model="glm-4-plus",
    messages=[{"role": "user", "content": "讲个故事"}],
    stream=True  # 开启流式输出
)
for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="",flush=True)

3. 关键参数:Temperature

温度值 行为 适用场景
0 ~ 0.2 确定性、保守 代码生成、数学计算
0.3 ~ 0.6 平衡 摘要、翻译
0.7 ~ 0.9 创意、多样 故事写作、头脑风暴

示例(API 参数)

python 复制代码
response = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": "写一首关于月亮的诗"}],
    temperature=0.9  # 高温度增加新颖性
)

智谱 AI 温度范围 [0, 1],OpenAI 范围 [0, 2]。


4. 智谱 AI 新版 SDK 快速上手

4.1 Conda 环境配置

bash 复制代码
conda create -n llm-universe python=3.10 -y
conda activate llm-universe
pip install zai-sdk
conda env config vars set ZAI_API_KEY="your-api-key"
conda activate llm-universe   # 重新激活使变量生效

4.2 同步调用示例

python 复制代码
from zai import ZhipuAiClient
import os
from dotenv import load_dotenv

load_dotenv()

client = ZhipuAiClient(api_key=os.getenv("ZAI_API_KEY"))
resp = client.chat.completions.create(
    model="glm-4.7",
    messages=[{"role": "user", "content": "你好"}]
)
print(resp.choices[0].message.content)

4.3 流式调用示例

python 复制代码
import os
from zai import ZhipuAiClient
from dotenv import load_dotenv

load_dotenv()  # 加载环境变量
client = ZhipuAiClient(api_key=os.getenv("ZHIPU_API_KEY"))  # 从环境变量中获取 API Key

stream = client.chat.completions.create(
    model="glm-4-plus",
    messages=[{"role": "user", "content": "讲个笑话"}],
    stream=True
)
for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

5. 完整脚本:同步/异步 + Prompt 控制,指导模型行为

下面是一个可直接运行的脚本,包含同步、异步(流式调用)两种调用方式,并能通过修改 prompt 灵活指导模型行为的 Python 基础脚本。

python 复制代码
import os
from zai import ZhipuAiClient
from dotenv import load_dotenv

load_dotenv()

# ==================== 配置区 ====================
# 建议使用环境变量设置 API_KEY
API_KEY = os.getenv("ZHIPU_API_KEY")  
MODEL_NAME = "glm-4.5"  # 可选:glm-5.1 等

# ==================== 1. 同步调用 ====================
def sync_chat(prompt: str, system_prompt: str = None, temperature: float = 0.7):
    """
    同步调用智谱大模型 API
    :param prompt: 用户输入的提示词(必填)
    :param system_prompt: 系统角色设定(可选,用于指导模型行为)
    :param temperature: 温度参数,控制随机性(范围0-1,默认0.95,建议0.3-0.9)
    :return: 模型返回的文本
    """
    client = ZhipuAiClient(api_key=API_KEY)
    
    messages = []
    if system_prompt:
        messages.append({"role": "system", "content": system_prompt})
    messages.append({"role": "user", "content": prompt})
    
    response = client.chat.completions.create(
        model=MODEL_NAME,
        messages=messages,
        temperature=temperature,
        max_tokens=500,      # 限制最大输出长度
        stream=False,        # 同步非流式
    )
    return response.choices[0].message.content



# ==================== 2. 流式输出(SSE)====================
def stream_chat(prompt: str, system_prompt: str = None, temperature: float = 0.7):
    """
    流式调用(SSE),逐字输出模型回复
    """
    client = ZhipuAiClient(api_key=API_KEY)
    
    messages = []
    if system_prompt:
        messages.append({"role": "system", "content": system_prompt})
    messages.append({"role": "user", "content": prompt})
    
    response = client.chat.completions.create(
        model=MODEL_NAME,
        messages=messages,
        temperature=temperature,
        max_tokens=500,
        stream=True,  # 开启流式输出
    )
    
    print("模型回复:", end="", flush=True)
    for chunk in response:
        if chunk.choices[0].delta.content:
            print(chunk.choices[0].delta.content, end="", flush=True)
    print()  # 换行


# ==================== 使用示例 ====================
# __name__ == "__main__" 这一行的意思是:当这个 Python 文件被直接运行时,下面的代码块会被执行;如果这个文件被作为模块导入到其他文件中,下面的代码块则不会被执行。这是一种常见的 Python 编程习惯,用于区分直接运行和导入两种情况。
if __name__ == "__main__":
    
    # ----- 1. 同步调用示例 -----
    print("=== 同步调用示例 ===")
    result1 = sync_chat(
        prompt="请介绍一下人工智能", 
        system_prompt="你是一位严谨的计算机科学教授,回答必须准确、简洁。",
        temperature=0.3
    )
    print(result1)
    print()
    
    # ----- 2. 流式输出示例(SSE)-----
    print("=== 流式输出示例(SSE)===")
    stream_chat(
        prompt="讲一个关于月亮的简短童话故事",
        system_prompt="你是一个富有想象力的童话故事作家",
        temperature=0.8
    )

6. 自测清单

  • 我能说出 Prompt 设计的两大核心原则,并给出示例。
  • 我知道 Zero-shot、Few-shot、思维链的区别与用法。
  • 我能写出同步、流式、异步三种调用方式的代码。
  • 我理解温度参数的作用,并能根据场景调整。
  • 我能在 Conda 中配置智谱 AI 新版 SDK 环境。
  • 我遇到过 404 错误并知道原因(异步接口权限问题)及替代方案。
相关推荐
tedcloud1233 分钟前
RTK部署教程:构建稳定的AI Workflow环境
服务器·javascript·人工智能·typescript·ocr
Raink老师5 分钟前
【AI面试临阵磨枪-71】如何用 AI 优化推荐系统、内容审核、广告创意、搜索体验?
人工智能·面试·职场和发展
AI医影跨模态组学7 分钟前
Biomarker Res(IF=11.5)安徽医科大学第一医院:基于机器学习的放射组学模型:子宫内膜癌患者的预后预测及机制探索
人工智能·深度学习·论文·医学·医学影像·影像组学
ftpeak13 分钟前
Mooncake:以 KVCache 为中心的分离式 LLM 服务架构
人工智能·ai·架构·ai编程·ai开发
Terrence Shen18 分钟前
Hermes agent的tools是怎么落地应用的系列
人工智能·llm·agent·hermes
Raink老师33 分钟前
【AI面试临阵磨枪-72】电商全场景 AI Agent 设计(商品咨询 / 订单 / 物流 / 售后 / 退款)
人工智能·面试·职场和发展
仙女修炼史39 分钟前
CNN更看重Texture还是shape:imagenet-trained cnns are biased
论文阅读·人工智能·cnn
视***间1 小时前
视程空间 AIR SC6N0-C-MB NX 16GB 规格详解与机器人/机器狗适配说明
人工智能·机器人·边缘计算·机器狗·ai算力·具身机器人·视程空间
视***间1 小时前
小身板・强算力・全适配 —— 视程空间 AI 算力开发板如何完美适配机器人 / 机器狗
人工智能·机器人·边缘计算·ai算力·视程空间·算力开发板
网宿安全演武实验室1 小时前
当AI跑进容器:全链路容器安全检测与智能运营实
人工智能·安全·容器·k8s