当前位置: 首页 > wzjs >正文

室内装饰设计师证书含金量关于seo如何优化

室内装饰设计师证书含金量,关于seo如何优化,广告设计在线设计,wordpress midway1. 概述 该应用是一个基于 Flask 框架的 AI 模型 API 管理系统,允许用户添加、删除不同 AI 模型(如 DeepSeek、阿里云、智谱、百度、科大讯飞等)的 API 密钥,并通过这些配置好的 API 与相应的 AI 模型进行交互,获取回…

1. 概述

该应用是一个基于 Flask 框架的 AI 模型 API 管理系统,允许用户添加、删除不同 AI 模型(如 DeepSeek、阿里云、智谱、百度、科大讯飞等)的 API 密钥,并通过这些配置好的 API 与相应的 AI 模型进行交互,获取回复。应用包含后端的 Flask 服务和前端的 HTML 页面及 JavaScript 脚本。

2. 后端代码说明

2.1 依赖库导入

python

from flask import Flask, request, render_template, jsonify
import requests

  • Flask:用于构建 Web 应用的轻量级框架。
  • request:用于处理 HTTP 请求,获取请求中的数据。
  • render_template:用于渲染 HTML 模板。
  • jsonify:用于将 Python 对象转换为 JSON 格式并作为 HTTP 响应返回。
  • requests:用于发送 HTTP 请求,与外部 API 进行交互。

2.2 应用初始化

python

app = Flask(__name__)

创建一个 Flask 应用实例,__name__参数用于指定应用的名称。

2.3 API 存储字典

python

# 存储用户配置的API
apis = {"deepseek": None,"aliyun": None,"zhipu": None,"baidu": None,"iflytek": None
}

定义一个字典apis,用于存储不同 AI 模型的 API 密钥,初始值均为None

2.4 路由函数

  1. 首页路由

python

@app.route('/')
def index():return render_template('index.html', apis=apis)

  • 当用户访问根路径时,渲染index.html模板,并将apis字典传递给模板,以便在页面上显示和操作。

  1. 添加 API 路由

python

@app.route('/add_api', methods=['POST'])
def add_api():try:data = request.get_json()if not data:return jsonify({"status": "error", "message": "No data provided"}), 400model = data.get('model')api_key = data.get('api_key')if not model or not api_key:return jsonify({"status": "error", "message": "Missing required parameters"}), 400if model in apis:apis[model] = api_keyreturn jsonify({"status": "success", "message": f"{model} API added successfully!"})else:return jsonify({"status": "error", "message": "Invalid model specified."}), 400except Exception as e:return jsonify({"status": "error", "message": str(e)}), 500

  • 处理POST请求,从请求中获取 JSON 数据,提取modelapi_key
  • 检查数据的完整性,若缺少必要参数或模型不合法,则返回相应的错误信息。
  • 若模型存在于apis字典中,则将对应的 API 密钥存入字典,并返回成功消息;否则返回错误消息。
  • 若发生异常,返回异常信息和 500 状态码。

  1. 删除 API 路由

python

@app.route('/remove_api', methods=['POST'])
def remove_api():try:data = request.get_json()if not data:return jsonify({"status": "error", "message": "No data provided"}), 400model = data.get('model')if not model:return jsonify({"status": "error", "message": "Missing model parameter"}), 400if model in apis:apis[model] = Nonereturn jsonify({"status": "success", "message": f"{model} API removed successfully!"})else:return jsonify({"status": "error", "message": "Invalid model specified."}), 400except Exception as e:return jsonify({"status": "error", "message": str(e)}), 500

  • 处理POST请求,从请求中获取 JSON 数据,提取model
  • 检查数据的完整性,若缺少模型参数或模型不合法,则返回相应的错误信息。
  • 若模型存在于apis字典中,则将其 API 密钥设置为None,并返回成功消息;否则返回错误消息。
  • 若发生异常,返回异常信息和 500 状态码。

  1. 获取响应路由

python

