门户网站开发建设技术广州网站建设设计平台
2026/5/24 2:13:32 网站建设 项目流程
门户网站开发建设技术,广州网站建设设计平台,网站开发 进度表,怎么在网上注册自己的网站在本教程中#xff0c;我们将从零开始#xff0c;使用 Ollama 本地大模型#xff08;Qwen2.5:7B#xff09; LangChain Neo4j 图数据库#xff0c;构建一个完整的中文知识图谱系统。整个流程包括#xff1a; 本地部署 Ollama 和 Neo4j#xff08;通过 Docker#xf…在本教程中我们将从零开始使用Ollama 本地大模型Qwen2.5:7BLangChainNeo4j 图数据库构建一个完整的中文知识图谱系统。整个流程包括本地部署 Ollama 和 Neo4j通过 Docker编写自定义 Prompt 提取结构化三元组将结果写入 Neo4j 并可视化所有组件均运行在本地无需联网调用 API适合隐私敏感或离线场景。 一、环境准备1. 安装 Docker如未安装# Ubuntu / Debiansudoaptupdatesudoaptinstalldocker.io -ysudosystemctl startdockersudousermod-aGdocker$USER# 将当前用户加入 docker 组需重新登录# macOS / Windows请安装 Docker Desktop2. 启动 Ollama使用 Dockerdockerrun -d\--gpusall\# 如有 NVIDIA GPU 可加速非必需-p11434:11434\--name ollama\-v ollama:/root/.ollama\ollama/ollama⚠️ 若无 GPU去掉--gpusall即可。然后拉取 Qwen2.5:7B 模型首次运行会自动下载dockerexec-it ollama ollama pull qwen2.5:7b验证是否成功curlhttp://localhost:11434/api/generate -d{ model: qwen2.5:7b, prompt: 你好 }3. 启动 Neo4j使用 Dockerdockerrun -d\--name neo4j\-p7474:7474\-p7687:7687\-v neo4j_data:/data\-v neo4j_logs:/logs\-eNEO4J_AUTHneo4j/your_password\neo4j:5.18✅ 请将your_password替换为你自己的密码例如neo4j123后续代码中需保持一致。访问 http://localhost:7474或你的服务器 IP用用户名neo4j和设置的密码登录。 二、Python 环境依赖创建虚拟环境并安装依赖python -m venv kg-envsourcekg-env/bin/activate# Windows: kg-env\Scripts\activatepipinstalllangchain-ollama\langchain-experimental\langchain-core\neo4j\graphviz 注意graphviz是 Python 包还需安装系统级 GraphvizUbuntu:sudo apt install graphvizmacOS:brew install graphvizWindows: 从 https://graphviz.org/download/ 安装并加入 PATH 三、完整 Python 脚本构建中文知识图谱将以下代码保存为build_kg.pyfromlangchain_ollamaimportChatOllamafromlangchain_experimental.graph_transformersimportLLMGraphTransformerfromlangchain_core.documentsimportDocumentfromlangchain_core.promptsimportChatPromptTemplatefromneo4jimportGraphDatabaseimporttimefromgraphvizimportDigraph# 1. LLM 配置指向本地 OllamallmChatOllama(modelqwen2.5:7b,temperature0,base_urlhttp://192.168.31.161:11434# ← 改为你的服务器 IP 或 localhost)# 2. 自定义中文 Prompt严格约束实体与关系类型custom_promptChatPromptTemplate.from_messages([(system,你是一名专业的中文知识图谱构建专家请严格根据以下文本内容提取结构化的实体与关系。 【提取规则】 1. 实体类型仅限以下四类 - Person人物如 马化腾、张一鸣 - Organization组织或公司如 腾讯、字节跳动、中国科学院 - Location地理位置如 北京、广东省深圳市、长三角 - Product产品或技术如 微信、抖音、鸿蒙系统 2. 关系类型仅限以下六种 - FOUNDEDA 创立了 B例马化腾 --FOUNDED-- 腾讯 - BORN_INA 出生于 B例雷军 --BORN_IN-- 湖北仙桃 - HEADQUARTERED_INA 总部位于 B例阿里巴巴 --HEADQUARTERED_IN-- 杭州市 - DEVELOPEDA 开发了 B例张小龙 --DEVELOPED-- 微信 - CEO_OFA 担任 B 的 CEO仅当明确提及“CEO”、“首席执行官”等职务时使用 - COMMITTED_TOA 致力于 B如企业使命、战略方向需原文明确表述 3. 重要原则 - 所有实体名称必须使用原文中的完整表述不得缩写或改写如“腾讯公司”不能简化为“腾讯”除非原文如此。 - 仅提取文本中**明确陈述**的事实禁止推理、联想或补充常识。 - 若文本未提及某类信息如出生地、CEO则不生成对应关系。 - 不输出任何解释、说明或额外文本仅返回符合格式的三元组。 请基于以下输入文本进行提取 ),(human,{input})])# 3. 图转换器llm_transformerLLMGraphTransformer(llmllm,promptcustom_prompt,allowed_nodes[Person,Organization,Location,Product],allowed_relationships[CEO_OF,BORN_IN,FOUNDED,HEADQUARTERED_IN,COMMITTED_TO,DEVELOPED])# 4. 输入文档中文示例documents[Document(page_content 马化腾Pony Ma是腾讯公司Tencent的创始人兼董事会主席他出生于中国广东省汕头市。 腾讯是一家全球领先的互联网科技公司总部位于中国广东省深圳市。 马化腾还主导了微信WeChat的开发微信是中国最流行的即时通讯与社交平台。 ),]print( 开始提取知识图谱...)graph_documents[]fori,docinenumerate(documents):print(f\n 正在处理第{i1}/{len(documents)}个文档...)start_timetime.time()graph_docllm_transformer.convert_to_graph_documents([doc])graph_documents.extend(graph_doc)print(f✅ 处理完成耗时{time.time()-start_time:.2f}秒)print( 提取的节点)fornodeingraph_doc[0].nodes:print(f-{node.id}({node.type}))print(\n 提取的关系)forrelingraph_doc[0].relationships:print(f-{rel.source.id}--[{rel.type}]--{rel.target.id})# 5. 连接 Neo4j替换为你的实际密码URIbolt://192.168.31.161:7687# ← 改为你的 Neo4j 地址USERNAMEneo4jPASSWORDyour_password# ← 必须与 Docker 启动时一致driverGraphDatabase.driver(URI,auth(USERNAME,PASSWORD))defcreate_graph(tx,graph_doc):# 清空旧数据可选tx.run(MATCH (n) DETACH DELETE n)# 创建节点fornodeingraph_doc.nodes:tx.run(MERGE (n:%s {id: $id})%node.type,idnode.id)# 创建关系forrelingraph_doc.relationships:tx.run( MATCH (source {id: $source_id}) MATCH (target {id: $target_id}) MERGE (source)-[r:%s]-(target) %rel.type,source_idrel.source.id,target_idrel.target.id)print(\n 正在写入 Neo4j...)try:withdriver.session()assession:forgraph_docingraph_documents:session.execute_write(create_graph,graph_doc)print(✅ 写入成功打开浏览器查看图谱http://192.168.31.161:7474)exceptExceptionase:print(f❌ 写入失败{e})print(请检查Neo4j 是否运行密码是否正确网络是否通)# 6. 从 Neo4j 读取并导出为图片deffetch_graph_from_neo4j(tx):resulttx.run( MATCH (a)-[r]-(b) RETURN a.id AS a, labels(a)[0] AS a_type, type(r) AS rel, b.id AS b, labels(b)[0] AS b_type )returnlist(result)defsave_neo4j_graph_as_image(records,filenameknowledge_graph):dotDigraph(formatpng,graph_attr{rankdir:LR})forrinrecords:dot.node(r[a],f{r[a]}\n({r[a_type]}))dot.node(r[b],f{r[b]}\n({r[b_type]}))dot.edge(r[a],r[b],labelr[rel])pathdot.render(filename,cleanupTrue)print(f️ 图谱已保存为{path}.png)# 导出图片withdriver.session()assession:recordssession.execute_read(fetch_graph_from_neo4j)ifrecords:save_neo4j_graph_as_image(records)else:print(⚠️ Neo4j 中无数据跳过图片导出)driver.close()print(\n 全部完成)print( 在 Neo4j 浏览器中运行以下 Cypher 查询查看图形)print(MATCH (n)-[r]-(m) RETURN n, r, m)▶️ 四、运行脚本python build_kg.py预期输出开始提取知识图谱... 正在处理第 1/1 个文档... 处理完成耗时 62.47 秒 提取的节点 - 马化腾 (Person) - 腾讯公司 (Organization) - 中国广东省汕头市 (Location) - 中国广东省深圳市 (Location) - 微信 (Product) 提取的关系 - 马化腾 --[FOUNDED]-- 腾讯公司 - 马化腾 --[BORN_IN]-- 中国广东省汕头市 - 腾讯公司 --[HEADQUARTERED_IN]-- 中国广东省深圳市 - 马化腾 --[DEVELOPED]-- 微信 正在手动写入 Neo4j无APOC问题... 写入成功现在浏览器里一定能看到完整图谱了 全部完成去浏览器 http://192.168.31.161:7474 运行以下查询查看图形 MATCH (n)-[r]-(m) RETURN n,r,m同时在 Neo4j 浏览器中执行MATCH (n)-[r]-(m) RETURN n, r, m即可看到交互式图谱✅ 五、常见问题排查问题解决方案Connection refused检查 Ollama/Neo4j 是否在运行docker psAuthentication failed确认NEO4J_AUTH密码与代码中一致提取结果为空检查 Prompt 是否适配中文尝试temperature0.1Graphviz 报错安装系统级 Graphviz非仅 pip 包IP 地址不对将192.168.31.161改为localhost本地测试 六、扩展建议增加更多文档批量处理添加实体消歧如“马化腾” vs “Pony Ma”使用unstructured库解析 PDF/Word部署为 FastAPI 服务提供 KG 查询接口 结语通过本教程你已经掌握了如何利用开源大模型 图数据库构建端到端的中文知识图谱系统。整个流程完全本地化安全可控适合企业内网或科研场景。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询