python调用openai兼容模型api qwen实现ai智能对话生成动态题目表单并自动批改试卷代码
代码语言:python
所属分类:其他
代码描述:python调用openai兼容模型api qwen实现ai智能对话生成动态题目表单并自动批改试卷代码,可设定提示词生成任意动态试卷,由ai进行答题批改解读。
代码标签: python 调用 openai 兼容 模型api qwen ai 智能 对话 生成 动态 题目 表
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
#!/usr/local/python3/bin/python3
# -*- coding: utf-8 -*
import os
import uvicorn
import json
import re
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse, StreamingResponse, JSONResponse
from openai import AsyncOpenAI
from pydantic import BaseModel
from typing import List, Dict, Any
# --- 1. 配置 ---
app = FastAPI()
client = AsyncOpenAI(api_key= "sk-",base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")
# --- 2. Pydantic 模型定义 ---
class Message(BaseModel):
role: str
content: Any # 保持 Any 以接收前端的灵活格式
class ChatRequest(BaseModel):
messages: List[Message]
model: str = "qwen-max"
class GradeRequest(BaseModel):
exam: Dict[str, Any]
answers: Dict[str, Any]
history: List[Message]
model: str = "qwen-max"
# --- 3. 后端逻辑 ---
def sanitize_messages(messages: List[Message]) -> List[Dict[str, Any]]:
"""将聊天记录转换为OpenAI API接受的格式"""
sanitized = []
for msg in messages:
content = msg.content
if isinstance(content, dict):
content = json.dumps(content, ensure_ascii=False)
sanitized.append({"role": msg.role, "content": content})
return sanitized
# 【修复1】增强系统指令,确保只返回JSON
EXAM_GENERATION_SYSTEM_PROMPT = """
你是一个专业的试卷生成AI,你的唯一任务是根据用户需求生成符合指定格式的试卷JSON。
严格要求:
1. 必须且只能返回一个纯净的JSON对象,不包含任何JSON之外的内容
2. 不能有解释、说明、注释或Markdown标记
3. 确保JSON格式正确,可被标准JSON解析器解析
4. 严格遵循以下结构:
{
"title": "试卷标题",
"description": "对试卷的简短描述",
"questions": [
{"id": "q1", "type": "multiple_choice", "question_text": "问题文本", "options": ["选项A", "选项B", "选项C"]},
{"id": "q2", "type": "short_answer", "question_text": "问题文本"},
{"id": "q3", "type": "true_false", "question_text": "问题文本"}
]
}
支持的type: multiple_choice, short_answer, true_false
如果违反上述要求,你将无法完成任务。
"""
@app.post("/api/generate-exam")
async def generate_exam(request: ChatRequest):
"""接收用户请求,生成试卷JSON"""
messages_for_api = sanitize_messages(request.messages)
final_messages = [
{"role": "system", "content": EXAM_GENERATION_SYSTEM_PROMPT}
]
if messages_for_api:
final_messages.append(messages_for_api[-1])
try:
response = await client.chat.completions.create(
model=re.........完整代码请登录后点击上方下载按钮下载查看















网友评论0