@app.route('/get_response', methods=['POST'])
def get_response():try:data = request.get_json()if not data:return jsonify({"status": "error", "message": "No data provided"}), 400model = data.get('model')prompt = data.get('prompt')if not model or not prompt:return jsonify({"status": "error", "message": "Missing required parameters"}), 400if model in apis and apis[model]:try:# 这里根据不同的模型调用相应的APIif model == "deepseek":headers = {"Authorization": f"Bearer {apis[model]}","Content-Type": "application/json"}payload = {"model": "deepseek-chat","messages": [{"role": "user", "content": prompt}],"temperature": 0.7}response = requests.post("https://api.deepseek.com/v1/chat/completions",headers=headers,json=payload)elif model == "aliyun":headers = {"Authorization": f"Bearer {apis[model]}","Content-Type": "application/json"}payload = {"model": "bailian","input": {"messages": [{"role": "user", "content": prompt}]}}response = requests.post("https://bailian.aliyuncs.com/v2/app/completions",headers=headers,json=payload)elif model == "zhipu":headers = {"Authorization": f"Bearer {apis[model]}","Content-Type": "application/json"}payload = {"model": "chatglm_turbo","messages": [{"role": "user", "content": prompt}]}response = requests.post("https://open.bigmodel.cn/api/paas/v3/model-api/chatglm_turbo/invoke",headers=headers,json=payload)elif model == "baidu":headers = {"Content-Type": "application/json","Accept": "application/json"}payload = {"messages": [{"role": "user", "content": prompt}]}response = requests.post(f"https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token={apis[model]}",headers=headers,json=payload)elif model == "iflytek":headers = {"Content-Type": "application/json","X-Appid": "your_app_id",  # 需要替换为实际AppID"X-CurTime": str(int(time.time())),"X-Param": json.dumps({"scene": "main"}),"X-CheckSum": ""  # 需要计算校验和}payload = {"text": prompt}response = requests.post("https://api.xfyun.cn/v1/aiui/v1/text",headers=headers,json=payload)if response.status_code == 200:response_data = response.json()# 根据不同API的响应格式提取回复if model == "deepseek":reply = response_data['choices'][0]['message']['content']elif model == "aliyun":reply = response_data['output']['text']elif model == "zhipu":reply = response_data['data']['choices'][0]['content']elif model == "baidu":reply = response_data['result']elif model == "iflytek":reply = response_data['data'][0]['content']return jsonify({"status": "success", "response": reply,"model": model})else:return jsonify({"status": "error", "message": f"API call failed with status code {response.status_code}","response_text": response.text,"request_payload": payload  # 添加请求负载用于调试}), response.status_codeexcept requests.exceptions.RequestException as e:return jsonify({"status": "error", "message": f"Network error: {str(e)}"}), 500except Exception as e:return jsonify({"status": "error", "message": str(e),"error_type": type(e).__name__}), 500else:return jsonify({"status": "error", "message": "API not configured or invalid model."}), 400except Exception as e:return jsonify({"status": "error", "message": str(e)}), 500

  • 处理POST请求,从请求中获取 JSON 数据,提取modelprompt
  • 检查数据的完整性,若缺少必要参数或模型未配置 API 密钥,则返回相应的错误信息。
  • 根据不同的模型,构造相应的请求头和请求负载,发送POST请求到对应的 API 端点。
  • 若 API 调用成功(状态码为 200),根据不同模型的响应格式提取回复内容,并返回成功消息;否则返回错误消息,包括状态码、响应文本和请求负载(用于调试)。
  • 若发生网络错误或其他异常,返回相应的错误信息和状态码。

2.5 应用运行

python

if __name__ == '__main__':app.run(debug=True)

当脚本直接运行时,启动 Flask 应用,并设置debug模式为True,以便在开发过程中查看错误信息和自动重新加载应用。

3. 前端代码说明

3.1 HTML 结构

  1. 头部部分

html

