You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 lines
4.4 KiB

3 weeks ago
from openai import OpenAI
import os
# 初始化OpenAI客户端
client = OpenAI(
api_key="sk-01d13a39e09844038322108ecdbd1bbc",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)
reasoning_content = "" # 定义完整思考过程
answer_content = "" # 定义完整回复
is_answering = False # 判断是否结束思考过程并开始回复
3 weeks ago
# 【步骤2】如果有三角形存在则找出最大的三角形和最大三角形中最长的边这条最长边的左端点做为原点,此点坐标为0,0最长边的右端点需要放在X轴上。
3 weeks ago
prompt = """
我将提供一个初中几何题的图片信息用来生成Geogebra的指令集要求生成步骤如下
3 weeks ago
步骤1列举图中有哪些元素
步骤2列举这些元素之间的位置关系最终的输出要严格遵守元素间的位置关系比如C在AB两点之间并且C并不在A正上方而是右上方C并不在B的正上方而是左上方
步骤3对于原图从左到右从下至上查找到的第一个点作为原点建立平面直角坐标系则此点坐标为0,0
步骤4如果存在AB边优先考虑以AB所在直线做为X轴
步骤5模拟绘制过程从原点开始从左向右从下向上在已经模拟绘制出来的元素支持下是否可以绘制出当前元素如果不满足则延后绘制最后一定要保证所有元素全部绘制完毕
步骤6安排动点先放到出发点位置
步骤7使用下面的规则生成Geogebra的指令集
3 weeks ago
**几何图形生成规则通用强制约束版**
请严格按以下优先级执行不受题目具体内容影响
1. **几何约束最高优先级**
- 当文字描述与坐标/位置冲突时以文字描述的几何关系为准
- 必须自动验证{长度|角度|中点|平行|垂直}关系
- 验证失败时重新计算坐标并报告修正
3 weeks ago
- 有动点的要设置滑块
3 weeks ago
2. **动态坐标系构建**
```mermaid
graph TB
A[定位原点] --> B{原点坐标明确}
B -->|| C[直接采用]
B -->|| D[根据相对关系推算]
E[建立坐标系] --> F{存在水平/垂直要求}
F -->|| G[调整坐标满足]
F -->|| H[保持默认方向]
```
3错误熔断机制
检测到矛盾 触发修正流程
if not satisfy_constraint(description):
new_coords = recalculate_by_geometry()
log_adjustment(old_coords, new_coords, reason)
4元素生成协议
顺序固定点 固定线 动态点(初始位) 动态元素
依赖检查确保父元素先于子元素生成
5输出结构强制
[修正报告] 若有调整
[坐标摘要] 最终使用坐标
3 weeks ago
[Geogebra指令] 完整可执行代码
注意
1GGB指令集中不要添加注释
2仔细检查原图中是线段还是直线要严格进行识别
3 weeks ago
3仔细检查原图中的每一条边是否都正确进行了线段标识
3 weeks ago
"""
# 创建聊天完成请求
completion = client.chat.completions.create(
model="qvq-max", # 此处以 qvq-max 为例,可按需更换模型名称
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://dsideal.obs.cn-north-1.myhuaweicloud.com/wb/math.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