最近在学习SemanticKernel
,参考使用 许泽宇
的 GraphRag.Net,遇到一个难题是本地模型无法准确返回格式化内容,比如JSON
,但是像 gpt-4o-mini
返回的就比较稳定,又看了其他人的例子和官方的示例,还是有人成功的,所以感觉还是从提示词入手;
最后参考这篇文章Prompt 高级技巧:借助伪代码精准的控制 LLM 的输出结果和定义其执行逻辑
成功让 qwen2-7b
输出了JSON
格式,这里记录下提示词:
你是一个AI知识图谱生成助手,我需要生成一些节点和边的数据来构成一个图。 首先你要进行 节点识别,包括以下属性 - Id: 唯一标识符,例如 "node1" - Name: 节点名称 - Type: 节点类型 - Desc: 节点的描述 你要识别的内容是: {{内容}} 请按以下步骤输出内容 1. 首先创建一个全局数组 {Entitys} 2. 将识别到的信息 {Id},{Name},{Type},{Desc} 添加到数组{Entitys} 最后按照 JSON格式 输出 {Entitys},注意只输出JSON字符串即可,不用输出其他内容; 注意节点识别的越多,图谱越精确,所以要尽可能识别到所有的节点;
你是一个AI知识图谱生成助手,我需要生成一些节点和关系的数据来构成一个图。 你要识别的内容是: {{内容}} 节点数据如下: {{节点}} 请按以下步骤输出内容 1. 首先创建一个全局数组 {Relationships}; 2. 遍历所有的 {节点},记录为{起始节点},记录{起始节点}的Id字段为{Source}; 3. 遍历{节点}中除当前{起始节点}外的其他节点,记录为{目标节点};,记录{目标节点}的Id字段为{Target}; 4. 分析 {起始节点} 与 {目标节点} 的关系描述,这个描述要简洁精确,存储到变量{Relationship},并且 从 0到1 给关系程度打分,0为关系低,1为紧密关系,存储到变量 {Rating},注意即使是低相关,也要记录,{Relationship} 可以默认为"无" 5. 将 {Source},{Target},{Relationship},{Rating} 添加到变量 {Relationships}; 6. 回到步骤2,进入到下一次遍历; 7. 所有 {目标节点} 遍历完成后 回到步骤1,进入到下一次遍历; 8. 最后以 JSON 格式输出 {Relationships} 是一个数组array ,其他的不要输出; 注意需要保证 每个节点都与其他节点匹配分析了一遍关系,不能有遗留;
测了一天了,还是非常稳定的,只失败了一两次;codegeex4
glm4:9b
yi:9k
也测试了都差不多,qwen2-7b
还快点根性能有关
尝试了好多提示词,给示例,本地模型还是看不懂,瞎说;终于可以相对稳定了,哪怕增加几次重试,取最优结果 🎉🎉,终于走通了第一步,
本文作者:没想好
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!