<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>AI Model API Manager</title><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"><style>.chat-window {height: 400px;overflow-y: auto;border: 1px solid #ccc;padding: 10px;margin-bottom: 20px;background-color: #f9f9f9;}.message {margin-bottom: 10px;padding: 8px;border-radius: 5px;}.user-message {background-color: #e3f2fd;margin-left: 20%;}.bot-message {background-color: #f1f1f1;margin-right: 20%;}.model-info {font-size: 0.8em;color: #666;margin-top: 5px;}.error-message {background-color: #ffebee;color: #d32f2f;}</style>
</head>

  • 设置页面的字符编码、视口等基本信息。
  • 引入 Bootstrap 的 CSS 样式表,用于页面布局和样式。
  • 自定义一些 CSS 样式,用于聊天窗口、消息显示、错误消息显示等。

  1. 主体部分

html

<body><div class="container mt-5"><h1 class="text-center mb-4">AI Model API Manager</h1><div class="row"><div class="col-md-6"><div class="card mb-3"><div class="card-header">API Management</div><div class="card-body"><form id="addApiForm" class="mb-3"><div class="mb-3"><label for="addModel" class="form-label">Model:</label><select id="addModel" name="model" class="form-select"><option value="deepseek">DeepSeek</option><option value="aliyun">Aliyun</option><option value="zhipu">Zhipu</option><option value="baidu">Baidu</option><option value="iflytek">Iflytek</option></select></div><div class="mb-3"><label for="api_key" class="form-label">API Key:</label><input type="text" id="api_key" name="api_key" class="form-control" required></div><button type="submit" class="btn btn-primary">Add API</button></form><form id="removeApiForm"><div class="mb-3"><label for="removeModel" class="form-label">Model:</label><select id="removeModel" name="model" class="form-select"><option value="deepseek">DeepSeek</option><option value="aliyun">Aliyun</option><option value="zhipu">Zhipu</option><option value="baidu">Baidu</option><option value="iflytek">Iflytek</option></select></div><button type="submit" class="btn btn-danger">Remove API</button></form></div></div></div><div class="col-md-6"><div class="card"><div class="card-header">Chat with AI</div><div class="card-body"><div class="chat-window" id="chatWindow"></div><form id="getResponseForm"><div class="mb-3"><label for="chatModel" class="form-label">Model:</label><select id="chatModel" name="model" class="form-select"><option value="deepseek">DeepSeek</option><option value="aliyun">Aliyun</option><option value="zhipu">Zhipu</option><option value="baidu">Baidu</option><option value="iflytek">Iflytek</option></select></div><div class="mb-3"><label for="prompt" class="form-label">Prompt:</label><input type="text" id="prompt" name="prompt" class="form-control" required></div><button type="submit" class="btn btn-success">Get Response</button></form></div></div></div></div></div>

  • 页面主体部分使用 Bootstrap 的栅格系统布局。
  • 左侧部分用于 API 管理,包含添加 API 和移除 API 的表单,表单中包含模型选择和 API 密钥输入框。
  • 右侧部分用于与 AI 聊天,包含聊天窗口和发送请求的表单,表单中包含模型选择和提示输入框。

3.2 JavaScript 脚本

  1. 添加 API 功能

javascript

document.getElementById('addApiForm').addEventListener('submit', function(e) {e.preventDefault();const model = document.getElementById('addModel').value;const apiKey = document.getElementById('api_key').value;fetch('/add_api', {method: 'POST',headers: {'Content-Type': 'application/json',},body: JSON.stringify({model: model,api_key: apiKey})}).then(response => {if (!response.ok) {return response.json().then(err => { throw err; });}return response.json();}).then(data => {alert(data.message);document.getElementById('api_key').value = '';}).catch(error => {alert(`Error: ${error.message || 'Failed to add API'}`);});
});

  • 监听添加 API 表单的提交事件,阻止表单的默认提交行为。
  • 获取用户选择的模型和输入的 API 密钥。
  • 使用fetch发送POST请求到/add_api端点,传递模型和 API 密钥的 JSON 数据。
  • 处理响应,若响应失败,抛出错误;若成功,显示提示信息并清空 API 密钥输入框;若发生异常,显示错误提示。

