如何使用 ERNIE 千帆大模型基于 Flask 搭建智能英语能力评测对话网页机器人(详细教程)

ERNIE 千帆大模型

ERNIE-3.5是一款基于深度学习技术构建的高效语言模型,其强大的综合能力使其在中文应用方面表现出色。相较于其他模型,如微软的ChatGPT,ERNIE-3.5不仅综合能力更强,而且在训练与推理效率上也更高。这使得ERNIE-3.5能够支持更丰富的外部应用开发,为更多国内开发者提供强大基础工具。

ERNIE-3.5在语义和语境理解上有了显著提升,能够更准确地回答问题和进行交流。在与用户的聊天对话中,它表现出了更高的准确性和自然度,使得其在虚拟助手、在线客服和社交媒体等场景中具备了更出色的表现。在中文测试中,ERNIE-3.5的理解和生成能力更是超过了GPT-4,这显示了其在中文语境下的强大实力。

ERNIE-3.5支持多种NLP任务,包括文本分类、命名实体识别、语义匹配等,适用于需要文本分析和理解的场景,如情感分析、智能问答、文本摘要等。同时,它在创意写作、问答、推理、代码生成等方面也有显著的改进,展现了出色的功能和性能。

此外,ERNIE-3.5的训练速度和推理速度相较于之前的版本也有了大幅提升。据对比数据显示,其训练速度提升了2倍,推理速度提升了17倍,这将大大提高模型迭代升级效率,并大幅降低训练及使用成本。

ERNIE-3.5的推出标志着我国人工智能企业和研究机构在大模型、深度学习等关键技术方面取得了新突破,其水平已赶上世界前列。这不仅有利于人工智能产业生态的繁荣,还为人工智能在更广泛复杂场景中的应用提供了支持。例如,ERNIE-3.5可支持更加开放的外部开发,使其能够被应用于更长文本的生成、图文问答等需求,有助于推动人工智能从单一领域向综合性知识服务领域进一步拓展。

安装环境

pip install qianfan

在调用 SDK 前,需要先初始化 应用API Key(即AK) 和 应用Secret Key(即SK),支持通过参数初始化、内置函数初始化、环境变量初始化三种方式进行初始化。

配置密钥

地址:https://console.bce.baidu.com/iam/#/iam/accesslist

在这里插入图片描述
SDK 调用千帆大模型

方案一:加载环境变量 .env 配置文件

QIANFAN_ACCESS_KEY=安全认证 Access Key
QIANFAN_SECRET_KEY=安全认证 Secret Key

方案二:直接属性设置

chat_completion = qianfan.ChatCompletion(ak="API Key", sk="Secret Key")

SDK 调用接口

import qianfan
import dotenv
dotenv.load_dotenv()chat_comp = qianfan.ChatCompletion()resp = chat_comp.do(model="ERNIE-Bot-4", messages=[{"role": "user","content": "你好"
}])if resp.code == 200:print(resp.request.json_body)# print(resp.body)

resp.request.json_body 数据结构(数据类型:dict)

{  'messages': [  {'role': 'user', 'content': '你好'}  ],  'stream': False,  'extra_parameters': {  'request_source': 'qianfan_py_sdk_v0.3.7.1'  }  
}  

resp.body 数据结构(数据类型:dict)

{  'id': 'as-u2tgxkd8z4',  'object': 'chat.completion',  'created': 1712759343,  'result': '你好,有什么我可以帮助你的吗?',  'is_truncated': False,  'need_clear_history': False,  'usage': {  'prompt_tokens': 1,  'completion_tokens': 8,  'total_tokens': 9  }  
}

POST 请求调用接口

加载环境变量 .env 配置文件

CLIENT_API_KEY=应用 API KEY
CLIENT_SECRET_KEY=应用 SECRET KEY

地址:https://console.bce.baidu.com/qianfan/ais/console/applicationConsole/application

在这里插入图片描述

详细源码

