|
|
from openai import OpenAI
|
|
|
from WxMini.Milvus.Config.MulvusConfig import *
|
|
|
|
|
|
# 几何题,计算面积和体积
|
|
|
image_url = "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"
|
|
|
# image_url = 'https://hzkc.oss-cn-beijing.aliyuncs.com/Upload/wuli.png'
|
|
|
|
|
|
# 初始化OpenAI客户端
|
|
|
client = OpenAI(
|
|
|
api_key=MODEL_API_KEY,
|
|
|
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
|
|
|
)
|
|
|
|
|
|
reasoning_content = "" # 定义完整思考过程
|
|
|
answer_content = "" # 定义完整回复
|
|
|
is_answering = False # 判断是否结束思考过程并开始回复
|
|
|
|
|
|
prompt = """
|
|
|
请以标准的 Markdown 格式返回答案,具体要求如下:
|
|
|
1. 标题使用 `#` 或 `##`。
|
|
|
2. 列表使用 `-` 或 `*`,并确保缩进一致。
|
|
|
3. 数学公式使用 `$...$` 表示行内公式。
|
|
|
4. 数学公式使用 `$$...$$` 表示块级公式。
|
|
|
5. 在 Markdown 文件中,使用 $$ 标记数学公式,并确保 align* 环境中的公式正确对齐。
|
|
|
(1). 使用 $$ 包裹多行数学公式。
|
|
|
(2). 在 align* 环境中,每行公式的开头使用 & 符号对齐。
|
|
|
(3). 确保公式内容清晰、易读,并正确使用 LaTeX 语法。
|
|
|
示例:
|
|
|
markdown> ### 表面积> - **公式**:$S = 2(ab + ah + bh)$ > 其中 $a=4\,\text{cm}$(长)、$b=3\,\text{cm}$(宽)、$h=2\,\text{cm}$(高)。> > - **计算过程**:> $$> \begin{align*}> S &= 2(4 \times 3 + 4 \times 2 + 3 \times 2) \\> &= 2(12 + 8 + 6) \\> &= 2 \times 26 \\> &= 52\,\text{cm}^2> \end{align*}> $$>
|
|
|
注意事项:
|
|
|
- 确保 $$ 包裹的公式块独立成段,不与普通文本混排。
|
|
|
- 在 align* 环境中,每行公式的开头使用 & 符号对齐,例如 S &= ...。
|
|
|
- 使用 \text{} 包裹单位,例如 \text{cm}^2。
|
|
|
|
|
|
目标:
|
|
|
生成的 Markdown 文件应能够通过 pandoc 正确转换为 HTML,并使用 MathJax 渲染数学公式。
|
|
|
"""
|
|
|
|
|
|
# 创建聊天完成请求
|
|
|
completion = client.chat.completions.create(
|
|
|
model="qvq-max", # 此处以 qvq-max 为例,可按需更换模型名称
|
|
|
messages=[
|
|
|
{
|
|
|
"role": "system",
|
|
|
"content": [{"type": "text", "text": "You are a helpful assistant."}],
|
|
|
},
|
|
|
{
|
|
|
"role": "user",
|
|
|
"content": [
|
|
|
{
|
|
|
"type": "image_url",
|
|
|
"image_url": {
|
|
|
"url": image_url
|
|
|
},
|
|
|
},
|
|
|
{"type": "text", "text": "这道题怎么解答?" + prompt},
|
|
|
],
|
|
|
},
|
|
|
],
|
|
|
stream=True,
|
|
|
)
|
|
|
|
|
|
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
|
|
|
|
|
|
# 将完整回复保存到指定文件
|
|
|
output_file = "c:/1.md" # 指定保存文件的路径
|
|
|
with open(output_file, "w", encoding="utf-8") as file:
|
|
|
file.write(answer_content)
|
|
|
print(f"\n完整回复已保存到文件:{output_file}") |