-------------------------------------------------------------------------------------

app.py代码

from flask import Flask, request, render_template, jsonify
import requestsapp = Flask(__name__)# 存储用户配置的API
apis = {"deepseek": None,"aliyun": None,"zhipu": None,"baidu": None,"iflytek": None
}@app.route('/')
def index():return render_template('index.html', apis=apis)@app.route('/add_api', methods=['POST'])
def add_api():try:data = request.get_json()if not data:return jsonify({"status": "error", "message": "No data provided"}), 400model = data.get('model')api_key = data.get('api_key')if not model or not api_key:return jsonify({"status": "error", "message": "Missing required parameters"}), 400if model in apis:apis[model] = api_keyreturn jsonify({"status": "success", "message": f"{model} API added successfully!"})else:return jsonify({"status": "error", "message": "Invalid model specified."}), 400except Exception as e:return jsonify({"status": "error", "message": str(e)}), 500@app.route('/remove_api', methods=['POST'])
def remove_api():try:data = request.get_json()if not data:return jsonify({"status": "error", "message": "No data provided"}), 400model = data.get('model')if not model:return jsonify({"status": "error", "message": "Missing model parameter"}), 400if model in apis:apis[model] = Nonereturn jsonify({"status": "success", "message": f"{model} API removed successfully!"})else:return jsonify({"status": "error", "message": "Invalid model specified."}), 400except Exception as e:return jsonify({"status": "error", "message": str(e)}), 500@app.route('/get_response', methods=['POST'])
def get_response():try:data = request.get_json()if not data:return jsonify({"status": "error", "message": "No data provided"}), 400model = data.get('model')prompt = data.get('prompt')if not model or not prompt:return jsonify({"status": "error", "message": "Missing required parameters"}), 400if model in apis and apis[model]:try:# 这里根据不同的模型调用相应的APIif model == "deepseek":headers = {"Authorization": f"Bearer {apis[model]}","Content-Type": "application/json"}payload = {"model": "deepseek-chat","messages": [{"role": "user", "content": prompt}],"temperature": 0.7}response = requests.post("https://api.deepseek.com/v1/chat/completions",headers=headers,json=payload)elif model == "aliyun":headers = {"Authorization": f"Bearer {apis[model]}","Content-Type": "application/json"}payload = {"model": "bailian","input": {"messages": [{"role": "user", "content": prompt}]}}response = requests.post("https://bailian.aliyuncs.com/v2/app/completions",headers=headers,json=payload)elif model == "zhipu":headers = {"Authorization": f"Bearer {apis[model]}","Content-Type": "application/json"}payload = {"model": "chatglm_turbo","messages": [{"role": "user", "content": prompt}]}response = requests.post("https://open.bigmodel.cn/api/paas/v3/model-api/chatglm_turbo/invoke",headers=headers,json=payload)elif model == "baidu":headers = {"Content-Type": "application/json","Accept": "application/json"}payload = {"messages": [{"role": "user", "content": prompt}]}response = requests.post(f"https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token={apis[model]}",headers=headers,json=payload)elif model == "iflytek":headers = {"Content-Type": "application/json","X-Appid": "your_app_id",  # 需要替换为实际AppID"X-CurTime": str(int(time.time())),"X-Param": json.dumps({"scene": "main"}),"X-CheckSum": ""  # 需要计算校验和}payload = {"text": prompt}response = requests.post("https://api.xfyun.cn/v1/aiui/v1/text",headers=headers,json=payload)if response.status_code == 200:response_data = response.json()# 根据不同API的响应格式提取回复if model == "deepseek":reply = response_data['choices'][0]['message']['content']elif model == "aliyun":reply = response_data['output']['text']elif model == "zhipu":reply = response_data['data']['choices'][0]['content']elif model == "baidu":reply = response_data['result']elif model == "iflytek":reply = response_data['data'][0]['content']return jsonify({"status": "success", "response": reply,"model": model})else:return jsonify({"status": "error", "message": f"API call failed with status code {response.status_code}","response_text": response.text,"request_payload": payload  # 添加请求负载用于调试}), response.status_codeexcept requests.exceptions.RequestException as e:return jsonify({"status": "error", "message": f"Network error: {str(e)}"}), 500except Exception as e:return jsonify({"status": "error", "message": str(e),"error_type": type(e).__name__}), 500else:return jsonify({"status": "error", "message": "API not configured or invalid model."}), 400except Exception as e:return jsonify({"status": "error", "message": str(e)}), 500if __name__ == '__main__':app.run(debug=True)

