Files
ocr/test13.py
2025-08-14 16:04:59 +08:00

99 lines
3.6 KiB
Python
Raw 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.

from openai import OpenAI
# 初始化OpenAI客户端
client = OpenAI(
api_key="sk-f6da0c787eff4b0389e4ad03a35a911f",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)
reasoning_content = "" # 定义完整思考过程
answer_content = "" # 定义完整回复
is_answering = False # 判断是否结束思考过程并开始回复
prompt = """
你是“初中几何题-图像结构提取器”,专为初中生设计。任务只有一项:
看到几何题图片后,用中文输出“完整的题干原文 + 图形客观结构描述”,绝口不提解题思路或答案。
目标:
让后续 GeoGebra 生成器仅凭你的输出即可复刻原图,同时让初中生一眼看懂图形。
输出格式(固定四段)
题干原文OCR 结果,逐字照录)
基本元素表(点、线、圆、角、标注长度/角度,按出现顺序编号)
关系表(平行、垂直、相切、全等、相似、共线、共点等)
给出各元素大概位置或坐标
写作规范:
一律用中文,术语用课本标准词。
描述顺序:先整体外形(如“梯形 ABCD”再局部细节如“AB∥CD”
长度、角度直接写数值并带单位;若图中仅给符号,则照抄符号。
位置关系用“//、⊥、≅、∼、∈”等符号,后接括号说明。
注意几何图形的形状和线段的长度
不使用“可能、大约”等模糊词。
不解释题意,不提示解法。
示例模板:
【题干原文】
如图,梯形 ABCD 中AB∥CD …(以下略)
【基本元素表】
A、B、C、D、E对角线交点
线段AB=6 cmCD=10 cmAD=4 cmBC=4 cmACBD
∠DAB=60°∠ABC=120°
圆:无
【关系表】
AB // CD
AD = BC
AC 与 BD 交于 E
∠DAB 与 ∠ABC 互补
【元素位置】
A点在左上B点在右上C点在A点和B点的下方
——请严格按以上格式输出,不要省略任何字段。
"""
# 创建聊天完成请求
completion = client.chat.completions.create(
model="qvq-max-latest", # 此处以 qvq-max 为例,可按需更换模型名称
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://dsideal.obs.cn-north-1.myhuaweicloud.com/wb/img10.jpg"
},
},
{"type": "text",
"text": prompt},
],
},
],
stream=True,
)
print("\n" + "=" * 20 + "思考过程" + "=" * 20 + "\n")
for chunk in completion:
# 如果chunk.choices为空则打印usage
if not chunk.choices:
print("\nUsage:")
print(chunk.usage)
else:
delta = chunk.choices[0].delta
# 打印思考过程
if hasattr(delta, 'reasoning_content') and delta.reasoning_content != None:
print(delta.reasoning_content, end='', flush=True)
reasoning_content += delta.reasoning_content
else:
# 开始回复
if delta.content != "" and is_answering is False:
print("\n" + "=" * 20 + "完整回复" + "=" * 20 + "\n")
is_answering = True
# 打印回复过程
print(delta.content, end='', flush=True)
answer_content += delta.content
# print("=" * 20 + "完整思考过程" + "=" * 20 + "\n")
# print(reasoning_content)
# print("=" * 20 + "完整回复" + "=" * 20 + "\n")
# 保存成QvqResult.txt
with open("QvqResult.txt", "w", encoding='utf-8') as f:
f.write(answer_content)
print("试题解析文本保存成功!")