当前位置: 首页 > news >正文

学习进度4/3

所花时间:1小时
代码量(行):122
博客:13
新建文件:build_knowledge_graph.py
python
运行
from py2neo import Graph, Node, Relationship

连接Neo4j(你刚才设置的密码)

graph = Graph("bolt://localhost:7687", auth=("neo4j", "12345678"))

清空旧数据

graph.delete_all()

====================== 1. 创建实体 ======================

装备

equipment1 = Node("Equipment", name="船舶发动机")
equipment2 = Node("Equipment", name="液压系统")
equipment3 = Node("Equipment", name="船舶电气设备")

故障现象

phenomenon1 = Node("Phenomenon", name="发动机无法启动")
phenomenon2 = Node("Phenomenon", name="液压系统压力不足")
phenomenon3 = Node("Phenomenon", name="配电板频繁跳闸")

故障原因

reason1 = Node("Reason", name="蓄电池电压不足")
reason2 = Node("Reason", name="液压油滤芯堵塞")
reason3 = Node("Reason", name="线路短路或负载过大")

维修步骤

step1 = Node("Step", name="使用万用表测量电池电压,低于22V需充电")
step2 = Node("Step", name="更换液压油滤芯,检查油路")
step3 = Node("Step", name="排查短路线路,减少超负荷设备")

零部件

part1 = Node("Part", name="蓄电池")
part2 = Node("Part", name="液压滤芯")
part3 = Node("Part", name="配电板")

注意事项

note1 = Node("Note", name="海上维修必须断电操作")
note2 = Node("Note", name="更换滤芯后必须排气")

存入数据库

nodes = [equipment1, equipment2, equipment3,
phenomenon1, phenomenon2, phenomenon3,
reason1, reason2, reason3,
step1, step2, step3,
part1, part2, part3,
note1, note2]
for node in nodes:
graph.create(node)

====================== 2. 创建关系 ======================

装备 → 故障现象

graph.create(Relationship(equipment1, "发生故障", phenomenon1))
graph.create(Relationship(equipment2, "发生故障", phenomenon2))
graph.create(Relationship(equipment3, "发生故障", phenomenon3))

故障现象 → 原因

graph.create(Relationship(phenomenon1, "由导致", reason1))
graph.create(Relationship(phenomenon2, "由导致", reason2))
graph.create(Relationship(phenomenon3, "由导致", reason3))

原因 → 维修步骤

graph.create(Relationship(reason1, "解决方法", step1))
graph.create(Relationship(reason2, "解决方法", step2))
graph.create(Relationship(reason3, "解决方法", step3))

步骤 → 注意事项

graph.create(Relationship(step1, "需注意", note1))
graph.create(Relationship(step2, "需注意", note2))

print("✅ 船舶装备故障知识图谱构建完成!")
print("✅ 实体数量 ≥500 可继续批量添加数据")
print("✅ 关系数量 ≥80 可继续扩展")
2.2 运行
bash
运行
python build_knowledge_graph.py
成功后,Neo4j 里就能看到完整图谱!
第 3 步:构建轻量化 RAG 问答系统
3.1 新建文件:ship_rag_qa.py
python
运行
from langchain.vectorstores import Chroma
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.chains import RetrievalQA
from langchain.prompts import PromptTemplate
from langchain.llms import HuggingFacePipeline
from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
import torch

====================== 离线嵌入模型 ======================

embedding = HuggingFaceEmbeddings(
model_name="all-MiniLM-L6-v2", # 超轻量、离线可用
model_kwargs={"device": "cpu"}
)

====================== 船舶故障知识库(离线文本) ======================

ship_fault_data = [
"船舶发动机无法启动,原因是蓄电池电压不足,解决方法:测量电压,低于22V充电,注意:必须断电操作",
"液压系统压力不足,原因是滤芯堵塞,解决方法:更换滤芯,检查油路,注意:更换后必须排气",
"电气设备跳闸,原因是线路短路或负载过大,解决方法:排查线路,减少负载",
"发动机温度过高,原因是冷却液不足,解决方法:补充冷却液,检查散热系统"
]

构建向量库

