作者: C3P00

  • LangChain的记忆组件

    第一部分:什么是记忆组件?

    记忆组件是对话系统中的一项关键技术,它允许系统存储和引用对话历史中的信息。在LangChain中,记忆组件可以作为独立工具使用,也可以整合进链式处理中。记忆组件需要支持两个基本操作:读取和写入。

    第二部分:他们是如何工作的?

    在LangChain与LLM的每次交互中,链将执行两次记忆操作:

    1. 读取:在执行核心逻辑之前,链会从记忆系统中读取信息,以此来增强用户输入。
    2. 写入:在核心逻辑执行后、返回答案前,链会将当前的输入和输出写入记忆中,为将来的运行提供参考。

    记忆组件的设计需考虑两个核心问题:如何存储历史信息,以及如何查询这些信息。

    第三部分:三种基础记忆组件详解

    LangChain提供了三种基本记忆组件类型:

    1. ConversationBufferMemory:直接记录对话历史消息的列表。
    2. ConversationBufferWindowMemory:记录对话历史,但仅保留最近的K个交互。
    3. ConversationSummaryMemory:随时间总结对话内容,并存储当前摘要。

    以下是它们的具体用法示例:

    3.1 ConversationBufferMemory

    from langchain.memory import ConversationBufferMemory
    
    memory = ConversationBufferMemory()
    memory.save_context({"input": "Hi, LangChain!"}, {"output": "Hey!"})
    memory.chat_memory.messages  # 查看消息列表

    调用 load_memory_variables 函数可以获取对话历史的文本:

    memory.load_memory_variables({})

    3.2 ConversationBufferWindowMemory

    这个组件使用滑动窗口机制,确保了记忆的容量管理。

    from langchain.memory import ConversationBufferWindowMemory
    
    memory = ConversationBufferWindowMemory(k=1)
    memory.save_context({"input": "Hi, LangChain!"}, {"output": "Hey!"})
    memory.save_context({"input": "Where are you?"}, {"output": "By your side"})
    memory.load_memory_variables({})
    memory.chat_memory.messages

    3.3 ConversationSummaryMemory

    这种记忆类型利用LLM生成对话的摘要,适合长对话。

    from langchain.memory import ConversationSummaryMemory
    from langchain.llms import OpenAI
    
    memory = ConversationSummaryMemory(llm=OpenAI(temperature=0, openai_api_key="您的有效openai api key"))
    memory.save_context({"input": "Hi, LangChain!"}, {"output": "Hey!"})
    memory.save_context({"input": "How to start with Next.js development?"}, {"output": "You can get started with its official developer guide."})
    memory.save_context({"input": "Show me the link of the guide."}, {"output": "I'm looking for you now. Please stand by!"})
    memory.load_memory_variables({})

    随着交互次数的增加,ConversationSummaryMemory的Token开销相对平稳,这对于有许多交互的对话非常有效。

    另外提到的Summary Buffer Memory结合了Summary和Buffer的优点,但本文未详细介绍。

    以上内容提供了对LangChain记忆组件的概览和具体代码示例,您可以通过访问官方文档来学习更多。


    LangChain 的记忆组件是其框架中的一个重要组成部分,它赋予了聊天机器人记住先前交互信息的能力,使其更智能、更具交互性。LangChain 提供多种类型的记忆组件,每种都有其独特的机制和适用场景。

    让我们深入了解一下 LangChain 中常用的记忆组件:

    1. ConversationBufferMemory

    • 机制: 这是一种短期记忆,它简单地将所有过去的聊天交互(包括用户输入和 AI 回复)存储在一个字符串缓冲区中。
    • 适用场景: 适用于不需要长期记忆的简单对话场景,例如简单的问答机器人。
    • 优点: 简单易用,资源消耗低。
    • 缺点: 无法处理大量数据,不适用于需要上下文理解的复杂对话。

    2. ConversationBufferWindowMemory

    • 机制: 与 ConversationBufferMemory 类似,但也限制了存储的交互轮数,只保留最近几轮对话。
    • 适用场景: 适用于需要限制记忆容量的场景,例如只需要记住最近几次交互的机器人。
    • 优点: 比 ConversationBufferMemory 更节省资源,避免了无限增长的内存占用。
    • 缺点: 仍然缺乏对对话历史的深入理解。

    3. ConversationSummaryMemory

    • 机制: 不存储完整的对话历史,而是将之前的交互总结成一段简短的摘要。
    • 适用场景: 适用于需要理解对话主题但不需要记住所有细节的场景。
    • 优点: 可以处理更长的对话历史,提供简洁的上下文信息。
    • 缺点: 总结过程可能丢失重要细节,需要选择合适的总结模型。

    4. EntityMemory

    • 机制: 从对话中提取关键实体(例如人名、地点、事件)并存储,形成一个知识图谱。
    • 适用场景: 适用于需要记住特定信息并用于后续交互的场景,例如预订酒店的机器人需要记住用户的姓名和入住日期。
    • 优点: 能够理解和记忆关键信息,使机器人更智能。
    • 缺点: 需要实体识别模型,可能无法处理复杂的实体关系。

    5. Vector Database Memory

    • 机制: 将对话历史和其他相关信息编码成向量,存储在向量数据库中。可以使用相似性搜索来检索相关的历史信息。
    • 适用场景: 适用于需要处理大量数据并进行语义搜索的场景,例如需要根据用户历史记录推荐产品的机器人。
    • 优点: 可以处理大量数据,支持语义搜索,提供更准确的上下文信息。
    • 缺点: 需要向量数据库和 embedding 模型,实现相对复杂。

    选择合适的记忆组件

    选择合适的记忆组件取决于您的具体应用场景。需要考虑以下因素:

    • 对话复杂度: 简单的问答机器人可以使用简单的记忆组件,而复杂的对话系统需要更高级的记忆机制。
    • 记忆容量: 需要存储多少信息?短期记忆还是长期记忆?
    • 性能要求: 不同的记忆组件具有不同的性能特征,需要根据应用场景选择合适的组件。

    总而言之,LangChain 的记忆组件为构建智能聊天机器人提供了强大的支持。了解不同记忆组件的特点,选择合适的组件,可以帮助您构建更智能、更具交互性的聊天机器人。

  • LangChain 中的链

    链(chain)是 LangChain 中的一个重要概念,它可以将 LLM(大型语言模型)进行串联,或者将链与链之间串联起来。链大大简化了复杂应用程序的实现,并使其模块化,这也使调试、维护和改进应用程序变得更容易。

    基础的链:LLMChain

    最基础的链是 LLMChain,它接受 LLM、提示词模版等组件,然后返回 LLM 的回复。

    实跑代码

    以下是一个使用 LLMChain 的简单示例:

    from langchain.llms import OpenAI
    from langchain.prompts import PromptTemplate
    from langchain.chains import LLMChain
    
    # 创建 LLM 实例
    llm = OpenAI(temperature=0, openai_api_key="YOUR_API_KEY")
    
    # 创建提示词模版
    prompt = PromptTemplate(
        input_variables=["color"],
        template="What is the hex code of color {color}?",
    )
    
    # 创建 LLMChain 实例
    chain = LLMChain(llm=llm, prompt=prompt)
    
    # 基于链提问
    print(chain.run("green"))
    print(chain.run("cyan"))
    print(chain.run("magento"))

    输出:

    The hex code of color green is #00FF00.
    The hex code of color cyan is #00FFFF.
    The hex code for the color Magento is #E13939.

    从 LangChainHub 加载链

    LangChainHub 是一个托管各种 LangChain 组件的项目,其中包括链。您可以使用 load_chain 函数从 LangChainHub 加载链。

    from langchain.chains import load_chain
    import os
    
    # 设置 OpenAI API Key
    os.environ['OPENAI_API_KEY'] = "YOUR_API_KEY"
    
    # 加载链
    chain = load_chain("lc://chains/llm-math/chain.json")
    
    # 基于链提问
    chain.run("whats the area of a circle with radius 2?")

    输出:

    > Entering new LLMMathChain chain...
    whats the area of a circle with radius 2?
    Answer: 12.566370614359172
    > Finished chain.
    
    Answer: 12.566370614359172

    作业

    使用今天学到的用法,自己跑一下代码,然后将结果截图分享出来。

  • 关于LangChain中的Chain

    大家好,我是码农小王,今天给大家带来一篇关于LangChain中的Chain的通俗易懂的Blog。

    什么是Chain?

    Chain可以把多个LLM连接起来,实现链式调用。就像组装乐高积木一样,我们可以把不同的LLM块组装在一起,构建出复杂的AI系统。

    几种常见的Chain

    1. LLMChain

    这是最基础的Chain,它接受LLM和Prompt作为输入,返回LLM生成的回复。可以快速构建一个问答系统。

    1. QACoordinationChain

    这个Chain串联问答系统,当一个LLM无法回答时,将问题传递给下一个LLM,实现多个LLM协作。

    1. SearchChain

    这个Chain实现搜索功能,它将用户查询传给搜索LLM,获取回复后再传给答疑LLM生成完整回复。

    运行示例

    导入必要的模块:

    from langchain.llms import OpenAI
    from langchain.chains import *

    加载LLM:

    llm = OpenAI(openai_api_key='你的key') 

    构建一个LLMChain:

    chain = LLMChain(llm=llm, prompt=prompt)

    提问并获取回复:

    print(chain.run("人生的意义是什么?"))  

    总结

    通过Chain模块,LangChain实现了LLM的链式调用,使构建AI系统变得像组装积木一样简单。希望大家能trying more chains, happy langchaining!

    如果文章对你有帮助,请点赞支持哦!

  • Pearl – 一款用于生产环境的强化学习AI Agent库

    Pearl是一个由Meta应用强化学习团队开源的用于生产环境的强化学习AI Agent库。

    其主要特点包括:

    1. 模块化设计,可以自由组合不同的模块构建定制化的Agent。
    2. 支持动态Action空间,适用于实时推荐等需要动态生成Action的场景。
    3. 支持离线强化学习,可以利用日志数据进行训练。
    4. 支持智能探索策略,平衡探索和利用。
    5. 包含Contextual Bandit和全序列决策两种学习方式。
    6. 支持安全决策、历史汇总等功能。
    7. 内置数据增强的Replay Buffer。
    8. 相比其他库,Pearl在模块化、动态Action空间、智能探索等方面功能更强。
    9. 已应用于推荐系统、拍卖竞价等多个真实业务场景。
    10. Pearl是一个非常前沿和强大的强化学习工具库,值得研究和应用。
  • 深入了解ddz-ai:AI在斗地主游戏中的革新

    斗地主,这个在中国家喻户晓的扑克游戏,不仅是消遣娱乐的好方式,也成为了人工智能研究的一个有趣领域。最近,一位开发者在GitHub上公布了一个名为ddz-ai的项目,这个项目引入了一种先进的AI技术来玩斗地主游戏,并且它的表现已经可以媲美甚至超越人类玩家了。

    AI如何掌握斗地主?

    ddz-ai项目使用了一种被称为”多通道堆叠注意力Transformer结构”的系统。这听起来可能很复杂,但实际上,Transformer是目前自然语言处理领域最为强大的模型之一,它通过注意力机制来捕捉数据中的关键信息。开发者将这种机制应用于斗地主的牌局分析中,让系统能够理解不同的牌组合,并根据对手的出牌做出反应。

    ddz-ai的独特之处

    1. 创新的解决方案:ddz-ai通过孤立语假设和宽度优先搜索来解析牌面信息,从而能够洞察所有可能的牌组合,并针对实时的牌局状况制定策略。
    2. 定制化的模型设计:开发者构建了一个特别设计的模型,它能够编码多视角的特征,并通过堆叠注意力机制来更好地融合多牌信息。
    3. 复杂度得以降低:ddz-ai使用动态表和copy net结构来减少空间复杂度,简化了模型的推理过程。
    4. 减少信息不完全性的影响:在斗地主这样一个信息不完全的游戏中,ddz-ai使用完全信息进行重要性采样评估,以提高学习速率和效果。
    5. 考虑到时序信息:ddz-ai能够记录并分析对局历史,从而更准确地预测其他玩家的剩余牌和整个游戏的走势。
    6. 合理的策略制定:在游戏的叫地主阶段,AI会计算叫地主或不叫地主的胜率,以此来指导决策。

    如何运行ddz-ai?

    ddz-ai项目的运行环境很简单,只需要安装numpy和tensorflow两个包。有了这些,你就可以通过运行python train.py来训练你自己的AI模型了。此外,如果你对模型的细节感兴趣,你可以修改训练参数来控制学习过程。

    模型的测试与优化

    开发者目前公布的是一个使用actor-critic机制的模型,并预计未来基于PPO(一种强化学习算法)的版本会有更快的训练速度和更好的效果。模型在16GB RAM的CPU上训练了一周,经过数万轮自对抗训练,其表现已经略胜于一般人类玩家。

    未来展望

    尽管ddz-ai已经取得了不错的成绩,但开发者认为其潜力远未被完全挖掘——由于数据和计算资源的限制,系统的极限尚未到达。未来,开发者计划继续优化这个系统,并期待能够进一步提高AI在斗地主游戏中的表现。

    结论

    ddz-ai项目是一个令人兴奋的进步,它不仅推动了游戏AI的发展,也为我们提供了关于如何将复杂的AI模型应用于实际问题的宝贵见解。无论你是AI爱好者、斗地主高手还是仅仅是对新技术感兴趣的读者,ddz-ai都值得一试。这个项目不仅展示了AI的潜力,也让我们对未来充满期待——一个智能机器人可以在我们最喜爱的游戏中与我们并肩作战,甚至引领我们走向新的游戏高度。

    想要了解更多或者亲自体验ddz-ai的魅力吗?跳转到其GitHub页面 https://github.com/freefuiiismyname/ddz-ai ,开始你的AI斗地主之旅吧!

  • 强化学习算法里:孤立语假设 是指什么?

    强化学习算法中的孤立语假设是指在某些情况下,强化学习算法可以将观察到的环境状态视为完全独立的,即当前状态的转移和奖励只与当前状态有关,而与之前的状态无关。这个假设简化了强化学习问题的建模和求解过程,使得算法更加高效和可行。

    在强化学习中,智能体通过与环境的交互来学习最优策略。智能体在每个时间步选择一个动作,然后观察环境的状态转移和奖励信号。根据孤立语假设,智能体可以将当前状态的转移和奖励视为与之前的状态无关,只与当前状态有关。这意味着智能体可以忽略之前的状态信息,只关注当前状态的最优动作选择。

    这个假设的好处是简化了强化学习问题的建模和求解过程。由于只需要考虑当前状态的转移和奖励,算法的计算复杂度降低,使得算法更加高效和可行。然而,这个假设并不适用于所有情况,因为在某些问题中,之前的状态信息可能对当前状态的转移和奖励有影响。

    总结一下,强化学习算法中的孤立语假设是一种简化假设,它认为当前状态的转移和奖励只与当前状态有关,而与之前的状态无关。这个假设简化了问题的建模和求解过程,提高了算法的效率和可行性。


    Learn more:

    1. 什么是强化学习?- 强化学习简介 – AWS
    2. 平台设计与实现 – 天授 0.4.6.post1 文档
    3. 强化学习(Reinforcement Learning)_强跨学习的环境 包括状态吗-CSDN博客
  •  A Deep Dive into the Mixture of Experts Model

    Introduction:
    The Mixture of Experts model, also known as MoEs, has become a focal point in the field of open AI since the release of Mixtral 8x7B. In this blog post, we will explore the fundamental architecture, training methods, and various considerations required in practical applications of MoEs. Let’s dive in together!

    Overview:
    MoEs offer several advantages over dense models, including faster pre-training speed and faster inference speed compared to models with an equivalent number of parameters. However, they also have high memory requirements, as all expert models need to be loaded into memory. While there are challenges in fine-tuning, recent research on MoE instruction tuning has shown promising results.

    What is the Mixture of Experts (MoE) Model?
    Model size plays a crucial role in improving its quality. Training a larger model with fewer steps is often more effective than training a smaller model with more steps, given limited computational resources. The MoE model allows for pre-training at a significantly lower computational cost compared to traditional dense models. This means you can scale up your model or dataset significantly within the same computational budget. Particularly in the pre-training phase, MoE models can achieve the same performance level as their equivalent-sized dense models but in less time.

    So, what exactly is MoE? In the context of Transformer models, MoE consists of two main components:

    1. Sparse MoE Layer: This layer replaces the traditional dense feed-forward network (FFN) layer. The MoE layer consists of several “experts” (e.g., 8 experts), each representing an independent neural network. These experts are often FFNs, but they can also be more complex networks or even MoEs themselves, forming a hierarchical MoE structure.
    2. Gate Network or Router: This network determines which tokens are assigned to which expert. For example, in the given illustration, the token “More” is assigned to the second expert, while the token “Parameters” is assigned to the first network. It’s worth noting that a token can be assigned to multiple experts. Efficiently assigning tokens to the appropriate experts is one of the key considerations when using MoE technology. This router consists of a series of learnable parameters and is pre-trained along with the other parts of the model.

    The Switch Layer, as shown in the example from the Switch Transformers paper, represents the MoE layer.

    Advantages and Challenges:
    While MoEs offer advantages such as efficient pre-training and faster inference compared to dense models, they also present some challenges:

    1. Training: MoEs show high computational efficiency during the pre-training phase but can struggle to adapt to new scenarios during fine-tuning, often leading to overfitting.
    2. Inference: Although MoE models may contain a large number of parameters, only a fraction of them are used during inference, resulting in faster inference speed compared to dense models with the same number of parameters. However, this also poses a challenge as all parameters need to be loaded into memory, requiring significant memory resources. For example, for a MoE like Mixtral 8x7B, we need sufficient VRAM to support a dense model with 47B parameters (not 8x7B = 56B) since only the FFN layer is considered independent experts, while other parts of the model share parameters. Additionally, if each token uses only two experts, the inference speed (measured in FLOPs) is equivalent to using a 12B model (instead of 14B), as it achieves a 2x7B matrix multiplication, but some layers are shared (this will be further explained).

    MoEs: A Brief History:
    The concept of MoEs first appeared in the 1991 paper “Adaptive Mixture of Local Experts.” This idea, similar to ensemble methods, aims to manage a system consisting of different networks, with each network processing a portion of the training samples. Each individual network or “expert” has its strengths in different regions of the input space. The selection of these experts is determined by a gate network, and both the experts and the gate network are trained simultaneously.

    Between 2010 and 2015, two different research areas further contributed to the development of MoEs:

    1. Experts as Components: In traditional MoE structures, the system consists of a gate network and multiple experts. MoEs have been applied as a whole model in methods such as Support Vector Machines (SVM) and Gaussian Processes. Researchers like Eigen, Ranzato, and Ilya explored MoEs as part of deeper networks, allowing for a balance between large-scale and efficient models.
    2. Conditional Computation: Traditional networks pass all input data through each layer. During this time, Yoshua Bengio explored a method of dynamically activating or deactivating network components based on input tokens.

    These studies paved the way for the exploration of MoEs in the field of Natural Language Processing (NLP). In particular, the work of Shazeer et altranslated by Baoyu.io provides a comprehensive explanation of MoEs and their applications in the AI field. The blog post discusses the advantages of MoEs over dense models, such as faster pre-training speed and inference speed. It also highlights the challenges faced when working with MoEs, including high memory requirements and the need for fine-tuning.

    The post delves into the concept of MoEs, which involves replacing the dense feed-forward network (FFN) layer in Transformer models with a sparse MoE layer. This layer consists of multiple experts, each representing an independent neural network. A gate network or router is used to assign tokens to the appropriate experts. Efficient token assignment is a crucial consideration in MoE technology.

    While MoEs offer benefits like efficient pre-training and faster inference, they also present challenges during fine-tuning and require significant memory resources. The post provides insights into the historical development of MoEs, starting from the 1991 paper “Adaptive Mixture of Local Experts” and exploring subsequent research on experts as components and conditional computation.

    By providing a thorough understanding of the MoE model, the blog post serves as a valuable resource for AI professionals and researchers looking to explore the potential of MoEs in their work.

  • Quivr:AI的神奇助手

    在AI的世界里,我们总是追求创新和进步。而在现实世界中,人工智能(AI)的发展也在不断突破界限,给我们带来了无尽的可能性。今天,我们将探讨一个叫做Quivr的神奇AI工具,它能够帮助我们更好地理解和应用AI技术。

    🌟 Quivr:AI的神奇助手 🌟

    你一定好奇,Quivr是什么?Quivr是一款基于AI的工具,旨在帮助用户更好地理解和应用人工智能技术。它提供了一个丰富的文档库,涵盖了各种AI相关的主题,从基础概念到高级算法,应有尽有。让我们来深入了解Quivr的功能和特点。

    💡 Quivr的功能和特点 💡

    1️⃣ 丰富的文档库:Quivr提供了一个全面而详尽的文档库,其中包含了大量关于AI的文章和教程。无论你是初学者还是专业人士,你都可以在这里找到适合自己的内容。这些文档涵盖了从AI的基本概念到高级算法的各个方面,帮助用户建立起扎实的知识基础。

    2️⃣ 理解和应用:Quivr不仅仅是一个提供文档的平台,它还提供了实用的工具和示例代码,帮助用户更好地理解和应用所学的知识。通过Quivr,你可以学习如何使用不同的AI算法,如深度学习和强化学习,以解决实际问题。

    3️⃣ 互动学习:Quivr还提供了一个互动学习的环境,让用户可以与其他AI爱好者分享和讨论。你可以在这里提问问题、寻求帮助,还可以与其他用户交流经验和见解。这种互动学习的方式有助于加深对AI技术的理解,并且可以结识志同道合的朋友。

    4️⃣ 定制化学习路径:Quivr允许用户根据自己的需求和兴趣定制学习路径。你可以选择感兴趣的主题,按照自己的步调学习,而不受时间和地点的限制。这种个性化的学习方式将帮助你更高效地掌握AI技术。

    🚀 开始你的AI之旅 🚀

    现在,你可能会问:“如何开始使用Quivr?”很简单!你只需要访问Quivr的官方网站(https://brain.quivr.app/docs/intro.html),注册一个账号,就可以开始你的AI之旅了。

    在Quivr的文档库中,你可以找到关于AI基础知识的文章,了解AI的发展历程和基本概念。如果你是一个有经验的AI从业者,你可以深入研究高级算法和技术,并应用于实际项目中。

    除了文档,Quivr还提供了实用工具和示例代码,帮助你更好地理解和应用所学的知识。你可以通过实际动手的方式,将理论知识转化为实际应用。

    如果你在学习过程中有任何问题,不用担心!Quivr提供了一个互动学习的环境,你可以在这里与其他用户交流、讨论和分享。无论是寻求帮助还是分享你的见解,都可以在这个社区中找到答案和支持。

    😎 加入Quivr,与AI同行 😎

    Quivr是一个令人兴奋的AI工具,它为我们提供了一个全面和实用的学习平台。无论你是一个对AI感兴趣的初学者,还是一个有经验的AI从业者,Quivr都将帮助你更好地理解和应用人工智能技术。

    现在就加入Quivr,开始你的AI之旅吧!让我们一起探索和创造,与AI同行,开创更美好的未来!

    🌟 Quivr官方网站:https://brain.quivr.app/docs/intro.html 🌟

  • AppAgent介绍:一款革命性的多模态智能代理框架,用于操作智能手机应用程序

    📱 AppAgent介绍:一款革命性的多模态智能代理框架,用于操作智能手机应用程序

    你是否厌倦了手动浏览众多智能手机应用程序?想象一下拥有一个智能代理,可以无缝地操作智能手机应用程序,模拟人类般的交互。那么,你的愿望已经实现了,这就是划时代的AppAgent!

    🔖 AppAgent是什么?

    AppAgent是一种基于LLM的全新多模态智能代理框架,专为操作智能手机应用程序而设计。这一创新性框架通过简化的操作空间,使代理能够执行各种操作,如点击和滑动。

    与传统方法需要对系统进行后端访问不同,AppAgent可以独立运行,适用于各种应用程序。其多功能性使其能够高效地导航和使用不同的应用程序。

    🎯 AppAgent如何工作?

    AppAgent的核心功能是其创新的学习方法。代理可以使用两种主要方法来学习操作新的应用程序:自主探索和人类演示学习。

    1️⃣ 自主探索:
    在这种方法中,代理会自主探索应用程序,尝试不同的操作并观察结果。通过这个试错过程,它建立了一个知识库,帮助它在多个应用程序上执行复杂任务。

    2️⃣ 人类演示学习:
    另一种方法是代理通过观察人类演示来学习。通过观察用户与应用程序的交互,它学习必要的操作,并建立对应用程序功能的全面理解。

    📽️ 演示视频:

    通过演示视频最能展示AppAgent的功能。在以下视频中,你可以亲眼见证AppAgent的强大能力:

    1️⃣ 在X(Twitter)上关注用户:
    观看AppAgent在部署阶段轻松地关注X(Twitter)上的用户。视频展示了代理高效完成任务的能力,将你从重复的手动操作中解放出来。

    2️⃣ CAPTCHA实验:
    AppAgent在成功解决CAPTCHA挑战方面展现出其智能的一面。目睹代理如何绕过CAPTCHA验证,证明其高级功能。

    🚀 快速入门指南:

    准备好探索AppAgent的世界了吗?按照以下简单步骤开始:

    🔹 步骤1:先决条件

    • 确保你有启用USB调试的Android设备。
    • 在计算机上下载并安装Android Debug Bridge(adb)。
    • 通过USB将设备连接到计算机。
    • 克隆AppAgent存储库并安装必要的依赖项。

    🔹 步骤2:配置代理

    • AppAgent依赖于多模态模型,如gpt-4-vision-preview,以做出决策。
    • 修改配置文件(config.yaml),包括你的OpenAI API密钥,并调整请求间隔。

    🔹 步骤3:探索阶段

    • AppAgent的探索阶段提供两个选项:自主探索和人类演示学习。
    • 在自主探索中,代理独立探索应用程序,通过试错方式学习。
    • 从人类演示学习中,代理观察用户交互并相应地建立知识。

    🔹 步骤4:部署阶段

    • 一旦完成探索阶段,AppAgent即可投入部署。
    • 利用代理的知识库在各种应用程序上高效执行复杂任务。

    📝 待办事项:

    AppAgent不断发展,未来将有令人期待的更新。敬请关注即将推出的功能和改进,包括:

    • 更强大的学习算法,以更快地适应新的应用程序
    • 与语音助手的集成,实现无缝语音命令
    • 对其他平台和操作系统的支持

    📚 引用:

    如果你在研究或开发中发现AppAgent有用,请引用我们的工作。以下是引用的详细信息:

    作者:Chi Zhang、Zhao Yang、Jiaxuan Liu、Yucheng Han、Xin Chen、Zebiao Huang、Bin Fu、Gang Yu(通讯作者)

    🎉 加入AppAgent革命!

    告别繁琐的手动应用操作,拥抱智能手机交互的未来。通过AppAgent,你的智能手机体验将彻底改变。准备好释放智能手机的全部潜力吧,和AppAgent一起!

    🌐 探索AppAgent的GitHub存储库:
    GitHub – AppAgent

    🙌 为AppAgent社区做出贡献:
    无论你是人工智能爱好者、开发者还是研究人员,我们邀请你加入AppAgent社区。分享你的经验,为框架的改进做出贡献,成为智能手机应用操作革命的一部分。

    让AppAgent成为你的虚拟助手,简化你的智能手机体验,让你在应用程序上做更多事情!📲💪

  • LLM 大语言模型的输出是一段文本,如何计算误差?

    对于输出文本的大型语言模型(如GPT系列模型),计算误差通常涉及到预测下一个词或者一系列词的概率分布,并使用特定的损失函数来衡量模型预测与真实值之间的差异。下面是详细步骤:

    • 模型输出:
    • 模型在给定前文(或上下文)的条件下输出一个概率分布,这个分布表示下一个词是词汇表中每个词的概率。
    • 真实标签:
    • 真实标签通常是一个“one-hot”编码的向量,表示实际出现的下一个词。在这个向量中,实际单词的位置为1,其余位置为0。
    • 损失函数:
    • 对于语言模型,常用的损失函数是交叉熵损失(Cross-Entropy Loss)。这个函数衡量的是模型输出的概率分布和真实标签之间的差异。具体来说,交叉熵损失计算的是模型输出的概率分布的负对数似然在真实单词位置的值。
    • 计算步骤:
    • 对于单个训练样本,如果模型对于下一个词的预测概率分布是 ( P ),真实的单词在词汇表中的位置是 ( y ),则交叉熵损失 ( L ) 可以表示为: [ L=−∑iyi​log(Pi​) ] 在实际操作中,因为 ( y ) 是一个one-hot向量,上式中只有真实单词对应位置的项会有贡献,所以损失简化为: [ L=−log(Py​) ] 其中 ( P_y ) 是模型预测的真实单词的概率。
    • 批量处理:
    • 在处理大量数据时,通常会计算一批数据的平均损失。这是通过对批中每个样本的损失进行求和,然后除以批中样本的数量得到的。
    • 反向传播:
    • 使用损失函数关于模型参数的梯度,来更新模型的参数,以此减少预测误差。

    通过这种方式,即使输出是文本,语言模型也能够在训练过程中通过优化损失函数来减少预测误差,提高对下一个词或一系列词预测的准确性。在实际应用中,模型还会被评估其在多样化的文本生成、理解或其他NLP任务上的性能,这些任务可能需要额外的评估指标,如BLEU、ROUGE或者Perplexity等。