This commit is contained in:
2026-02-26 13:43:44 +08:00
parent 2c2db92ae9
commit 68200cdfe6
51 changed files with 2107 additions and 351 deletions
+3
View File
@@ -0,0 +1,3 @@
from .settings import Config
__all__ = ["Config"]
+68
View File
@@ -0,0 +1,68 @@
[General]
# 默认使用的模型配置区域
DEFAULT_MODEL_SECTION = gpt-4o
# 最大重试次数
MAX_RETRIES = 3
# 请求超时时间
TIMEOUT = 30
[gpt-4o]
# 模型名称
MODEL_NAME = gpt-4o
# API 密钥
OPENAI_API_KEY = your_openai_api_key_here
[gpt-3.5-turbo]
# 模型名称
MODEL_NAME = gpt-3.5-turbo
# API 密钥
OPENAI_API_KEY = your_openai_api_key_here
[app]
# 服务名称
service_name = more-dots-api
# 监听地址
host = 0.0.0.0
# 监听端口
port = 8000
# 服务版本
version = 1.0.0
# 默认模型配置段(可覆盖 General.DEFAULT_MODEL_SECTION)
model_section = gpt-4o
[ragflow]
url = http://10.122.176.97:21020
dataset_ids = f5b8b854d63a11f083230242c0a8e006
document_ids = 819cf100f52611f0a7fa0242c0a8e006
api_key = ragflow-xxxxx
retrieval = /api/v1/retrieval
upload = /api/v1/documents
cache_ttl = 600
[redis]
enabled = false
url = redis://localhost:6379/0
db = 0
[nacos]
# 是否启用 Nacos 注册
enabled = false
# Nacos 服务器地址
server = localhost:8848
# 命名空间
namespace = public
# 分组名称
group_name = DEFAULT_GROUP
# 集群名称
cluster_name = DEFAULT
# 账号(可选)
username =
# 密码(可选)
password =
# 心跳间隔(秒)
heartbeat_interval = 5
# 权重
weight = 1.0
# 是否临时实例
ephemeral = true
+20
View File
@@ -0,0 +1,20 @@
system:
default: |
You are a helpful assistant. Follow the user's instructions carefully.
sql_generator: |
You are an assistant that converts user intent into SQL.
Ensure the SQL is correct, safe, and syntactically valid.
user:
default: |
Please respond clearly and concisely.
english_normalizer: |
You are a translation and normalization assistant.
Convert the user's input to a clear, grammatically correct English sentence suitable for SQL intent.
If the input is already English, polish it.
Return only the final English sentence without extra explanations.
business:
sql_generation: |
Based on the user's intent, generate a SQL query.
Use correct table/field names and return only SQL.
+4
View File
@@ -0,0 +1,4 @@
本目录存放用于 RAGFlow 匹配的模板配置(JSON)。
约定:每个 JSON 文件对应一个表名(key),包含模板列表(value)。
示例文件:orders.json、customers.json。
@@ -0,0 +1,8 @@
{
"table": "example_table",
"templates": [
"example_table created in {date}",
"count of records in example_table",
"example_table where status = {status}"
]
}
+76
View File
@@ -0,0 +1,76 @@
import os
import configparser
from typing import Optional
class Config:
"""从 config.ini 读取的应用配置"""
_config = configparser.ConfigParser()
_root_dir = os.path.dirname(os.path.dirname(__file__))
_config_path = os.path.join(_root_dir, 'config', 'config.ini')
# 在类初始化时加载配置
if not os.path.exists(_config_path):
raise FileNotFoundError(
f"Configuration file not found at: {_config_path}. "
"Please copy 'config/config.ini.example' to 'config/config.ini' and fill in your details."
)
try:
with open(_config_path, "r", encoding="utf-8") as f:
_config.read_file(f)
except UnicodeDecodeError:
with open(_config_path, "r", encoding="gbk") as f:
_config.read_file(f)
# 通用设置
DEFAULT_MODEL_SECTION: str = _config.get('General', 'DEFAULT_MODEL_SECTION', fallback='gpt-4o')
MAX_RETRIES: int = _config.getint('General', 'MAX_RETRIES', fallback=3)
TIMEOUT: int = _config.getint('General', 'TIMEOUT', fallback=30)
@classmethod
def get_model_config(cls, section: Optional[str] = None) -> dict:
"""
获取指定模型配置段。
若 section 为 None,则使用默认模型配置段。
"""
if section is None:
section = cls.DEFAULT_MODEL_SECTION
if not cls._config.has_section(section):
raise ValueError(f"Model section '{section}' not found in config.ini")
config = dict(cls._config.items(section))
# 确保必需的键存在
if 'model_name' not in config or 'openai_api_key' not in config:
raise ValueError(f"Model section '{section}' must contain 'model_name' and 'openai_api_key'")
return {
"model": config['model_name'],
"api_key": config['openai_api_key'],
"base_url": config.get('url') or config.get('base_url')
}
@classmethod
def get_section(cls, section: str) -> dict:
"""获取指定配置段的键值对(键名会被转为小写)"""
if not cls._config.has_section(section):
return {}
return dict(cls._config.items(section))
@classmethod
def validate_config(cls):
"""校验默认模型配置是否存在且有效"""
try:
default_config = cls.get_model_config()
if not default_config.get("api_key") or 'your_openai_api_key_here' in default_config.get("api_key"):
raise ValueError(f"API key for default model '{cls.DEFAULT_MODEL_SECTION}' is missing or a placeholder.")
except (ValueError, configparser.Error) as e:
raise ValueError(f"Configuration validation failed: {e}")
# 如有需要可在导入时做初始校验,
# 但已移到 main.py 以便更可控地执行。
# 如需在导入时校验,可在此调用 Config.validate_config()
+4
View File
@@ -0,0 +1,4 @@
本目录存放业务 SQL 提示词(JSON 格式)。
约定:每个 JSON 文件对应一个数据库表模型。
示例文件:order.json、customer.json 等。
+364
View File
@@ -0,0 +1,364 @@
{
"meta": {
"domain": "订单物料最新状态与历史变更查询",
"description": "此模型用于查询订单物料的最新状态和ETA相关信息,支持查询历史变更记录。该表包含最新状态数据(data_flag='Newest')和历史变更数据(data_flag='Changelog')的联合结果。所有日期字段在查询时自动转换为字符类型。通过data_flag区分最新状态和历史变更,实现订单全生命周期追踪。",
"data_source": "dwd_ai.apbo_eta_ful",
"system_flag_limit": "任何条件下,都不允许在SELECT子句中查询is_passdue, is_dummy, data_flag字段,仅用于WHERE过滤,该规则优先级最高!"
},
"data_model_specification": {
"fields_list": [
"service_order_id", "soid", "part_number", "topmost_pn", "commodity_code", "ship_to_country",
"region", "dc_plant", "mtm", "machine_sn", "machine_type", "whether_premier", "stm_planner",
"category", "lenovo_ref_no", "case_number", "service_order_creation_date", "eta", "so_eta",
"status", "status_date", "update_date", "parts_sales", "warranty", "aging_day", "action",
"is_passdue", "is_dummy", "data_flag", "model", "aging_range", "recovery_day", "recovery_range",
"order_type", "key_lenovo_ref_no", "service_type", "customer", "life_cycle", "hawb", "bol", "dn", "po", "prid"
],
"mandatory_display_fields": {
"rule1": "默认展示字段(按以下顺序):service_order_id, soid, cast(service_order_creation_date as varchar(4096)) as service_order_creation_date, ship_to_country, part_number, topmost_pn, commodity_code, category, cast(eta as varchar(4096)) as eta, cast(so_eta as varchar(4096)) as so_eta, key_lenovo_ref_no, order_type, stm_planner, region, dc_plant, mtm, machine_sn, whether_premier, service_type, warranty, parts_sales, customer, life_cycle, model, aging_range, lenovo_ref_no, action, cast(update_date as varchar(4096)) as update_date",
"rule2": "用户明确提到的字段优先原则:如果用户问题中明确提到了某些字段,这些字段应在SELECT子句中排在最前面,按用户问题中出现的顺序排列",
"rule3": "字段去重:用户提到的字段和默认字段有重叠时,每个字段只出现一次",
"rule4": "日期字段必须转换为字符类型:cast(column as varchar(4096)) as column",
"rule5": "where子句中出现的字段,必须加入select中查询展示",
"rule6": "禁止使用limit",
"rule7": "请确认生成的sql中,用户使用的是mt(machine_type)还是mtm, 注意!! MTM SN = machine_sn, MT SN = machine_sn, mt = machine_type",
"rule8": "当用户要求:展示所有信息,所有字段,全字段等需求时候,额外加入展示的字段:machine_type,case_number,status_date,aging_day,is_passdue,is_dummy,data_flag,recovery_day,recovery_range,hawb,bol,dn,po,prid",
"rule9": "where条件禁止使用status字段过滤",
"rule10": "用户输入了汇总,统计,分组等关键词,但未明确统计方式时候,默认使用count(*)进行汇总,注意group by必须和聚合函数成对出现,聚合查询后默认按照聚合的值从小到大排序",
"rule11": "如果用户输入的关键字有:VN,AU,IN,HK,PH,KR,ID,TW,MO,FJ,LK,MY,SG,NZ,TH,JP,BD,则视为国家字段的数值过滤条件,增加ship_to_country = '国家代码'",
"rule12": "MM/DD类似格式日期转换为 like '%-MM-DD%' ,DD等格式转换为 like '%-DD%'",
"rule13": "用户指定日期时,去掉data_flag = 'Newest'的过滤条件,如:查询2026年1月26的eta信息,则where子句中不包含data_flag = 'Newest',而是update_date = '2025-12-31'",
"rule14": "聚合查询中,如未使用group by进行分组,select中默认增加使用update_date字段"
},
"optional_fields": {
"key_identifier_fields": ["service_order_id", "soid", "part_number","topmost_pn", "commodity_code"],
"milestone_date_fields": ["eta", "so_eta", "status_date", "update_date", "service_order_creation_date"],
"location_fields": ["ship_to_country", "region", "dc_plant"],
"machine_fields": ["mtm", "machine_sn", "machine_type", "model"],
"service_fields": ["whether_premier", "stm_planner", "category", "lenovo_ref_no", "case_number", "key_lenovo_ref_no", "service_type"],
"status_fields": ["status", "status_date"],
"additional_fields": ["parts_sales", "warranty", "aging_day", "action", "aging_range", "recovery_day", "recovery_range", "order_type", "customer", "life_cycle", "hawb", "bol", "dn", "po", "prid"],
"system_filter_fields": ["is_passdue", "is_dummy", "data_flag"]
}
},
"business_logic_rules": {
"soid_or_service_order_id": "禁止使用WHERE soid = 'xxx'或WHERE service_order_id = 'xxx'单独过滤,必须使用(service_order_id = 'xxx' or soid = 'xxx')进行过滤",
"sorting": "默认使用如下字段排序: soid, eta desc",
"alias_usage": "WHERE子句中支持使用字段别名进行查询,SELECT子句中使用原始字段名或别名均可",
"date_conversion": "所有日期字段必须使用cast(column as varchar(4096)) as column转为字符类型",
"default_filters": ["is_dummy = '0'", "data_flag = 'Newest'"],
"null_handling": "日期字段转换时保留NULL值",
"model_query_rule": "查询model字段时必须使用like匹配,如: model like '%X13%'",
"field_extraction_rule": "使用正则表达式和关键词匹配提取用户明确提到的字段,建立字段别名映射表",
"field_order_rule": "用户提到的字段按问题中出现顺序排列在最前面,然后补充默认展示字段中未提及的字段",
"topmost_pn and part_number_distinction": "确保区分topmost_pn(tp,tm,topmost)和part_number(pn)字段,避免混淆",
"todays_date_handling": "当用户查询包含“今天”或“当前日期”的信息时,替换为系统当前日期进行过滤"
},
"field_mapping_reference": {
"critical_note": "此表包含最新状态数据和历史变更数据的联合,通过data_flag区分。最新数据(Newest)每条订单只有一条记录,历史数据(Changelog)每条订单有多条记录。所有日期字段在查询时自动转换为字符类型。请注意检查用户是否使用了字段的alias,不要忽略!!!系统字段(is_passdue, data_flag)仅用于WHERE过滤,不显示在SELECT结果中。用户提到的字段应优先显示在SELECT子句最前面。",
"critical_note1": {"type":"字段类型", "desc":"字段描述", "format": "数据格式", "query_format": "查询时数据格式" ,"example":"字段示例值", "values":"枚举值", "alias":"字段别名"},
"key_identifiers": {
"service_order_id": {
"type": "varchar(4096)",
"desc": "主订单号,唯一标识, 简写为SO 或 WO ,10位码值,注意与soid(12位码值)区分",
"example": "4020438779",
"alias": ["so","SO", "wo", "订单号", "主单号", "SO", "服务订单", "order_no", "Service Order", "BO", "backorder"]
},
"soid": {
"type": "varchar(4096)",
"desc": "服务订单明细,12位码值,注意与service_order_id(10位码值)区分",
"example": "402043877920",
"alias": ["明细ID", "SOID", "订单明细", "服务订单明细", "Service Order Item Detail", "SO ID"]
},
"part_number": {
"type": "varchar(4096)",
"desc": "原始申请物料号, 注意与topmost pn区分, 这不是topmost pn, 这是part number, PN",
"example": "5CB1L57599",
"alias": ["pn", "part", "parts", "物料号", "零件号", "Part Number", "材料号", "物料编码", "零件编码"]
}
},
"milestone_date_fields": {
"service_order_creation_date": {
"type": "datetime",
"desc": "开单日期",
"format": "YYYY-MM-DD HH:MM:SS",
"query_format": "作为字符串展示",
"alias": ["create_date", "创建时间", "下单时间", "开单日期", "SO创建时间", "开单时间", "Order Creation Date", "created_date", "创建日期"]
},
"eta": {
"type": "date",
"desc": "物料预计到达日期(Estimated Time of Arrival)",
"format": "YYYY-MM-DD",
"query_format": "作为字符串展示",
"alias": ["预计到达", "计划到达时间", "ETA", "预计到港时间", "预计到货时间", "预计送达时间", "物料ETA"]
},
"so_eta": {
"type": "date",
"desc": "销售订单层预计到达时间(Service Order ETA)",
"format": "YYYY-MM-DD",
"query_format": "作为字符串展示",
"alias": ["SO预计到达", "订单ETA", "服务订单预计到达", "Service Order ETA", "SO ETA", "销售订单ETA"]
},
"status_date": {
"type": "date",
"desc": "状态日期, 禁止使用status_date字段排序, 禁止使用status_date字段排序, 禁止使用status_date字段排序",
"format": "YYYY-MM-DD",
"query_format": "作为字符串展示",
"alias": ["status date", "状态时间", "状态更新时间", "最后更新", "状态日期", "Status Update Date", "更新时间", "更新日期"]
},
"update_date": {
"type": "date",
"desc": "历史数据状态更新日期,表示该条历史记录的生成时间",
"format": "YYYY-MM-DD",
"query_format": "作为字符串展示",
"alias": ["更新时间", "更新日期", "历史数据状态更新日期", "修改时间"]
}
},
"additional_fields": {
"topmost_pn": {
"type": "varchar(4096)",
"desc": "最紧缺物料号, 注意与pn区分, 这是topmost pn, 这是topmost pn, 这是topmost pn, 不是PN",
"example": "5CB1L57599",
"alias": ["tp","tm", "最紧缺物料号", "Topmost Part Number", "topmost", "topmost pn"]
},
"commodity_code": {
"type": "varchar(4096)",
"desc": "商品编码",
"example": "PL",
"alias": ["commodity", "商品代码", "编码", "cc", "物料分类", "Commodity Code", "商品类别", "物料类型", "商品编码"]
},
"ship_to_country": {
"type": "varchar(4096)",
"desc": "收货国家",
"values": ["VN","AU","IN","HK","PH","KR","ID","TW","MO","FJ","LK","MY","SG","NZ","TH","JP","BD"],
"alias": ["country", "国家", "收货国", "目的地国家", "Ship to Country", "目标国家", "送达国家", "收货地点", "目的地"]
},
"region": {
"type": "varchar(4096)",
"desc": "地区",
"values": ["CAP", "ANZ", "India", "JP"],
"alias": ["区域", "大区", "Region Code", "地域代码", "地区代码", "地理区域"]
},
"dc_plant": {
"type": "varchar(4096)",
"desc": "配送中心/工厂",
"example": "VN01",
"alias": ["dc", "工厂", "配送中心", "发货配送中心", "DC", "发货中心", "Distribution Center", "发货工厂", "配送点", "仓库"]
},
"mtm": {
"type": "varchar(4096)",
"desc": "机器型号,请注意与mt区分,这不是mt,这是mtm,这是mtm,这是mtm",
"example": "20QUS0SQ00",
"alias": ["mtm", "机型号", "型号", "Machine Type Model", "设备型号", "机器型号代码", "机型代码", "MTM"]
},
"machine_sn": {
"type": "varchar(4096)",
"desc": "机器序列号, MTM SN, MT SN都是machine_sn ,请注意与mtm区分,这不是mtm也不是MT, 这是sn,这是sn,这是sn",
"example": "PW01554B",
"alias": ["sn", "serial_number", "序列号", "SN", "Machine Serial Number", "设备序列号", "机器SN", "设备SN", "序列编号", "MTM SN", "MT SN"]
},
"machine_type": {
"type": "varchar(4096)",
"desc": "机器类型, 请注意与mtm区分,这不是mtm,这是mt,这是mt,这是mt",
"example": "20Q1",
"alias": ["MT", "machine type", "机器类型", "设备类型", "机型大类", "机器大类"]
},
"model": {
"type": "varchar(4096)",
"desc": "Lenovo的机型, 禁止使用model = 'model_name', 查询时必须转换为小写并使用like匹配,如: lower(model) like '%X13%'",
"example": ["Yoga 7 16IAH7", "X13 GEN3", "T16 Gen4 AMD", "Legion 7 16ACHg6"],
"alias": ["model", "机型", "型号", "Model", "设备型号", "机器型号"]
},
"lenovo_ref_no": {
"type": "varchar(63355)",
"desc": "联想内部参考号",
"alias": ["Lenovo Ref No", "ref_no", "联想单号", "参考号", "联想内部参考号", "内部参考号", "Lenovo Reference", "联想内部编号", "参考编号", "参考单号"]
},
"case_number": {
"type": "varchar(4096)",
"desc": "事件号/案例号",
"example": "CS12345678",
"alias": ["case", "事件号", "事件编号", "case no", "Case Number", "lenovo case", "工单号", "服务请求号"]
},
"status": {
"type": "varchar(4096)",
"desc": "订单状态",
"example": ["wrong order", "DN", "ETA", "Standard Good Stock"],
"alias": ["状态", "订单状态", "Status", "当前状态", "物料状态", "订单最新状态"]
},
"whether_premier": {
"type": "varchar(4096)",
"desc": "优先级标识,默认查询 'Premier'",
"values": ["Starndard", "Premier"],
"alias": ["premier", "优质服务", "是否优质", "是否Premier", "Premier服务", "是否优先", "Whether Premier", "优先服务标识", "VIP服务"]
},
"stm_planner": {
"type": "varchar(4096)",
"desc": "短期物料计划员",
"alias": ["planner", "计划员姓名", "STM计划员", "STM Planner", "服务计划员", "运输计划员", "物料计划员", "计划员"]
},
"category": {
"type": "varchar(4096)",
"desc": "订单分类,查询时必须转换为小写并使用like匹配, 如: lower(category) like '%standard%'",
"example": "Standard",
"alias": ["类型", "分类", "订单类别", "Category", "服务类别", "订单分类", "分类类型", "服务类型"]
},
"parts_sales": {
"type": "varchar(4096)",
"desc": "零件销售信息",
"alias": ["零件销售", "销售信息", "部件销售", "配件销售", "销售数据"]
},
"warranty": {
"type": "varchar(4096)",
"desc": "保修信息",
"alias": ["保修", "保修信息", "质保", "保修条款", "保修状态"]
},
"aging_day": {
"type": "int",
"desc": "订单从生成(order_creation_date)到当前(update_date)所经过的具体天数",
"examples": [118, 77, 12],
"alias": ["账龄天数", "账龄", "aging day", "age days", "账龄分类", "天数分类", "Aged", "Age"]
},
"aging_range":{
"type": "varchar(2048)",
"desc": "订单从生成(order_creation_date)到当前(update_date)所经过的具体天数区间,并按照星期分类",
"values": ["0-7D", "8-14D", "15-21D", "22-28D", "28D+", "null"],
"alias": ["账龄天数", "账龄", "aging day", "age date range", "账龄分类", "天数分类"]
},
"recovery_day": {
"type": "int",
"desc": "订单从Update_date到SO_ETA所经过的具体天数",
"examples": [118, 77, 12],
"alias": ["账龄天数", "账龄", "recovery day", "账期分类", "账龄分类", "天数分类", "Aged", "Age"]
},
"recovery_range": {
"type": "varchar(2048)",
"desc": "订单从Update_date到SO_ETA所经过的具体天数区间,按照星期分类",
"values": ["0-7D", "8-14D", "15-21D", "22-28D", "28D+", "null"],
"alias": ["账龄天数", "账龄", "recovery range", "账期分类", "账龄分类", "天数分类"]
},
"action": {
"type": "varchar(4096)",
"desc": "操作/规则",
"example": "Not accept sub",
"alias": ["sub_rule", "操作", "规则", "限制规则", "操作类型", "处理规则"]
},
"order_type":{
"type": "varchar(4096)",
"desc": "订单类型",
"values": ["MDOA", "OPT", "CLW", "DOA", "FOC", "OOW", "OBL", "ADW"],
"alias": ["type", "订单类别", "类别", "订单类型", "Order Type", "服务类型", "服务类别"]
},
"key_lenovo_ref_no": {
"type": "varchar(4096)",
"desc": "关键联想参考号",
"alias": ["关键参考号", "主要参考号", "关键联想单号"]
},
"service_type": {
"type": "varchar(4096)",
"desc": "服务类型",
"alias": ["服务类型", "服务种类", "service type"]
},
"customer": {
"type": "varchar(4096)",
"desc": "客户信息",
"alias": ["客户", "客户名称", "客户信息", "customer name"]
},
"life_cycle": {
"type": "varchar(4096)",
"desc": "TM生命周期",
"alias": ["tm_lifecycle","TM生命周期", "生命周期阶段", "产品生命周期"]
},
"hawb": {
"type": "varchar(4096)",
"desc": "house air way bill",
"examples": ["DIM042186899"],
"alias": ["分运单号", "运单号", "代理运单", "分运单", "house air way bill"]
}
},
"system_flag_fields": {
"is_passdue": {
"type": "varchar(64)",
"desc": "是否逾期:'1'表示逾期,'0'表示正常",
"business_rule": "根据用户要求过滤, 禁止出现在SELECT中",
"display_rule": "仅用于WHERE过滤,不显示",
"alias": ["passdue", "逾期标志", "是否逾期", "overdue", "超期标志", "逾期标识"]
},
"is_dummy": {
"type": "varchar(64)",
"desc": "是否为虚拟/测试数据:'1'表示是dummy数据,'0'表示真实数据",
"business_rule": "默认过滤掉dummy数据(is_dummy='0'),除非用户指定, 禁止出现在SELECT中",
"display_rule": "仅用于WHERE过滤,不显示",
"alias": ["dummy", "虚拟标志", "是否虚拟", "测试数据", "假数据标识", "模拟数据"]
},
"data_flag": {
"type": "varchar(64)",
"desc": "数据标志:'Newest'表示最新状态,'Changelog'表示历史变更",
"example": "Newest",
"business_rule": "默认查询最新状态(Newest),查询历史时使用Changelog, 禁止出现在SELECT中",
"display_rule": "仅用于WHERE过滤,不显示",
"alias": ["数据标志", "数据类型", "数据状态", "记录类型", "数据分类"]
}
}
},
"examples": {
"newest_status_all_fields": {
"user": "请查询SO:4020986743的全部字段",
"sql": "SELECT service_order_id, soid, cast(service_order_creation_date as varchar(4096)) as service_order_creation_date, ship_to_country, part_number, topmost_pn, commodity_code, category, cast(eta as varchar(4096)) as eta, cast(so_eta as varchar(4096)) as so_eta, key_lenovo_ref_no, order_type, stm_planner, region, dc_plant, mtm, machine_sn, whether_premier, service_type, warranty, parts_sales, customer, life_cycle, model, aging_range, lenovo_ref_no, action, cast(update_date as varchar(4096)) as update_date FROM dwd_ai.apbo_eta_ful WHERE (service_order_id = '4020986743' or soid = '4020986743') AND is_dummy = '0' AND data_flag = 'Newest' ORDER BY soid, eta DESC",
"field_selection_reason": "默认查询最新状态,按默认展示字段顺序显示所有字段(除系统字段),日期字段转换为字符类型"
},
"history_records_all_fields": {
"user": "查看2025年12月31的so为4020438779的历史变更记录",
"sql": "SELECT service_order_id, soid, cast(service_order_creation_date as varchar(4096)) as service_order_creation_date, ship_to_country, part_number, topmost_pn, commodity_code, category, cast(eta as varchar(4096)) as eta, cast(so_eta as varchar(4096)) as so_eta, key_lenovo_ref_no, order_type, stm_planner, region, dc_plant, mtm, machine_sn, whether_premier, service_type, warranty, parts_sales, customer, life_cycle, model, aging_range, lenovo_ref_no, action, cast(update_date as varchar(4096)) as update_date FROM dwd_ai.apbo_eta_ful WHERE (service_order_id = '4020438779' or soid = '4020438779') AND cast(update_date as varchar(4096)) like '%2025-12-31%' AND is_dummy = '0' AND data_flag = 'Changelog' ORDER BY soid, eta DESC",
"field_selection_reason": "查询历史变更记录,按默认展示字段顺序显示所有字段(除系统字段),日期字段转换为字符类型"
},
"specific_fields_query": {
"user": "查询SO为4020438779的country, eta, order_type",
"sql": "SELECT ship_to_country, cast(eta as varchar(4096)) as eta, order_type, service_order_id, soid, cast(service_order_creation_date as varchar(4096)) as service_order_creation_date, part_number, topmost_pn, commodity_code, category, cast(so_eta as varchar(4096)) as so_eta, key_lenovo_ref_no, stm_planner, region, dc_plant, mtm, machine_sn, whether_premier, service_type, warranty, parts_sales, customer, life_cycle, model, aging_range, lenovo_ref_no, action, cast(update_date as varchar(4096)) as update_date FROM dwd_ai.apbo_eta_ful WHERE (service_order_id = '4020438779' or soid = '4020438779') AND is_dummy = '0' AND data_flag = 'Newest' ORDER BY soid, eta DESC",
"field_selection_reason": "用户提到的字段(ship_to_country, eta, order_type)优先显示在最前面,然后补充其他默认展示字段"
},
"aggragate_query": {
"user": "by country, key_Lenovo Ref No, eta 汇总REGION=CAP passdue 信息, 并从小到大排序",
"sql": "SELECT region, ship_to_country, key_lenovo_ref_no, cast(eta as varchar(4096)) as eta, count(1) FROM dwd_ai.apbo_eta_ful WHERE is_passdue = '1' AND is_dummy = '0' AND data_flag = 'Newest' AND region = 'CAP' group by region, ship_to_country, key_lenovo_ref_no, cast(eta as varchar(4096)) ORDER BY count(1) ASC",
"field_selection_reason": "查询特定账龄的订单,按默认展示字段顺序显示,日期字段转换为字符类型"
},
"overdue_orders_all_fields": {
"user": "查询所有passdue/逾期的订单",
"sql": "SELECT service_order_id, soid, cast(service_order_creation_date as varchar(4096)) as service_order_creation_date, ship_to_country, part_number, topmost_pn, commodity_code, category, cast(eta as varchar(4096)) as eta, cast(so_eta as varchar(4096)) as so_eta, key_lenovo_ref_no, order_type, stm_planner, region, dc_plant, mtm, machine_sn, whether_premier, service_type, warranty, parts_sales, customer, life_cycle, model, aging_range, lenovo_ref_no, action, cast(update_date as varchar(4096)) as update_date FROM dwd_ai.apbo_eta_ful WHERE is_passdue = '1' AND is_dummy = '0' AND data_flag = 'Newest' ORDER BY soid, eta DESC",
"field_selection_reason": "查询逾期订单,按默认展示字段顺序显示,日期字段转换为字符类型"
},
"Machine_sn_query": {
"user": "SN PF4C8CBL的order 信息",
"sql": "SELECT machine_sn, service_order_id, soid, cast(service_order_creation_date as varchar(4096)) as service_order_creation_date, ship_to_country, part_number, topmost_pn, commodity_code, category, cast(eta as varchar(4096)) as eta, cast(so_eta as varchar(4096)) as so_eta, key_lenovo_ref_no, order_type, stm_planner, region, dc_plant, mtm, whether_premier, service_type, warranty, parts_sales, customer, life_cycle, model, aging_range, lenovo_ref_no, action, cast(update_date as varchar(4096)) as update_date FROM dwd_ai.apbo_eta_ful WHERE machine_sn = 'PF4C8CBL' AND is_dummy = '0' AND data_flag = 'Newest' ORDER BY soid, eta DESC",
"field_selection_reason": "用户提到的字段(machine_sn)优先显示在最前面,然后补充其他默认展示字段"
},
"status_query": {
"user": "查询状态为wrong order的订单",
"sql": "SELECT status, service_order_id, soid, cast(service_order_creation_date as varchar(4096)) as service_order_creation_date, ship_to_country, part_number, topmost_pn, commodity_code, category, cast(eta as varchar(4096)) as eta, cast(so_eta as varchar(4096)) as so_eta, key_lenovo_ref_no, order_type, stm_planner, region, dc_plant, mtm, machine_sn, whether_premier, service_type, warranty, parts_sales, customer, life_cycle, model, aging_range, lenovo_ref_no, action, cast(update_date as varchar(4096)) as update_date FROM dwd_ai.apbo_eta_ful WHERE status = 'wrong order' AND is_dummy = '0' AND data_flag = 'Newest' ORDER BY soid, eta DESC",
"field_selection_reason": "用户提到的字段(status)优先显示在最前面,然后补充其他默认展示字段"
},
"multiple_fields_query": {
"user": "查看SN为PF4C8CBL的订单状态和机器型号",
"sql": "SELECT machine_sn, status, model, service_order_id, soid, cast(service_order_creation_date as varchar(4096)) as service_order_creation_date, ship_to_country, part_number, topmost_pn, commodity_code, category, cast(eta as varchar(4096)) as eta, cast(so_eta as varchar(4096)) as so_eta, key_lenovo_ref_no, order_type, stm_planner, region, dc_plant, mtm, whether_premier, service_type, warranty, parts_sales, customer, life_cycle, aging_range, lenovo_ref_no, action, cast(update_date as varchar(4096)) as update_date FROM dwd_ai.apbo_eta_ful WHERE machine_sn = 'PF4C8CBL' AND is_dummy = '0' AND data_flag = 'Newest' ORDER BY soid, eta DESC",
"field_selection_reason": "用户提到的字段(machine_sn, status, model)按问题中出现的顺序优先显示在最前面,然后补充其他默认展示字段"
},
"model_query_all_fields": {
"user": "查询机型包含X13的订单",
"sql": "SELECT service_order_id, soid, cast(service_order_creation_date as varchar(4096)) as service_order_creation_date, ship_to_country, part_number, topmost_pn, commodity_code, category, cast(eta as varchar(4096)) as eta, cast(so_eta as varchar(4096)) as so_eta, key_lenovo_ref_no, order_type, stm_planner, region, dc_plant, mtm, machine_sn, whether_premier, service_type, warranty, parts_sales, customer, life_cycle, model, aging_range, lenovo_ref_no, action, cast(update_date as varchar(4096)) as update_date FROM dwd_ai.apbo_eta_ful WHERE model like '%X13%' AND is_dummy = '0' AND data_flag = 'Newest' ORDER BY soid, eta DESC",
"field_selection_reason": "查询特定机型的订单,使用like匹配model字段,按默认展示字段顺序显示"
},
"order_type_query_all_fields": {
"user": "查询订单类型为MDOA的订单",
"sql": "SELECT service_order_id, soid, cast(service_order_creation_date as varchar(4096)) as service_order_creation_date, ship_to_country, part_number, topmost_pn, commodity_code, category, cast(eta as varchar(4096)) as eta, cast(so_eta as varchar(4096)) as so_eta, key_lenovo_ref_no, order_type, stm_planner, region, dc_plant, mtm, machine_sn, whether_premier, service_type, warranty, parts_sales, customer, life_cycle, model, aging_range, lenovo_ref_no, action, cast(update_date as varchar(4096)) as update_date FROM dwd_ai.apbo_eta_ful WHERE order_type = 'MDOA' AND is_dummy = '0' AND data_flag = 'Newest' ORDER BY soid, eta DESC",
"field_selection_reason": "查询特定订单类型的订单,按默认展示字段顺序显示"
},
"passdue_info_query": {
"user": "region = ANZ 的passdue 信息",
"sql": "SELECT region, service_order_id, soid, cast(service_order_creation_date as varchar(4096)) as service_order_creation_date, ship_to_country, part_number, topmost_pn, commodity_code, category, cast(eta as varchar(4096)) as eta, cast(so_eta as varchar(4096)) as so_eta, key_lenovo_ref_no, order_type, stm_planner, dc_plant, mtm, machine_sn, whether_premier, service_type, warranty, parts_sales, customer, life_cycle, model, aging_range, lenovo_ref_no, action, cast(update_date as varchar(4096)) as update_date FROM dwd_ai.apbo_eta_ful WHERE is_passdue = '1' AND is_dummy = '0' AND data_flag = 'Newest' ORDER BY soid, eta DESC",
"field_selection_reason": "查询逾期订单的详细信息,按默认展示字段顺序显示"
}
}
}
+10
View File
@@ -0,0 +1,10 @@
{
"table": "example_table",
"description": "示例表模型提示词",
"system_prompt": "You are an expert SQL generator.",
"business_prompt": "Generate SQL for example_table based on the user's intent.",
"constraints": [
"Use only fields defined in this table.",
"Return only SQL without explanations."
]
}
+4
View File
@@ -0,0 +1,4 @@
本目录存放业务表模型元数据提示词(JSON 格式)。
约定:每个 JSON 文件对应一个数据库表模型,描述表与字段元数据。
示例文件:order_metadata.json、customer_metadata.json 等。
@@ -0,0 +1,20 @@
{
"table": "example_table",
"description": "示例表模型元数据提示词",
"fields": [
{
"name": "id",
"type": "int",
"description": "主键"
},
{
"name": "created_at",
"type": "datetime",
"description": "创建时间"
}
],
"relationships": [],
"notes": [
"字段含义与业务规则可在此补充"
]
}