index.html代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>AI Model API Manager</title><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"><style>.chat-window {height: 400px;overflow-y: auto;border: 1px solid #ccc;padding: 10px;margin-bottom: 20px;background-color: #f9f9f9;}.message {margin-bottom: 10px;padding: 8px;border-radius: 5px;}.user-message {background-color: #e3f2fd;margin-left: 20%;}.bot-message {background-color: #f1f1f1;margin-right: 20%;}.model-info {font-size: 0.8em;color: #666;margin-top: 5px;}.error-message {background-color: #ffebee;color: #d32f2f;}</style>
</head>
<body><div class="container mt-5"><h1 class="text-center mb-4">AI Model API Manager</h1><div class="row"><div class="col-md-6"><div class="card mb-3"><div class="card-header">API Management</div><div class="card-body"><form id="addApiForm" class="mb-3"><div class="mb-3"><label for="addModel" class="form-label">Model:</label><select id="addModel" name="model" class="form-select"><option value="deepseek">DeepSeek</option><option value="aliyun">Aliyun</option><option value="zhipu">Zhipu</option><option value="baidu">Baidu</option><option value="iflytek">Iflytek</option></select></div><div class="mb-3"><label for="api_key" class="form-label">API Key:</label><input type="text" id="api_key" name="api_key" class="form-control" required></div><button type="submit" class="btn btn-primary">Add API</button></form><form id="removeApiForm"><div class="mb-3"><label for="removeModel" class="form-label">Model:</label><select id="removeModel" name="model" class="form-select"><option value="deepseek">DeepSeek</option><option value="aliyun">Aliyun</option><option value="zhipu">Zhipu</option><option value="baidu">Baidu</option><option value="iflytek">Iflytek</option></select></div><button type="submit" class="btn btn-danger">Remove API</button></form></div></div></div><div class="col-md-6"><div class="card"><div class="card-header">Chat with AI</div><div class="card-body"><div class="chat-window" id="chatWindow"></div><form id="getResponseForm"><div class="mb-3"><label for="chatModel" class="form-label">Model:</label><select id="chatModel" name="model" class="form-select"><option value="deepseek">DeepSeek</option><option value="aliyun">Aliyun</option><option value="zhipu">Zhipu</option><option value="baidu">Baidu</option><option value="iflytek">Iflytek</option></select></div><div class="mb-3"><label for="prompt" class="form-label">Prompt:</label><input type="text" id="prompt" name="prompt" class="form-control" required></div><button type="submit" class="btn btn-success">Get Response</button></form></div></div></div></div></div><!-- 保持之前的HTML结构不变,只修改JavaScript部分 -->
<script>// 添加APIdocument.getElementById('addApiForm').addEventListener('submit', function(e) {e.preventDefault();const model = document.getElementById('addModel').value;const apiKey = document.getElementById('api_key').value;fetch('/add_api', {method: 'POST',headers: {'Content-Type': 'application/json',},body: JSON.stringify({model: model,api_key: apiKey})}).then(response => {if (!response.ok) {return response.json().then(err => { throw err; });}return response.json();}).then(data => {alert(data.message);document.getElementById('api_key').value = '';}).catch(error => {alert(`Error: ${error.message || 'Failed to add API'}`);});});// 移除APIdocument.getElementById('removeApiForm').addEventListener('submit', function(e) {e.preventDefault();const model = document.getElementById('removeModel').value;fetch('/remove_api', {method: 'POST',headers: {'Content-Type': 'application/json',},body: JSON.stringify({model: model})}).then(response => {if (!response.ok) {return response.json().then(err => { throw err; });}return response.json();}).then(data => {alert(data.message);}).catch(error => {alert(`Error: ${error.message || 'Failed to remove API'}`);});});// 获取响应document.getElementById('getResponseForm').addEventListener('submit', function(e) {e.preventDefault();const model = document.getElementById('chatModel').value;const prompt = document.getElementById('prompt').value;const chatWindow = document.getElementById('chatWindow');// 添加用户消息chatWindow.innerHTML += `<div class="message user-message"><strong>You:</strong> ${prompt}</div>`;const submitBtn = document.querySelector('#getResponseForm button[type="submit"]');submitBtn.disabled = true;fetch('/get_response', {method: 'POST',headers: {'Content-Type': 'application/json',},body: JSON.stringify({model: model,prompt: prompt})}).then(response => {if (!response.ok) {return response.json().then(err => { throw err; });}return response.json();}).then(data => {if (data.status === "success") {chatWindow.innerHTML += `<div class="message bot-message"><strong>Bot (${data.model}):</strong> ${data.response}</div>`;} else {// 显示更详细的错误信息let errorMsg = data.message;if (data.response_text) {try {const errorData = JSON.parse(data.response_text);errorMsg += ` - ${errorData.error || errorData.message || ''}`;} catch (e) {errorMsg += ` - ${data.response_text}`;}}chatWindow.innerHTML += `<div class="message error-message"><strong>Error:</strong> ${errorMsg}</div>`;}chatWindow.scrollTop = chatWindow.scrollHeight;document.getElementById('prompt').value = '';}).catch(error => {let errorMsg = error.message || 'Failed to get response';if (error.response_text) {errorMsg += ` - ${error.response_text}`;}chatWindow.innerHTML += `<div class="message error-message"><strong>Error:</strong> ${errorMsg}</div>`;chatWindow.scrollTop = chatWindow.scrollHeight;}).finally(() => {submitBtn.disabled = false;});});
</script></body>
</html>

