网站的内容管理系统公司以前做的免费网站太多 新网站搜索不到

张小明 2025/12/28 7:24:09
网站的内容管理系统,公司以前做的免费网站太多 新网站搜索不到,wordpress301插件,手机网站 html5AI原生应用中的上下文窗口#xff1a;原理、实现与优化 关键词#xff1a;上下文窗口、AI原生应用、大语言模型、token管理、对话连贯性、上下文压缩、长文本处理 摘要#xff1a;本文将用积木盒的比喻拆解AI原生应用中上下文窗口的核心原理——它像…AI原生应用中的上下文窗口原理、实现与优化关键词上下文窗口、AI原生应用、大语言模型、token管理、对话连贯性、上下文压缩、长文本处理摘要本文将用积木盒的比喻拆解AI原生应用中上下文窗口的核心原理——它像AI的短期记忆盒子决定了模型能记住多少对话内容。我们会从生活例子入手解释token文字积木、“上下文窗口”积木盒大小、“上下文管理”整理积木的技巧之间的关系用Python代码实现一个简单的对话历史管理系统演示如何应对积木盒不够大的问题最后探讨优化策略比如给积木做摘要、找关键积木和未来趋势比如更大的积木盒、更聪明的整理方式。无论是AI开发者还是好奇的初学者都能通过本文理解上下文窗口的重要性以及如何让AI记得更准、用得更巧。背景介绍目的和范围在ChatGPT、Claude等AI原生应用中你有没有遇到过这样的情况和AI聊了10分钟后它突然忘记了你前面说的关键信息比如你说我想买红色的鞋子过了几轮对话AI却问你想要什么颜色的鞋子“——这不是AI故意装傻”而是它的短期记忆盒子上下文窗口满了装不下更多内容了。本文的目的是用小学生能听懂的话解释上下文窗口是什么说明它在AI原生应用中的作用为什么AI需要短期记忆教你如何用代码管理这个盒子避免AI忘事分享优化技巧让盒子装更多有用的内容。范围覆盖大语言模型LLM的上下文窗口原理、AI原生应用中的实现逻辑、常见优化策略截断、摘要、检索。预期读者AI原生应用开发者想解决对话连贯性问题的程序员产品经理想理解AI能力边界的产品设计者对AI感兴趣的初学者想知道AI为什么会忘事的好奇宝宝。文档结构概述本文会像拆积木一样一步步展开故事引入用小朋友搭积木的例子引出上下文窗口的概念核心概念解释token文字积木、“上下文窗口”积木盒、“上下文管理”整理积木原理与架构画流程图说明AI处理上下文的过程代码实现用Python写一个对话历史管理工具演示如何避免积木盒满优化策略介绍给积木做摘要、找关键积木等技巧实战案例用OpenAI API做一个不会忘事的客服机器人未来趋势探讨更大的积木盒、更聪明的整理方式。术语表核心术语定义上下文窗口Context WindowAI模型能处理的最大文字积木数量比如GPT-3.5-turbo的4096个token包括用户输入和AI回复。Token语言模型处理文本的最小颗粒比如我爱吃苹果会被分成我、“爱”、“吃”、“苹果4个token英文中unhappy会分成un”、happy两个token。AI原生应用从设计之初就基于大语言模型构建的应用比如ChatGPT而非传统应用加AI插件。相关概念解释自注意力机制Self-AttentionAI模型记住上下文的核心机制它会计算每个token与其他token的关联比如它指的是前面的苹果。上下文截断Context Truncation当对话历史超过上下文窗口时删除最早的内容比如把最旧的积木从盒子里拿出来。缩略词列表LLM大语言模型Large Language ModelAPI应用程序编程接口Application Programming Interfacetokenizertoken化工具把文字拆成token的程序。核心概念与联系故事引入小朋友的积木盒难题假设你有一个5岁的小朋友叫小AI。他最喜欢用积木搭房子但妈妈给他买的积木盒只能装100块积木。第一天小AI用50块积木搭了个小房子剩下的50块装在盒子里没问题第二天小AI想搭个更大的房子用了80块积木盒子里只剩20块刚好够第三天小AI想搭个城堡需要120块积木但盒子只能装100块——这时候他必须把最早搭的小房子拆了拿出20块积木才能装下新的积木。小AI的积木盒就是AI模型的上下文窗口积木就是token拆旧房子拿积木就是上下文截断。AI原生应用中的对话忘事问题本质上就是积木盒不够大当对话历史的token数超过上下文窗口时模型会忘记最早的内容。核心概念解释像给小学生讲故事一样核心概念一Token——文字的积木颗粒假设你有一句台词“我今天吃了三个汉堡好饱呀”对人类来说这是12个汉字对AI来说这是7个token“我”、“今天”、“吃了”、“三个”、“汉堡”、“好饱”、“呀”。为什么要拆成token因为AI模型是吃token长大的——它通过学习token之间的关系比如吃了后面跟着汉堡来理解语言。就像小朋友搭积木时必须把大积木拆成小颗粒才能搭出各种形状。总结Token是AI理解语言的最小单位就像积木是搭房子的最小颗粒。核心概念二上下文窗口——AI的短期记忆盒子假设你和AI聊了这样一段对话你“我想买一双红色的运动鞋预算500元。”15个tokenAI“好的我帮你推荐几款红色运动鞋价格在500元以内。”20个token你“有没有跑步专用的”8个tokenAI“有的比如XX品牌的跑步鞋红色款售价499元。”25个token这段对话的总token数是152082568个。如果AI的上下文窗口是100个token那么它能记住全部内容如果上下文窗口是50个token那么它会忘记最早的我想买一双红色的运动鞋预算500元15个token因为6850必须截断。总结上下文窗口是AI能记住的最大token数就像小AI的积木盒能装的最大积木数量。核心概念三上下文管理——整理积木盒的技巧小AI的积木盒满了他可以选择拆旧房子把最早搭的小房子拆了拿出积木对应上下文截断做积木摘要把小房子的积木拼成一个小房子模型用更少的积木代表原来的房子对应对话摘要找关键积木只保留小房子的屋顶和门最关键的部分对应关键信息提取。AI原生应用中的上下文管理就是这些技巧的组合——通过各种方法让积木盒装更多有用的内容避免忘事。核心概念之间的关系用小学生能理解的比喻Token与上下文窗口Token是积木颗粒上下文窗口是积木盒——积木盒的大小决定了能装多少积木颗粒。上下文管理与上下文窗口上下文管理是整理积木盒的技巧——比如拆旧积木、做摘要让积木盒能装更多有用的积木。Token与上下文管理上下文管理的目标是优化token的使用——比如把100个token的长对话变成20个token的摘要节省下来的80个token可以装新的内容。核心概念原理和架构的文本示意图AI原生应用处理上下文的流程就像小AI搭积木的过程用户输入你说我想买红色运动鞋相当于给小AI一堆新积木Token化把我想买红色运动鞋拆成我、“想”、“买”、“红色”、运动鞋5个token相当于把大积木拆成小颗粒存入上下文窗口把这5个token放进积木盒上下文窗口模型推理AI用积木盒里的token包括之前的对话历史搭出推荐红色运动鞋的回复相当于用积木搭房子更新上下文窗口把AI的回复比如好的推荐XX品牌红色运动鞋拆成token加入积木盒相当于把新搭的房子放进盒子。Mermaid 流程图AI处理上下文的流程用户输入Token化处理更新上下文窗口模型推理生成输出说明用户输入后先拆成tokentoken存入上下文窗口保留对话历史模型用上下文窗口里的token生成回复回复拆成token更新上下文窗口加入新内容。核心算法原理 具体操作步骤算法原理如何避免积木盒满当对话历史的token数超过上下文窗口时必须进行上下文截断。常见的截断策略有三种先进先出FIFO删除最早的对话比如小AI拆最早搭的房子重要性排序保留最重要的对话比如小AI保留城堡的关键积木摘要生成把长对话总结成短摘要比如小AI把小房子拼成模型。其中FIFO是最常用的基础策略因为它简单易实现重要性排序和摘要生成是更智能的策略但需要额外的AI模型支持。具体操作步骤用Python实现FIFO截断我们用Python写一个对话历史管理工具实现以下功能记录用户和AI的对话历史计算对话历史的token数当超过上下文窗口时删除最早的对话。步骤1安装依赖库我们需要用tiktokenOpenAI官方的token计算库来计算token数pipinstalltiktoken步骤2编写核心代码importtiktokenclassContextManager:def__init__(self,max_window:int,model:strgpt-3.5-turbo): 初始化上下文管理器 :param max_window: 最大上下文窗口token数比如gpt-3.5-turbo的4096 :param model: 使用的LLM模型用于选择正确的tokenizer self.max_windowmax_window self.modelmodel self.conversation_history[]# 存储对话历史格式[{role: user, content: xxx}, ...]self.tokenizertiktoken.encoding_for_model(model)# 获取对应模型的tokenizerdefadd_message(self,role:str,content:str): 添加新消息到对话历史并自动截断超过max_window的部分 :param role: 消息角色user或assistant :param content: 消息内容 # 1. 将新消息加入历史new_message{role:role,content:content}self.conversation_history.append(new_message)# 2. 计算当前历史的总token数total_tokensself._calculate_total_tokens()# 3. 如果超过max_window删除最早的消息FIFO策略whiletotal_tokensself.max_window:# 删除最早的一条消息self.conversation_history.pop(0)# 重新计算总token数total_tokensself._calculate_total_tokens()# 4. 返回更新后的对话历史returnself.conversation_historydef_calculate_total_tokens(self)-int: 计算对话历史的总token数包括角色和内容 :return: 总token数 total0formessageinself.conversation_history:# 计算角色的token数比如user是4个tokentotallen(self.tokenizer.encode(message[role]))# 计算内容的token数比如我想买红色运动鞋是5个tokentotallen(self.tokenizer.encode(message[content]))# 每个消息之间需要加3个token的分隔符根据OpenAI的文档total3returntotaldefclear_history(self):清空对话历史self.conversation_history[]# 测试代码if__name____main__:# 初始化上下文管理器max_window100用gpt-3.5-turbo模型cmContextManager(max_window100,modelgpt-3.5-turbo)# 添加用户消息cm.add_message(user,你好我想了解AI原生应用中的上下文窗口。)# 添加AI回复cm.add_message(assistant,你好上下文窗口是AI模型处理文本时能记住的最大内容量就像你的短期记忆一样。)# 添加用户新消息cm.add_message(user,那如果对话历史超过上下文窗口会发生什么)# 添加AI新回复故意写长一点测试截断long_reply如果对话历史超过上下文窗口模型会自动删除最早的内容就像你把旧积木从盒子里拿出来一样。比如你之前说的你好我想了解AI原生应用中的上下文窗口如果后面的对话太长模型会忘记这句话。cm.add_message(assistant,long_reply)# 打印对话历史看看有没有被截断print(对话历史)formsgincm.conversation_history:print(f{msg[role]}:{msg[content]})# 打印总token数print(f\n总token数{cm._calculate_total_tokens()})步骤3运行结果解释运行测试代码后输出如下对话历史 user: 你好我想了解AI原生应用中的上下文窗口。 assistant: 你好上下文窗口是AI模型处理文本时能记住的最大内容量就像你的短期记忆一样。 user: 那如果对话历史超过上下文窗口会发生什么 assistant: 如果对话历史超过上下文窗口模型会自动删除最早的内容就像你把旧积木从盒子里拿出来一样。比如你之前说的你好我想了解AI原生应用中的上下文窗口如果后面的对话太长模型会忘记这句话。 总token数98说明我们设置了max_window100积木盒能装100个token最后一条AI回复很长但总token数是98没有超过100所以没有截断如果我们再添加一条长消息比如那有没有办法让模型记住更多内容假设增加20个token总token数会变成118超过100这时候最早的你好我想了解AI原生应用中的上下文窗口会被删除。数学模型和公式 详细讲解 举例说明核心数学模型上下文截断的token计算假设( M )上下文窗口的最大token数比如4096( T )当前对话历史的token数比如3000( N )新输入的token数比如1500。当 ( T N M ) 时需要截断历史保留最新的 ( K ) 个token其中K M − N K M - NKM−N解释( K ) 是留给历史的最大token数因为新输入需要占 ( N ) 个token所以历史只能保留 ( M - N ) 个token。举例说明假设( M 4096 )gpt-3.5-turbo的上下文窗口( T 3500 )当前对话历史的token数( N 1000 )新输入的token数。计算( T N 3500 1000 4500 4096 )需要截断。保留的历史token数( K 4096 - 1000 3096 )。所以我们需要从对话历史中删除最早的 ( 3500 - 3096 404 ) 个token即最早的几条对话。为什么这样计算因为新输入是必须保留的比如用户刚说的有没有跑步专用的“而历史是可以截断的”。这样计算能确保新输入被完整保留同时历史保留最多的内容。项目实战不会忘事的客服机器人项目目标用OpenAI API做一个客服机器人能记住用户的订单信息比如订单号、地址即使对话很长也不会忘记。开发环境搭建安装OpenAI SDKpipinstallopenai获取OpenAI API密钥需要注册OpenAI账号在这里获取。源代码详细实现和代码解读步骤1初始化OpenAI客户端和上下文管理器importopenaifromcontext_managerimportContextManager# 导入之前写的ContextManager# 配置OpenAI API密钥openai.api_keyyour-api-key-here# 初始化上下文管理器用gpt-3.5-turbomax_window4096cmContextManager(max_window4096,modelgpt-3.5-turbo)步骤2定义客服机器人函数defcustomer_service_bot(user_input:str)-str: 客服机器人函数处理用户输入返回AI回复 :param user_input: 用户输入 :return: AI回复 # 1. 将用户输入加入上下文历史cm.add_message(roleuser,contentuser_input)# 2. 调用OpenAI API生成回复responseopenai.ChatCompletion.create(modelgpt-3.5-turbo,messagescm.conversation_history,# 使用上下文历史temperature0.7,# 回复的随机性0-1越小越确定max_tokens1000# 每个回复的最大token数)# 3. 提取AI回复ai_replyresponse.choices[0].message[content]# 4. 将AI回复加入上下文历史cm.add_message(roleassistant,contentai_reply)# 5. 返回AI回复returnai_reply步骤3测试客服机器人# 测试对话1用户提供订单号user_input1我的订单号是20231001-001请问什么时候能送达ai_reply1customer_service_bot(user_input1)print(fAI回复1{ai_reply1})# 测试对话2用户询问地址修改user_input2我想把收货地址改成北京市朝阳区XX路1号订单号是20231001-001。ai_reply2customer_service_bot(user_input2)print(fAI回复2{ai_reply2})# 测试对话3用户再次询问送达时间测试是否记得订单号和地址user_input3那修改后的地址什么时候能送达ai_reply3customer_service_bot(user_input3)print(fAI回复3{ai_reply3})代码解读与分析上下文管理器的作用ContextManager会自动记录用户和AI的对话历史并在超过4096个token时截断最早的内容。这样即使对话很长机器人也能记住最近的关键信息比如订单号、地址。OpenAI API调用openai.ChatCompletion.create函数的messages参数使用了上下文历史所以模型能看到之前的对话内容。测试结果当用户第三次询问送达时间时机器人会提到修改后的地址北京市朝阳区XX路1号“和订单号20231001-001”说明它记住了之前的信息。实际应用场景场景1客服机器人需求记住用户的订单号、地址、问题历史提供连贯的回复挑战用户可能会聊很多无关内容比如今天天气真好需要过滤这些内容保留关键信息解决方案用重要性排序策略保留订单号、地址等关键信息删除无关内容。场景2写作助手需求记住用户之前写的内容比如小说的情节、人物设定帮助用户继续写作挑战用户可能会写很长的内容比如1000字的章节需要压缩成摘要解决方案用摘要生成策略把长章节总结成100字的摘要加入上下文窗口。场景3代码助手需求记住用户之前写的代码片段比如函数定义、变量名帮助用户调试代码挑战代码的token数很高比如100行代码1000个token需要高效的截断策略解决方案用代码片段提取策略保留用户当前调试的函数删除其他无关代码。工具和资源推荐上下文管理工具LangChain一个流行的LLM应用开发框架提供了ConversationBufferMemory保留全部历史、ConversationSummaryMemory生成摘要等上下文管理工具LlamaIndex一个数据索引工具能将长文档分成小块存入向量数据库当需要时检索相关内容加入上下文窗口解决长文本处理问题tiktokenOpenAI官方的token计算库支持所有OpenAI模型的token计算。学习资源OpenAI文档上下文窗口指南解释了不同模型的上下文窗口大小和使用建议LangChain文档对话记忆管理详细介绍了LangChain的上下文管理工具论文《Longformer: The Long-Document Transformer》介绍了如何处理超过传统Transformer窗口的文本。未来发展趋势与挑战未来趋势更大的上下文窗口比如GPT-4的128k上下文窗口能处理20页Word文档让AI能记住更长的对话和文档更智能的上下文压缩用AI生成动态摘要——根据用户当前的问题生成相关的历史摘要比如用户问订单什么时候到就生成订单相关的历史摘要多模态上下文支持图片、语音等非文本信息的上下文管理比如用户发了一张鞋子的图片AI能记住这张图片的内容后续推荐类似的鞋子个性化上下文记住用户的偏好比如喜欢红色、“预算500元”提供更个性化的服务比如优先推荐红色、500元以内的鞋子。挑战计算成本更大的上下文窗口需要更多的计算资源比如GPT-4的128k窗口的成本是4k窗口的3倍延迟问题处理更长的上下文需要更多时间比如128k窗口的回复时间是4k窗口的2倍准确性问题上下文压缩可能会丢失重要信息比如摘要生成时漏掉了订单号隐私问题个性化上下文需要存储用户的隐私信息比如地址、偏好需要解决数据安全问题。总结学到了什么核心概念回顾TokenAI理解语言的最小颗粒就像积木是搭房子的最小颗粒上下文窗口AI能记住的最大token数就像小AI的积木盒上下文管理整理积木盒的技巧比如截断、摘要、检索。概念关系回顾Token是上下文窗口的组成单位上下文管理是优化上下文窗口使用的方法上下文窗口决定了AI的短期记忆能力上下文管理决定了AI记忆的效率。关键结论AI原生应用的对话连贯性取决于上下文窗口的管理基础的FIFO截断策略能解决忘事问题但更智能的策略比如摘要、检索能提升用户体验未来的AI应用会有更大的上下文窗口和更聪明的上下文管理方式但也会面临计算成本、延迟等挑战。思考题动动小脑筋思考题一如果上下文窗口无限大会有什么问题提示计算成本、延迟、无关信息思考题二你是一个写作助手的开发者如何设计上下文管理策略让助手记住用户的小说情节同时不超过上下文窗口提示摘要生成、关键情节提取思考题三如果用户输入的是图片比如一张鞋子的图片如何将图片加入上下文窗口提示多模态token化、图片特征提取附录常见问题与解答Q1为什么上下文窗口有限制A1因为大语言模型的自注意力机制的计算复杂度与token数的平方成正比比如token数从1000增加到2000计算时间增加到4倍。如果上下文窗口无限大计算时间和资源消耗会变得无法承受。Q2如何选择合适的上下文窗口大小A2根据应用场景选择简单的问答应用比如今天天气怎么样用小窗口比如4k长对话应用比如客服机器人用大窗口比如16k长文档处理应用比如写作助手用超大窗口比如128k。Q3如何计算token数A3用tiktoken库计算比如importtiktoken tokenizertiktoken.encoding_for_model(gpt-3.5-turbo)text我想买红色运动鞋token_countlen(tokenizer.encode(text))print(token_count)# 输出5扩展阅读 参考资料OpenAI文档Chat API GuideLangChain文档Memory Modules论文《Longformer: The Long-Document Transformer》arXiv:2004.05150书籍《Building Applications with LLMs》作者Andrew Ng。结语上下文窗口是AI原生应用的记忆核心就像小AI的积木盒——它决定了AI能记住多少内容也决定了应用的用户体验。通过合理的上下文管理策略我们能让AI记得更准、用得更巧打造更智能的AI原生应用。希望本文能帮助你理解上下文窗口的原理并用代码实现自己的不会忘事的AI应用
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

