需准备500~5000字含多类实体的长文本,部署带知识库权限的dify环境;配置workflow启用ner提取,用结构化提示词调用llm输出标准json;经code node清洗为扁平化知识条目;最后通过knowledge base node直连写入或导出utf-8无bom的jsonl文件手动导入。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

准备待处理的长文本与Dify环境
你需要一段含有多个人名、地名、组织机构、时间、事件等关键信息的长文本(如新闻稿、会议纪要、法律合同),并确保已部署或接入可调用API的Dify实例,且拥有知识库写入权限。
文本长度建议在500~5000字之间;过短则NER识别无意义,过长需先分段——Dify原生NER模块对单次输入有约4096 token上限,超限会截断导致实体丢失。
配置Dify工作流启用NER提取能力
登录Dify控制台 → 进入【Workflow】→ 新建空白工作流 → 拖入「Text Input」节点作为入口。
添加「LLM Node」节点,选择支持结构化输出的大模型(如Qwen2.5-7B-Instruct或dify-llm-ner-v1),在提示词(Prompt)中明确要求以JSON格式返回识别结果:
“请从以下文本中严格提取所有【人名】【地名】【组织名】【时间表达式】【事件关键词】,每类最多返回10个,按如下格式输出:{"persons": ["张三"], "locations": ["北京市"], "organizations": ["国家发改委"], "times": ["2025年10月"], "events": ["政策修订"]}。不要任何解释、不要省略引号、不要换行。”
【必须关闭“自动补全”和“流式响应”开关】,否则JSON结构会被截断或插入非法字符,导致后续解析失败。
将NER结果清洗为标准知识条目格式
在LLM Node后接一个「Code Node」,使用Python脚本完成字段校验与格式转换:
① 用json.loads()解析LLM输出,捕获KeyError或JSONDecodeError异常;
② 遍历每个实体类型列表,对每个实体字符串执行.strip()去首尾空格,并过滤掉空字符串或纯符号项(如“——”、“///”);
③ 将每个实体构造成独立知识条目:{"content": "张三", "metadata": {"entity_type": "person", "source_doc_id": "doc_20261021_001"}};
④ 合并全部条目为一个list,赋值给output变量传递至下一节点。
这一步不可跳过——Dify知识库导入接口只接受扁平化的条目列表,不接受嵌套JSON结构。
批量写入Dify知识库
方法一:通过「Knowledge Base Node」直连写入
在Code Node后添加「Knowledge Base Node」,下拉选择目标知识库,勾选“自动创建新文档”,点击保存即可触发入库。
方法二:导出JSONL文件后手动上传
在Code Node中加入file.write()逻辑,将output列表逐行写入临时文件,每行一个JSON对象;下载该文件 → 进入Dify【Knowledge Base】→ 【Import】→ 选择CSV/JSONL → 上传 → 确认列映射(content→content,metadata→metadata)→ 开始导入。
【注意:JSONL文件必须为UTF-8无BOM编码,否则中文metadata会显示为乱码】











