鍵.png)
GraphRAG:基于PolarDB+通義千問api+LangChain的知識(shí)圖譜定制實(shí)踐
Bearer YOUR_API_KEY
},
body: JSON.stringify({
model: 'gpt-4',
prompt: prompt,
stream: true // 啟用流式響應(yīng)
})
});
// 檢查響應(yīng)狀態(tài)
if (!response.ok) {
throw new Error('Network response was not ok');
}
// 獲取響應(yīng)的可讀流并處理流數(shù)據(jù)
const reader = response.body.getReader();
const decoder = new TextDecoder('utf-8');
let done = false;
while (!done) {
// 讀取流中的下一個(gè)數(shù)據(jù)塊
const {
value, done: readerDone } = await reader.read();
done = readerDone;
// 將數(shù)據(jù)塊解碼為字符串
const chunk = decoder.decode(value, {
stream: true });
console.log(chunk); // 處理或顯示每一塊數(shù)據(jù)
// ***** 這需要注意,各個(gè)大模型的分塊數(shù)據(jù)結(jié)構(gòu)可能不一樣,甚至?xí)锌赡艹霈F(xiàn)部分?jǐn)?shù)據(jù)的情況,要單獨(dú)兼容和處理哦
// 以及有些模型內(nèi)容的路徑不一樣,一次性響應(yīng)在content,但是流式在delta字段下
}
};
當(dāng)后端返回流式響應(yīng)時(shí),前端可以逐步接收并更新UI,提供更好的用戶交互體驗(yàn)。以下是前端處理流式響應(yīng)的關(guān)鍵步驟。
每當(dāng)接收到一個(gè)新的數(shù)據(jù)塊,前端可以立即將其更新到UI上,而不必等待完整的響應(yīng)。這種實(shí)時(shí)更新的機(jī)制對(duì)于聊天機(jī)器人、搜索建議等場(chǎng)景尤為重要。例如:
const chatBox = document.getElementById('chat-box');
const updateChat = (text) => {
// 將新數(shù)據(jù)塊追加到界面上
chatBox.innerHTML += `<p>${
text}</p>`;
};
// 在逐塊接收時(shí)更新
while (!done) {
const {
value, done: readerDone } = await reader.read();
const chunk = decoder.decode(value, {
stream: true });
updateChat(chunk); // 實(shí)時(shí)更新聊天框
}
通過這種方式,用戶能夠看到模型生成內(nèi)容的部分結(jié)果,即使整個(gè)請(qǐng)求尚未完成,提升了用戶體驗(yàn)。
在流式調(diào)用中,網(wǎng)絡(luò)連接可能會(huì)中斷,或者服務(wù)器可能會(huì)返回錯(cuò)誤。前端應(yīng)該做好錯(cuò)誤處理,例如:
if (!response.ok) {
console.error('Error with the request');
return;
}
reader.read().then(processStream).catch(error => {
console.error('Error while reading stream:', error);
});
在中斷時(shí),前端可以選擇顯示錯(cuò)誤消息,或嘗試重新發(fā)起請(qǐng)求以重新建立連接。
由于流傳輸?shù)臄?shù)據(jù)是分塊發(fā)送的,前端可能需要將這些分段數(shù)據(jù)拼接起來,形成完整的響應(yīng)。例如:
let fullResponse = '';
while (!done) {
const {
value, done: readerDone } = await reader.read();
const chunk = decoder.decode(value, {
stream: true });
fullResponse += chunk; // 拼接完整響應(yīng)
}
對(duì)于聊天機(jī)器人或類似應(yīng)用,前端可以設(shè)置自動(dòng)滾動(dòng),使得用戶在流式數(shù)據(jù)逐步加載時(shí)能夠始終看到最新的內(nèi)容。
const scrollToBottom = () => {
chatBox.scrollTop = chatBox.scrollHeight;
};
updateChat(chunk);
scrollToBottom(); // 更新后自動(dòng)滾動(dòng)
HTTP API流式調(diào)用為大語言模型的響應(yīng)提供了更高效和實(shí)時(shí)的交互方式。通過流式調(diào)用,前端可以逐步接收模型生成的部分?jǐn)?shù)據(jù),并即時(shí)呈現(xiàn),從而提升用戶體驗(yàn)。前端在實(shí)現(xiàn)流式調(diào)用時(shí),需要處理數(shù)據(jù)分塊的拼接、實(shí)時(shí)更新界面和處理可能的中斷錯(cuò)誤。通過這種方式,可以在交互密集的應(yīng)用場(chǎng)景(如聊天機(jī)器人、自動(dòng)化助手等)中大幅改善用戶的使用體驗(yàn)。
文章轉(zhuǎn)自微信公眾號(hào)@阿里云開發(fā)者
GraphRAG:基于PolarDB+通義千問api+LangChain的知識(shí)圖譜定制實(shí)踐
使用Node.js、Express和MySQL構(gòu)建REST API
天氣API推薦:精準(zhǔn)獲取氣象數(shù)據(jù)的首選
基于自定義數(shù)據(jù)集的微調(diào):Alpaca與LLaMA模型的訓(xùn)練
OAuth和OpenID Connect圖解指南
有哪些新聞媒體提供Open API?
現(xiàn)在做大模型,還有靠譜且免費(fèi)的API接口嗎?
如何運(yùn)用AI提高自己的工作效率?
區(qū)塊鏈API推薦,快速開發(fā)去中心化應(yīng)用
對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力
一鍵對(duì)比試用API 限時(shí)免費(fèi)