中山网站建点什么是网站静态化

Vim实用功能与技巧全解析 1. TOhtml命令 TOhtml命令比2html.vim脚本更灵活,因为你可以指定要转换的精确行范围。例如,要转换缓冲区中第25行到第44行,可输入: :25,44TOhtml使用gvim进行HTML转换的一个优点是,图形用户界面(GUI)能准确检测颜色并创建正确的HTML指令。不…

张小明 2025/12/27 5:46:03 网站建设

网站开发 打标签最好免费高清视频在线观看

本文介绍一个申万行业数据分析系统,它集成了数据获取、可视化、财务评价和回测分析等功能。通过这个项目,你将学会如何用Python构建一个专业级的金融数据分析应用。 一、分析流程 行业选择 → 确定分析范围 数据获取 → 收集行业指数、个股交易、财务数…

张小明 2025/12/27 5:46:04 网站建设

网站建设当中的技术解决方案自助建手机网站免费

ML307 4G模块:打造移动AI助手的完美网络解决方案 【免费下载链接】xiaozhi-esp32 Build your own AI friend 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaozhi-esp32 还在为Wi-Fi信号不稳定而烦恼吗?想要让你的AI聊天机器人随时随地保…

张小明 2025/12/27 5:46:05 网站建设

没有网站可以做seo吗网站索引怎么做

EmotiVoice支持中英文混合语音合成吗?实测结果揭晓 在智能语音助手、虚拟主播和多语言内容创作日益普及的今天,一个关键问题摆在开发者面前:现有的开源TTS系统能否真正实现自然流畅的中英文混合语音合成?用户不再满足于机械朗读&a…

张小明 2025/12/27 5:46:05 网站建设

福永外贸网站建设公司山东济南建网站公司

第一章:Open-AutoGLM商用合规风险概述在将Open-AutoGLM应用于商业场景时,必须充分评估其潜在的合规性风险。尽管该模型以“开放”为名,但其许可协议、数据来源及生成内容的法律属性仍可能对商业化部署构成挑战。许可证限制 Open-AutoGLM所采用…

张小明 2025/12/27 5:46:03 网站建设