import osimport requests
import json
import dotenvdotenv.load_dotenv()def get_access_token():url = f"https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={os.environ['CLIENT_API_KEY']}&client_secret={os.environ['CLIENT_SECRET_KEY']}"payload = json.dumps("")headers = {'Content-Type': 'application/json','Accept': 'application/json'}response = requests.request("POST", url, headers=headers, data=payload)return response.json().get("access_token")def qianfan_chat_post(content):url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token=" + get_access_token()payload = json.dumps({"messages": [{"role": "user","content": content}]})headers = {'Content-Type': 'application/json'}response = requests.request("POST", url, headers=headers, data=payload)return response.json().get("result")

服务器端源码

读取数据

PROBELM_LIST = []with open('english.txt', encoding='utf-8', mode='r') as file:# 使用 for循环逐行读取文件for line in file:# 打印每一行的内容PROBELM_LIST.append(line.replace("\n", ""))

百度智能云调用

import qianfan
import dotenvdotenv.load_dotenv()chat_comp = qianfan.ChatCompletion()def qianfan_ask(content):resp = chat_comp.do(model="ERNIE-Bot-4", messages=[{"role": "user","content": content}], system="结果用纯英语返回,不带有任何中文,内容不超过100个词。")if resp.code == 200:return resp.body.get("result")print(qianfan_ask("问题;What is the past tense of the verb “to run”?, 我的回答:run。请问简要评价我的回答情况"))

配置服务器源码

from datetime import datetimefrom flask import Flask, jsonify, request, make_response
from flask_cors import CORS
from flask_pymongo import PyMongo
from read_data import PROBELM_LIST
from qianfan_api import qianfan_askapp = Flask(__name__)
CORS(app)# 配置 MongoDB 连接
app.config['MONGO_URI'] = 'mongodb://localhost:27017/hnu'
mongo = PyMongo(app)def insert_mongo_data(user: str, content: str):collection = mongo.db.message# 获取当前日期和时间now = datetime.now()# 格式化日期和时间formatted_time = now.strftime("%Y-%m-%d %H:%M:%S")collection.insert_one({'time': formatted_time, 'user': user, 'content': content})@app.route('/problem')
def ramdon_problem():index = int(request.args.get('index'))# problem = random.choice(PROBELM_LIST)# 题目循环取余操作problem = PROBELM_LIST[index % len(PROBELM_LIST)]# 记录机器人数据insert_mongo_data("机器人", problem)result = {'code': 200, 'data': problem}return jsonify(result)@app.route('/answer', methods=['POST'])
def answer_problem():data = request.get_json()problem = data.get('problem', "")answer = data.get('answer', "")# 记录使用者数据insert_mongo_data("使用者", answer)# 千帆大模型分析回答质量analysis = qianfan_ask(f"问题{problem}。我的回答:{answer}。请问简要评价我的回答情况")# 记录机器人数据insert_mongo_data("机器人", analysis)result = {'code': 200, 'data': analysis}return jsonify(result)if __name__ == '__main__':app.run(host="0.0.0.0", port=3000, debug=True)

导出 Json 数据

开启接口支持导出 json 数据

@app.route('/json', methods=['GET'])
from flask import Flask, jsonify
from flask_cors import CORS
from flask_pymongo import PyMongoimport pandas as pd
import io
from openpyxl import Workbookapp = Flask(__name__)
CORS(app)# 配置 MongoDB 连接
app.config['MONGO_URI'] = 'mongodb://localhost:27017/hnu'
mongo = PyMongo(app)@app.route('/json', methods=['GET'])
def get_data():# 查询 MongoDBdata = mongo.db.message.find()# 将 ObjectId 转换为字符串result = []for d in data:# 处理 ObjectIdd['_id'] = str(d['_id'])result.append(d)return jsonify(result)if __name__ == '__main__':app.run(host="0.0.0.0", port=3000, debug=True)

导出 Excel 数据

开启接口支持导出 excel 数据

