[架构重构] 移除本地Ollama融合,云端直出JSON直存DB,Q&A三模型降级

1. 视频摘要链路:云端VLM直出结构化JSON → Edge format_cloud_result格式化校验 → 直存NAS DB(移除run_text_fusion本地融合)
2. 智能问答链路:Gemini→NVIDIA→Ollama降级,新增chat()纯文本问答方法
3. 适配器重构:base/gemini/nvidia/ollama adapter新增chat();gemini多图单请求结构化JSON;nvidia逐帧调用聚合
4. 端点变更:/api/edge/chat → /api/edge/chat/ask,调orchestrator.run_qa()
5. chat_handler改经Edge Q&A编排,不再直连Ollama
6. 配置更新:ollama_url → qa_url,Ollama role注释改为Q&A兜底
7. README同步更新架构描述、拓扑图、时序图、模块表
This commit is contained in:
ericwyuan
2026-08-20 10:21:09 +08:00
parent 486eee4feb
commit babf5b09a9
10 changed files with 503 additions and 267 deletions

View File

@@ -71,27 +71,25 @@ def _aggregate_by_hour(details):
return '\n'.join(lines)
def _call_ollama(prompt: str) -> str:
"""调用 Oracle Ollama 纯文本模式"""
def _call_edge_qa(prompt: str) -> str:
"""调用 FAM-Edge 问答编排端点Gemini → NVIDIA → 本地 Ollama 兜底)"""
cfg = load_config()
ollama_url = cfg.get('chat_handler', {}).get(
'ollama_url', 'http://localhost:11434/api/generate'
qa_url = cfg.get('chat_handler', {}).get(
'qa_url', 'http://129.146.203.203:5000/api/edge/chat/ask'
)
model_name = cfg.get('chat_handler', {}).get('model_name', 'llava-phi3')
timeout = cfg.get('chat_handler', {}).get('timeout', 120)
resp = requests.post(ollama_url, json={
"model": model_name,
"prompt": prompt,
"stream": False,
"options": {"temperature": 0.3}
}, timeout=timeout)
resp = requests.post(qa_url, json={"prompt": prompt}, timeout=timeout)
if resp.status_code == 200:
return resp.json().get('response', '')
data = resp.json()
answer = data.get('answer', '')
provider = data.get('provider', 'unknown')
logger.info(f"问答由 {provider} 提供回答(长度={len(answer)}")
return answer
else:
logger.error(f"Ollama 调用失败: {resp.status_code} {resp.text}")
raise Exception(f"Ollama error: {resp.status_code}")
logger.error(f"Edge 问答调用失败: {resp.status_code} {resp.text[:200]}")
raise Exception(f"Edge QA error: {resp.status_code}")
@chat_bp.route('/api/chat/ask', methods=['POST'])
@@ -136,9 +134,9 @@ def chat_ask():
)
try:
answer = _call_ollama(prompt)
answer = _call_edge_qa(prompt)
except Exception as e:
logger.error(f"Ollama 调用失败: {e}")
logger.error(f"问答编排调用失败: {e}")
return jsonify({"error": f"AI 调用失败: {e}"}), 503
# 3. 写入 chat_history