
19個API安全最佳實踐,助您實現安全
百度智能云千帆大模型API是百度智能云推出的一項先進的人工智能服務,旨在為開發者提供強大的AI能力支持。該API基于深度學習和大數據技術,集成了多種高級算法和模型,能夠處理自然語言理解、圖像識別、語音合成等多個領域的復雜任務。千帆大模型API包括了多個子模型,涵蓋了自然語言處理、知識圖譜、對話生成、語義理解等多個方面。這些模型經過大規模數據的訓練和優化,能夠在不同的應用場景下實現高效、精準的智能決策和處理。
在本文中,我們將主要利用千帆大模型API中的自然語言處理和對話生成功能,將其應用于智能五子棋對手的開發中。通過調用API,我們可以實現對玩家輸入的理解和合理的響應生成,從而提升對手的游戲水平和趣味性。
百度智能云千帆大模型API基于百度領先的深度學習技術和大數據平臺,集成了多種先進的AI算法和模型。這些算法和模型經過大規模數據的訓練和優化,能夠在多個領域展現出卓越的性能和準確度。
強大的AI能力支持千帆大模型API通過使用百度的深度學習技術和大規模數據訓練,具備了處理復雜任務的能力,能夠為應用提供高效、精準的智能決策支持。
開發者友好千帆大模型API提供了簡潔明了的接口和豐富的文檔支持,使得開發者能夠快速上手并靈活應用。
傳統的智能五子棋對手的實現較為復雜,需要設計諸多方面,如:
但是通過調用API就可以避免復雜的實現流程,只需通過調用百度智能云千帆大模型API,就可以為玩家提供具有挑戰性的對手。
首先,確保你已經安裝了Node.js和npm(Node包管理器)。如果沒有,請訪問Node.js官網進行安裝。
然后,全局安裝Electron:
npm install -g electron
mkdir gomoku-electron
cd gomoku-electron
npm init -y
npm install --save-dev electron
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>五子棋</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>五子棋</h1>
<canvas id="board" width="600" height="600"></canvas>
<script src="renderer.js"></script>
</body>
</html>
document.addEventListener('DOMContentLoaded', () => {
const canvas = document.getElementById('board');
const ctx = canvas.getContext('2d');
const size = 15;
const cellSize = canvas.width / size;
let board = Array(size).fill(null).map(() => Array(size).fill(null));
let currentPlayer = 'black';
canvas.addEventListener('click', async (e) => {
const x = Math.floor(e.offsetX / cellSize);
const y = Math.floor(e.offsetY / cellSize);
if (board[y][x] !== null) {
return;
}
board[y][x] = currentPlayer;
drawStone(x, y, currentPlayer);
if (checkWin(x, y, currentPlayer)) {
alert(${currentPlayer} wins!
);
board = Array(size).fill(null).map(() => Array(size).fill(null));
ctx.clearRect(0, 0, canvas.width, canvas.height);
drawBoard();
} else {
currentPlayer = currentPlayer === 'black' ? 'white' : 'black';
// 如果是AI的回合,調用API獲取下一步
if (currentPlayer === 'white') {
const aiMove = await window.electron.getMove(board, currentPlayer);
board[aiMove.y][aiMove.x] = currentPlayer;
drawStone(aiMove.x, aiMove.y, currentPlayer);
if (checkWin(aiMove.x, aiMove.y, currentPlayer)) {
alert(${currentPlayer} wins!
);
board = Array(size).fill(null).map(() => Array(size).fill(null));
ctx.clearRect(0, 0, canvas.width, canvas.height);
drawBoard();
} else {
currentPlayer = 'black';
}
}
}
});
function drawBoard() {
ctx.strokeStyle = '#000';
for (let i = 0; i <= size; i++) {
ctx.beginPath();
ctx.moveTo(i * cellSize, 0);
ctx.lineTo(i * cellSize, canvas.height);
ctx.moveTo(0, i * cellSize);
ctx.lineTo(canvas.width, i * cellSize);
ctx.stroke();
}
}
function drawStone(x, y, player) {
ctx.beginPath();
ctx.arc((x + 0.5) * cellSize, (y + 0.5) * cellSize, cellSize / 2 - 2, 0, 2 * Math.PI);
ctx.fillStyle = player;
ctx.fill();
ctx.stroke();
}
function checkWin(x, y, player) {
const directions = [
[1, 0], [0, 1], [1, 1], [1, -1]
];
for (const [dx, dy] of directions) {
let count = 1;
for (let step = 1; step < 5; step++) {
if (board[y + step * dy]?.[x + step * dx] === player) {
count++;
} else {
break;
}
}
for (let step = 1; step < 5; step++) {
if (board[y - step * dy]?.[x - step * dx] === player) {
count++;
} else {
break;
}
}
if (count >= 5) {
return true;
}
}
return false;
}
drawBoard();
});
const { app, BrowserWindow, ipcMain } = require('electron');
const path = require('path');
const { ChatCompletion, setEnvVariable } = require('@baiducloud/qianfan');
const { log } = require('console');
// 使用安全認證AK/SK鑒權,通過環境變量初始化;替換下列示例中參數,安全認證Access Key替換your_iam_ak,Secret Key替換your_iam_sk
setEnvVariable('QIANFAN_ACCESS_KEY','your_iam_ak');
setEnvVariable('QIANFAN_SECRET_KEY','your_iam_sk');
const client = new ChatCompletion();
function createWindow() {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
preload: path.join(__dirname, 'preload.js')
}
});
win.loadFile('index.html');
}
app.whenReady().then(createWindow);
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});
const steps = [
{x:1,y:1},
{x:2,y:1},
{x:3,y:1},
{x:4,y:1},
{x:5,y:1}
]
let k = 0
// 處理渲染進程的API請求
ipcMain.handle('get-move', async (event, board, currentPlayer) => {
try {
// console.log(board)
// console.log(currentPlayer)
let whiteList = [];
let blackList = [];
for(i in board){
let line = board[i];
for(j in line){
let p = line[j]
if(p==='white'){
whiteList.push((${i-(-1)},${j-(-1)})
);
} else if(p==='black'){
blackList.push((${i-(-1)},${j-(-1)})
);
}
}
}
console.log("黑子坐標:["+blackList.join()+"]", "白子坐標:["+whiteList.join()+"]")
let res = null
// let res = steps[k++]
for(let q=0;q<3&&!res;q++){
let pos = await getPos("黑子坐標:["+blackList.join()+"]", "白子坐標:["+whiteList.join()+"]")
res = extractCoordinates(pos);
if(!res || !res.x || !res.y || res.x<0 || res.x >14 || res.y<0 || res.y>14){
res=null;
await new Promise(resolve=>setTimeout(resolve,2000))
}
}
console.log(res)
return res
} catch (error) {
console.error(error);
throw error;
}
});
async function getPos(black, white){
let content = '你是一位智能五子棋玩家,你正在陪我玩五子棋游戲,你持白子,我持黑子。棋盤大小 15X15。 現有雙方棋子坐標: '
+ black+'。 '+white
+'。 你需要輸出下一步白子的落子位置坐標。注意,你只要輸入坐標即可,如:(10,6)。禁止輸出其他內容。只要坐標,禁止其他任何解釋性文字。'
+' 輸出格式:(x,y)';
console.log("問題:"+content)
const resp = await client.chat({
system: '',
messages: [
{
role: 'user',
content: content
},
],
});
console.log(resp)
return resp.result
}
function extractCoordinates(text) {
text.replaceAll(/\[|\(|\{/g, '(').replaceAll(/\]|\)|\}/g,')')
// 正則表達式匹配坐標形式 (數字, 數字)
const regex = /\(\s*([-+]?\d*\.?\d+)\s*,\s*([-+]?\d*\.?\d+)\s*\)/g;
let match;
const results = [];
// 使用正則表達式查找所有匹配項
while ((match = regex.exec(text)) !== null) {
const x = match[1]-0;
const y = match[2]-0;
return {x,y}
}
return null;
}
https://gitee.com/qyWorkspace/gobang
通過閱讀本文,您應該可以全面了解如何利用百度智能云千帆大模型API,結合先進的人工智能技術,開發出具備智能化水平的五子棋應用。這不僅展示了人工智能在游戲領域的應用潛力,還提供了實現類似智能化應用的思路和方法。