weicw-dshsa
|
baf6fe2ca8
|
feat(ai): 取消 AI 团宝页对纯学生隐藏「进入后台」入口
|
2026-10-21 23:23:54 +08:00 |
|
weicw-dshsa
|
6f7f2f0d9a
|
feat(ai): 后台 AI 链路改走 HTTP 流式,WS 地址与心跳收敛到 utils
写作 / 图片 / 大纲 / 稿件四条链路用普通 POST 时,生成期间链路上零字节,
会被 60s 空闲超时掐成 504(出图实测 58s 断开)。后端已给每条链路开
/stream(SSE,每 15s 一帧心跳),这里改成消费它。
- 新增 utils/ai-stream.ts:SSE 帧解析 + 末帧 {type:'final', result} 拆包;
runCreativeAssistantStream / runManuscriptGenStream 对外仍返回原来的 data,
页面渲染逻辑不动
- 新增 utils/chat-socket.ts:buildWebSocketUrl 统一拼 /api/chat/{userId}
(网关只放行 /api 前缀),attachHeartbeat 每 25s 发 ping 顶住代理空闲超时
- chatgpt 对话先试 WebSocket,握手失败落 /ai/chat/message/stream,
帧内容与 WS 完全一致,处理函数直接复用
- 四个页面删掉各自重复的 buildWebSocketUrl,统一从 utils 引入
|
2026-10-21 19:18:08 +08:00 |
|
weicw-dshsa
|
038e789cb0
|
feat(ai): 创意助手各页下线参考素材上传,图片模式改传 mode(issue 19)
- 聊天页「图片」模式与独立创意助手页都删掉上传入口、上传状态与相关样式;
上游出图工具只做文生图,开始节点的 file-list 变量没有任何节点消费(issue 16)。
- 图片模式请求体改为 { user_content, mode: 'image' },由后端包装意图声明;
独立页不传 mode(通用入口,视频/脚本/图片靠用户文字说明)。
- CreativeAssistantRequest 增加 mode 字段,user_files 保留待上游补齐后回退。
|
2026-10-21 15:42:58 +08:00 |
|
weicw-dshsa
|
98262f013b
|
feat(ai): 写作模式加「写作参数」面板,可选填活动信息
选了文体(走「内容创作与宣传助手」)后,输入框上方出现可折叠的「写作参数」:
活动类型 chip(含「不限」= 不下发 event_type)、活动主题/时间/地点/参与人员四格,
字数并入同一块。自由创作(走「AI 创意助手」)时整块不出现。
- 只有实际填了参数才下发,空格子不带;活动类型默认空串,不替用户猜类型。
- 只填参数、不写正文也能发送,气泡上用一句「(按写作参数生成:…)」占位,
避免出现空消息。
- 面板默认收起。
|
2026-10-21 13:31:39 +08:00 |
|
weicw-dshsa
|
d8ef29afe7
|
feat(ai): 写作模式拆成自由创作与模板两条路(issue 18)
自由创作不再解析自然语言:原话整段作为 userContent 下发,docType 留空,由后端转
「AI 创意助手」。选了文体才提交 docType 等结构化条件,走「内容创作与宣传助手」。
- writing-params.ts 删掉 parseWritingRequest、字段别名表与字数兜底表,只留选项常量。
- chatgpt/index.vue:字数选择器只在选中文体后出现;撤掉图片比例选择器(上游开始
节点无比例变量,只能拼进 user_content,等于替上游写 prompt);结果不再用入参补标题。
- gxmu/manuscriptGen:新增「自由创作」入口与 freeContent 文本域,模板模式才展开活动
信息等可选项。
- 顺带删除 chatgpt/index.bak.vue 旧备份。
|
2026-10-21 12:39:54 +08:00 |
|
weicw-dshsa
|
8ca7a00afb
|
feat(ai): 图片模式接入 file-list 参考素材上传(issue 14)
上游「AI 创意助手」开始节点有 file-list 变量 user_files(最多 5 个,允许
image/video/document/audio),但 web 端图片模式此前完全没有附件入口 —— 发送键左侧
那两个图标按钮没有绑定任何事件,是纯装饰。
- 聊天页图片模式新增「参考素材」区:添加附件(隐藏 input[type=file])、已选列表可
逐个移除、上限 5 个(对齐上游 max_length),按 MIME/扩展名判定
image/video/audio/document,发送时组装 file-list 契约
{transfer_method:"local_file", type, upload_file_id, url:""};上传中禁止发送
- uploadAiFile(file, app?) 支持应用代号;gxmu/creativeAssistant 表单页改传
creativeAssistant —— 该页用同一个接口上传却不指定应用,附件必然报
Invalid upload file(既有缺陷,本次一并修掉)
- CreativeAssistantUploadFile.upload_file_id 由 number 改为 string | number:
它实际是 Dify /files/upload 返回的 uuid 字符串,原声明与实现不符
- formatCreativeResult 清洗 video_message / photo_message:剥离 thinking 思维链、
丢弃 {"cover_prompt":…,"width":…} 中间产物 JSON,不再把上游 LLM 的原始输出
当正文展示(截图实测过:气泡里出现整段英文思考过程或裸 JSON)
- 删除发送键左侧两个无事件的装饰性图标按钮(.icon-btn 样式仍被消息操作按钮使用,保留)
|
2026-10-13 19:57:57 +08:00 |
|
weicw-dshsa
|
bc398bb652
|
fix(ai): 写作入口采集上游主控字段,用户诉求不再被默认值覆盖(issue 13)
聊天页「写作」模式没有表单,只按「键:值」解析输入,普通自然语言解析为空后一律回落
doc_type=新闻稿 / Number=800。上游「AI内容创作与宣传助手」的 prompt 把这两项当主控指令,
实测模型会主动忽略用户原话里的冲突要求,思维链原文:
I will ignore the conflicting "300字推文" instruction inside the bullet points
because the main task says "文稿类型为:新闻稿" and "篇幅要求(字数限制):800"
这就是用户报的「写作模块听不懂要求」——不是模型听不懂,是把「新闻稿/800字」当硬指令发给了它。
- 新增 src/views/oa/chatgpt/writing-params.ts:从自然语言抽取文体/字数/主题/时间/地点/
人员/活动类型,保留既有「键:值」入参,界面显式选择优先于自动识别;纯函数零依赖,
可直接用 node 运行测试
- 文体识别对齐上游真实存在的 4 个模板(新闻稿/活动总结/微信推文/通知公告);认不出的文体
(发言稿、短视频脚本等)原样下发交给模型发挥,强行映射成新闻稿会更糟
- 用户没提字数时按文体给常规篇幅,而不是不下发——上游对空字数的处理会在正文里留一行
「(未设定有效字数限制)」
- 写作模式输入框上方新增「文体 / 字数」两组按钮,复用既有 ratio-panel 样式
验证:解析用例 8/8(.scratch/ai-assistant/probe/test-writing-params.ts);同一句输入做端到端
对照,修复前得 800 字新闻稿,修复后得 281 字微信推文(引用块 + ## 模块小标题 + 【互动时间】)。
|
2026-10-13 18:53:29 +08:00 |
|
weicw-dshsa
|
623404ce9a
|
fix(ai): 失败态与整包 JSON 不再进 UI,兜底收敛到公共模块(issue 10)
admin 端原本**没有**任何 AI 结果兜底公共实现(src/utils/ 下零命中
pickDisplayable / isFailedPayload / FALLBACK_TEXT / FAILED_TEXT),
四个 AI 页面各写一份,且方向相反——都保留了「JSON.stringify 整包」兜底。
后果是解析不出内容时把内部标识符渲染给用户,实测:
{"answer":"","conversationId":"c1d2e3f4-…","messageId":"m1"}
改动:
- 新增 src/utils/ai-result.ts,从 tuanwei-uniapp/utils/ai-result.js 移植,
逐函数对齐语义(getPayloadStatus / isFailedPayload / isDisplayableAnswer /
pickDisplayable / resolveDisplayText / 两个文案常量)。原始报文只进
console.error,不进 UI。
- 四处整包 JSON 兜底全部替换为 resolveDisplayText,并删掉各自的
stringifyUnknown:oa/chatgpt(两处)、gxmu/manuscriptGen、
gxmu/activityOutlineGen。
- 四页正文候选改用 pickDisplayable(原 pickString 只判非空,
失败报文里 UUID 形状的 answer 会被当正文)。
- 失败态优先判定:isFailedPayload 为真时直接给 FAILED_TEXT,
不再走「主题 + 失败文案」的拼接。
- gxmu/creativeAssistant:删掉已无引用的 rawOutputsText(模板引用早被注释,
留下一个"看似有原始输出视图"的死代码),并给「未识别到输出字段」补可读文案。
评审跟进修掉的两个真缺陷:
- creativeAssistant 的兜底文案**原本不可达**:模板 a-empty 的
v-if="!loading && !hasAnyResult" 会遮蔽 v-else 里的 status-alert,
失败时 hasAnyResult 为假 → 用户仍看到「填写文本指令并上传附件后执行工作流」。
条件补上 && !workflowResponse。
- WS 路径不消费 reset:后端失败时带 reset:"true" 要求覆盖半截内容,
两个页面都忽略它,于是编辑器变成「半截正文 + 生成失败,请稍后重试」;
且 streamStarted 为真时会直接丢弃 HTTP 返回体,新加的 status 也就读不到。
appendOutlineChunk / appendAssistantChunk 增加 reset 参数并在
handleSocketMessage 里透传。
验证:
- .scratch/ai-assistant/verify-admin-ai-result.js 用项目自带 TypeScript
编译器转译后求值,并从真实 .vue 抽取 parseOutline / parseResult /
formatWritingResult 跑断言(验真实代码而非重写副本)→ 41/41 PASS。
- vue-tsc --noEmit 改动前后错误集合完全一致(1365 条全在 .bak 等预存文件),
本次改动的 4 个文件零错误。
- eslint:ai-result.ts 零问题;creativeAssistant 的未使用变量由 3 个降到 2 个。
|
2026-10-13 02:12:58 +08:00 |
|
weicw-dshsa
|
829c17f1ce
|
AI团宝页面对纯学生隐藏「进入后台」入口
|
2026-09-19 17:26:48 +08:00 |
|
b2894lxlx
|
019ed28d37
|
260720
|
2026-07-20 11:50:47 +08:00 |
|
南宁网宿科技
|
13bed2bafb
|
Initial commit
|
2023-06-03 23:57:39 +08:00 |
|