from flask import Flask, make_response
from flask_cors import CORS
from flask_pymongo import PyMongoimport pandas as pd
import io
from openpyxl import Workbookapp = Flask(__name__)
CORS(app)# 配置 MongoDB 连接
app.config['MONGO_URI'] = 'mongodb://localhost:27017/hnu'
mongo = PyMongo(app)def generate_excel(data):# 创建一个 Excel 工作簿和工作表wb = Workbook()ws = wb.activews.title = "Data"# 将数据写入工作表for row_num, row_data in enumerate(data, 1):ws.append(row_data)# 将工作簿保存到 BytesIO 流中excel_data = io.BytesIO()wb.save(excel_data)# 重置流的位置到开头excel_data.seek(0)  # 设置 HTTP 响应头,以便浏览器知道这是一个 Excel 文件response = make_response(excel_data.read())response.headers["Content-Disposition"] = "attachment; filename=data.xlsx"response.headers["Content-Type"] = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"return response@app.route('/excel', methods=['GET'])
def get_data_excel():data = mongo.db.message.find()# 将 ObjectId 转换为字符串result = []for d in data:# 处理ObjectIdd['_id'] = str(d['_id'])result.append(d)# 将查询结果转换为 DataFramedf = pd.DataFrame(result)# 生成 Excel 文件并返回return generate_excel(df.values.tolist())if __name__ == '__main__':app.run(host="0.0.0.0", port=3000, debug=True)

前端效果预览

聊天界面效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/324086.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第三节课,功能2:开发后端用户的管理接口-- postman--debug测试

一、如何使用postman 网址: https://www.postman.com/downloads/ 【Postman小白教程】五分钟学会如何使用Postman~_哔哩哔哩_bilibili postman安装使用_bowser agent在postman哪里-CSDN博客 二、下载后 登录,开始测试 2.1 关于postman 报错&#…

第十五届蓝桥杯python B组省赛

前言: 这是我第一次参加蓝桥杯,成绩并不理想,我反思了一下午,我的问题主要是知识点学不透,题目做的太少,而且学习的时候少数时间不专心,但是,我能感觉到我的学习能力并不弱&#xf…

分布式锁讲解

概括 分布式锁是一种用于在分布式系统中实现同步机制的锁。在单机系统中,我们可以使用如Java中的synchronized关键字或者 ReentrantLock来实现线程间的同步,但在分布式系统中,由于多个节点(服务器)之间的并发操作&am…

C语言实现扫雷游戏完整版

游戏介绍: 目录 游戏介绍: 游戏框架: 游戏具体功能实现: 棋盘的定义: 棋盘初始化: 棋盘打印: 棋盘布置雷: 棋盘扫雷: 爆炸展开一片: 获取周围八个…

WP Rocket插件下载:加速您的WordPress网站,提升用户体验

