AI生成不重复题目
鱼友们怎么实现的AI生成不重复题目呀,比如执行两次生成,每次生成3道题目,几乎都是重复的。 刚开始让AI生成,定义了一个全局缓存,所有请求共享一个缓存(如图一),想着先实现不重复题目,一个应用请求时效果还可以,但是两个应用混合后,肯定会有问题,测试发现在计算机网络应用中生成了操作系统的题,题还是缓存中的题。改进是根据不同请求实现不同的session,然后拼接到userPrompt中,最后效果还可以,部分还需要调试,比之前批次都是重复好很多。
▼json复制代码[{"title":"哪种协议使用三次握手建立连接?","options":[{"score":1,"value":"TCP","key":"A"},{"score":0,"value":"UDP","key":"B"},{"score":0,"value":"ICMP","key":"C"},{"score":0,"value":"ARP","key":"D"}]}, {"title":"IPv4地址的默认子网掩码长度是多少位?","options":[{"score":0,"value":"16","key":"A"},{"score":1,"value":"32","key":"B"},{"score":0,"value":"64","key":"C"},{"score":0,"value":"128","key":"D"}]}, {"title":"MAC地址工作在OSI模型的哪一层?","options":[{"score":1,"value":"数据链路层","key":"A"},{"score":0,"value":"网络层","key":"B"},{"score":0,"value":"传输层","key":"C"},{"score":0,"value":"应用层","key":"D"}]}, {"title":"千兆以太网的标准传输速率是多少?","options":[{"score":0,"value":"100 Mbps","key":"A"},{"score":1,"value":"1 Gbps","key":"B"},{"score":0,"value":"10 Gbps","key":"C"},{"score":0,"value":"100 Gbps","key":"D"}]}, {"title":"哪种协议通常用于大文件传输?","options":[{"score":0,"value":"HTTP","key":"A"},{"score":1,"value":"FTP","key":"B"},{"score":0,"value":"SMTP","key":"C"},{"score":0,"value":"DNS","key":"D"}]}, {"title":"哪种协议提供拥塞控制机制?","options":[{"score":1,"value":"TCP","key":"A"},{"score":0,"value":"UDP","key":"B"},{"score":0,"value":"ICMP","key":"C"},{"score":0,"value":"ARP","key":"D"}]}, {"title":"IPv6地址的地址空间是多少?","options":[{"score":0,"value":"32位","key":"A"},{"score":1,"value":"64位","key":"B"},{"score":0,"value":"128位","key":"C"},{"score":0,"value":"256位","key":"D"}]}, {"title":"网卡工作在OSI模型的哪一层?","options":[{"score":0,"value":"物理层","key":"A"},{"score":1,"value":"数据链路层","key":"B"},{"score":0,"value":"网络层","key":"C"},{"score":0,"value":"传输层","key":"D"}]}, {"title":"千兆以太网的标准传输速率是多少?","options":[{"score":0,"value":"100 Mbps","key":"A"},{"score":1,"value":"1 Gbps","key":"B"},{"score":0,"value":"10 Gbps","key":"C"},{"score":0,"value":"100 Gbps","key":"D"}]}, {"title":"哪种协议通常用于批量文件传输?","options":[{"score":0,"value":"HTTP","key":"A"},{"score":1,"value":"FTP","key":"B"},{"score":0,"value":"SMTP","key":"C"},{"score":0,"value":"DNS","key":"D"}]}, {"title":"哪种协议在传输层提供流量控制和拥塞控制?","options":[{"score":1,"value":"TCP","key":"A"},{"score":0,"value":"UDP","key":"B"},{"score":0,"value":"ICMP","key":"C"},{"score":0,"value":"ARP","key":"D"}]}, {"title":"IPv6地址的长度是多少位?","options":[{"score":1,"value":"128位","key":"A"},{"score":0,"value":"32位","key":"B"},{"score":0,"value":"64位","key":"C"},{"score":0,"value":"256位","key":"D"}]}, {"title":"哪种协议在传输层提供可靠的数据传输服务?","options":[{"score":1,"value":"TCP","key":"A"},{"score":0,"value":"UDP","key":"B"},{"score":0,"value":"ICMP","key":"C"},{"score":0,"value":"ARP","key":"D"}]}]
▼Java复制代码@PostMapping("/ai_generate") public BaseResponse<List<QuestionContentDTO>> aiGenerateQuestion( @RequestBody AiGenerateQuestionRequest aiGenerateQuestionRequest,HttpServletRequest request) { ThrowUtils.throwIf(aiGenerateQuestionRequest == null, ErrorCode.PARAMS_ERROR); // 获取参数 Long appId = aiGenerateQuestionRequest.getAppId(); int questionNumber = aiGenerateQuestionRequest.getQuestionNumber(); int optionNumber = aiGenerateQuestionRequest.getOptionNumber(); // 获取应用信息 App app = appService.getById(appId); ThrowUtils.throwIf(app == null, ErrorCode.NOT_FOUND_ERROR); // 获取当前用户的Session // 使用应用ID和用户ID组合作为key long id=userService.getLoginUser(request).getId(); String cacheKey = "generatedTitles_" + appId + "_" + id; HttpSession session = request.getSession(); // 从Session中获取已生成的题目标题集合 @SuppressWarnings("unchecked") Set<String> userGeneratedTitles = (Set<String>) session.getAttribute(cacheKey); if (userGeneratedTitles == null) { userGeneratedTitles = ConcurrentHashMap.newKeySet(); // 使用线程安全的Set session.setAttribute(cacheKey, userGeneratedTitles); } // 打印当前用户的缓存大小(仅用于调试) log.info("应用{}的缓存历史题目数量: {}", appId,userGeneratedTitles.size()); // 封装 Prompt // 打印部分历史题目(用于调试) if (!userGeneratedTitles.isEmpty()) { log.info("应用{}的缓存部分历史题目: {}",appId, String.join("\n", userGeneratedTitles.stream().limit(10).collect(Collectors.toList())) + (userGeneratedTitles.size() > 10 ? "\n..." : "")); } String userMessage = getGenerateQuestionUserMessage(app, questionNumber, optionNumber)+ "\n\n【重要提示】:生成的新题目不能和以下题目相似或重复,需要发散思维:\n" + String.join("\n", userGeneratedTitles.stream().limit(50).collect(Collectors.toList())); log.info("用户消息{}",userMessage.toString()); // AI 生成 String result = aiManager.doSyncRequest(GENERATE_QUESTION_SYSTEM_MESSAGE, userMessage, null); log.info("生成的新问题{}",result.toString()); // 解析结果 List<QuestionContentDTO> newQuestions = parseAiResult(result); // 更新全局缓存(仅存储标题) for (QuestionContentDTO question : newQuestions) { if (question.getTitle() == null) { log.warn("题目 title 为 null: {}", question); // 打印整个对象 } else { userGeneratedTitles.add(question.getTitle()); } } // 更新Session中的缓存 session.setAttribute(cacheKey, userGeneratedTitles); return ResultUtils.success(newQuestions); } // 解析AI返回结果 private List<QuestionContentDTO> parseAiResult(String result) { try { int start = result.indexOf("["); int end = result.lastIndexOf("]"); String json = result.substring(start, end + 1); return JSONUtil.toList(json, QuestionContentDTO.class); } catch (Exception e) { throw new BusinessException(ErrorCode.SYSTEM_ERROR, "解析AI生成结果失败"); } }
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
内容推荐
在AI答题应用平台这里加入了模拟面试,后端在接口文档中实现的很简单,但是前端不怎么会,需要从Next.js转换到vue,结合AI加调试,也是实现了转换。目前遇到的问题很多,还好都解决了。白天优化一下聊天界面。(1)创建模拟页面表单明明填好了,但是点击提交为空。(form表单应该使用field不用name)(2)AI生成的聊天界面,点击发送后,无响应,调试发现输入为空,最后使用输入框的动态绑定。(3
5
鱼答答
2
AI超级智能前端本地运行教程
6
在做ai答题平台的时候,上线前端项目为什么访问是空的?本地是正常的,是除了改request.ts还有什么要改吗?这样应该是上线成功了吧?
1
目前AI零代码生成平台做到第五期。前几期总结:1、该项目可以看作是AI智能体项目的扩展,将AI智能体项目中所涉及的AI的特性,在完整的项目中运用。2、用户模块和云图库基本一致,所以这一块直接复制代码,不再重新开发,区别在于持久层从mp换成了mf,但是差别不大。本项目的前端部分,大部分都是利用AI生成的,这里也体现出了提示词的重要性,会向AI提问和不会提问,差别很大。如果不使用AI生成,完全手写前端
1
作者分享
base北京,著名汽车公司二面ai开发岗
1.flask和fastapi的区别,比如处理100个人请求发生什么
2.索引结构,b+和b的区别
3.索引优化器知道吗
4.实习,意图识别咋做的,意图识别返回的结果有什么,哪里用到多模态模型了
5.大模型成本怎么考虑的,怎么接入的各个模型(有的是请求,有用到框架封装agno框架)
5.知道prompt cache吗(头一次听)这个学到可以写在简历上了,也是优化成本的方式。https://mp.weixin.qq.com/s/T0ZxPsLIX6UjjjcAT0xknw
6.又深入聊项目,微信场景下ai会不会艾特人(会),给内容生成agent的上下文有哪些,内容生成为什么不是多模态的(有多模态处理的消息,有意图识别的reason就够了)
7.知道deepwiki吗,不知道。https://mp.weixin.qq.com/s/bTH63QC7GJc-cVbRKJ6yng
8.场景设计题,庞大的项目,如何设计agent生成项目说明文档供入职新人使用。(原来这就是deepwiki啊)。有什么难点(查找速度,内容生成(读的东西太多了怎么办))。
9.反问,业务,请教面试中的难题。
反思,面试收获非常大,面试官非常非常有水平。从项目技术栈入手,拷打项目,谈到降低成本时,面试官随口问了提示缓存(自己应该大胆猜测一下prompt cache是做什么的,还是自己太菜了,要大胆猜测),在引入设计题之前问我deepwiki知道吗,好多不知道的东西,但是都和当前/下一个问题层层递进的。
收获非常大!!https://www.cnblogs.com/wJiang/p/19130652
10.反问的时候可以问如何接触学习到这些ai知识吗,因为实习工作时,是为了实现业务领域学习的(他们肯定也是因为业务需要学习到的),自己没有注意过和我不怎么相干的知识,问到ai陌生知识几率会很大。
最后,举一反三吧,根据需求文档如何生成技术方案,需要怎么做
8
新鲜二面ai面试题,头疼🤕
1
杭州xxxxxxx,ai全栈开发一面面经(后续,一面是通过的,问我多久可以入职。boss投的是社招,给面试的原因以为我是实习,不能很快入职于是没二面)
1.上来三个问题,怎么评测实习项目大模型的输出质量,sse输出中断后怎么处理,实习中大模型幻觉遇到过吗,怎么处理的。
2.实习中的上下文工程怎么做的,和别人不一样地方在哪。
3.大模型除了速度,准确性还有其他考虑的指标没
4.rag实现过吗,需要准备那些数据库表呢?
5.数据量很大时,如何快速进行检索呢?
6.上传文件进行rag时需要注意什么,预处理怎么做的
7.怎么保证大模型的结构化输出,答框架自带的,设置后,可以不在提示词里写,追问如果是你怎么实现呢,除了提示词以外
8.好的提示词应该包括哪些部分,怎么样去优化的
9.如何进行大模型选型的,为什么选贵的大模型gpt5等
10.聊聊实习中的定时任务,怎么通过对话的形式,和大模型聊天实现一个定时任务呢,prompt,工具调用写入定时任务
11.聊聊并发,项目并发量高吗,怎么做的
像豆包一些,请求量很高,怎么提高它的并发处理能力呢。
12.了解过微调吗
14.大模型的输入做保护了吗?Advisor,护轨!!
13.怎么学习一个新语言
14.自己平时有没有主动复习过软件工程的基础知识呢
15.未来规划
16.反问业务,是做ai销售。
补:问到了项目中kafka消费消息怎么做的,消息积压怎么办
11
顺丰一面20分钟面经
1.说一下实习的工作
2.介绍一下java
3.jvm调优有没有做过
4.数据库死锁例子怎么解决
5.分库分表做过吗,介绍一下
3
求助鱼友和鱼皮大大,Taro框架开发小程序播放视频功能,怎么做的呀,有什么教程学习嘛或者直接可以用的工具吗,我是后端,现在还要做小程序🤯,一点都不懂,🆘
1
