[RFC] 011 - 会话支持上传图像 #427
arvinxx
started this conversation in
RFC | 特性开发
Replies: 3 comments 2 replies
-
编辑器对比Plate VS tiptap |
Beta Was this translation helpful? Give feedback.
0 replies
-
普通输入框 + 上传文件经过调研,我发现编辑器的方案对目前来说的数据结构改造很大。因此先采用相对降级的方案。 文本输入框+图片管理器 思路交互状态初步 demo: vision.mp4系分拆解:
drag-to-upload.mp4
数据流FileStore 上传文件 图片数据流接入会话消息本地数据库 支持 CDN 配置S3 |
Beta Was this translation helpful? Give feedback.
0 replies
-
研发要点记录数据模型Schema 与类型定义: import { z } from 'zod';
export const LocalFileSchema = z.object({
/**
* create Time
*/
createdAt: z.number(),
/**
* file data array buffer
*/
data: z.instanceof(ArrayBuffer),
/**
* file type
* @example 'image/png'
*/
fileType: z.string(),
/**
* file name
* @example 'test.png'
*/
name: z.string(),
/**
* the mode database save the file
* local mean save the raw file into data
* url mean upload the file to a cdn and then save the url
*/
saveMode: z.enum(['local', 'url']),
/**
* file size
*/
size: z.number(),
/**
* file url if saveMode is url
*/
url: z.string().url().optional(),
});
export type LocalFile = z.infer<typeof LocalFileSchema>; 数据库层: export const lobeDBSchema = {
files: '&id, name, fileType, saveMode',
}; ORM 层: import { LocalFile, LocalFileSchema } from '@/types/database/files';
import { nanoid } from '@/utils/uuid';
import { BaseModel } from './core';
class _FileModel extends BaseModel {
constructor() {
super('files', LocalFileSchema);
}
async create(file: LocalFile) {
const id = nanoid();
return this.add(file, `file-${id}`);
}
async findById(id: string) {
return this.table.get(id);
}
async delete(id: string) {
return this.table.delete(id);
}
}
export const FileModel = new _FileModel(); FilePreview |
Beta Was this translation helpful? Give feedback.
2 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
背景
GPT-4 vision 已经在近日发布 ,LobeChat 需要支持图片会话的能力,以提升日常会话的使用体验,拓展 Agent 的能力边界
方案构思
GPT-4 vision 的官方示例代码:
vison model 和普通会话模型的最大差别,在于发送的消息数据结构不同。
对于普通会话模型来说,消息的数据结构如下所示,
content
字段都是字符串。而 vision model 的
content
的入参,则是一个会话数组:这就意味着整个 input 输入框需要变成支持图片输入的实现方案,不能再用之前单纯的纯文本输入框。形态上会往钉钉的输入框看齐。
向上述截图中的消息,发送给 vision 的数据结构如下:
考虑到
/
命令增强 与@角色
的需求,input 输入框的终态会是一个简易的富文本编辑器。 而我们之前也在思考 LobeChat 的 Agent 文档模式的终态交互会如何(https://github.com/lobehub/lobe-chat/discussions/323)。因此我们也在考虑是否直接使用富文本编辑器来实现该需求。
进度
Beta Was this translation helpful? Give feedback.
All reactions