需聚焦实体识别与关系抽取:一、本地部署Qwen2.5-7B-Instruct+Open WebUI交互抽取;二、调用DashScope API远程生成JSON三元组;三、利用函数调用机制定制流程;四、Prompt Engineering+批量预处理离线抽取。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您希望利用通义千问模型从非结构化文本中自动生成知识图谱,则需聚焦于实体识别与关系抽取两个核心环节。以下是实现该目标的多种可行路径:
一、使用Qwen2.5-7B-Instruct模型本地部署+Open WebUI交互抽取
该方法依托轻量级但高指令遵循能力的Qwen2.5-7B-Instruct模型,在本地GPU设备上运行,通过可视化界面提交提示词,直接输出结构化三元组,适用于中小规模文本批量处理。
1、准备一台搭载RTX 3060或更高显卡的机器,安装vLLM推理框架与Open WebUI;
2、下载Qwen2.5-7B-Instruct的GGUF量化版本(如Q4_K_M),体积约4GB,确保显存充足;
3、在Open WebUI中加载模型,并配置系统提示词:“你是一个严格的知识图谱抽取器。请从用户输入的文本中提取所有(主语,谓语,宾语)形式的三元组,每行一个,格式为‘实体1-关系-实体2’,不添加任何解释、标点或编号。”;
4、输入示例文本:“HashMap线程不安全,ConcurrentHashMap通过分段锁保证并发安全;二者都实现了Map接口。”;
5、检查返回结果是否包含HashMap-具有特性-线程不安全、ConcurrentHashMap-采用机制-分段锁、HashMap-实现接口-Map等合规三元组;
6、将全部输出保存为纯文本文件,后续可清洗后导入Neo4j或Apache AGE等图数据库。
二、调用通义千问API进行远程三元组生成
该方法无需本地部署模型,依赖阿里云DashScope平台提供的标准化API服务,适合已有开发环境且需快速集成至业务系统的场景,支持JSON格式强约束输出。
1、登录阿里云DashScope控制台,开通通义千问文本生成服务,获取专属API Key;
2、在Python环境中安装openai兼容SDK:pip install -U dashscope;
3、构造请求体,设置response_format为"json_object",并在prompt中明确指定输出结构:“仅返回JSON数组,每个元素为{'subject':'','predicate':'','object':''},不得包含其他字段或说明”;
4、发送HTTP POST请求至https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation,携带文本与参数;
5、解析响应体中的choices[0].message.content字段,提取JSON数组;
6、验证返回内容是否为合法JSON且每项含三个键,关键字段值必须为非空字符串,例如{"subject":"孔子","predicate":"字号","object":"仲尼"}。
三、结合函数调用(Function Calling)机制定制抽取流程
该方法利用Qwen2.5-7B-Instruct原生支持的工具调用能力,将实体关系抽取封装为可注册函数,由模型自主决定是否触发及传入参数,提升结构化输出稳定性与可控性。
1、定义函数schema,声明名为extract_triples的函数,接受text: string参数,返回list[dict],每个dict含subject、predicate、object字段;
2、在系统提示中写明:“你只能通过调用extract_triples函数完成任务,不可自行生成文本。若用户未提供文本,则拒绝响应。”;
3、向模型发送用户消息,附带待处理文本;
4、捕获模型返回的function_call字段,确认其name为extract_triples且arguments为合法JSON字符串;
5、执行本地函数逻辑,对arguments进行JSON解析,并执行规则校验,例如确保subject与object长度大于1、predicate不属于停用关系集;
6、将清洗后的三元组列表作为最终响应返回,其中每条三元组必须满足主谓宾语义完整且实体真实存在。
四、基于Prompt Engineering + 批量文本预处理的离线抽取方案
该方法适用于无GPU资源、仅具备CPU服务器或笔记本的用户,通过精心设计的多步提示模板,配合文本切片与重试机制,在通用计算环境下达成可用精度。
1、将原始长文档按语义段落切分为≤512字符的片段,避免超出模型上下文限制;
2、为每个片段构造独立prompt:“请严格按以下格式提取三元组:【实体A】-【关系】-【实体B】。只输出三元组,不要编号、不要解释、不要换行。若无可提取内容,请返回‘无’。”;
3、使用requests库循环调用DashScope API,对每个片段发起请求,设置timeout=30s、max_retries=2;
4、收集全部响应,过滤掉含“无”或空行的结果,对剩余行做正则清洗:提取方括号内内容并去首尾空格;
5、校验每行是否匹配正则模式r'【([^】]+)】-【([^】]+)】-【([^】]+)】',未匹配项标记为异常待人工复核;
6、合并所有有效行,去重后生成CSV文件,列名为subject,predicate,object,其中重复三元组将导致图谱边冗余,必须执行哈希去重。


















