如何使用 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.pswp.cn/web/9818.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/9818.shtml
英文地址,請注明出處:http://en.pswp.cn/web/9818.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JVM調優—減少FullGC

背景 最近負責了一個審批流程新項目,帶領了幾個小伙伴,哼哧哼哧的干了3個月左右,終于在三月底完美上線了,好消息是線上客戶用的很絲滑,除了幾個非常規的業務提單之外,幾乎沒有什么大的問題,但是…

行駛證OCR識別接口怎么對接

行駛證OCR識別接口也叫行駛證文字識別OCR接口,指的是傳入行駛證照片,精準識別靜態行駛證圖像上的文字信息。那么行駛證OCR識別接口怎么對接呢? 首先我們找到數脈API,然后注冊賬戶,購買免費套餐 然后就需要公司的技術大牛把行駛證文字識別OCR…

gdb調試功能描述

gdb調試功能描述 gdb 調試:只對可執行文件進行調用,無法直接用gdb調試.c文件 1.查找命令幫助: (gdb) help data (gdb) help call -l (list) 查看載入文件(默認為10行&#xff09…

短信群發公司通道有哪些要求

短信群發公司通道有哪些要求 網絡穩定性 短信群發公司的通道在進行時需要具備良好的網絡穩定性。這意味著通道需要能夠穩定連接到互聯網,并具備高速傳輸能力。在網絡不穩定或者傳輸速度慢的情況下,可能會受到影響,甚至導致失敗。 高可靠性 …

linux - 主次設備號自動申請

alloc_chrdev_region 原型如下,該函數向內核申請一個空閑的主設備號。 alloc_chrdev_region(&g_aputriger_dev, 0, APUTRIGER_MAX_NUM, "aputriger0"); 第四個參數是我們使用cat /proc/devices 看到的名稱 /*** alloc_chrdev_region() - register a…

持續總結中!2024年面試必問 100 道 Java基礎面試題(四十)

上一篇地址:持續總結中!2024年面試必問 100 道 Java基礎面試題(三十九)-CSDN博客 七十九、Java泛型中的T、R、K、V、E分別指什么? 在Java泛型中,T、R、K、V 和 E 是類型參數的常見占位符,它們用…

Babylon.js 7.0開發入門教程

Babylon.js 是一個功能強大的開源 3D 引擎,能夠使用 JavaScript 渲染交互式 3D 和 2D 圖形。它是為 Web 甚至 VR 創建游戲、演示、可視化和其他 3D 應用程序的絕佳選擇。Babylon.js最新版本是7.0。 Babylon.js 是免費、開源和跨平臺的,是 Unity 和 Unre…

LeetCode 每日一題 ---- 【1463.摘櫻桃 II】

LeetCode 每日一題 ---- 【1463.摘櫻桃 II】 1463.摘櫻桃II方法:動態規劃(遞推) 1463.摘櫻桃II 方法:動態規劃(遞推) 昨天是摘櫻桃I,今天是II,與昨天的區別主要在于,今…

【進程替換】多進程程序替換原理 | 進程程序替換函數 | execlexecv | execlpexecvp

目錄 多進程程序替換 多進程程序替換原理 進程程序替換函數詳解 execl&execv execlp&execvp execle&execvpe execve 多進程程序替換 我們想要進程替換的同時不影響舊的進程(使用多進程版)fork創建子進程,讓子進程去替換執…

2008NOIP普及組真題 4. 立體圖

線上OJ: 一本通-1977:【08NOIP普及組】立體圖 核心思想: 本題采用模擬方法一個一個畫小方塊(雖然畫的是立體空間的積木,但本質還是在二維平面上畫圖形) 本題的難點在于: 1、如何確定二維平面畫…

tengine-docker鏡像制作

1.下載 wget https://tengine.taobao.org/download/tengine-3.0.0.tar.gz 或者直接下載這個包括下邊兩個配置文件了 https://download.csdn.net/download/cyw8998/89286114 2.編輯nginx.conf文件 #####user nobody; worker_processes 1;#error_log logs/error.log; #er…

淺析擴散模型與圖像生成【應用篇】(二十三)——Imagic

23. Imagic: Text-Based Real Image Editing with Diffusion Models 該文提出一種基于文本的真實圖像編輯方法,能夠根據純文本提示,實現復雜的圖像編輯任務,如改變一個或多個物體的位姿和組成,并且保持其他特征不變。相比于其他文…

c語言題庫之序列合并

文章目錄 前言C語言題目:分析1. 合并邏輯2.圖解合并邏輯 代碼實現注意事項總結思考 前言 在編程中,我們經常遇到需要將兩個有序序列合并為一個有序序列的問題。下面,我們就來詳細探討一下如何解決這個問題,包括輸入處理、合并邏輯…

python 根據網址和關鍵詞批量下載影像

最近用到了GLASS的LAI產品,但這個產品的文件夾分得很細,我需要的影像又有8個瓦片,一個一個點擊很麻煩,于是探索了批量下載的方法 一、下載1幅 import requests import re import os import requests import re# 網頁URLurl &…

深入理解Java HashSet類及其實現原理

哈嘍,各位小伙伴們,你們好呀,我是喵手。運營社區:C站/掘金/騰訊云;歡迎大家常來逛逛 今天我要給大家分享一些自己日常學習到的一些知識點,并以文字的形式跟大家一起交流,互相學習,一…

Java中什么是多態?多態的實現原理是什么?多態在Java中的意思實現方式是什么?多態在框架設計中有什么作用應用場景?

什么是多態? 多態是面向對象編程中的一個重要概念,它允許不同類的對象對同一消息做出響應。在 Java中,多態通常體現為子類對象可以替代父類對象的特性。這意味著你可以使用父類的引用來引用子類的對象。 多態的實現原理: 多態的…

如何在 CentOS 上安裝并配置 Redis

如何在 CentOS 上安裝并配置 Redis 但是太陽,他每時每刻都是夕陽也都是旭日。當他熄滅著走下山去收盡蒼涼殘照之際,正是他在另一面燃燒著爬上山巔散烈烈朝暉之時。 ——史鐵生 環境準備 本教程將在 CentOS 7 或 CentOS 8 上進行。確保你的系統已更新到最…

Channel實現Flutter與原生平臺之間的雙向通信

文章目錄 (一)通過MessageChannel實現Flutter與原生平臺之間的雙向通信Flutter端實現MessageChannel通信步驟:Android端實現MessageChannel通信步驟: (二)通過MethodChannel實現Flutter與原生平臺之間的雙向…

uniapp/微信小程序實現加入購物車點擊添加飛到購物車動畫

1、預期效果 2、實現思路 每次點擊添加按鈕時,往該按鈕上方添加一個懸浮元素,通過位移動畫將元素移到目標位置。 1. 為每個點擊元素設置不同的class,才能通過uni.createSelectorQuery來獲取每個元素的節點信息; 2. 添加一個與…

c++:(map和set的底層簡單版本,紅黑樹和AVL樹的基礎) 二叉搜索樹(BST)底層和模擬實現

文章目錄 二叉搜索樹的概念二叉搜索樹的操作二叉搜索樹的查找find 二叉搜索樹的模擬實現構造節點insertfinderase(細節巨多,面試可能會考)a.葉子節點b.有一個孩子左孩子右孩子 c.有兩個孩子注意: erase代碼 中序遍歷 二叉搜索樹的應用k模型k模型模擬實現的總代碼 k-value模型k-…