写在前面的话
谁不忙呢。今天,在图书馆,好像犯病了似的。明明也不困,就是不想干,题库小程序两天没动了。心里想,要不把这个推了吧,老是想改头条软件,但优化是个无底洞,就好比一个人,你找吧,他肯定有问题,只要你花时间琢磨,他肯定不完美,软件也一样,你只要用它,研究它,总觉得它还有优化的空间,但这是个死局啊,不可能只在这上面花时间,因为它能用,并且能达到效果,比如:能进行视频下载。那它的价值基本就这些了,想要挣新的钱,就得做新的项目,所以不要把时间盯死在软件优化上,把题库小程序做做,会产生新的钱。再者来说,谁不忙呢,遇到忙事就把活推了,那头条要政策一变,挣不到钱了呢。所以,还是要尽力的维持多项目,要结束也是需求方不满意喊卡,就这样。
[203+100]-------底部有张生活照片(头条号运营:大家想全托管上号的联系我哦,每天让你得个早餐钱,微信号: qhz_toutiao)
【关键词】python、ragflow、首次上传、缺少参数
一、首次上传(三级)
描述:现在web端首次上传,获取不到conversation_id,分析下原因,优化一下。
开工:
第一步:查资料(四级)
20250507周三时间段:16:50-17:00
现在改了之后,不生效,看下什么原因。
根据您描述的情况,程序没有执行 handleFileUpload 函数,这通常是由于文件上传事件没有正确绑定或触发。以下是排查和解决方案:
可能原因 & 解决方案
1. MessageInput 组件未正确绑定 onFileUpload
修改建议:如果 MessageInput 是自定义组件,现在不知道原代码是怎么触发上传的。
第二步:怎么触发上传(四级)
20250507周三时间段:17:04-19:00
根据代码结构和组件交互逻辑,图片上传触发流程分析如下:
a.核心触发链路
MessageInput组件 → handlePressEnter回调 → useSendNextMessage hook → 后端接口调用
b.关键代码节点分析
1.上传入口组件
// MessageInput 组件承载上传功能
<MessageInput
onPressEnter={(documentIds, enableSearch) =>
handlePressEnter(documentIds, animalNameObj, enableSearch)
}
createConversationBeforeUploadDocument={createConversationBeforeUploadDocument}
/>
2.会话创建前置条件
// 上传前通过该hook创建会话
const { createConversationBeforeUploadDocument } = useCreateConversationBeforeUploadDocument();
3.消息发送处理器
// 核心消息发送逻辑
const {
handlePressEnter, // 消息发送处理器
// ...其他属性
} = useSendNextMessage();
4.状态触发机制
// 上传完成后的状态同步
useEffect(() => {
if (value && isSend) {
handlePressEnter([], animalNameObj, !!localStorage.getItem('enableSearch'));
// 清空输入状态
}
}, [value, isSend]);
c.具体触发路径
1.组件层触发
2.会话保障机制
// 上传前创建会话的典型实现(需在MessageInput组件中确认)
const handleUpload = async (file) => {
let targetConvId = conversationId;
if (!targetConvId) {
const newConv = await createConversationBeforeUploadDocument();
targetConvId = newConv.id;
}
// 执行实际上传逻辑...
}
3.消息发送阶段
// 最终发送消息时的参数传递
const handlePressEnter = (documentIds, animalNameObj, enableSearch) => {
// 将documentIds关联到消息体
sendMessage({
content: value,
document_ids: documentIds,
conversation_id: conversationId,
// ...其他参数
});
}
d.缺少的关联逻辑(需确认)
1.文件上传实现 需检查MessageInput组件是否包含类似逻辑:
// 伪代码示例
const MessageInput = ({ onPressEnter }) => {
const handleUpload = (files) => {
const documentIds = await uploadService(files);
onPressEnter(documentIds); // 触发消息发送
}
return <input type="file" onChange={handleUpload} />;
}
二、更改会话名(三级)
描述:现在web端更改会话名,提交不生效,需要处理一下。
开工:
第一步:问题复现(四级)
20250507周三时间段:18:53-19:00
复现问题截图如下:
图4b-1
注:这个显然是有个键(dialog_id)不认识,处理一下。
第二步:处理报错(四级)
20250507周三时间段:19:03-21:00
处理完了,现在报另一个错误,如下:
{
"code": 100,
"data": null,
"message": "TypeError(\"argument of type 'NoneType' is not iterable\")"
}错误截图如下:
图4b-2
注:找到原因了,传的是假的conversation_id,截图如下:
图4b-3
注:应该传8e8dc6c82af611f082a5cf0240f04e7c,实际上传的是【5449441675fc457db9efde51b406033b】,查下原因。
第三步:原因排查(四级)
20250507周三时间段:23:19-01:00
这个先暂停,有个更紧急的,获取不到图片链接。
三、获取图片链接(三级)
描述:现在大模型,获取不到图片链接,需要处理一下,截图如下:
图4c-1
开工:
第一步:本地打断点追踪(四级)
20250508周四时间段:00:31-01:00
发现doc_ids写错了,修改截图如下:
图4c-2
注:接下来,再测一遍。
第二步:再测一遍(四级)
20250508周四时间段:09:36-10:00
发现可以了,如下:
图4c-3
注:接下来,把扫码端加一下messages信息。
第三步:扫码端加messages(四级)
20250508周四时间段:09:57-10:00
修改程序如下:
@manager.route('/multi_chat_choose', methods=['POST'])
@validate_request("conversation_id", "question")
def multi_chat_choose():
"""
=========================================================
本方法是针对web移动端场景的,主要用于用户提问,返回选择题的样式
==========================================================
===============================
有两个指标:
1、首次响应的时间,短期控制在10秒内,4月底控制在5秒内,这个影响UI用户体验
2、完全完成回答,控制在30秒内, 这个影响API的体验
后台埋点个日志吧,记录下这个时间信息
"""
'''
多轮对话接口,用于多轮对话的场景,返回多轮对话的结果,
用于多轮对话的场景,返回多轮对话的结果,分三次对话,
第一次对话:意图识别
第二次对话:分科
第三次对话:专家诊断、知识库检索、通义千问
'''
req = request.json
log.info(f"req: {req}")
conversation_id = req.get("conversation_id", "")
if not conversation_id:
return get_data_error_result(message="conversation_id is not found!")
question = req.get("question", '')
if not question:
return get_data_error_result(message="question is not found!")
messages = req.get("messages", [])
enable_search = req.get("enable_search", False)
e, conv = ConversationService.get_by_id(conversation_id)
# log.info(f"e:{e} conv: {conv}")
if not e:
return get_data_error_result(message="Conversation not found!")
if messages == []:
message = [{"role": "user", "content": question}]
if 'doc_ids' in req:
message[0]["doc_ids"] = req["doc_ids"]
messages = conv.message + message注:这个主要在message中加了doc_ids就可以了。接下来,看下专家诊断是怎么获取图片信息的。
四、专家诊断获取图片信息(三级)
描述:之前记得专家诊断能获取图片信息,打断点在本地追踪一下。
开工:
第一步:本地复现(四级)
20250508周四时间段:11:25-12:00
本地找个图片复现一下,这个先暂停,现在有一个messages多写system消息的问题,需要处理一下,修改程序如下:
图4d-1
注:运行一下看看效果,能不能去除这个历史消息。这个运行了一下,还可以,接着看另一个问题。
五、头条战果汇报
昨日数据来啦,昨日总收入:836.24,昨日总播放:800.8万,软件截图如下:
图4e-1
注:想要全脱管运营头条号的联系我,你出账号,我来运营,保你天天有钱花,咨询电话: 17701328814(微信同号),也可以加群先了解一下。
图4e-2
注:个人微信如下,欢迎骚扰。
图4e-3
六、生活照片
拍摄于2025年6月1日,13:30:13,带二宝在门口玩水气球。其实,人生是充满变数的,你知道哪块云彩会下雨呢,就像年初刚运营头条一个月,媳妇说:你每天吭哧吭哧的弄到凌晨两三点,一周收益十块八块的,有啥意思,别整了,弄弄简历去找工作吧,找个一个月五六千的也行啊。如今运营好了,媳妇也闭嘴了,但万一平台政策一变,这个事做不下去了呢,所以,光靠单项目肯定不行,在能力范围之内,接多个项目,现在做头条运营,题库小程序、抖哥那边的系统,这三个活已经把我填满了,新的活先不接,积极的把这三个活维持好,如果精力实在不足,项目方不让我干了,那个时候再认输,绝不能自己主动放弃,你说忙,你说累,谁不忙不累呢,我的合作伙伴,一个女的,忙到一天只吃一顿饭,人家也没认输啊,所以,加油吧,男人!
图4f-1
《本文完》