v2.0.1 修复搜索并发冲突与提交失败问题

- 搜索服务改用 namespace 隔离浏览器实例(参考 webtest-agent 方案),
  解决定时任务与手动处理并发调用 agent-browser 互相踢掉导致搜索结果为0的问题
- agent-browser 调用加瞬时错误自动重试,使用 /tmp/xdg-rt 目录
- 步骤4 提示词放宽:品牌/系列相关页面也纳入提取,无精确型号时兜底选最相关内容
- 步骤4 大模型返回空时自动兜底,不再直接跳过导致会话卡死
- 会话收尾修复:失败/无数据时会话状态正确标记,并自动移除待处理产品
- 处理入口统一:定时任务/单产品/批量处理均改为 process_monitor 大模型流程(防重)
- paramhub_client 增加登录态自动恢复:401 或连接失败时自动重新登录重试
- 全流程实测通过:deepseek-v4-flash-0731 → review_id 19ed2daaabfe
This commit is contained in:
2026-08-13 18:25:22 +08:00
parent 23991c3552
commit a0b870ee98
9 changed files with 280 additions and 160 deletions
+9 -1
View File
@@ -48,7 +48,15 @@ def start_process():
subcategory = data.get('subcategory')
# 启动处理流程
session_id = process_monitor.start_process(product_name, category, subcategory)
session_id, started = process_monitor.start_process(product_name, category, subcategory)
if not started:
return jsonify({
'success': True,
'session_id': session_id,
'message': f'产品 {product_name} 已有处理会话在进行中,已复用现有会话',
'duplicated': True
})
return jsonify({
'success': True,
+32 -50
View File
@@ -114,7 +114,9 @@ def get_product_history(product_name):
@bp.route('/process', methods=['POST'])
def process_single():
"""处理单个产品"""
"""处理单个产品(大模型驱动)"""
from services.process_monitor import process_monitor
data = request.get_json()
if 'product_name' not in data:
@@ -126,40 +128,32 @@ def process_single():
'subcategory': data.get('subcategory')
}
# 检查是否正在处理
processing = db.get_processing_products()
if any(p['product_name'] == product_info['product_name'] for p in processing):
return jsonify({'error': '该产品正在处理中'}), 400
# 添加到处理中列表
db.start_processing(
# 启动大模型处理会话(内部有防重)
session_id, started = process_monitor.start_process(
product_name=product_info['product_name'],
category=product_info['category'],
subcategory=product_info['subcategory']
)
try:
# 执行处理
result = process_service.process_product(product_info)
# 从待处理列表移除
db.remove_pending_product(product_info['product_name'])
# 如果发现新产品,已在process_service中添加到待处理列表
if not started:
return jsonify({
'success': result['success'],
'message': result['message'],
'review_id': result.get('review_id'),
'new_products': result.get('new_products', [])
'success': True,
'message': f'产品 {product_info["product_name"]} 已有处理会话在进行中',
'session_id': session_id,
'duplicated': True
})
finally:
# 完成处理,从处理中列表移除
db.finish_processing(product_info['product_name'])
return jsonify({
'success': True,
'message': f'处理流程已启动: {product_info["product_name"]}',
'session_id': session_id
})
@bp.route('/process/batch', methods=['POST'])
def process_batch():
"""批量处理产品"""
"""批量处理产品(大模型驱动,异步启动会话)"""
from services.process_monitor import process_monitor
data = request.get_json()
limit = data.get('limit', 5)
@@ -175,39 +169,27 @@ def process_batch():
results = []
for product in products:
# 检查是否正在处理
processing = db.get_processing_products()
if any(p['product_name'] == product['product_name'] for p in processing):
results.append({
'product_name': product['product_name'],
'success': False,
'message': '正在处理中'
})
continue
# 添加到处理中列表
db.start_processing(
# 启动大模型处理会话(内部有防重)
session_id, started = process_monitor.start_process(
product_name=product['product_name'],
category=product.get('category'),
subcategory=product.get('subcategory')
)
try:
# 执行处理
result = process_service.process_product(product)
# 从待处理列表移除
db.remove_pending_product(product['product_name'])
if started:
results.append({
'product_name': product['product_name'],
'success': result['success'],
'message': result['message'],
'review_id': result.get('review_id')
'success': True,
'message': '处理会话已启动',
'session_id': session_id
})
else:
results.append({
'product_name': product['product_name'],
'success': False,
'message': '已有处理会话在进行中',
'session_id': session_id
})
finally:
# 完成处理
db.finish_processing(product['product_name'])
return jsonify({
'success': True,