PL1 · LLM Agent + OWL 本体推理(教学演示版)
多范式推理实战营 — 项目 5/6推理范式LangGraph Agent OWL 本体推理HermiT SWRL前置项目P1 · OWL / HermiT 本体推理 本项目将 P1 的纯推理引擎用 LLM Agent 包装让用户用自然语言描述宠物症状Agent 自动完成查本体、收集信息、触发推理、解释结果的全流程。项目概述P1 构建了一个完整的 OWL 本体推理引擎——HermiT SWRL 三层排除过滤能从症状列表精确推导疾病。但 P1 的使用门槛很高用户需要传结构化 JSON、症状名称必须精确匹配本体 label、物种要用英文。PL1 解决的问题推理引擎再强大如果用户不会用价值就归零。核心思路用 LLM Agent 充当「翻译层」用户说自然语言Agent 自动查本体、收集信息、触发推理再把结果翻译成人类可读的诊断报告。LLM 负责「听懂人话」本体推理负责「说对话」。一个负责不确定性一个负责确定性合在一起才是企业决策需要的智能体。与 P1 的关系维度P1纯推理引擎PL1LLM Agent 增强输入方式结构化 JSON自然语言对话术语处理必须精确匹配本体 labelLLM 自动对齐“发烧” → “发热”信息收集用户自行准备完整症状列表Agent 主动追问逐步收集推理触发手动调用diagnose()Agent 判断信息足够后自动触发结果解释List[Tuple[ThingClass, float]]格式化诊断报告 推理路径说明交互方式一次性 API 调用多轮对话可追问、可解释适用场景开发者集成面向终端用户推理引擎OWL/HermiT直接OWL/HermiT通过桥接层共享关键点PL1 没有修改 P1 的推理引擎只是在外面包了一层 Agent。P1 的推理能力三层推理、排除过滤、置信度计算完全保留。技术架构通用 Agent 框架 领域工具注入PL1 的核心设计是关注点分离Agent 循环LangGraph与领域知识OWL 本体完全解耦。用户自然语言 ↓ OntologyAgent (agent_core) ├── System Prompt (角色定义) ├── 7 个 tool (领域工具) └── ConversationState (对话状态) ↓ LangGraph ReAct 循环Think → Act → Observe → Repeat ↓ P1 OWL 推理引擎 (共享) HermiT 推理机 SWRL 规则 三层排除过滤四个注入点OntologyAgent是领域无关的通用框架agent_core/agent.py。换场景只需要替换四个注入点注入点PL1 中的实现作用tools_factorycreate_pl1_tools创建 7 个 LangChain 工具diagnose_fnpl1_diagnose桥接 P1 的 OWL 推理引擎report_builderbuild_pl1_report格式化为统一DiagnosisReportsystem_prompt宠物诊断助手角色定义约束 Agent 的行为规范agentOntologyAgent(tools_factorycreate_pl1_tools,diagnose_fnpl1_diagnose,report_builderbuild_pl1_report,system_promptSYSTEM_PROMPT,api_keysk-xxx,modelgpt-4o,)这意味着 PL2Prolog、PL3Jena/SPARQL、PL4模糊逻辑只需要实现自己的四个注入点Agent 框架零改动复用。七个工具PL1 提供 7 个 LangChaintool装饰的工具tools.py覆盖查询 → 收集 → 推理 → 解释全流程#工具名功能类别1lookup_symptom_owl在 OWL 本体中查找症状返回名称、ID、常见于哪些疾病查询2lookup_disease_owl查找疾病返回必要症状、排除症状、物种约束查询3add_observation向 ConversationState 添加一条观测记录收集4set_pet_info设置宠物基本信息物种/品种/年龄/性别收集5run_dl_reasoning运行 HermiT DL 推理返回诊断报告推理6explain_subsumption解释为什么某疾病被推理出来解释7get_case_summary返回当前病例摘要解释工具通过模块级缓存_get_onto()懒加载 OWL 本体避免重复加载。依赖路径指向examples/P1/data/pet_ontology.owl。诊断桥接层P1 的diagnose()函数有自己的输入格式和输出格式与 agent_core 的通用格式不同。diagnose.py是两者之间的适配器。输入转换# agent_core 通用格式 → P1 格式_SPECIES_MAP{猫:cat,喵:cat,猫咪:cat,狗:dog,犬:dog,狗狗:dog,}用户说猫咪Agent 记录为species猫PL1 桥接层转换为cat传给 P1。输出转换# P1 返回: List[Tuple[owlready2.ThingClass, float]]# agent_core 期望: List[Dict]降级诊断当 P1 的diagnose()函数因任何原因失败时owlready2 未安装、本体文件损坏等PL1 有一个降级策略手动计算必要症状匹配度。保证即使没有 HermiT 推理机也能给出基本结果。置信度等级置信度等级图标 0.85确诊● 0.50疑似○ 0.50排除✕项目结构pl1/ ├── README.md # 本文档 ├── __init__.py # 模块入口 ├── run.py # 启动脚本交互式对话循环 系统提示词 ├── tools.py # 7 个 LangChain tool 工具 ├── diagnose.py # 诊断桥接格式转换 降级诊断 └── report.py # 报告构建DiagnosisReport 推理路径说明 依赖 ├── agent_core/ # 通用 Agent 框架OntologyAgent ConversationState │ ├── agent.py # LangGraph ReAct Agent │ ├── conversation.py # 对话状态 诊断报告数据结构 │ ├── tool_registry.py# 工具注册表 │ └── requirements.txt └── P1/ # OWL 推理引擎共享 ├── src/reasoner.py # HermiT 推理 三层推理 排除逻辑 ├── src/diagnosis.py# 诊断主流程 └── data/pet_ontology.owl # 本体文件 (35.7KB) 测试 └── tests/test_pl1.py # 6 组单元测试环境准备1. 安装依赖cdontologyops/examples pipinstall-ragent_core/requirements.txt# agent_core 依赖langgraph, langchain, langchain-openai, langchain-core, pytest2. P1 本体共享PL1 依赖 P1 的本体文件确保P1/data/pet_ontology.owl存在。如需重新构建本体cdP1bashsetup_env.sh# 安装 owlready2 中文补丁版cdsrcpython onto_builder.py# 构建本体3. LLM APIexportOPENAI_API_KEYsk-xxx# 可选换模型或 API 地址exportOPENAI_MODELgpt-4oexportOPENAI_BASE_URLhttps://api.openai.com/v1运行交互式对话cdontologyops/examples python pl1/run.py启动后进入交互式对话 PL1 - 宠物疾病诊断 AgentOWL DL LLM 输入「退出」或「exit」结束会话。 输入「重新开始」清空当前病例。 您我的猫又吐又拉还发烧 助手我来帮您分析一下。首先确认一下是猫咪对吧 您对英短3岁 助手好的英短3岁。您提到的症状我确认一下... 信息收集完毕正在运行推理... ## 推理报告 **对象信息**类型: 猫 | 子类别: 英短 | 周期: 3 **观测记录**发热、呕吐、腹泻、精神萎靡 ### 推理结果 1. ● **猫瘟** — 置信度 99% 证据发热、呕吐、腹泻 2. ○ **犬细小病毒** — 置信度 77% 证据呕吐、腹泻 缺失精神萎靡 --- *推理引擎OWL-DL (HermiT) SWRL* *本结果由 OWL 本体推理引擎生成仅供参考不能替代执业兽医的诊断。*运行测试cdontologyops/examples python-mpytest tests/test_pl1.py-v测试覆盖6 组测试组覆盖内容工具集创建create_pl1_tools返回 7 个工具名称正确工具功能add_observation/set_pet_info/get_case_summary正确写入和读取 state推理前置检查信息不足时run_dl_reasoning返回提示而非报错报告构建build_pl1_report生成正确的DiagnosisReportformat_for_user输出可读文本Agent 集成OntologyAgent创建成功、reset()清空状态、工具与 state 同步OWL 推理pl1_diagnose端到端测试本体文件存在时运行不存在时跳过测试不依赖外部服务OpenAI APIOWL 本体测试有降级跳过机制。对话流程示例以猫瘟为例Agent 的完整交互过程 用户我的猫又吐又拉还发烧精神也不好 Agent 自动决策 1. 术语对齐查本体后发现发烧应为发热自动修正 2. 追问判断通过 get_case_summary() 检查信息是否足够 3. 推理时机等信息足够后才触发 run_dl_reasoning 4. 解释响应用户问为什么时调用 explain_subsumption 展示依据 工具调用序列 set_pet_info(species猫) lookup_symptom_owl(发烧) → 是否指「发热」 add_observation(发热, severity重度) add_observation(呕吐) add_observation(腹泻) add_observation(精神萎靡) get_case_summary() → ✅ 信息已足够 run_dl_reasoning() → 诊断报告Agent 兜底机制LLM 有时候会卡住——循环调用工具但不推进推理或者工具调用序列超出限制。OntologyAgent._force_diagnosis()提供安全兜底当 LangGraph 的recursion_limit默认max_turns * 3耗尽时Agent 不返回错误而是直接用已收集的信息调用推理引擎保证用户至少能得到一个诊断结果。PL 系列路线图编号对应范式推理引擎状态PL1OWL/HermiT 本体推理HermiT SWRL✅ 已完成PL2Prolog 逻辑推理SWI-Prolog规划中PL3Jena/SPARQL 三元组推理Apache Jena规划中PL4模糊逻辑推理FuzzyOWL规划中PL5多范式融合引擎上述全部规划中每个 PL 复用同一个agent_core框架只需实现自己的四个注入点。最终 PL5 将融合所有推理范式Agent 根据问题特征自动选择最合适的推理引擎。参考资料LangGraph 文档https://langchain-ai.github.io/langgraph/LangChain Toolshttps://python.langchain.com/docs/modules/tools/owlready2 官方文档https://owlready2.readthedocs.io/Owlready2-Chinese中文补丁https://github.com/georgewangchn/Owlready2-ChineseP1 · OWL / HermiT 本体推理 — PL1 的推理引擎基础PL1 博客文章 — 完整技术讲解《当 LLM 不够用了——本体推理的企业决策实践》作者森林瀑布 | 项目类型多范式推理实战营 PL1 | 最后更新2026-06-30