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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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 …