| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- # -*- coding: utf-8 -*-
- """
- 点选/悬浮数据解读接口 —— SSE 流式
- 点选解读是一次性的数据查询操作,不属于对话场景,
- 因此不写数据库(不创建会话、不保存消息)。
- """
- import uuid
- from fastapi import APIRouter
- from fastapi.responses import StreamingResponse
- from api.models import TunClickInterpretRequest, DeviceClickInterpretRequest
- from api.sse_core import sse_event_generator
- from api.fast_generators import fast_tun_sse_generator, fast_device_sse_generator
- from agents.vent_agent import get_click_agent
- router = APIRouter()
- def _sse_response(generator, session_id: str) -> StreamingResponse:
- """构建统一的 SSE 响应对象"""
- return StreamingResponse(
- generator,
- media_type="text/event-stream",
- headers={
- "Cache-Control": "no-cache",
- "Connection": "keep-alive",
- "X-Accel-Buffering": "no",
- "X-Session-Id": session_id,
- },
- )
- @router.post("/interpret/click/tun")
- async def click_interpret_tun(req: TunClickInterpretRequest):
- """点选/悬浮数据解读接口(SSE 流式)
- 用户点击某巷道数据行时触发,返回结构化的数据解读报告。
- mode 参数:
- - plan(默认):走智能体 + Skills 全流程
- - fast:直接查数据 + LLM 生成报告,跳过 Agent 与知识库
- 注意:点选解读不写数据库(不创建会话、不保存消息)。
- 响应: SSE 流(text/event-stream)
- """
- thread_id = str(uuid.uuid4())
- session_id = str(uuid.uuid4()) # 仅用作 SSE 流标识,不写库
- # Fast 模式:直接查数据 + LLM 生成报告
- if req.mode == "fast":
- return _sse_response(
- fast_tun_sse_generator(req.tun_id, req.tun_name, thread_id, session_id, save_to_db=False),
- session_id,
- )
- # Plan 模式(默认):走智能体全流程
- user_message = f"用户点击或选中某条巷道数据行,请执行巷道数据解读任务,该巷道ID为 {req.tun_id},名称为 {req.tun_name}。"
- config = {"configurable": {"thread_id": thread_id}}
- agent = get_click_agent()
- return _sse_response(
- sse_event_generator(agent, user_message, thread_id, session_id, config, save_to_db=False),
- session_id,
- )
- @router.post("/interpret/click/device")
- async def click_interpret_device(req: DeviceClickInterpretRequest):
- """点选/悬浮数据解读接口(SSE 流式)
- 用户点击某设备数据行时触发,返回结构化的数据解读报告。
- mode 参数:
- - plan(默认):走智能体 + Skills 全流程
- - fast:直接查数据 + LLM 生成报告,跳过 Agent 与知识库
- 注意:点选解读不写数据库(不创建会话、不保存消息)。
- 响应: SSE 流(text/event-stream)
- """
- thread_id = str(uuid.uuid4())
- session_id = str(uuid.uuid4()) # 仅用作 SSE 流标识,不写库
- # Fast 模式:直接查数据 + LLM 生成报告
- if req.mode == "fast":
- return _sse_response(
- fast_device_sse_generator(req.device_id, req.device_name, req.device_type, thread_id, session_id, save_to_db=False),
- session_id,
- )
- # Plan 模式(默认):走智能体全流程
- user_message = f"用户点击或选中某个设备,请执行设备数据解读任务,该设备ID为 {req.device_id},类型为{req.device_type},名称为 {req.device_name}。"
- config = {"configurable": {"thread_id": thread_id}}
- agent = get_click_agent()
- return _sse_response(
- sse_event_generator(agent, user_message, thread_id, session_id, config, save_to_db=False),
- session_id,
- )
|