GLM-4-9B-Chat-1M快速上手:RESTful API调用+curl/Python SDK示例
GLM-4-9B-Chat-1M快速上手:RESTful API调用+curl/Python SDK示例
想象一下,你手头有一份300页的PDF合同,或者一整年的公司财报,你想让AI帮你快速总结核心条款、提取关键数据,甚至对比不同章节的差异。传统的大模型面对这么长的文档,要么直接拒绝,要么只能处理开头一小部分,信息丢失严重。
现在,这个问题有了一个非常实用的解决方案。智谱AI开源的GLM-4-9B-Chat-1M模型,直接把上下文长度拉到了惊人的100万个token,相当于一次性能读完200万汉字。更关键的是,它只需要一张消费级显卡(比如RTX 3090)就能跑起来,不再是实验室里的玩具,而是能真正用在项目里的工具。
这篇文章,我就带你快速上手这个“长文本处理利器”。我们不谈复杂的模型部署和架构,就聚焦在最实际的问题上:模型服务启动后,我怎么用代码调用它? 我会手把手教你两种最常用的方法:用简单的curl命令测试,以及用Python SDK集成到你的应用程序里。看完你就能立刻用起来。
1. 先决条件与模型速览
在开始写代码之前,我们需要明确两件事:你手头有什么,以及你要调用的模型有什么特点。
1.1 你需要准备什么
调用模型API,你只需要准备两样东西:
- 一个正在运行的GLM-4-9B-Chat-1M API服务:这通常意味着你已经通过Docker镜像、vLLM或其他方式将模型部署在了一台服务器上,并且它提供了一个HTTP接口。本文假设你的服务地址是
http://your-server-ip:8000/v1。请将其替换为你自己的实际地址。 - 一个能发送HTTP请求的工具或环境:比如命令行终端(用于curl)或者一个Python环境(用于requests库)。
你不需要关心模型是怎么加载的,也不需要懂深度学习框架。只要服务是活的,你就能调用。
1.2 模型核心特点回顾
GLM-4-9B-Chat-1M的核心卖点就两个:“够长” 和 “够用”。
- 够长:1M上下文长度是它的招牌能力。这让你可以一次性提交超长文档,比如整本电子书、长达数小时的会议转录稿、包含多个章节的技术手册,模型都能“看”全,并基于全部内容进行回答。
- 够用:它在长文本理解(LongBench-Chat评测领先)、代码生成、数学推理和通用对话上都有不错的表现。同时,它完整支持Function Calling(工具调用),这意味着你可以定义自己的函数(比如查询数据库、调用某个API),然后让模型根据对话内容决定何时、如何调用你的函数,实现更复杂的功能。
知道这些就够了,接下来我们进入实战环节。
2. 基础调用:使用curl快速测试
curl是一个命令行工具,用来传输数据。用它来测试API是最直接、最快的方式,能帮你验证服务是否正常,并快速了解API的请求和响应格式。
首先,我们完成一个最简单的对话任务。
2.1 发起你的第一次对话
打开你的终端(Linux/Mac的Terminal,或Windows的PowerShell/CMD),输入以下命令:
curl -X POST http://your-server-ip:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "glm-4-9b-chat-1m",
"messages": [
{"role": "user", "content": "你好,请介绍一下你自己。"}
],
"max_tokens": 100,
"stream": false
}'
让我解释一下这个命令的每个部分:
-X POST:指定使用HTTP POST方法。http://.../chat/completions:这是OpenAI兼容API的标准聊天补全端点。绝大多数基于vLLM或类似框架部署的服务都使用这个接口。-H "Content-Type: application/json":告诉服务器,我们发送的数据是JSON格式。-d ‘{...}’:这是请求体(data),里面包含了我们的具体指令。
请求体JSON里的字段很重要:
"model": "glm-4-9b-chat-1m":指定要使用的模型。如果你的服务端只部署了这个模型,有时可以省略,但写上更规范。"messages":对话历史。这是一个数组,每条消息都要有role(角色,如user用户、assistant助手)和content(内容)。我们这里只发了一条用户消息。"max_tokens": 100:限制模型生成回复的最大长度(token数)。设为100,回复会比较简短。"stream": false:关闭流式输出。这意味着服务器会一次性生成完整回复再返回给我们。如果设为true,则会像打字机一样一个字一个字地返回,适合需要实时显示的场景。
执行命令后,你会看到一大段JSON格式的返回结果。其中,你需要关注的是 choices[0].message.content 这个字段,里面就是模型的回复文本。
2.2 处理长文本:发送超长上下文
现在来试试它的核心功能。假设你有一个很长的文本文件 long_document.txt。你可以用curl这样发送:
# 首先,将长文本读入一个变量(注意:这种方法对极长的文件可能有限制)
LONG_TEXT=$(cat long_document.txt)
curl -X POST http://your-server-ip:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d "$(jq -n --arg model "glm-4-9b-chat-1m" --arg text "$LONG_TEXT" '{
model: $model,
messages: [
{role: "user", content: "请总结以下文档的核心观点:" + $text}
],
max_tokens: 300,
stream: false
}')"
这里用了 jq 工具来安全地构造包含长字符串的JSON。如果你的系统没有 jq,也可以手动拼接,但要小心处理文本中的特殊字符(如引号、换行符)。更稳妥的做法是像下一节的Python示例那样,用编程语言来处理。
通过curl测试,你就能确认API服务工作正常,并且初步体验了模型的长文本处理能力。接下来,我们看看如何在真正的项目中使用它。
3. 项目集成:使用Python SDK进行开发
在实际的Python项目(比如一个Web应用、数据分析脚本或自动化工具)中,我们通常不会直接用curl,而是使用HTTP客户端库。这里我推荐使用 openai 这个官方库,因为它兼容OpenAI API格式,用起来非常方便。
3.1 安装与基础配置
首先,安装必要的Python包:
pip install openai
然后,在你的Python代码中,这样设置客户端并发起请求:
from openai import OpenAI
# 1. 初始化客户端,指向你自己的模型服务地址
client = OpenAI(
api_key="EMPTY", # 如果服务端不需要鉴权,这里可以填任意非空字符串,如"EMPTY"
base_url="http://your-server-ip:8000/v1" # 你的模型服务地址
)
# 2. 准备对话消息
messages = [
{"role": "system", "content": "你是一个有帮助的助理。"}, # 可选的系统提示,设定助手行为
{"role": "user", "content": "用Python写一个函数,计算斐波那契数列的第n项。"}
]
# 3. 发起同步调用
try:
response = client.chat.completions.create(
model="glm-4-9b-chat-1m",
messages=messages,
max_tokens=150,
temperature=0.7, # 控制随机性:0.0更确定,1.0更多样
stream=False
)
# 4. 提取并打印回复
assistant_reply = response.choices[0].message.content
print("模型回复:")
print(assistant_reply)
except Exception as e:
print(f"调用API时出错:{e}")
这段代码做了几件事:
- 创建了一个客户端对象,连接到你部署的模型服务。
- 构建了对话消息。这里加入了
system角色,可以用来引导模型的行为风格(比如“你是一个专业的法律顾问”)。 - 调用
chat.completions.create方法,除了之前的参数,还多了temperature,用于控制生成文本的创造性。 - 从响应结果中提取出助手的回复内容。
3.2 实现流式输出
对于需要长时间生成回复的场景(比如总结一本很长的书),或者你想在网页上实现打字机效果,流式输出是更好的选择。
from openai import OpenAI
client = OpenAI(api_key="EMPTY", base_url="http://your-server-ip:8000/v1")
messages = [{"role": "user", "content": "讲述一个关于星辰大海的科幻短故事开头。"}]
# 这次设置 stream=True
stream = client.chat.completions.create(
model="glm-4-9b-chat-1m",
messages=messages,
max_tokens=200,
stream=True
)
print("故事开始:", end="", flush=True)
for chunk in stream:
# 每个chunk包含部分增量内容
if chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end="", flush=True)
print("\n--- 故事片段结束 ---")
流式响应中,你会收到多个数据块(chunk),每个块包含新生成的一小段文本(delta.content)。你可以实时将其打印出来或发送给前端。
3.3 处理超长文档的实战示例
这才是GLM-4-9B-Chat-1M大显身手的地方。假设我们有一个PDF文件(已转换为文本),我们需要模型进行深度分析。
from openai import OpenAI
import json
client = OpenAI(api_key="EMPTY", base_url="http://your-server-ip:8000/v1")
def analyze_long_document(document_text):
"""
使用GLM-4-9B-Chat-1M分析超长文档。
"""
# 系统提示,让模型专注于信息提取和总结
system_prompt = """你是一个专业的文档分析专家。请仔细阅读用户提供的文档,并根据指令完成任务。
回答需基于文档事实,做到准确、简洁。"""
user_instruction = f"""
请分析以下文档:
{document_text}
请完成以下任务:
1. 用不超过200字概括文档主旨。
2. 提取文档中提到的所有关键日期、人物和数字指标。
3. 列出文档中讨论的至少三个主要挑战或问题。
"""
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_instruction}
]
try:
# 对于长文档,生成回复也可能较长,适当增加max_tokens
response = client.chat.completions.create(
model="glm-4-9b-chat-1m",
messages=messages,
max_tokens=800, # 因为需要回答多个结构化问题
temperature=0.1 # 分析任务要求准确性,降低随机性
)
return response.choices[0].message.content
except Exception as e:
return f"分析过程中出现错误:{e}"
# 模拟:从文件读取长文本
with open("converted_pdf.txt", "r", encoding="utf-8") as f:
long_text = f.read()
# 确保文本长度在模型限制内(1M token约200万汉字)
# 在实际应用中,如果文本真的接近极限,需要更精细的处理,但这里我们假设它在范围内。
print("文档长度(字符):", len(long_text))
result = analyze_long_document(long_text[:50000]) # 先测试前5万字
print("\n=== 文档分析结果 ===")
print(result)
这个示例展示了如何利用长上下文能力,让模型一次性消化大量信息,并执行复杂的、结构化的分析任务。你可以根据需求,修改user_instruction来让模型做对比阅读、情感分析、条款审查等等。
4. 进阶功能:使用Function Calling
Function Calling(函数调用)是让大模型与外部工具、数据库或API交互的关键。GLM-4-9B-Chat-1M支持这个功能。它的工作流程是:
- 你定义好一些函数(工具)的描述。
- 模型根据对话上下文,判断是否需要调用某个函数,以及调用时应该传入什么参数。
- 你的代码执行这个真正的函数,拿到结果。
- 你把结果返回给模型,模型再组织成自然语言回复给用户。
下面是一个模拟天气查询的简单示例:
from openai import OpenAI
import json
client = OpenAI(api_key="EMPTY", base_url="http://your-server-ip:8000/v1")
# 1. 定义可供模型调用的工具(函数)
tools = [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "获取指定城市的当前天气情况",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市名称,例如:北京, San Francisco",
},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"], "description": "温度单位"},
},
"required": ["location"],
},
},
}
]
# 2. 模拟一个真实的天气查询函数
def get_current_weather(location, unit="celsius"):
"""模拟天气查询,实际项目中这里会调用真正的天气API"""
weather_data = {
"北京": {"temperature": 22, "unit": unit, "condition": "晴朗", "humidity": 65},
"上海": {"temperature": 25, "unit": unit, "condition": "多云", "humidity": 70},
"San Francisco": {"temperature": 18, "unit": unit, "condition": "雾", "humidity": 80},
}
return weather_data.get(location, {"temperature": "未知", "condition": "无数据", "location": location})
# 3. 用户提问
messages = [{"role": "user", "content": "北京今天天气怎么样?"}]
# 4. 首次调用,模型可能会决定调用工具
response = client.chat.completions.create(
model="glm-4-9b-chat-1m",
messages=messages,
tools=tools,
tool_choice="auto", # 让模型自动决定是否调用工具
)
response_message = response.choices[0].message
# 5. 检查模型是否想调用工具
tool_calls = response_message.tool_calls
if tool_calls:
# 6. 模型要求调用函数
messages.append(response_message) # 把模型的响应(包含工具调用请求)加入历史
for tool_call in tool_calls:
function_name = tool_call.function.name
function_args = json.loads(tool_call.function.arguments)
# 7. 执行本地函数
if function_name == "get_current_weather":
location = function_args.get("location")
unit = function_args.get("unit", "celsius")
function_response = get_current_weather(location, unit)
# 8. 将函数执行结果作为新的消息返回给模型
messages.append({
"tool_call_id": tool_call.id,
"role": "tool",
"name": function_name,
"content": json.dumps(function_response, ensure_ascii=False),
})
# 9. 第二次调用,让模型根据函数结果生成最终回复
second_response = client.chat.completions.create(
model="glm-4-9b-chat-1m",
messages=messages,
)
final_reply = second_response.choices[0].message.content
print("最终回复:", final_reply)
else:
# 模型没有调用工具,直接回复
print("模型直接回复:", response_message.content)
这个流程虽然看起来步骤多,但它是构建智能助理类应用的基础。通过Function Calling,模型的能力边界被极大地扩展了。
5. 总结
通过上面的步骤,你应该已经掌握了GLM-4-9B-Chat-1M模型最核心的调用方法。我们来快速回顾一下要点:
- 测试与验证:使用 curl 命令是测试API服务是否健康、请求格式是否正确的最快方式。这对于运维和快速调试非常有用。
- 项目集成:在Python项目中使用
openaiSDK 是标准做法。它代码简洁,支持同步、异步和流式调用,能很好地集成到各种应用中。 - 发挥核心优势:记得充分利用其 1M长上下文 的能力。设计你的应用时,可以考虑那些需要处理完整长文档的场景,如智能摘要、合同审查、技术手册问答等。
- 解锁高级玩法:Function Calling 是将模型从“聊天机器人”升级为“智能代理”的关键。通过定义工具,你可以让模型查询数据库、发送邮件、操作文件,实现复杂的自动化流程。
最后,关于性能,如果你的响应速度不够理想,可以提醒服务端运维人员检查是否开启了vLLM的 enable_chunked_prefill 等优化选项,这对长文本生成的速度提升很大。
现在,你可以尝试将一份长的技术文档、一组用户反馈,或者你的项目日志丢给这个模型,看看它能给你带来什么惊喜了。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐

所有评论(0)