- Published on
helpchat前后端架构
- Authors
- Name
- Shuo Wang
helpchat 是我对ai商业应用的第一次尝试,用户发聊天图片/记录,ai回答回复方法。
1.前端架构
取历史消息用SSR,聊天界面需要滑动用CSR lighthouse评分: **首屏加载时间:0.8s **
2.后端架构
后端使用supabase作为登录,数据库,图片存储
2.1 图片信息和文字信息都用messages表来显示,当img_path不为空时,认为该消息是图片消息,否则认为是文字消息 注意img_path不是完整的url,而是supabase storage中的文件路径,以$user.id/$img_name.png
形式存在
2.2 首次用github等社交账号登录时,需要将user name和 avatar_url从github的token中取出来,装入profiles表,因为用不同社交账号登录的同一用户,头像应该相同,采用 如下postgresql trigger 函数,每当user表增加一行,就有增加一行profile
begin
insert into public.profiles (id, full_name, avatar_url, email)
values (
new.id,
new.raw_user_meta_data->>'full_name',
new.raw_user_meta_data->>'avatar_url',
new.raw_user_meta_data->>'email'
);
return new;
end;
3.3 唯一的自定义后端api,用来调用ai的api, 在app/text/route.ts
定义
import { NextResponse } from 'next/server'
import { getAnswer } from '@/lib/rag'
export async function POST(req: Request) {
try {
console.log('Received a HTTP request')
// 解析请求体
const body = await req.json()
console.log(body)
// 获取答案
const answer = await getAnswer(body.text, body.img_url)
console.log(answer)
// 返回答案
return NextResponse.json({ text: answer })
} catch (error) {
console.error('Error processing request:', error)
return NextResponse.json({ error: 'Failed to process request' }, { status: 500 })
}
}