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.

138 lines
4.8 KiB

import time
from openai import OpenAI, AsyncOpenAI
from WxMini.Milvus.Config.MulvusConfig import MODELSCOPE_ACCESS_TOKEN
from WxMini.Utils.MySQLUtil import save_chat_to_mysql
async def recognize_text(client, pool, person_id, image_url):
"""
识别图片中的文字,流式输出,并将结果记录到数据库
:param client: AsyncOpenAI 客户端
:param pool: 数据库连接池
:param person_id: 用户 ID
:param image_url: 图片 URL
:return: 最终拼接的字符串
"""
completion = await client.chat.completions.create(
model="qwen-vl-ocr",
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": image_url,
"min_pixels": 28 * 28 * 4,
"max_pixels": 28 * 28 * 1280
},
{"type": "text", "text": "Read all the text in the image."},
]
}
],
stream=True
)
full_text = "" # 用于存储最终拼接的字符串
async for chunk in completion:
if chunk.choices[0].delta.content is not None:
for char in chunk.choices[0].delta.content:
if char != ' ':
yield char # 流式输出字符
full_text += char # 拼接字符
print(char, end='')
time.sleep(0.1) # 控制输出速度
# 记录到数据库
try:
await save_chat_to_mysql(pool, person_id, f'{image_url}', full_text, "", 0, 2, 2, 1)
except Exception as e:
print(f"记录到数据库时出错:{e}")
async def recognize_content(client, pool, person_id, image_url):
"""
识别图片中的内容,流式输出
"""
completion = await client.chat.completions.create(
model="qwen-vl-plus",
messages=[{"role": "user", "content": [
{"type": "text", "text": "这是什么"},
{"type": "image_url", "image_url": {"url": image_url}}
]}],
stream=True
)
full_text = "" # 用于存储最终拼接的字符串
async for chunk in completion:
if chunk.choices[0].delta.content is not None:
for char in chunk.choices[0].delta.content:
if char != ' ':
yield char # 流式输出字符
full_text += char # 拼接字符
print(char, end='')
time.sleep(0.1) # 控制输出速度
# 记录到数据库
try:
await save_chat_to_mysql(pool, person_id, f'{image_url}', full_text, "", 0, 2, 2, 2)
except Exception as e:
print(f"记录到数据库时出错:{e}")
async def recognize_math(pool, person_id, image_url):
client = AsyncOpenAI(
api_key=MODELSCOPE_ACCESS_TOKEN,
base_url="https://api-inference.modelscope.cn/v1"
)
"""
识别图片中的数学题,流式输出,并将结果记录到数据库
:param client: AsyncOpenAI 客户端
:param pool: 数据库连接池
:param person_id: 用户 ID
:param image_url: 图片 URL
:return: 最终拼接的字符串
"""
# 提示词
prompt = "You are a helpful and harmless assistant. You are Qwen developed by Alibaba. You should think step-by-step."
completion = await client.chat.completions.create(
model="Qwen/Qwen2.5-VL-32B-Instruct",
#model="Qwen/Qwen2.5-VL-72B-Instruct",
messages=[
{
"role": "system",
"content": [
{"type": "text", "text": prompt}
],
},
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {"url": image_url}
},
{"type": "text", "text": "请使用中文回答:如何作答?"},
],
}
],
stream=True
)
full_text = "" # 用于存储最终拼接的字符串
async for chunk in completion:
if chunk.choices[0].delta.content is not None:
for char in chunk.choices[0].delta.content:
if char != ' ':
yield char # 流式输出字符
full_text += char # 拼接字符
print(char, end='')
time.sleep(0.1) # 控制输出速度
# 记录到数据库
try:
await save_chat_to_mysql(pool, person_id, f'{image_url}', full_text, "", 0, 2, 2, 1)
except Exception as e:
print(f"记录到数据库时出错:{e}")