90 lines
2.6 KiB
Python
90 lines
2.6 KiB
Python
"""
|
||
测试脚本:上传文件到 OSS → 获取 URL → 发送给 GLM 进行识别
|
||
|
||
用法:
|
||
cd server
|
||
source ~/.bashrc && source .venv/bin/activate
|
||
python -m utils.test_oss_glm --file <本地文件路径> [--prompt "描述一下这张图片"]
|
||
"""
|
||
|
||
import argparse
|
||
import sys
|
||
from pathlib import Path
|
||
|
||
# 确保 server 目录在 sys.path
|
||
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
|
||
|
||
from utils.oss_uploader import upload_file
|
||
from utils.glm_adapter import glm_chat_sync
|
||
|
||
|
||
def main():
|
||
parser = argparse.ArgumentParser(description="上传文件到 OSS 并让 GLM 读取")
|
||
parser.add_argument("--file", required=True, help="要上传的本地文件路径")
|
||
parser.add_argument(
|
||
"--prompt", default="请描述一下这张图片的内容", help="发给 GLM 的提示词"
|
||
)
|
||
parser.add_argument(
|
||
"--model", default="glm-4.6v", help="GLM 模型名称(默认: glm-4.6v)"
|
||
)
|
||
args = parser.parse_args()
|
||
|
||
# ── 第一步:上传文件到 OSS ────────────────────────────────
|
||
file_path = args.file
|
||
if not Path(file_path).exists():
|
||
print(f"❌ 文件不存在: {file_path}")
|
||
sys.exit(1)
|
||
|
||
print(f"📤 正在上传文件: {file_path}")
|
||
oss_result = upload_file(file_path)
|
||
file_url = oss_result["url"]
|
||
print(f"✅ 上传成功!")
|
||
print(f" URL: {file_url}")
|
||
print()
|
||
|
||
# ── 第二步:构建消息,把 URL 发给 GLM ──────────────────────
|
||
messages = [
|
||
{
|
||
"role": "user",
|
||
"content": [
|
||
{
|
||
"type": "image_url",
|
||
"image_url": {"url": file_url},
|
||
},
|
||
{
|
||
"type": "text",
|
||
"text": args.prompt,
|
||
},
|
||
],
|
||
}
|
||
]
|
||
|
||
print(f"🤖 正在请求 GLM ({args.model}) 识别图片...")
|
||
print(f" 提示词: {args.prompt}")
|
||
print()
|
||
|
||
result = glm_chat_sync(
|
||
messages=messages,
|
||
model=args.model,
|
||
temperature=0.7,
|
||
max_tokens=2048,
|
||
)
|
||
|
||
print("─" * 60)
|
||
print("📝 GLM 回复:")
|
||
print("─" * 60)
|
||
print(result["content"])
|
||
print("─" * 60)
|
||
|
||
if result.get("usage"):
|
||
usage = result["usage"]
|
||
print(
|
||
f"\n📊 Token 用量: 输入 {usage['promptTokens']} | "
|
||
f"输出 {usage['completionTokens']} | "
|
||
f"总计 {usage['totalTokens']}"
|
||
)
|
||
|
||
|
||
if __name__ == "__main__":
|
||
main()
|