在互联网速度决定用户体验的今天,一个快速加载的网站对于吸引和保留访问者至关重要。WP Rocket插件,作为一款专为WordPress设计的高性能缓存插件,提供了一套完整的解决方案,帮助您优化网站性能,提升用户体验。 [WP Ro…

Linux随记(九)

一、在bclinux Euler 21.10 安装oracle19c客户端 (为了使用sqlplus 、expdp、impdp、sqlldr等指令) #环境和说明 系统:BigCloud Enterprise Linux For Euler 21.10 LTS 为了使用sqlplus 、expdp、impdp、sqlldr等指令。 下面是安装步骤 &…

力扣打卡第二天

206. 反转链表 class Solution { public:ListNode* reverseList(ListNode* head) {// //迭代法// ListNode *pre nullptr;// ListNode *curr head;// while(curr){// ListNode *next curr -> next;// curr -> next pre;// pre curr;// curr next;/…

hadoop启动后没有namenode,datanode等解决方法

之前用的是虚拟机,在虚拟机上安装的hadoop,但是后来,电脑恢复出厂设置了,什么都重新开始。就在本地安装 Linux 子系统。 但是,有时候start-dfs.sh后,jps出现错误。 像这种拒绝连接 解决办法就是如下&…

vivado新版本兼容老版本,vitis classic兼容sdk教程

new version: vivado版本2023.2 和vitisv classic 2023.2 old version: vivado 2018.3以及之前的版本 打开工程 自动升级到当前版本,选择OK 点击Yes,合并当前的目录架构 点击OK 点击Report IP status 勾选要升级的IP核,点击升级 在项目工程文件夹…

git使用注意事项事项

以下操作均在gitee平台上实现 文章目录 1、本地仓库和远程仓库有冲突2、git提交自动忽略某些文件3、git无法push提交到远程仓库 1、本地仓库和远程仓库有冲突 在web端修改了文件内容或者删除了文件,本地仓库需要重新把远程仓库拉取到本地,或者强制提交到…

信息系统架构模型_1.单机应用模式和客户机/服务器模式

1.单机应用模式(Standalone) 单机应用系统是最简单的软件结构,是指运行在一台物理机器上的独立应用程序。这些软件系统,从今天的软件架构上来讲,是很简单,是标准的单机系统。当然至今,这种复杂的…

ssrf(第二弹)

四,post请求 1.打开环境,提示说发一个HTTP POST请求,ssrf是用php的curl实现的.并且会跟踪302跳转。 2.用dirsearch扫一下常见的端口,看到有三个可以访问的页面 3.构造伪协议,因为要通过172.0.0.1访问,我们…

Java毕设之学院党员管理系统的设计与实现

运行环境 环境说明: 开发语言:java 框架:springboot,vue JDK版本:JDK1.8 数据库:mysql5.7(推荐5.7,8.0也可以) 数据库工具:Navicat11 开发软件:idea/eclipse(推荐idea) Maven包:Maven3.3.9 系统实现 管理员功能实现 党员管理 管理员进入指定功能操作…

摩菲Murphy显示器显示表 总线编程器维修PV780B

Murphy仪器维修包括:摩菲数字显示器;摩菲监视仪表;摩菲CAN总线控制器等维修 维修故障包括:黑屏、指示灯无显示,触摸屏上电无反应, 上电蓝屏、白屏,通电几分钟后屏幕变为蓝屏,主板故…

荷香堪筑梦,鸳鸯和月寻。(变相BFS搜索)

本题链接:登录—专业IT笔试面试备考平台_牛客网 题目: 样例: 输入 3 4 2 .... ***. ..a. 输出 yes 思路: 根据题意,这里 1 s 可以移动多次,我们将每次可以移动避开雪的的位置存储起来,判断当…

每天五分钟深度学习:数学中的极值

本文重点 在数学领域中,极值是一个极其重要的概念,它不仅在纯数学理论研究中占据核心地位,而且在工程、物理、经济等实际应用领域也发挥着不可替代的作用。极值问题涉及函数的最大值和最小值,是微积分学中的一个基本问题。本文旨在详细介绍数学中的极值概念、性质、求解方…

动态IP避坑指南:如何挑选合适的动态代理IP?

在如今的网络环境中,使用动态IP代理成为实现隐私保护、访问受限内容和提高网络效率的一种常见方式,选择合适的国外动态IP代理可以让我们的业务处理事半功倍。面对市面上琳琅满目的选择,如何挑选购买适合自己的动态IP代理服务呢?在…

基于Java+SpringBoot+Vue前后端分离教学资源共享平台系统

基于JavaSpringBootVue前后端分离教学资源共享平台系统 🍅 作者主页 网顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制系统…

【Leetcode每日一题】 分治 - 交易逆序对的总数(难度⭐⭐⭐)(74)

1. 题目解析 题目链接:LCR 170. 交易逆序对的总数 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 归并排序的基本思路 归并排序将数组从中间分成两部分,在排序的过程中,逆序对的来…

英语学习笔记8——What‘s your job?

What’s your job? 你是做什么工作的? 词汇 Vocabulary policeman 男警察 policewoman 女警察 police n. 警力 集合名词,永表复数 西方国家警察管的事很多。交警,刑警,武警一般不分开。 taxi driver 出租车司机 taxi / cab n.…