Files
kefu/wechat_rpa/test_vision.py
2026-07-31 11:48:16 +08:00

96 lines
3.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""手工视觉 API 联调;自动测试导入本模块时不会请求真实模型。"""
import unittest
def main() -> None:
import base64
import os
import sys
import requests
sys.path.insert(0, os.path.dirname(__file__))
from ai_config import AI_API_KEY, AI_MODEL, AI_TIMEOUT
from ai_chat import _completions_url
img_path = os.path.join(os.path.dirname(__file__), "debug_chat_area.png")
if not os.path.exists(img_path):
print(f"❌ 找不到测试图片: {img_path}")
raise SystemExit(1)
with open(img_path, "rb") as handle:
image_bytes = handle.read()
encoded = base64.b64encode(image_bytes).decode("utf-8")
url = _completions_url()
headers = {
"Authorization": f"Bearer {AI_API_KEY}",
"Content-Type": "application/json",
}
print(f"图片大小: {len(image_bytes)} bytes")
print(f"Base64 长度: {len(encoded)} 字符")
print(f"API URL: {url}")
print(f"模型: {AI_MODEL}")
print("-" * 50)
def request_case(title: str, image_url) -> None:
print(f"\n[{title}]")
payload = {
"model": AI_MODEL,
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": (
"这是企业微信聊天消息区域截图。请只依据截图中最末端的客户消息,"
"判断是否有新的客户消息并简短回复;不要把我方旧回复当作客户消息。"
),
},
{"type": "image_url", "image_url": image_url},
],
}
],
"max_tokens": 200,
}
try:
response = requests.post(
url,
headers=headers,
json=payload,
timeout=AI_TIMEOUT,
)
response.raise_for_status()
content = response.json()["choices"][0]["message"]["content"]
print(f"✅ 回复: {content[:200]}")
except Exception as exc:
print(f"❌ 失败: {exc}")
response = getattr(exc, "response", None)
if response is not None:
print(f" 响应: {response.text[:300]}")
request_case(
"测试 1:标准 OpenAI data URI",
{"url": f"data:image/png;base64,{encoded}"},
)
request_case(
"测试 2:纯 base64(兼容性探测)",
{"url": encoded},
)
request_case(
"测试 3data URI + detail=high",
{"url": f"data:image/png;base64,{encoded}", "detail": "high"},
)
print("\n测试完成。")
class ManualVisionIsolationTest(unittest.TestCase):
def test_manual_entrypoint_is_import_safe(self) -> None:
self.assertTrue(callable(main))
if __name__ == "__main__":
main()