做编程的 网站,wordpress 评论 倒序,windows2008网站,家居企业网站建设公司前言
大模型的多轮问答难点就是在于如何精确识别用户最新的提问的真实意图#xff0c;而在常见的使用大模型进行多轮对话方式中#xff0c;我接触到的只有两种方式#xff1a;
一种是简单地直接使用 user 和 assistant 两个角色将一问一答的会话内容喂给大模型#xff0c…前言
大模型的多轮问答难点就是在于如何精确识别用户最新的提问的真实意图而在常见的使用大模型进行多轮对话方式中我接触到的只有两种方式
一种是简单地直接使用 user 和 assistant 两个角色将一问一答的会话内容喂给大模型让它能够结合最新的问题靠自己去理解用户的最新的问题的含义。另外一种方式是在会话过程中将历史的问题进行维护再使用另外一个大模型结合最新的问题去理解用户当前的意图。
两种方式都可以但是在我目前的业务上我目前使用的是后者因为比较容易实现效果也不错。
第一种方式
这是使用的是 qwen 的多轮问答 api 要使用这一种方式需要维护一个相当长的历史会话记录 messages 而且要保证 messages 中的 user/assistant 消息交替出现这是一个必须要遵循的条件如果是碰到异常必须要对 messages 中最后的无效对话进行清理。这里就是将理解用户意图和解决用户的问题都混在了一块对于我要做的业务回答内容的不确定性太高而且实现成本也高需要在会话中加入大量业务代码所以果断放弃了。
这里的代码主要实现了一个简易地关于烹饪的对话只有两轮实现逻辑比较简单写的比较粗糙理解意思即可。
def multi_round():messages [{role: system, content: 你是一个绝佳的烹饪助手},{role: user, content: 如何做西红柿炖牛腩}]response Generation.call(modelqwen-turbo, messagesmessages, result_formatmessage)if response.status_code HTTPStatus.OK:print(response)messages.append({role: response.output.choices[0][message][role],content: response.output.choices[0][message][content]}) # 将assistant的回复添加到messages列表中else:print(response.message)messages messages[:-1] # 如果响应失败将最后一条user message从messages列表里删除确保 user/assistant 消息交替出现messages.append({role: user, content: 不放糖可以吗}) # 将新一轮的user问题添加到messages列表中response Generation.call(modelqwen-turbo, messagesmessages, result_formatmessage, )if response.status_code HTTPStatus.OK:print(response)messages.append({role: response.output.choices[0][message][role],content: response.output.choices[0][message][content]}) # 将第二轮的assistant的回复添加到messages列表中else:print(response.message)messages messages[:-1] # 如果响应失败将最后一条user message从messages列表里删除确保 user/assistant 消息交替出现
第二种方式
在我所做地业务中对于 assistant 的回复不关心主要关心的是用户的问题所以我只关注 user 的历史提问在实现的时候只需要维护一个列表 history始终将最新的用户提问追加即可为了保证列表信息的有效性我始终只维护最后 10 个问题。我这里使用 qwen-max 模型对历史提问进行总结并且按照我要求的方式进行输出。也就是说这个模型只负责总结历史问题对于业务问题的回答是其他大模型干的事情任务分工明确就减少了不确定性。
app.route(/get_last_question, methods[POST])
def get_last_question():global user_datalogging.info(-*20)data request.get_json()if question not in data or not data[question] or userId not in data or not data[userId]:return 无法理解或者无法解决请重新输入问题question data[question]userId data[userId]try:user_data load_data(config) # 加载用户数据if userId not in user_data:user_data[userId] []user_data[userId].append(question) # 获取 userId 对应的历史对话记录user_data[userId] user_data[userId][-10:] # 只保留历史上 10 个对话记录logging.info(f正在解析用户 【{userId}】 意图问题历史是 {user_data[userId]}...\n\n)history user_data[userId]history_str if len(history)1:history_str 历史上我依次提问了以下问题\nfor i,h in enumerate(history[:-1]):history_str f时间 10:06:0{i1} 问题是 {h}\nelse:history_str 目前暂无用户提问历史记录。messages [{role: system,content: 您是一名善于从历史提问中分析用户的最新意图的助手请根据提问历史记录分析并总结用户的最新问题的完整意图。},{role: user,content: f根据提问历史记录分析并总结用户的最新问题的完整意图。不要做冗余的解释或者赘述。如果用户提出的问题语义模糊不清无法识别可以直接返回空字符串。答案的模板必循遵循“【{{我的最新的问题描述}}】”总结出来的问题还必须要满足下面的要求:\nf1、如果用户的问题查询的是“杭州市”或者“杭州”范围的数据一律使用“全市”进行替换因为业务数据范围默认就是全杭州市的数据所以无需重复再提起但是我们不对包含“杭州市”或者”杭州“字符串的单位名称进行任何处理因为单位名称具有独特的含义。\nf2、用户的简短问题或者意图模糊的提问如‘2024年呢’等通常是对之前历史问题的追问或者补充请根据历史问题记录推断出完整的问题。\nf例子\nf输入的历史问题列表是:\n f时间 2024-6-6 问题是升序统计2023年各项目类型下管线项目计划数和计划投资金额\n f我最新的问题是统计杭州市2023年管线和管廊建设计划的执行率\nf经过分析历史问题列表发现最新的问题和前面的问题关系不大所以直接最后总结出来的问题是 “统计杭州市2023年管线和管廊建设计划的执行率” 从问题中可以看出要查询杭州市范围的数据按照要求我们知道默认数据范围就是全杭州市所以要用”全市“进行替换所以输出结果为“【统计全市2023年管线和管廊建设计划的执行率】”。\nf例子\nf输入的历史问题列表是: \nf时间 2024-6-6问题是升序统计杭州市2023年各项目类型下管线项目计划数和计划投资金额\nf我最新的问题是2024年呢\nf经过分析发现列表中最新的问题和前面的问题关系有联系所以经过分析最后总结出来的问题是 “升序统计杭州市2024年各项目类型下管线项目计划数和计划投资金额” 从问题中可以看出要查询杭州市范围的数据按照要求我们知道默认数据范围就是全杭州市所以要用”全市“进行替换所以输出结果为“【升序统计全市2024年各项目类型下管线项目计划数和计划投资金额】”。\nf例子\nf输入的历史问题列表是: \nf时间 2024-6-6问题是升序查询杭州市2023年权属单位是杭州市政府的管线信息\nf我最新的问题是问题是2024年呢\nf经过分析发现列表中最新的问题和前面的问题关系有联系所以经过分析最后总结出来的问题是 “升序查询杭州市2024年权属单位是杭州市政府的管线信息” 从问题中可以看出要查询杭州市范围的数据按照要求我们知道默认数据范围就是全杭州市所以要用”全市“进行替换所以输出结果为“【升序查询全市2024年权属单位是杭州市政府的管线信息】”我们不对包含“杭州市”或者”杭州“字符串的单位名称进行任何处理。\nf\n{history_str}\n现在我的最新的问题是 “{history[-1]}” 请严格遵守上述要求并总结出用户的最新问题并给出完整的意图并简要介绍思考过程。}]logging.info(f总结用户最新意图 prompt {messages})response Generation.call(modelqwen-max-0428, messagesmessages, result_formatmessage)resp response.output.choices[0][message][content]logging.info(f用户最新意图是{resp})g re.search(r【.*】, resp)if g:resp g.group().replace(【, ).replace(】, )save_data(user_data, config)return respreturn except Exception as e:logging.info(提取总结最新的问题过程中报错)logging.error(e)return
那么我们该如何学习大模型
作为一名热心肠的互联网老兵我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
一、大模型全套的学习路线
学习大型人工智能模型如GPT-3、BERT或任何其他先进的神经网络模型需要系统的方法和持续的努力。既然要系统的学习大模型那么学习路线是必不可少的下面的这份路线能帮助你快速梳理知识形成自己的体系。
L1级别:AI大模型时代的华丽登场 L2级别AI大模型API应用开发工程 L3级别大模型应用架构进阶实践 L4级别大模型微调与私有化部署 一般掌握到第四个级别市场上大多数岗位都是可以胜任但要还不是天花板天花板级别要求更加严格对于算法和实战是非常苛刻的。建议普通人掌握到L4级别即可。
以上的AI大模型学习路线不知道为什么发出来就有点糊高清版可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】 二、640套AI大模型报告合集
这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。 三、大模型经典PDF籍
随着人工智能技术的飞速发展AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型如GPT-3、BERT、XLNet等以其强大的语言理解和生成能力正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。 四、AI大模型商业化落地方案 作为普通人入局大模型时代需要持续学习和实践不断提高自己的技能和认知水平同时也需要有责任感和伦理意识为人工智能的健康发展贡献力量。