fromopenaiimportOpenAIimportjson client=OpenAI()defgenerate_sqp(question:str,ontology:str):prompt=f""" 你是汽车数据分析系统中的 Semantic Query Planner。 你的任务不是生成 SQL。 你必须根据 Ontology, 把用户自然语言转换成 Semantic Query Plan。 Ontology:{ontology}User Query:{question}只返回 JSON。 """response=client.responses.create(model="gpt-5",input=prompt)returnjson.loads(response.output_text)通过上面的脚本,可以快速理解“用户查询”与“本体”, "Semantic Query Plan (SQP)"之间的关系。简单理解就是:
LLM(prompt, UserQuery, Ontology)=Semantic Query Plan大模型生成的 SQP 还可能不靠谱,一般要用 SQP Validator 再验证确认一遍:
classOntologyValidator:def__init__(self,ontology):self.ontology=ontologydefvalidate_entity(self,entity):ifentitynotinself.ontology["entities"]:raiseValueError(f"Unknown entity:{entity}")defvalidate_field(self,entity,field):fields=(self.ontology["entities"][entity]["properties"])iffieldnotinfields:raiseValueError(f"Unknown field{entity}.{field}")defvalidate(self,sqp):self.validate_entity(sqp["entity"])forconditioninsqp["filters"]:entity,field=condition["field"].split(".")self.validate_entity(entity)self.validate_field(entity,field)returnTrue最后,通过 Compiler,可以把 SQP 转化成图数据库查询语言:
MATCH(c:Customer)-[:OWNS]->(v:Vehicle),(v)-[:MODEL]->(m:VehicleModel),(v)-[:PURCHASED_BY]->(p:Purchase),(v)-[:HAS_FAULT]->(f:Fault),(f)-[:RUNNING_VERSION]->(sv:SoftwareVersion),(sv)-[:HAS_DEFECT]->(d:SoftwareDefect),(f)-[:HAS_REPAIR]->(r:RepairOrder),(c)-[:LIVES_IN]->(city:City),(city)-[:IN_REGION]->(region:Region)WHERE region.name="华东"AND p.purchase_date>=date()- duration("P1Y")AND v.energy_type IN["BEV","PHEV","HEV"]AND m.body_type="SUV"AND f.fault_category="Battery"AND f.fault_date>=p.purchase_date AND f.fault_date<=p.purchase_date + duration("P90D")AND d.defect_id IS NOT NULL AND NOT EXISTS{MATCH(recall:RecallCampaign)-[:TARGET_CITY]->(city),(recall)-[:TARGET_VERSION]->(sv)WHERE recall.start_date>=date()- duration("P1Y")}RETURN count(DISTINCT c)AS customer_count, avg(r.cost)AS avg_repair_cost更多体验,如下提示词:
假设我是一个传统汽车制造商,有数据库,CRM等传统系统。我现在要转型,引入 agent 来支持类似于**“找出华东地区过去一年购买了新能源 SUV 的客户中,购买后 90 天内出现过电池相关故障、且车辆当时运行的软件版本存在已知缺陷,同时这些客户所在城市去年没有进行过该软件版本的召回活动的客户,并统计这些客户的数量和平均维修成本。”,“十佳销售商卖出去的最热门的4款车,以及他们他们的平均售价” **这样的自然语言查询。
我想为小公司写一个小的单机本体系统,希望一切相关数据库组建都用嵌入式组件。rdbms用duckdb,其余的推荐一下。要求好安装,不用docker。最后脚本启动后,前台可以通过http访问。脚本启动时自动初始化环境和数据。
使用 duckdb、kuzu、lancedb、sqlite 这类系统存储各种领域数据。
LLM部分使用 BYOM 模式,用户在网页上填入自己的token和模型,模型使用阿里云的。
请开一个工作项,在本地电脑上帮我完整完成整个项目。