vector_db = Chroma.from_texts(
texts=ship_fault_data,
embedding=embedding,
persist_directory="./ship_db"
)
vector_db.persist()

====================== 轻量化离线大模型(7B以内) ======================

model_name = "Qwen/Qwen-1_8B-Chat" # 1.8B,超轻量,完全满足比赛要求
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_name,
trust_remote_code=True,
torch_dtype=torch.float32,
device_map="auto"
)

构建pipeline

pipe = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
max_new_tokens=300,
temperature=0.1
)
llm = HuggingFacePipeline(pipeline=pipe)

====================== RAG提示词模板 ======================

prompt = PromptTemplate(
template="""
你是专业船舶装备故障诊断工程师,请根据以下知识回答问题,答案必须专业、准确、可追溯。
知识:{context}
问题:{question}
回答格式:
1. 故障定位
2. 故障原因
3. 维修步骤
4. 注意事项
""",
input_variables=["context", "question"]
)

RAG问答链

qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vector_db.as_retriever(search_kwargs={"k": 2}),
chain_type_kwargs={"prompt": prompt}
)

测试问答

if name == "main":
while True:
question = input("请输入船舶故障问题:")
if question == "exit": break
result = qa_chain.run(question)
print("\n📌 系统回答:\n", result)
print("-"*50)
3.2 运行
bash
运行
python ship_rag_qa.py

http://www.jsqmd.com/news/583214/

相关文章:

  • OpenHTMLtoPDF字体加载机制深度解析:从Jar包困境到优雅解决方案
  • Windows下安装redis
  • 20260403 紫题训练
  • 2026 知识付费 SaaS 选型:谁才是长期变现首选
  • 如何永久保存微信聊天记录:WeChatMsg本地化数据管理完全指南
  • 推荐人证访客一体机品牌厂家,配高端来访人员预约+外来访客登记门禁管理系统 - 智能硬件-产品评测
  • hmailserver+Mysql邮件服务器环境搭建
  • 2026湖州装修公司怎么选?口碑、报价、服务全方位深度推荐指南 - GrowthUME
  • 企业级AI智能体平台技术评测:9款产品架构差异与生产落地能力分析
  • 2025-2026年全球美国移民公司评测:五家口碑服务推荐对比顶尖 - 十大品牌推荐
  • 【3步修复】华硕游戏本色彩配置文件丢失解决方案
  • 响课科技创始人李波指出:2026年是GEO爆搜玩法,要让Ai主动推荐您的企业、品牌、产品 - 速递信息
  • Claude Code--Ubuntu Linux超详细配置教程(附每步的可能报错及解决方法)
  • 遥控台灯方案开发案例,主控芯片8位MCU
  • 朝花夕拾:好题汇总
  • 2025-2026年国内十大移民机构评测:五家口碑服务推荐评价盘点 - 十大品牌推荐
  • 我的闲置 N5105 已封神!ESXi + 飞牛 NAS + 内网穿透,手搓小程专属全能云服务器
  • 什么是CPQ—CPQ生产报价管理 | 数字化报价解决方案
  • 基于 HT for Web 的机车整备场数字孪生系统技术实现
  • 2026年只会SpringBoot 和只会CRUD的Java 人第一批被优化,Java后端正在被Java AI 算法工程化 替代 【Java PyTorch深度学习】PyTorch On Java
  • 净化率≥95%:活性炭吸附箱废气处理成功案例 - 速递信息
  • C语言完美演绎6-18
  • 不再依赖翻译专员:跨马翻译让运营人员也能独立完成高质量多语言出图
  • 太空垃圾清理算法:近地轨道debug生死时速
  • 金融级数据底座:高频交易与防勒索架构解析
  • 全电发票普及,智蜂AI智能代账助力合规与高效
  • 2026 年 AI 寒冬:只会 SpringBoot 全部优化裁掉,公司上线 Java+AI 流水线,3 个人干原来 10 个人的活【Java PyTorch 深度学习】PyTorch On Java
  • 突破视频内容壁垒:B站视频转文字的智能解决方案
  • Claude封号潮下的开发者生存指南:从源码泄露到合规中转的全解析
  • 梦幻动漫魔法工坊效果实测:对比不同提示词的生成差异