首页 文章 精选 留言 我的

精选列表

搜索[时间范围],共10018篇文章
优秀的个人博客,低调大师

基于 LLM 大模型 Agent 的适用范围和困境

本文提到大模型通常的工作方式,即通过提示词进行问答,并指出了两个主要问题:历史对话信息的管理和令牌数量的限制。文章讨论了知识库问答和个人助手两个应用场景,并分析了各自面临的困境,如知识库无法有效处理多模态信息和大型文档,个人助手则受限于工具参数的复杂性和令牌长度。文章还提到了微调(FINE-TUNING)作为改善模型性能的方法,以及在不同领域的应用潜力。最后,分享了对微调成为标准操作流程的预期,以及对现有平台和基础设施的改进意见。 背景 当下LLM大模型如火如荼的进行着,各大互联网厂商基本都有在训练&推出自研的大模型,chatgpt,千问、moonshot的kimi。基于这些大模型也涌现了出了很多的应用。但是当前还未出现现象级的应用,妙鸭相机算一个,但是也很快昙花一现。笔者由于业务场景的诉求,也探索了一下基于大模型的Agent 的方案,尝试在实际业务场景的使用一下。但是发现现实还是有一定的差距。 在基于Agent 的方案,目前有很多的开源框架,如: langchain:一个基于大模型应用开发框架,能够让应用的开发者基于大模型的推理结合存储、工具、索引、提示词等模块完成个人助理、任务、问答类的应用开发。主打的是单个Agent 的服务能力整合。基本上现在很多的AI 应用当前的思路都有参考这个。 autogen:微软开源的agent 框架。如果我们把langchain 看做是和人交互的agent, 那autogen就是agent 和agent 交互协作共同完成一个目标的多agent 的任务框架。人类只需要提供一个目标给到autogen, 他就能够在agent 通过多轮对话、执行完成目标。 metagpt:官方介绍是 “MetaGPT是一款强大的开源软件,它利用多智能体框架(产品设计、技术设计和程序员)来处理你的需求。只需输入需求,MetaGPT就能规划、设计并生成产品文档、测试代码和主运行代码,让你立即开始运行你的软件。多智能体比单一智能体更高效、更灵活。这是AI技术的一大突破,让软件开发变得更便捷、更高效。” 好了,说的再天花乱坠,还是得看实际行不行,我们就拿langchain 的最拿手的两个应用场景来说,一个是知识库问答,一个是个人助手来看看。 在讲这两个场景,之前我们要先熟悉大模型的工作姿势: 通用的大模型的工作姿势,是提示词 => 大模型 => 大模型基于提示词给出问答。 提示词Prompt 的一般格式: PREFIX = """Answer the following questions as best you can. You have access to the following tools:"""FORMAT_INSTRUCTIONS = """Use the following format:Question: the input question you must answerThought: you should always think about what to doAction: the action to take, should be one of [{tool_names}]Action Input: the input to the actionObservation: the result of the action... (this Thought/Action/Action Input/Observation can repeat N times)Thought: I now know the final answerFinal Answer: the final answer to the original input question"""SUFFIX = """Begin!Question: {input}Thought:{agent_scratchpad}""" 简单来说,就是告诉大模型按照特定格式回答我的问题,可以使用的工具,参数格式等等吧。。。重点是要求大模型按照特定的范式工作,输出结果。上文是chat 场景下MRKL 模型的Promopt ,有兴趣的可以看看背后的论文MRKL。 MRKL地址:https://arxiv.org/pdf/2205.00445.pdf 在实际的运行过程中,我们的参数会被填充到对应的数据,例如tool 会被替换成工具的信息,input 的信息,包括历史的会话信息等,如下图所示: 这地方有两个问题: 第一个问题,历史对话信息,LLM 没有,所以agent 等框架一般都有memory 的能力,每次调用大模型都需要把历史的对话信息拿出来,放到prompt 中; 第二个问题一次调用的tokens 有限,这个问题其实很致命。如果遇到知识库相关的tokens 非常的多场景,怎么解决尼?总不能每次把知识库的信息都全量带过去吧,解决方案一般有两种,第一种就是每次只把相关的信息带过去,也就是下面通用的知识库方案。还有一个种是提前微调,fine-tuning 的模式来做,利用先验知识解决专家问题。 知识库的效果 上面这个图,估计很多同学都看过,大家把PDF、语雀文档、WORD 之类的文档,进行分割、embedding、存到向量数据库中,在问答环节,拉取相关的块,再构建prompt 给到大模型,再让他输出对应的问答。 本质解决两个问题,tokens 数量限制的问题;提炼精准问题的能力。 Text Splitter :文本分割器是一种将大段文本拆分成较小块或片段的算法或方法。其目标是创建可单独处理的可管理的片段,这在处理大型文档或数据集时通常是必要的。 Embedding: 简单来说就是向量化,不同维度的数据,最终都需要通过归一化、自关联。当然,这个做的最好的就是chatgpt 的 text-embedding-ada-002 了,其实chatgpt 的能做的比别的大模型好,很大程度下受他的Embedding结果的影响, 在Transform 模型下,多头注意力非常依赖Embedding 的好坏。 vectorstore: 向量数据库,就是存储刚刚嵌入后的向量了,一般的向量数据库都可以了,如holo, redis 等,支持计算欧式距离、向量内积等。 原理很简单,集团内部现在知识库的机器人接入没有几千,估计也有几百了,在一些基础问题上,它还能回答的差不多,但是在复杂问题上,还没有看到一个非常厉害的知识库机器人出现。 知识库的困境 第一个问题是大家进行向量化的知识库文档里面其实很多时候是包含很多图片,在表达语义能力方面,图片往往包含的语义更多,图片处理的时候可能就变成一个链接了,更有甚者,包含视频,又该如何处理,所以文档处理不能简单的做NLP处理,还得支持多模态,目前好像还没有看到这样的能力出现。下图中,其实就是一个示例。 第二个影响结果的就是文档的大小,如果知识库过于庞大,在分割完成后,召回的数据也会过多,必然存在舍弃导致的信息不全。不过这种情况可以通过尝试多路调用,再整合的思路解决。 另外使用的姿势也有相关性,如果问题没有区分度,返回的结果也存在泛化的问题。知识库能力有个特点,就是你提供给我的知识一定是要准确有用的,因为作为使用方,如果你一会给我的有用,一会给我的是错误的,作为用户我就不会用了,我不是专家,我没有办法判断结果的正确性。这个和专家助手是不一样的心智。 个人助手的效果 个人助手的基本逻辑就是,输入后,组装参数,告诉大模型目标以及工具描述,让大模型告诉我们是否应该使用工具,以及使用哪个工具,这个过程中,大模型还会帮我们构建工具参数(前提是工具要描述清楚参数的类型),langchain 根据工具和参数调用,拿到结果后,再次调用大模型。这个一个基本的ReAct 的思路。具体可以参考论文: ReAct ReAct地址:https://arxiv.org/pdf/2210.03629.pdf 其实按照这个思路,如果写好Prompt, 再把工具的描述写清楚,你会发现这个还是的确能够产生一些价值的,至少在辅助工具助手上,他还是可以做到不错的效果的。例如查个白名单、订单信息、等等吧。 个人助手困境 他的一个明显的困境就是工具的参数不能太复杂,由于是大模型推荐的结果得出的参数,即使是最新的gpt 在参数映射这一块,都容易出现问题,哪怕是个String 类型的数组,都容易出现格式不一致的问题。所以工具的入参要足够简单,不然那个转化和校验就痛苦死了。 由于每次调用都是带着全量的History, 所以如果背景知识过多,一样会存在tokens 过长的问题。就像你想让一个让帮你做客服的事情,首先他得了解足够多的先验知识,由于没有做微调,所以每次都是带着全量的信息过去,模型处理的也慢。 所以最终的最终,想要好的效果,还是需要准备好足够清晰的业务领域知识(多模态的),做Fine-Tuning。 Fine-Tuning 的困境 在说NLP 领域的的fine-tuning 之前,我们可以先说说文生图领域的fine-tuning。目前文生图领域有个非常火的网站叫C站. 他上面全是基于LORA的思路(可参考论文LORA)做微调模型。基本拿SD 的基础模型,再加上微调模型和Promot 很容易就能生成对应风格的图片。 可参考论文LORA地址:https://arxiv.org/pdf/2106.09685.pdf 等到开源的基础大模型的推理能力达到chatgpt4 的水平,为了解决各个专业领域问题(你也可以叫风格、领域知识、上下文背景),微调会成为一个标准操作流程。但是能不能形成一个类似C站的氛围还不好说,毕竟图片的风格是通用的,大家可以相互借鉴,而专业背景各个产品各有不同。 基于大模型的能力,在精确计算领域还是很难落到很好的效果,典型的如复杂工具的调用。但是在专家助手的领域能够获得很好的效果,典型的如代码生成的Copilot。虽然生成的代码不能保证一行都不需要修改,但是它能实现80%的有效代码,基于自己的专家知识修改有问题的20%, 那也是巨大的省力呀。 最后再说一下钉钉,目前的钉钉已经支持流式stream ,可以很方便的实现大模型打字效果了,大家可以试用一下。 团队介绍 淘宝物流基础技术团队,一直深耕在物流及供应链的数字化协同与运营领域:为零售业务提供灵活多样的经营模式管理方案及可以快速适配市场变化的经营策略数宇化管理工具;为商家提供高效低成本的物流及供应链解决方案,加快资金效率,提升协同效率;为消费者提供即时便捷的购物体验。基础技术团队打造了一个技术先进,产品矩阵完整的PaaS平台,以及AI驱动的基础研发框架,帮助业务系统实现架构升级,助力提升业务开发研发效率和技术实战能力。最终支撑和驱动庞大、复杂、多变的商业体系发展。 ¤ 拓展阅读 ¤ 3DXR技术| 终端技术| 音视频技术 服务端技术|技术质量|数据算法 本文分享自微信公众号 - 大淘宝技术(AlibabaMTT)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

