基于Dify的智能分类方案:大模型结合KNN算法(附代码)

大模型相关目录

大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容
从0起步,扬帆起航。

  1. 大模型应用向开发路径:AI代理工作流
  2. 大模型应用开发实用开源项目汇总
  3. 大模型问答项目问答性能评估方法
  4. 大模型数据侧总结
  5. 大模型token等基本概念及参数和内存的关系
  6. 大模型应用开发-华为大模型生态规划
  7. 从零开始的LLaMA-Factory的指令增量微调
  8. 基于实体抽取-SMC-语义向量的大模型能力评估通用算法(附代码)
  9. 基于Langchain-chatchat的向量库构建及检索(附代码)
  10. 一文教你成为合格的Prompt工程师
  11. 最简明的大模型agent教程
  12. 批量使用API调用langchain-chatchat知识库能力
  13. langchin-chatchat部分开发笔记(持续更新)
  14. 文心一言、讯飞星火、GPT、通义千问等线上API调用示例
  15. 大模型RAG性能提升路径
  16. langchain的基本使用
  17. 结合基础模型的大模型多源信息应用开发
  18. COT:大模型的强化利器
  19. 多角色大模型问答性能提升策略(附代码)
  20. 大模型接入外部在线信息提升应用性能
  21. 从零开始的Dify大模型应用开发指南
  22. 基于dify开发的多模态大模型应用(附代码)
  23. 基于零一万物多模态大模型通过外接数据方案优化图像文字抽取系统
  24. 快速接入stable diffusion的文生图能力
  25. 多模态大模型通过外接数据方案实现电力智能巡检(设计方案)
  26. 大模型prompt实例:知识库信息质量校验模块
  27. 基于Dify的LLM-RAG多轮对话需求解决方案(附代码)
  28. Dify大模型开发技巧:约束大模型回答范围
  29. 以API形式调用Dify项目应用(附代码)
  30. 基于Dify的QA数据集构建(附代码)
  31. Qwen-2-7B和GLM-4-9B:大模型届的比亚迪秦L
  32. 文擎毕昇和Dify:大模型开发平台模式对比
  33. Qwen-VL图文多模态大模型微调指南
  34. 从零开始的Ollama指南:部署私域大模型
  35. 基于Dify的智能分类方案:大模型结合KNN算法(附代码)


需求背景

以政务背景的网上民生为例。
市民需将自己的问题凝炼成标题和文字内容进行上交,政务服务人员需要根据市民上交内容判断负责处理该问题部门进行指派。这实际上是一个分类任务。
该需求的特点如下:
1.分类的内容为自然语言,不似传统AI预测有着明确的特征指标。
2.分类的标准不够清晰,部门之间存在一定的职能重复或问题本身涉及多部门(只是权重不同)。
基于该需求特点,可设计基于大模型和历史案例驱动的指派算法,利用大模型的语义理解和逻辑推理能力,结合历史案例进行指派实现。

解决方案

解决方案:智能案例驱动的指派(Intelligent Case-Driven Dispatch)
提出了智能案例驱动的指派方法。该方法系统应用提示词和思维链技术,并利用大量历史案例动态生成样本指导模型,且无需过分依赖模型推理能力。

  1. 提示词:提供角色说明、任务说明、规则说明等,指导LLM完成智能指派任务。
  2. 思维链:从现有数据中挑选出经典案例,人工书写推理路径,构成思维链,提供从问题推导出指派机构的完整思考逻辑。
  3. 动态少样本生成:通过KNN搜索识别历史案例,对每一个新问题找到它最相关的K个邻居,动态的给出参考案例。
    在这里插入图片描述
    在这里插入图片描述

基于Dify的实际开发代码

在这里插入图片描述
在这里插入图片描述

首先对问题范围进行限定,并压缩用户输入(过长的token对后续的词嵌入有所影响)。
在这里插入图片描述
历史案例如下所示:
在这里插入图片描述
指派参考prompt:

# 角色

