card_id、dashboard_id、dataset_id、dashboard_name、card_name、dataset_name、bbk_id。作为主数据表,保证数据有效。card_id、card_name、card_desc、sql_select、sql_where、sql_groupby 描述卡片的 SQL 形态。card_id、filter_id、filter_type(F/D)、where_clause、default_value、options 描述可选筛选器与内置过滤条件。dashboard_id、dashboard_name、dashboard_desc、folder_path 描述仪表板元数据。dataset_id、dataset_ddl,按 HiveSQL 规范存放。这些结构均存放于 DuckDB,所有查询均基于机构编号(bbk/bbk_id)过滤。
app/endpoints 下的 FastAPI generate_qa_pair 接口作为唯一对外入口。PipelineManager + Workflow 负责解析配置化节点依赖,并串联 operator。generate_qa_pair operator 协调数据读取、prompt 渲染、LLM 调用与结果解析。LLMManager 统一管理不同模型提供方与解析策略。PromptManager 负责 prompt 模板的存储、渲染和复用。ParserManager/parsers 定义 LLM 输出解析策略。DuckDBClient 提供线程安全的数据查询封装。app.log 负责统一输出。app.const 维护目录、阈值等。模块间关系:接口层调用 Workflow;Workflow 根据配置调用 operator;operator 内部组合数据访问模块、Prompt/LLM 管理器与解析器。最终结果写入日志目录与 parquet 文件。
QARequest,校验卡片数量不超过 MAX_INPUT_CARD_IDS。bbk_id/dashbord/card_ids/user_request 打包成 input_args 交给 Workflow。QAResponse,包含仪表板、机构、卡片 ID 及问答列表。PipelineManager:从 config/pipeline_settings.yaml 读取节点定义,生成拓扑顺序。Workflow:按照拓扑依次执行 operator,支持异步/流式输出。workflow.result 共享数据,last_node 节点需写入最终结果。DuckDBClient 读取仪表板、卡片、筛选器及 DDL 元数据,组装为 DashboardInfo。PromptManager 渲染 generate_qa_pair 或带用户偏好模板。LLMManager 按节点配置选择模型,获取 JSON 问答列表,并借助 ParserManager 解析。QAPair。LLMManager 为单例,读取 config/llm_settings.yaml。echo(回声,便于测试)、http(通过 HTTP 调用自建/第三方 LLM 服务)。json、text),通过 ParserManager 统一管理。get_llm_model(model_name),operator 根据 pipeline 配置取用。PromptManager 读取 config/prompt_template.yaml 或使用内置默认模板。prompts/ 目录或直接配置在 YAML 中,支持变量占位与必填校验。PromptTemplate.ainvoke(context) 异步渲染并返回文本,供 operator 直接写入日志或传给 LLM。parsers.BaseParser 抽象解析器接口。JsonParser(去除 Markdown 包裹、解析 JSON)与 TextParser(直接返回文本)。ParserManager 允许通过配置注册自定义解析器或重写默认行为。DuckDBClient 封装了线程安全查询方法,支持:
fetch_dashboard_cards:根据 dashboard_id、card_ids、bbk_id 过滤卡片。fetch_card_definition:获取卡片 SQL 定义。fetch_card_filters:获取筛选器/固化条件。fetch_dashboard_info、fetch_dataset_ddl:补全仪表板及数据集信息。app/log,通过 app.log.logger 写入,支持级别控制。LOG_ROOT/prompts/... 便于审计。DATA_DIR/parquet/{bbk_id}/{dashboard_id}/。Workflow;get_dashboard_info 节点(后续实现)使用 DuckDBClient 读取所需元数据。generate_qa_pair operator 构建 prompt,调用 LLM 生成若干候选问题和过滤条件。bbk/bbk_id 均指机构编号。