ByteMD+CozeAPI+Coze平臺Agent+Next搭建AI輔助博客撰寫平臺(邏輯清楚,推薦!)

背景

現在主流的博客平臺AI接入不夠完善,如CSDN接入的AI助手不支持多模態數據的交互、稀土掘金的編輯器AI功能似乎還沒能很好接入(哈哈哈,似乎在考慮布局什么?)

痛點分析:

  • 用戶常常以截圖的形式截取內容,但是如果單純的用解析工具,解析的為單純文本,而在撰寫博客時常常MD編輯器,這就可能要blogger繼續借助第三方工具將內容轉換為md格式,此過程繁瑣(結合自身博客撰寫遇到的問題)
  • 支持PDF等文檔格式解析:PDF等格式也是常用的內容記錄格式,但是如果需要將內容發布成博客,一是要復制文檔內容,二是文檔內容常常不是凝練好的常常有冗余,三是還需借助外部工具轉化為MD格式才好發成MD格式
  • 文字常常不易理解,現主流博客編輯不支持將博客內容總結,生成一個思維導圖,這讓普通用戶讀起來或者blogger自己回顧起來可能有點吃力(調研騰訊文檔
    在這里插入圖片描述

功能:

  • 標題輔助生成、摘要總結(基本,調研CSDN)
  • 支持多模態數據的交互:圖片和PDF等格式
  • 總結生成思維導圖
  • 流式展示(Fetch+SSE,自己封裝SSEWrapper和MessaageService,處理異常[瀏覽器主動斷開、刷新])

支持多模態數據解析

圖片
了解object_string多模態數據組織結構

當進行多模態數據進行對話時,首先了解對話的內容的數據結構是什么?object_string官方說明文檔
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
當了解數據結構之后,我們不難知道,當單純是普通文本對話時,內容為text格式,而涉及到多模態數據是就是object_string

多模態數據內容改如何傳入到對話中(file_id和file_url)

解決這個問題,另外一個問題就是多模態數據如何處理?如何加入到對話中?
在這里插入圖片描述

[{"type": "text","text": "你好我有一個帽衫,我想問問它好看么,你幫我看看"}, {"type": "image","file_id": "{{file_id_1}}"}, {"type": "pdf","file_id": "{{file_id_2}}"},
]

看上面object_string組織不難理解,需要一個file_id或者file_url,file_id可以上傳文件到Coze空間返回內容就有file_id,而file_url就需自己上傳至自己的云存儲器中,返回得到公網可訪問的url地址

  • file_id獲取
    上傳文件
    上傳文件測試
    在這里插入圖片描述
    在這里插入圖片描述
    需要注意的就是,Post請求,必須使用 multipart/form-data 方式上傳文件。
 // Step 1: Upload the file to Coze files API to get a file_idconst uploadResult = await fetch('https://api.coze.cn/v1/files/upload', {method: 'POST',headers: {"Authorization": `Bearer ${process.env.NEXT_PUBLIC_KEY}`,},body: formData,});if (!uploadResult.ok) {const errorData = await uploadResult.json();throw new Error(errorData.error || errorData.message || '文件上傳到Coze失敗。');}const uploadResponse = await uploadResult.json();console.log("Coze File upload response:", uploadResponse);const fileId = uploadResponse.data?.id;
  • file_url獲取
    file_id轉file_url

案例:設計了一個工作流,輸入數據為File格式(按正常是需要file_url,但是我避開,直接借助file_id
如下面,按正常PDF_Reader需要一個PDFURL,就是一個公網可訪問的pdf連接,但是臨時去搭建比較繁瑣,想著相傳文件到Coze空間了,而且也有了file_id了,應該要糾結的就是id和url如何映射,CozeAPI有自動封裝嗎?
在這里插入圖片描述

在這里插入圖片描述
然后去創建工作流這去看,果然可以講file_id傳入參數中,自動會解析成url,file_id->file_url,但是我在對話中試了調用Agent,Agent自動調用并傳參給工作流還是有問題——TODO:如何傳參給Agent,Agent調用合適工作流并使用參數

原話:工作流開始節點的輸入參數及取值,你可以在指定工作流的編排頁面查看參數列表。
如果工作流輸入參數為 Image 等類型的文件(條件1),可以調用上傳文件 API 獲取 file_id(條件2),在調用此 API 時,在 parameters 中以序列化之后的 JSON 格式傳入 file_id。例如 “parameters” : { “input”: “{“file_id”: “xxxxx”}” }
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

const handleSend = useCallback(async (content: string, queryParams?: EventSourceConfig['queryParams'], isTitleGeneration: boolean = false) => {if (!content.trim() && uploadedFiles.length === 0) {message.warn('消息內容或文件不能為空!');return;}if (loading) {message.warn('AI 正在處理上一個請求,請稍候。');return;}const pdfFile = uploadedFiles.find(file => file.type === 'pdf');if (pdfFile) {// If a PDF is uploaded, trigger the workflowawait executePdfWorkflowBackend(pdfFile.id, pdfFile.name);// Optionally, clear the input or add a user message for the PDF actionsetAiInput(''); // Clear the input after triggering PDF workflowsetUploadedFiles([]); // Clear uploaded files after workflow triggerreturn; // Exit as the workflow is handled}let finalContentToSend: string;let finalContentType: ContentType;if (uploadedFiles.length > 0) {finalContentType = ContentType.MULTIMODAL;const objectContent: any[] = [{ type: 'text', text: content }];uploadedFiles.forEach(file => {objectContent.push({type: file.type === 'pdf' ? 'file' : file.type, // Coze treats PDF as 'file' type for multimodalfile_id: file.id});});finalContentToSend = JSON.stringify(objectContent);} else {finalContentType = ContentType.TXT;finalContentToSend = content;}setLastRequestContent(finalContentToSend);console.log("AIDialogContent: Sending content:", finalContentToSend, "with contentType:", finalContentType);try {await messageService.send(finalContentToSend, {...queryParams,contentType: finalContentType,llmProvider: selectedModel,onComplete: (latestMessageContent: string) => {if (isTitleGeneration && onGenerateTitlePrompt) {onGenerateTitlePrompt(latestMessageContent);}}});} catch (error) {console.error("AIDialogContent: Error during message sending process:", error);if (!isStreamingMessage) {setLoading(false);}} finally {setAiInput('');console.log("AIDialogContent: Input cleared.");}}, [loading, isStreamingMessage, messageService, uploadedFiles, selectedModel, onGenerateTitlePrompt, executePdfWorkflowBackend]);

PDF

官方案例:解析文檔
大模型本身并不具備文件讀取和解析的能力,無法直接處理文件字節流。對于支持工具調用(Function calling)的模型,扣子提供插件功能來幫助大模型調用外部工具 API,拓展大模型的能力邊界。扣子插件商店提供海量官方插件和第三方插件,例如鏈接讀取插件可以將鏈接對應的文件內容解析為純文本傳遞給大模型
在這里插入圖片描述


在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/88979.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/88979.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/88979.shtml

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

相關文章

【數據標注師】關鍵詞標注

目錄 一、 **理解關鍵詞標注的核心邏輯**1. **三大標注原則**2. **關鍵詞類型體系** 二、 **四階訓練體系**? **階段1:基礎規則內化**? **階段2:語義濃縮訓練**? **階段3:場景化標注策略**? **階段4:工具效率提升** 三、 **五…

for each循環語句

for each循環語句 for each.....nextFor Each 的案例 for each…next 1、循環對象合集 worksheets workbooks range range("區域")selection (選中的區域)usedrange或者currentregion 返回的單元格區域格式: for each 變量名 in 對象集合(范圍)循環內容…

基于LQR控制器的六自由度四旋翼無人機模型simulink建模與仿真

目錄 1.課題概述 2.系統仿真結果 3.核心程序 4.系統原理簡介 5.參考文獻 6.完整工程文件 1.課題概述 四旋翼無人機因其結構簡單、機動性強和成本低廉等特點,在航拍測繪、物流運輸、災害救援等領域得到廣泛應用。六自由度(3維平移3維旋轉&#xff0…

vftp centos 離線部署

install_ftp_offline.sh vsftpd-3.0.2-28.el7.x86_64.rpm #!/bin/bash# 一鍵安裝配置vsftpd腳本(開放根目錄,禁用chroot)# 安裝vsftpd RPM包 echo "正在安裝vsftpd..." rpm -ivh vsftpd-3.0.2-28.el7.x86_64.rpm if [ $? -ne 0 …

【數據標注】事件標注1

目錄 **一、 深入理解事件標注的核心概念****二、 系統學習:從理論到實踐****1. 吃透標注指南****2. 語言學基礎補充****3. 事件結構解析訓練** **三、 分階段實踐:從簡單到復雜****階段1:基礎標注訓練****階段2:進階挑戰****階段…

在 Ansys Electronics Desktop 中啟用額外的 CPU 內核和 GPU

Ansys Electronics Desktop (AEDT) 可以通過利用多個 CPU 內核和 GPU 加速來顯著縮短仿真時間。但是,啟用其他計算資源除了基本求解器許可證外,還需要適當的高性能計算 (HPC) 許可證。 默認情況下,基本許可證最多允許使用 4 個內核,而無需任何其他 HPC 許可。借助 Ans…

R語言機器學習算法實戰系列(二十六)基于tidymodels的XGBoost二分類器全流程實戰

禁止商業或二改轉載,僅供自學使用,侵權必究,如需截取部分內容請后臺聯系作者! 文章目錄 介紹加載R包數據準備數據探索轉換因子查看屬性相關性配對圖PCA 可視化缺失值、異常值處理 & 特征標準數據分割構建模型與調參模型評估模型可解釋性(變量重要性、SHAP、DALEX)變量…

零基礎langchain實戰一:模型、提示詞和解析器

一,使用python調取大模型api 1,獲取api_key 獲取api_key 在各個大模型的官網中獲取。 2,設置api_key 方式一: 在系統環境中可直接執行python代碼:這里以deepseek為例 import os os.environ["DEEPSEEK_API_…

Pytorch分布式通訊為什么要求Tensor連續(Contiguous)

參考資料: https://github.com/pytorch/pytorch/issues/73515 https://www.cnblogs.com/X1OO/articles/18171700 由于業務原因,需要在Pytorch代碼中使用分布式通訊來把計算負載平均到多張顯卡上。在無數次確認我的業務代碼沒問題之后,我開始把…

關于前端頁面上傳圖片檢測

依賴于前文,linux系統上部署yolo識別圖片,遠程宿主機訪問docker全流程(https://blog.csdn.net/yanzhuang521967/article/details/148777650?spm1001.2014.3001.5501) fastapi把端口暴露出來 后端代碼 from fastapi import FastAPI, UploadFile, File, HTTPExcep…

第十三章---軟件工程過程管理

僅供參考 文章目錄 一、Gantt圖是做什么的。二、軟件配置的概念 一、Gantt圖是做什么的。 Gantt 圖(甘特圖)是軟件項目管理中用于進度安排和可視化管理的重要工具,主要用于展示任務的時間安排、進度狀態及任務之間的依賴關系 Gantt 圖是一種…

多模態大語言模型arxiv論文略讀(140)

SemiHVision: Enhancing Medical Multimodal Models with a Semi-Human Annotated Dataset and Fine-Tuned Instruction Generation ?? 論文標題:SemiHVision: Enhancing Medical Multimodal Models with a Semi-Human Annotated Dataset and Fine-Tuned Instruc…

模型預測控制專題:無差拍預測電流控制

前言: 為了進一步深入探索電機控制這個領域,找到了一些志同道合的同學一起來進行知識的分享。最近群里投票后續更新內容,票數最多的方向就是模型預測控制;無論這個方向目前是否還是很火,至少應大家需求,工…

Youtube雙塔模型

1. 引言 在大規模推薦系統中,如何從海量候選物品中高效檢索出用戶可能感興趣的物品是一個關鍵問題。傳統的矩陣分解方法在處理稀疏數據和長尾分布時面臨挑戰。本文介紹了一種基于雙塔神經網絡的建模框架,通過采樣偏差校正技術提升推薦質量,并…

.net8創建tcp服務接收數據通過websocket廣播

注冊TCP服務器 注冊WebSocket中間件 using System.Net; using System.Net.Sockets; using System.Text; using System.Text.Json; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.SignalR.Client; using Microsoft.AspNet…

閱讀服務使用示例(HarmonyOS Reader Kit)

閱讀服務使用示例(HarmonyOS Reader Kit) Reader Kit到底能干啥? 第一次搞電子書閱讀器,真以為就是“讀txt顯示出來”這么簡單,結果各種格式、排版、翻頁動效、目錄跳轉……全是坑。還好有Reader Kit,救了…

ASP.NET Core Web API 實現 JWT 身份驗證

在ASP.NET Core WebApi中使用標識框架(Identity)-CSDN博客 因為一般需要和標識框架一起使用,建議先查看標識框架用法 一.為什么需要JWT 我們的系統需要實現認證,即服務端需要知道登錄進來的客戶端的身份,管理員有管理員的權限,普通用戶有普通用戶的權限. 但服務…

優化Cereal宏 一行聲明序列化函數

Cereal序列化庫中宏遞歸展開的優化方案及技術解析 未優化&#xff1a;參考nlohmann json設計Cereal宏 一行聲明序列化函數 宏實現 #include <cereal/cereal.hpp>// 強制二次展開 #define CEREAL_EXPAND( x ) x// 獲取宏參數的數量&#xff0c;對應的CEREAL_PASTEn宏NAME…

14-C#的彈出的窗口輸入與輸出

C#的彈出的窗口輸入與輸出 1.文件名輸入 string fileName Interaction.InputBox("輸入保存的文件名", "保存");2.彈窗信息輸出 MessageBox.Show("請選擇輪詢!", "Error", MessageBoxButtons.OK);catch (Exception ex){MessageBox.S…

多模態大語言模型arxiv論文略讀(141)

Mini-InternVL: A Flexible-Transfer Pocket Multimodal Model with 5% Parameters and 90% Performance ?? 論文標題&#xff1a;Mini-InternVL: A Flexible-Transfer Pocket Multimodal Model with 5% Parameters and 90% Performance ?? 論文作者&#xff1a;Zhangwei …