优秀的个人博客,低调大师

如何在web范围内实现微服务负载均衡

网上有很多介绍微服务架构最佳实践的指导手册和博客文章。虽然这些信息都很有用,但是关于如何扩展微服务的文章却不多。在一些研究和大量理论探讨下,本文介绍如何实现微服务的负载均衡。 关注边缘 当web应用程序前端客户端和基于微服务的后台服务器通信时,前端是否需要知道所有可用的微服务实例?比如,客户端真的需要知道提供web页面数据的所有的五个服务么?答案当然是不需要! Sudhir Tonse,之前在Netflix工作,现在在Uber工作,在Scalable Mocroservices at Netflix大会上讲述了边缘服务的概念。边缘服务作为微服务基础架构的门户而存在。因此,对于前端客户端需要知道哪个微服务,这个问题,根据Sudhir的方案,每个客户端只需要和一个边缘服务直接通信就可以了。每个客户端可以有独占的边缘服务。比如,Netflix服务于上千种设备类型 -- 每种设备类型都有独占的边缘服务作为其接入点。 类似Netflix和Riot Games这样的大厂商,他们都运行在Amazon AWS上,使用弹性负载均衡(ELB)来确保边缘服务随时在线。 边缘服务之外 每个进入的请求都需要分析。多个fan-out请求被发送到构成生态系统的微服务里。一个进站请求平均会生成大概十个fan-out请求。Netflix每天会接收到近20亿请求,会生成大概200亿次内部的API调用。 Netflix如何确保其微服务能处理这么大的压力,并且保持24/7的可用性呢?再说一次,负载均衡是解决之道。但是这次并不是通过ELB。有 500个不同的微服务,你就需要配置500个ELB!这正是Netflix的工具内置负载均衡能力的原因。Netflix创建了很多库和工具,它们可以很容易得互相集成。通过将所需库直接集成到每个微服务里,就能将其自身注册到所有受管理的服务里。 不要害怕边缘服务 既然边缘服务如此重要,那么边缘服务发生故障就麻烦了,不是么?实际上,不会有问题。原因之一,边缘服务当然也必须负载均衡。这意味着访问者根本就不会注意到边缘服务的故障。其次,替代方案是什么?在monolithic应用程序环境里,每个服务都像是一个边缘服务,因此任何中央服务的故障 -- 没有配置负载均衡时 -- 都意味着整个系统的故障,对吧? 尽管如此,边缘服务处于最为精妙的服务之中,因此的确需要特别的关注。 重中之重 必须要认真考虑运行边缘服务来处理进站流量。并且一定要对边缘服务做负载均衡,无论你的云提供商的机制如何。所有内部流量必须由自己的工具处理,因为这样允许你使用最少的额外配置来运行环境。因此,最终,微服务高效扩展所要求的最重要的工具,不出意外,是负载均衡。 请保持关注 我会在下一篇博客里处理容器化的问题。需要了解的是,Docker并不是容器概念之上的唯一解决方案。 本文作者:崔婧雯 来源:51CTO

