Web前端交互利用Python跟大模型操作
Web前端交互利用Python跟大模型操作
一个简单的演示,如何把大模型应用集成到自己的应用场景当中。
这里的场景我们模拟的是在吃鸡游戏中,一个作战计划,是否符合老六的行为规范。
吃鸡游戏已经风靡很多年,游戏里每个人的游戏风格都不一样,有喜欢钢枪的,有喜欢随机应变的,也有喜欢当老六苟分的。每种风格的游戏方式以及游戏里的行为都不同,所以这里将演示如何应用大模型,去判断一个人的游戏方式,是否符合一个老六的行为规范。
前端页面
前端页面这里使用Vue。当然也可以考虑用asp.net。
以下Vue代码可以在浏览器里直接运行。
页面很简单,有两个文档上传控件,一个上传作战计划,一个上传作战规范。
点击开始分析按钮,开始调用大模型检查作战计划是否符合作战规范。
页面将调取用Python写的接口,这个接口包含了访问路径和端口号。
我比较喜欢Vue的这种MVVM框架。
在页面中有一个id为app的div,在脚本最后的里,el:'#app'将逻辑层的data和method部分进行了挂在。data里定义的是跟前端页面绑定的相应数据,method里定义的就是对应html响应的不同事件。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>规则判定</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
</head>
<body>
<div id="app">
<h1>吃鸡作战规则判定</h1>
<div >
<label for="doc-file">上传作战文档:</label>
<input type="file" id="doc-file" @change="handleDocFile">
</div>
<div>
<label for="rule-file">上传规范文档:</label>
<input type="file" id="rule-file" @change="handleRuleFile">
</div>
<div>
<button @click="startAnalysis" :disabled="!docFile || !ruleFile">开始分析</button>
</div>
<div v-if="analysisResult">
<h2>分析结果:</h2>
<pre>{{ analysisResult }}</pre>
</div>
</div>
<script>
new Vue({
el: '#app',
data: {
docFile: null,
ruleFile: null,
analysisResult: null,
},
methods: {
handleDocFile(event) {
this.docFile = event.target.files[0];
},
handleRuleFile(event) {
this.ruleFile = event.target.files[0];
},
async startAnalysis() {
const formData = new FormData();
formData.append('doc_file', this.docFile);
formData.append('rule_file', this.ruleFile);
try {
const response = await fetch('http://127.0.0.1:5000/api/analyze', {
method: 'POST',
body: formData,
});
if (!response.ok) {
throw new Error('分析失败');
}
const result = await response.json();
this.analysisResult = result.message;
} catch (error) {
alert(error.message);
}
}
}
});
</script>
</body>
</html>
后端Python接口
后端的接口用Python编写。
通过OpenAI接口对QWen模型进行访问。
需要留意变量api_key,替换成自己申请到的API KEY。
@app.route,定义接口是通过post还是get的方式访问,并且定义了访问路径"/api/analyze"。
方法里把上传的文件内容读取出来,然后传到提示词里做大模型处理,最后返回结果给前端。
提示词我这里是用英文写的,这个纯个人习惯,你也可以替换成中文。
from flask import Flask, request, jsonify
from flask_cors import CORS
from openai import OpenAI
import json
import os
#为Vue前端提供Qwen的访问接口。
app = Flask(__name__)
##CORS(app)
CORS(app, resources={r"/api/*": {"origins": "*"}})
client = OpenAI(
api_key="这里需要替换成自己的API KEY",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
# 文件上传处理和调用大模型分析
@app.route('/api/analyze', methods=['POST'])
def analyze_documents():
# 获取上传的文件
doc_file = request.files.get('doc_file')
rule_file = request.files.get('rule_file')
# 保存文件到本地
doc_path = f'/tmp/{doc_file.filename}'
rule_path = f'/tmp/{rule_file.filename}'
doc_file.save(doc_path)
rule_file.save(rule_path)
if not doc_file or not rule_file:
return jsonify({'message': '缺少文件'}), 400
with open(doc_path, 'r', encoding='utf-8') as file1: content1 = file1.read()
with open(rule_path, 'r', encoding='utf-8') as file2: content2 = file2.read()
prompt = f"""
# Question
审查以下作战计划: {content1},中关于落地部分描述,是否符合规则: {content2}。
# Response
{{
"pass": if rules are applied,false or true。
"relevant": Need to check each detail rule, there may be many rules, please check each of them.
}}
"""
try:
completion = client.chat.completions.create(
model="qwen-plus",
messages=[
{"role": "system", "content": "你是一个审查员。"},
{"role": "user", "content": prompt},
],
)
data = json.loads(completion.model_dump_json())
analysis_result = data['choices'][0]['message']['content']
except Exception as e:
return jsonify({'message': f'模型分析失败: {str(e)}'}), 500
# 返回分析结果
return jsonify({'message': analysis_result}), 200
if __name__ == '__main__':
app.run(host='127.0.0.1', port=5000)
测试文档
作战计划文档。
这里演示一个完全不符合老六作战规范的内容。
我相当一个老六。
为了快速落地,我第一时刻跳伞,隐藏在一堆房屋中,中间还淘汰了一个敌人,于是我继续躲在这里。
老六行为规范。
# 老六准则
## 航线末端跳伞
## 远离航线
## 不去大的房屋群
## 淘汰敌人后立刻更换位置
运行结果
先运行python脚本,会自动去监听相应的端口,然后再启动html页面,依次上传两个测试文档,点击开始分析,稍等一会儿就可以看到运行结果。
运行成功后,可以看到,根据提示词,按照每条规则进行反馈,并且以JSON的格式返回,方便前端框架进行进一步的处理。
根据前端需要的格式,可以进一步的去调整提示词中Response的部分。

将前面创建的测试文档上传,得到对应的json格式的输出。
可以看到对于前两条的判断,模型的结论是无法判断。这个不同的模型针对这两条给出的结论会略有不同,但基本不会影响总体结论的判断。
其它
关于更多Python访问大模型的方式,可以参考我的这篇随笔。
这里用到的是在线的大模型,根据需要以及引用的那篇随笔,也可以用自己本地部署的大模型,如果是DeepSeek的话,1.5b和7b的推理结果是没法用的,14b会好一些,真正要比较靠谱的话,最起码也得是70b,当然满血的最好。
这里简单的演示,可以根据需要,改成其它的应用,比如合同审查,文档审查等。相对核心的还是在于提示词的书写,这个要根据自己的实际情况来判断。关于提示词对规则的引用,有两种方式,一种就是把规则直接抛给大模型,让大模型自动去判断,另外一种就是把规则里面相应的信息提取出来,人工放在提示词里,这样做的好处是针对复杂的规则文档,可以通过人工的方式精准的提供给大模型规则信息,避免大模型提取不出来对应的规则信息,但缺点是需要人工干预,而且对特定问题也要有一定的经验,比如行业专家。
另:通过Vue也可以直接创建request对象去访问http的api接口,从而绕过python的脚本去监听端口去进行响应。简单场景可以这么做,但如果是复杂场景还是建议做这样的一个分离,方便在python中处理一些特殊或者是复杂的规则或者逻辑。
Web前端交互利用Python跟大模型操作的更多相关文章
- web前端学习笔记(python)(一)
瞎JB搞]感觉自己全栈了,又要把数据库里面的内容,以web形式展示出来,并支持数据操作.占了好多坑.....慢慢填(主要参考廖雪峰的官网,不懂的再百度) 一.web概念 Client/Server模式 ...
- 如何利用 Python 完成验签操作
柠檬班Python8期的佑佑以及Python7期的掠掠同学昨天都私下问华华老师如何利用Python完成验签的操作. 今天我们就以佑佑的例子来跟大家进行简单的说明以及操作! 一.什么是验签: 用非常简单 ...
- Web前端之jQuery 的10大操作技巧
不管是做什么事情,人们习惯在工作中去找方法.找技巧,来帮助提高效率,在软件开发中更是如此.jQuery作为前端开发必学技术之一,在使用中也有各种各样的小技巧,今天小编为大家分享10条必知会的技巧,希望 ...
- web前端的渐进增强式开发模型
渐进增强是前端开发的根本基础.从根本的层面上讲,它可以将HTML,CSS,JavaScript这三者的功能分离开来,这能让当前的项目开一个好头.我们在创建项目的开始要将这三者分开,它们对应的称呼是结构 ...
- 【从0到1学Web前端】CSS定位问题一(盒模型,浮动,BFC) 分类: HTML+CSS 2015-05-27 22:24 813人阅读 评论(1) 收藏
引子: 在谈到css定位问题的时候先来看一个小问题: 已知宽度(假如:100px)div框,水平居中,左右两百年的分别使用div框填充.且左右div自适应. 效果如下图: 这个问题的难点主要是浏览器宽 ...
- Web前端面试指导(九):盒子模型你是怎么理解的?
问题分析 这道题问得比较宽泛,一定要找准切入点,如果切入点找不准,很容易乱答,甚至答偏,所以找准切入点是非常的重要的. 解答思路 1)盒子模型有两种,W3C和IE盒子模型 (1)W3C定义的盒子模型包 ...
- web前端开发学习指南(大群主推荐)
http://www.ituring.com.cn/book/1140 http://www.ituring.com.cn/book/1361
- 利用Python构建时间序列模型解决实际问题的正确姿势
要本着应用到实际工作中目的去学时间序列分析,才能深入浅出的学会,不要纠结于理论,只听我的,我有信心说明白. 本章内容 趋势分析 序列分解 序列预测 序列分解 统计学基础铺垫 划分 时间序列按照季节性划 ...
- 一张图掌握移动Web前端所有技术(大前端、工程化、预编译、自动化)
你要的移动web前端都在这里! 大前端方向:移动Web前端.Native客户端.Node.js. 大前端框架:React.Vue.js.Koa 跨终端技术:HTML 5.CSS 3.JavaScri ...
- Web前端开发推荐阅读书籍、学习课程下载
转自http://www.xuanfengge.com/fe-books.html 前言 学校里没有前端的课程,那如何学习JavaScript,又如何使自己成为一个合格的前端工程师呢? 除了在项目中学 ...
随机推荐
- 第二章 Spring Boot 整合 Kafka消息队列 生产者
系列文章目录 第一章 Kafka 配置部署及SASL_PLAINTEXT安全认证 第二章 Spring Boot 整合 Kafka消息队列 生产者 第三章 Spring Boot 整合 Kaf ...
- Java基础之“数组扩容”
一.Java数组扩容的思路 正常逻辑:Java数组对象的大小是固定不变的,数组对象是不可扩容的. 尽然正常的不行,我们就在new他一次,利用数组复制方法可以变通的实现数组扩容. 逻辑:先弄出一个新的数 ...
- C++强制类型转换运算符(static_cast、reinterpret_cast、const_cast和dynamic_cast)
C++ 引入了四种功能不同的强制类型转换运算符以进行强制类型转换:static_cast.reinterpret_cast.const_cast和dynamic_cast,当然C++为保持与C的兼容, ...
- 使用 C++ 20 协程降低异步网络编程复杂度
传统异步回调 vs C++20协程 协程是一种函数对象,可以设置锚点做暂停,然后再该锚点恢复继续运行.它是如何应用在网络异步编程方面的,请对比下面的两种代码风格: 基于回调的异步网络编程 先来看一个异 ...
- 自己做的linux动态壁纸软件
自己做的linux动态壁纸软件 https://github.com/dependon/fantascene-dynamic-wallpaper
- 解决DevToolsActivePort file doesn't exist
今天遇到个小问题:selenium 启动 chrome crash,报错:DevToolsActivePort file doesn't exist. 在option中添加一下几行: option = ...
- flink基础之window
flink会把数据分成不同的窗口,然后进行汇总和统计. flink的窗口分为timeWindow, countWindow, sessionWindow, gapWindow. timeWindow分 ...
- 企业如何通过数据资产化,激活“数据要素x”,乘出新质生产力
放眼全球,数据作为一种新兴生产要素,在全球经贸活动中扮演着至关重要的角色,驱动着数字经济的蓬勃兴起.据前瞻预测,至2025年,全球数据流动对整体经济增长的贡献预估将达到惊人的11万亿美元. 近几年国家 ...
- .Net Web API 002 Program和WeatherForecastController
创建工程后,工程主要包含了Program.cs和WeatherForecastController.cs两个代码文件,还有一个WeatherForecast.cs文件,该文件定义的天气情况数据结构替, ...
- AI应用实战课学习总结(10)用CNN做图像分类
大家好,我是Edison. 最近入坑黄佳老师的<AI应用实战课>,记录下我的学习之旅,也算是总结回顾. 今天是我们的第10站,一起了解CNN卷积神经网络 以及 通过CNN做图像分类任务的案 ...