OPEN-AI 回答超过最大限制问题

场景

之前我们测试了数据分析师,后端开发机器人都没有什么问题,但是我无法保证用户会导入什么,所以我们为了测试我们产品的最大承受限度,以确保我们的核心竞争力,我们将三国演义全本导入了进去,三国演义全本接近2000页,我们训练了二十多分钟之后才训练完毕(全程我的机子呼呼呼的响)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
先问一个维度的问题:
在这里插入图片描述
回答没有问题:

测试-知识检测

曹仁,字子孝,是曹操的堂弟,曹魏的重要将领。他生于公元168年,卒于223年,籍贯为沛国谯县(今安徽省亳州市)。曹仁擅长军事,勇猛善战,多次为曹操立下战功,是曹魏阵营中的核心人物之一。他长期担任曹操的亲信将领,多次参与对外征战和镇压叛乱。

具体来说,曹仁在曹魏阵营中发挥了如下重要作用:

在樊城的战争中,曹仁积极备战面对关羽的进攻,尽管遭遇挫折,他依然表现出了卓越的统帅能力。
在面对关羽的对战中,尽管多次受挫,他的战术和勇敢得到了普遍认可。
曹操曾称赞曹仁为“真忠臣”,并授予他江夏太守的重任。
综上所述,曹仁在三国时期是一个重要的军事将领,因其忠勇和军事才能在曹魏政权中占有重要位置。

然后在一个问题中问出了多个维度的问题
在这里插入图片描述

三国演义讲述了什么故事?马超怎么归降刘备的?高平陵政变的经过?文鸯是谁?三国演义的结局是什么?

我们有些客户要求使用的是chatgpt的这个模型,报错了:

openai.BadRequestError: Error code: 400 - {'error': {'message': "This model's maximum context length is 128000 tokens. However, your messages resulted in 185116 tokens. Please reduce the length of the messages.", 'type': 'invalid_request_error', 'param': 'messages', 'code': 'context_length_exceeded'}}

思考和解决方案

虽然我们的document已经很好的对文本做了切割,但是跨维度查询还是会造成一次查到很多文本,在用户不愿意削减查询力度的情况,,document方案已经无力回天!面对这种情况,我们应该对消息进行切割以确保每次传入的Token不大于规定的Token数目,但是我们同时也必须保持消息的连贯性。
所以我们应该做到以下三点:

1.估算消息长度:我们引入了一个 count_tokens方法来估算消息内容的长度。
2.分割过长的消息:当发现单条消息长度超过最大限制时,将其内容按最大长度进行切割,并为每个切割后的部分保留原始的 role 信息。
3.管理批次:在添加消息时,实时计算当前批次的长度。如果当前批次的长度加上新消息的长度超过最大限制,将当前批次保存并创建一个新的批次。

我们按照批次请求,请求完毕之后将回答汇总(调用汇总llm模型),就可以正确输出答案了。

结果

可以正常回答了(回答还是相当专业的):
在这里插入图片描述
答曰:

测试-知识检测

《三国演义》是一部历史小说,主要讲述了东汉末年到晋朝统一之间,魏、蜀、吴三国的兴衰历史。小说通过描写英雄豪杰的故事,展现了那个时期的战争和政治斗争。

马超归降刘备的过程
根据相关原文片段:

忽报荆州刘皇叔遣人赍书至
超拆视之书略曰: “伏念汉室不幸
操贼专权
欺君罔上
黎民凋残
备昔与令先君同受密
诏
誓诛此贼
今令先君被操所害
此将军不共天地、不同日月之仇也
若能率西凉之兵
以攻操之右
备当举荆襄之众
以遏操之前:则逆操可擒
奸党可灭
仇辱可报
书不尽言
立待回音
马超看毕
即时挥涕回书
发使者先回
随后便起西凉军马
正欲进发
忽西凉太守韩遂使人请马超往见
马超在西凉州举兵反曹操,但最终失败。之后,马超与刘备接触,决定归降刘备,并在诸葛亮的协助下,正式投降刘备。

高平陵政变的经过
根据相关原文片段:

岁魏景初三年春正月下旬也
当下司马懿、曹爽
扶太子曹芳即皇帝
位
芳字兰卿
乃睿乞养之子
秘在宫中
人莫知其所由来
于是曹芳谥睿为明帝
葬于高平陵;尊郭皇后为皇太后;改元正始元年
司马懿与曹爽辅政
爽事懿甚谨
一应大事
必先启知
爽字昭伯
自幼出入宫中
明帝见爽谨慎
甚是爱敬
高平陵政变是司马懿与曹爽之间的权力斗争。司马懿在曹爽出城祭祀时发动政变,控制了洛阳,并将曹爽除去,最终巩固了自己的权力。

文鸯是谁
根据相关原文片段:

其父立陛下为君
功德不在周公之下;臣事陛下
亦与伊尹何别乎
今反以恩为仇
以功为过
欲与二三小臣
谋害臣兄弟
”芳曰:“朕无此心
”师袖中取出汗衫
掷之于地曰:“此谁人所
作耶
亮为武乡侯
领益州牧
葬先主于惠陵
谥曰昭烈皇帝
尊皇后吴氏为皇太后;谥甘夫人为昭烈皇后
糜夫人亦追谥为皇后
文鸯是三国时期曹魏将领文钦的儿子,因勇猛善战而闻名。在父亲文钦被司马氏所杀后,文鸯与弟弟文虎逃至吴国。

三国演义的结局
根据相关原文片段:

于是东吴四州
四十三郡
三百一十三县
户口五十二万三千
官 吏 三 万 二 千
兵 二 十 三 万
男 女 老 幼二百三十万
米谷二百八十万斛
舟船五千余艘
后官五千余人
皆归大晋
大事已定
出榜安民
尽封府库仓禀
陶濬兵不战自溃
《三国演义》的结局是三国归晋,司马氏通过一系列的权谋手段,最终统一了三国,建立了晋朝。

但是有一个坏处,就是切割之后回答特别慢,所以我对其逻辑进行了异步处理,然后等待所有结果生成完毕之后,在调用llm模型,提升了效率

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 21:28:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 21:28:03       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 21:28:03       58 阅读
  4. Python语言-面向对象

    2024-07-13 21:28:03       69 阅读

热门阅读

  1. 数据湖仓一体(六)安装flink

    2024-07-13 21:28:03       21 阅读
  2. 牛客小白月赛96 C-最多数组的数量

    2024-07-13 21:28:03       23 阅读
  3. 3011.判断一个数组是否可以变为有序

    2024-07-13 21:28:03       23 阅读
  4. Spring是如何管理事务的?

    2024-07-13 21:28:03       24 阅读
  5. Kylin的智能优化:Cube自动优化的奥秘

    2024-07-13 21:28:03       18 阅读
  6. ES证书过期替换方案

    2024-07-13 21:28:03       24 阅读
  7. 深度学习调参

    2024-07-13 21:28:03       18 阅读
  8. 算法练习第29天|1005.K次取反后最大化的数组和

    2024-07-13 21:28:03       16 阅读
  9. C++ STL sort用法

    2024-07-13 21:28:03       19 阅读