http://www.dtcms.com/wzjs/131487.html

相关文章:

  • 可拖拽编程网站开发做高端网站公司
  • 怎么确认网站是什么语言做的百度帐号
  • wordpress发布文章页面错误seo关键词排名优化费用
  • 公司网站是做的谷歌的产品营销策划方案3000字
  • 太原企业建站程序网站快速排名的方法
  • 杭州倍世康 做网站网站运营seo实训总结
  • 国际设计师网站有哪些优化网站排名方法教程
  • 横翻网站模版微信营销软件排行榜
  • 兼职做网站在那里接任务十大经典事件营销案例分析
  • 哪个网站专业做饲料网站关键词排名分析
  • 云南网站设计流程域名注册网站有哪些
  • 网站建设优化新疆怎么样关键词优化
  • 集团做网站百度指数关键词
  • 北京资质代办公司排名页面seo优化
  • 做的网站被挂马广告联盟怎么加入
  • 青岛网络科技有限公司seo入门版
  • 如何把网站做跳转浏览器链接地址国家培训网官网
  • vue适合什么样的网站开发厦门关键词优化报价
  • 福建省建设资格注册中心网站天天自学网网址
  • 如何修改网站后台密码关联词有哪些 全部
  • 做包装的网站有哪些seo优化搜索结果
  • 广州骏域网站建设专家手机电脑版百度代运营
  • 用领导人在公司网站做宣传犯法吗关键词推广优化排名如何
  • 给人做网站赚钱吗郑州seo网站关键词优化
  • 怎么自己做单页网站百度2022最新版本
  • 枣庄网站建设电话北京seo全网营销
  • 中国建设银行信用卡武汉seo排名优化公司
  • 网站建设自建与租用区别西安百度seo推广电话
  • 都匀市住房和城乡建设局网站seo点击软件
  • 《php网站开发》电子课件可以下载新闻视频的网站