- 你是烟台市市民服务热线智能助手。
- 你的任务是参考以往案例分析市民问题应该指派到哪个部门。
# 说明
1. 案例由标题、内容、市民地址、时间、回复部门四部分内容组成。
2. 案例中包含真实的用户问题和回复部门。
3. 案例中描述的地区均属烟台市管辖(也即市教育局、市公安局等指的都是烟台市市直部门,其余区县市部门均属烟台市管辖)。
4. 烟台市现辖5个市辖区,代管6个县级市。市辖区:芝罘区、福山区、牟平区、莱山区、蓬莱区。县级市:龙口市、莱阳市、莱州市、招远市、栖霞市、海阳市。此外,还包括长岛综合试验区、黄渤海新区和高新区。
5. 案例中的回复部门与居民地址高度相关。
6. 仅市直和县级市设有公安局,市辖区无公安局,涉及区级公安局的问题请分配到市直部门**市公安局**# 提示
1. 问题中提及具体地区且用户地址也在该地的,会被优先指派到该地区相关的部门回复。
2. 部分问题由于涉及范围、处理难度等因素,会被分配到市直部分。
3. 市民问题中经常提到的开发区实际指的是黄渤海新区。
# 约束
1. 若案例中出现了相同的问题,请优先指定参考案例中的答复机构。
2. 给出的答复机构名称应与案例中的完全相同。
3. 如果从用户问题中仅给出街道、道路、住宅信息,这些信息又跟历史案例无关,请要求用户澄清地址。
4. **重要**:只给出关于**智能指派**的信息,不回答用户的其他问题。
5. **重要**永远不要给出案例中不存在的部门,若没有可供选择的区级部门,请指派给市直单位。
6. 请按照内容简述、问题分析、参考机构的格式依次输出
7. 若无法根据案例推断出市民问题中涉及的道路、小区、学校等所属的具体地址,请优先指派给市直单位。
# 案例
<Case>
{{#context#}}
<Case/>

在这里插入图片描述
后续为名称对齐功能,此处不再赘述。

### Dify 问题分类代码实现 #### 使用 KNN大模型结合智能分类方案 为了实现基于 Dify智能分类,可以采用如下 Python 实现方式。此方法融合了大型预训练语言模型与 KNN 算法的优势: ```python from sklearn.neighbors import NearestNeighbors import numpy as np import pandas as pd class IntelligentCaseDrivenDispatch: def __init__(self, cases_df: pd.DataFrame, k_neighbors=5): """ 初始化智能案例驱动分发类 :param cases_df: 包含历史案例的数据框,最后一列为标签列 :param k_neighbors: 邻居数量,默认为5 """ X = cases_df.iloc[:, :-1].values y = cases_df.iloc[:, -1].values.reshape(-1, 1) # 训练KNN模型 self.neigh = NearestNeighbors(n_neighbors=k_neighbors) self.neigh.fit(X) # 存储原始数据以便后续使用 self.cases_data = cases_df.copy() self.k_neighbors = k_neighbors def find_similar_cases(self, new_case_features): """ 查找给定新案件最相似的历史案例 :param new_case_features: 新案件特征向量 :return: 返回最近邻索引及其距离 """ distances, indices = self.neigh.kneighbors([new_case_features]) similar_cases_info = [] for idx in indices.flatten(): case_details = { 'index': idx, 'features': list(self.cases_data.iloc[idx][:-1]), 'label': self.cases_data.iloc[idx][-1], } similar_cases_info.append(case_details) return similar_cases_info, distances.tolist()[0] # 创建一个假设性的DataFrame作为测试集 data = {'feature_1': [78, 92, 65, 83], 'feature_2': [85, 76, 90, 88], 'outcome': ['A', 'B', 'C', 'D']} df_test = pd.DataFrame(data=data) dispatcher = IntelligentCaseDrivenDispatch(df_test, k_neighbors=3) # 测试用的新案件特征输入 test_case_feature_vector = [70, 80] similar_cases, dists = dispatcher.find_similar_cases(test_case_feature_vector) print(f"Similar Cases Found:\n{similar_cases}") ``` 上述代码展示了如何构建 `IntelligentCaseDrivenDispatch` 类来处理新的查询请求并返回与其最为接近的历史案例列表[^1]。 此外,在实际部署过程中还需要考虑对大模型的回答范围加以适当限制,从而提高效率并减少不必要的计算开销[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写代码的中青年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值