优秀的个人博客,低调大师

欧洲幸免遭遇大范围高仿银行APP攻击

据外媒报道,一群俄罗斯骇客计划通过高仿的假银行APP来感染欧洲百万台的Android(安卓)终端,实现网络钓鱼目的,进而盗取用户的金融财产。 骇客计划通过高仿的假银行APP盗取钱财 这个被称为“Cron”的骇客团伙,通过恶意软件Cron感染了俄罗斯100多万部Android手机,并盗取了超过5000万卢布(约合人民币609万)的资产。所幸该团伙已被俄罗斯内政部擒获并拘留。 所幸该团伙成员已被警方控制 根据分析,该骇客团伙曾计划袭击欧洲的大银行包括法国农业信贷银行(France's Credit Agricole)、法国巴黎银行(BNP Paribas)和法兴业银行(Societe Generale)等等。 有网络安全公司研究其作案手法后指出,该恶意软件Cron感染Android用户的手机后,允许攻击者向受害者的银行发送短信并要求其向每个受害者平均转出140美元。由于该恶意软件能够阻止了任何传入的短消息或银行交易通知。所以,用户在遭受攻击后,将完全对自已的金融转账失去控制,危害巨大。 Cron相当于一种木马病毒,通过文本信息和虚假应用中的恶意链接传播。研究人员表示,截止目前Cron已将资金存入6000个黑客银行帐户。 由于Android平台的开放性,因此成为攻击者利用恶意软件进行网络钓鱼、APP欺诈,甚至绕过防火墙而实施犯罪的一大温床。 安全研究人员警告称,针对Windows系统的WannaCry勒索攻击刚刚结束,下一波勒索攻击则很有可能发生在Android平台上,Android用户必须提高警惕了。 本文转自d1net(转载)

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册