博客

  • NPHardEval: Dynamic Benchmark on Reasoning Ability of Large Language Models via Complexity Classes

    Q: 这篇论文试图解决什么问题?

    A: 这篇论文旨在解决大型语言模型(LLMs)在推理能力评估方面的局限性。现有的评估基准存在几个问题:它们无法全面评估LLMs的推理能力,存在模型过拟合的风险(因为这些基准是公开和静态的),并且依赖于手动评估方法。此外,从理论上讲,研究LLMs解决计算复杂性层次结构中问题(特别是NP-hard或NP-complete问题)的能力也很有趣。为了解决这些问题,作者提出了一个新的基准测试NPHardEval,它基于计算复杂性类的原则,提供了一个更严格和量化的LLMs推理能力评估。这个基准测试包括9个精心选择的推理任务,这些任务根据复杂性类进行分段,每个类包含100个实例,分布在10个不同的难度级别上。通过这个研究,作者提供了LLMs在复杂推理任务中性能的全面分析,并通过比较LLMs在不同复杂性类别中的表现,提供了一个客观和严格的视角。

    Q: 有哪些相关研究?

    A: 这篇论文在几个领域建立了联系,包括: 1. LLMs的推理能力:最近的研究强调了LLMs展现出的前所未有的推理能力。通过简单的提示“让我们逐步思考”,这些模型能够逐步回答问题。这在社区中引起了相当大的兴趣,因为推理能力是人类智能的标志。 2. LLMs性能的基准测试:随着LLMs的发展,评估这些模型的推理能力变得重要。现有的评估方法主要依赖于包含人类生成问题及其标准答案的数据集。但是,这些数据集通常缺乏评估问题难度和回答它们所需的推理程度的定量指标。 3. 逻辑和算法推理:论文通过使用计算复杂性类来定义任务复杂性,超越了依赖于问题回答和数学问题的传统评估方法。这种方法旨在通过定量评估问题所需的推理能力来严格评估LLMs。 4. 通过上下文学习进行推理:论文探讨了LLMs是否能够通过上下文中的例子学习并应用解决问题的技能,而不仅仅是模仿问题解决过程。通过变化提示中例子的难度,作者旨在了解LLMs是否能够推广学习到不同难度级别的新问题。 总的来说,这项工作通过引入新的基于计算复杂性类的推理基准测试,为LLMs的评估提供了新的视角,并旨在推进我们对这些模型在复杂问题解决中能力的理解。

    Q: 论文如何解决这个问题?

    A: 为了解决评估大型语言模型(LLMs)推理能力的局限性,论文介绍了一个名为NPHardEval的新基准测试。这个基准测试通过以下方式解决问题: 1. 基于计算复杂性类的任务:NPHardEval包括9个基于计算复杂性类(P、NP-complete和NP-hard)的任务。这种方法允许在不同难度级别上对LLMs的推理能力进行严格和量化的评估。 2. 自动化任务生成和验证:基准测试使用成熟的算法来解决问题,这使得任务生成和结果验证的自动化成为可能。这种自动化确保了评估过程的准确性和可靠性,并便于更新基准测试中的数据点。 3. 动态更新机制:为了减轻LLMs过拟合基准测试的风险,NPHardEval设计了每月刷新数据点的机制。这有助于保持基准测试随着时间的推移的相关性和严谨性。 4. 通过上下文学习的评估:论文通过变化提示中例子的难度来评估LLMs是否能够推广从上下文中学习到新问题。这有助于区分“学习”和“模仿”之间的区别,并提供对LLMs推理能力的见解。 5. 对比分析:作者在NPHardEval上评估了10个不同的LLMs,包括专有(封闭源代码)和开源模型。这种比较提供了对这些模型在复杂推理场景中相对优势和劣势的见解。 总的来说,NPHardEval基准测试通过提供一个基于计算复杂性类、自动化且动态更新的评估框架,解决了现有LLMs推理能力评估方法的局限性。这种方法提供了对LLMs在复杂问题解决中能力的全面分析,并为未来改进这些模型的推理能力奠定了基础。

    Q: 论文做了哪些实验?

    A: 论文在NPHardEval基准测试上进行了三个主要实验,以评估和了解大型语言模型(LLMs)的推理能力: 1. 基础模型的推理能力比较:这个实验全面比较了各种基础模型,包括专有(封闭源代码)和开源模型。通过使用零次提示作为性能的基本衡量标准,作者评估了LLMs在从多项式时间(P)到NP-complete和NP-hard复杂性级别的任务上的表现。这个实验旨在突出封闭源代码和开源模型在推理能力方面的差异。 2. 跨任务复杂性和难度级别的推理性能:在这个实验中,作者旨在通过Wilcoxon检验评估不同复杂性和难度级别上的任务性能,这是一种非参数统计假设检验。通过分析不同复杂性类别(P、NP-complete和NP-hard)和问题难度级别内的性能,这个实验提供了LLMs处理不同难度任务的见解。 3. 通过上下文学习进行推理能力:这个实验调查了LLMs是否能够通过上下文中的例子推广学习,而不是仅仅模仿问题解决过程。作者使用具有不同难度级别的少数次示例的提示来评估模型是否能够推广学习到具有不同难度级别的新问题。这个实验有助于区分“学习”和“模仿”之间的区别,并提供对LLMs推理能力的见解。 总的来说,这些实验旨在通过在NPHardEval基准测试上评估模型在不同复杂性类别和难度级别上的表现,提供对LLMs推理能力的全面分析。这些发现有助于了解这些模型在复杂问题解决中的优势、劣势和潜在改进领域。

    Q: 有什么可以进一步探索的点?

    A: 有几个领域可以进一步探索,以深入了解大型语言模型(LLMs)的推理能力: 1. 鲁棒性评估:未来的研究可以专注于LLMs的鲁棒性测试,通过改变“温度”等参数来控制响应生成的随机性。这可以帮助了解这些设置如何影响模型的推理能力,并确定模型响应的一致性和可靠性。 2. 动态更新计划:NPHardEval基准测试可以纳入动态更新机制,每月刷新数据点。这将确保LLMs使用当前和变化的任务集进行评估,并允许跟踪它们在时间上的表现。 3. 在多项式(P)下进行细粒度时间复杂度:未来的工作可以利用大O表示法更详细地调查P复杂度类,这可以提供当前难度级别和不同任务难度级别之间交叉比较的补充视角。 4. 推理的自我纠正:实现迭代自我纠正机制可以增强LLMs的推理能力。通过允许LLMs进行多轮自我纠正,可以观察细化过程如何影响其响应的准确性和复杂性。 5. 用于推理的多智能体系统:探索多智能体系统方法可以显著提高LLMs的推理能力。在这种系统中,不同的LLM智能体可以协作解决复杂问题,这可以模仿专家团队,每个团队成员都贡献自己的专业知识,从而得出更全面和细致的解决方案。 6. 将NPHardEval扩展到其他领域:未来的工作可以将基准测试扩展到其他领域,如科学推理、道德推理或创造性问题解决,以全面了解LLMs在各种复杂推理任务中的能力。 通过探索这些方向,研究可以在当前LLMs的能力和局限性方面提供更深入的见解,并推动开发更复杂、现实世界问题解决任务中更复杂和可靠的AI系统。

    Q: 总结一下论文的主要内容

    A: 这篇论文介绍了一个名为NPHardEval的新基准测试,用于评估大型语言模型(LLMs)在复杂任务上的推理能力,这些任务的复杂性高达NP-hard级别。基准测试包括9个精心选择的推理任务,分布在从多项式时间(P)到NP-complete和NP-hard的复杂性级别上。通过在NPHardEval上评估10个不同的LLMs,包括专有(封闭源代码)和开源模型,论文旨在回答以下关键问题: 1. 基础模型的推理能力差距:当前开源模型与封闭源代码模型相比表现如何? 2. 基础模型的推理能力:LLMs在不同复杂性类别和难度级别上的表现如何? 3. 通过上下文学习进行推理:LLMs是否能够推广从上下文中学习到的新问题,而不仅仅是模仿问题解决过程? 论文还讨论了当前评估方法的局限性,并提出了未来研究方向,以增强我们对LLMs在复杂问题解决中能力的理解。这包括鲁棒性评估、动态更新计划、在多项式(P)下进行细粒度时间复杂度、推理的自我纠正和用于推理的多智能体系统。总的来说,NPHardEval基准测试提供了一个全面的分析,以了解LLMs在复杂推理任务中的当前能力,并通过创新方法推动开发更复杂和可靠的AI系统。

  • 探索Osprey: 用视觉指导调整进行像素理解

    欢迎来到我的博客文章,在这篇文章中,我们将深入探索”Osprey: 使用视觉指导调整进行像素理解”的精彩世界。在本文中,我们将探索Osprey的GitHub存储库,并揭示其主要功能和特点。让我们开始吧!

    📚 了解Osprey

    Osprey是一种创新的方法,通过将像素级的遮罩区域与语言指令结合,增强了掩膜语言模型(MLLMs)。这种集成使得细粒度的视觉理解成为可能。Osprey基于输入的遮罩区域生成语义描述,包括简短和详细的描述。

    🎥 观看视频演示

    如果您想看到Osprey的实际应用,请观看视频演示。它提供了Osprey工作原理的视觉展示,并展示了其能力。通过观看演示视频,您可以更好地了解Osprey如何进行像素理解与视觉指导调整。

    💻 尝试在线演示

    您想亲自体验Osprey吗?您可以尝试在线演示!只需点击提供的链接,您就可以访问演示。使用以下凭据登录:

    用户名:osprey
    密码:osprey

    在线演示允许您探索Osprey的功能,并实时查看其结果。快来尝试一下,看看它如何增强您的像素理解任务!

    📥 离线演示安装

    如果您希望在本地运行Osprey,您可以按照以下步骤安装离线演示:

    1. 安装Gradio-Osprey-Demo。
    2. 运行以下命令安装Segment Anything:pip install git+https://github.com/facebookresearch/segment-anything.git
    3. 将ViT-B SAM模型下载到checkpoints文件夹。
    4. 在demo文件夹中运行app.py文件,执行命令cd demo,然后运行python app.py --model checkpoint/osprey_7b

    按照这些步骤,您就可以在本地机器上运行离线演示。

    🔧 安装步骤

    要安装Osprey及其相关包,请按照以下步骤进行:

    1. 运行命令git clone https://github.com/CircleRadon/Osprey.git克隆Osprey存储库,并使用cd Osprey进入Osprey文件夹。
    2. 运行conda create -n osprey python=3.10 -y创建一个新的conda环境,并使用conda activate osprey激活它。
    3. 通过执行pip install --upgrade pip来升级pip。
    4. 运行pip install -e .安装所需的包。
    5. 如果您需要额外的训练案例包,请使用pip install -e ".[train]"pip install flash-attn --no-build-isolation安装它们。

    按照这些步骤,您将安装好Osprey及其依赖项,准备就绪。

    📦 检查点

    Osprey提供了两个预训练模型供您使用:

    1. Convnext-large-CLIP模型
    2. Osprey-7b模型

    要使用Osprey-7b模型,请确保将config.json文件中的”mm_vision_tower”更新为Convnext-large-CLIP模型的路径。

    📝 待办事项列表

    Osprey存储库中有一个活跃的待办事项列表,详细说明了项目的未来发展和改进计划。请关注该存储库以获取更新和新功能!

    🙏 致谢

    Osprey基于LLaVA-v1.5代码库,并利用了SAM(Segmentation-Aware Modulation)模型的分割结果。该项目感谢这些框架在其开发中的贡献。

    📚 BibTeX引用

    如果您想在您的研究中引用Osprey,请使用以下BibTeX条目:

    @misc{Osprey,
      title={Osprey: 使用视觉指导调整进行像素理解},
      author={Yuqian Yuan, Wentong Li, Jian Liu, Dongqi Tang, Xinjie Luo, Chi Qin, Lei Zhang和Jianke Zhu},
      year={2023},
      eprint={2312.10032},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
    }

    🌟 结论

    在本篇博客文章中,我们探索了”Osprey: 使用视觉指导调整进行像素理解”的GitHub存储库。我们发现了它的特点,观看了视频演示,并了解了如何尝试在线和离线演示。我们还介绍了安装步骤、可用的检查点,并感谢了相关框架的贡献。Osprey为细粒度的视觉理解开启了令人兴奋的可能性,我们迫不及待地期待它在未来的发展!

    以上就是我们对Osprey的探索!希望您找到了有关它的有用信息,并受到了启发。如果您有任何问题或想法,请随时在下方留下评论。敬请期待更多令人激动的人工智能项目和进展。祝您探索愉快!🚀🔍

  • UIUC && 清华 | 提出Magicoder大模型:7B模型堪比ChatGPT和Gemini

    🎉 欢迎来到我的博客!今天我将为大家介绍一项令人兴奋的技术成果——Magicoder大模型。这个模型由伊利诺伊大学香槟分校(UIUC)和清华大学联合提出,创造了一个7B规模的代码生成模型,媲美了ChatGPT和Gemini。让我们一起来看看这个令人惊叹的研究成果!

    背景介绍
    代码生成一直是计算机科学领域的一个挑战性问题。近年来,基于大模型的代码生成取得了显著的突破,并被广泛应用于软件开发。最初,闭源模型如GPT-3.5 Turbo(即ChatGPT)和GPT-4在代码生成方面占据主导地位。为了进一步推动开源语言模型(LLM)在代码生成领域的发展,提出了SELF-INSTRUCT方法来引导LLM的指令遵循能力。

    Magicoder的创新之处
    在过去的研究中,研究人员通常使用强大的教师模型(如ChatGPT和GPT-4)设计编码指令,然后用生成的数据微调较弱的学生模型以提炼知识。然而,这些方法依赖于一系列狭义的预定义任务或启发式方法,可能继承了LLM的固有偏见。

    Magicoder通过提出OSS-INSTRUCT方法来解决这个问题。OSS-INSTRUCT利用强大的LLM,从开源环境中收集任意随机的代码片段,汲取灵感,自动生成新的编码问题。这样,Magicoder能够直接从开源学习创造高质量和创造性的代码指令。通过提供不同的种子代码片段,OSS-INSTRUCT可以产生多样化、逼真且可控的代码指令。

    实验结果和评估
    研究人员在广泛的编程任务中对Magicoder进行了评估,包括Python文本到代码生成的HumanEval和MBPP,多语言代码生成的MultiPL-E,以及解决数据科学问题的DS-1000。他们还使用了增强的HumanEval+和MBPP+数据集进行更严格的模型评估。

    实验结果显示,Magicoder-CL和MagicoderS-CL都显著提升了基础的CODELLAMA-PYTHON-7B模型。Magicoder-CL在所有测试基准上都超过了WizardCoder-CL-7B、WizardCoder-SC-15B和所有参数小于或等于16B的SOTA LLM。而MagicoderS-CL在HumanEval上的pass@1结果与ChatGPT持平,并在更严格的HumanEval+上超过了它,表明MagicoderS-CL能够生成更稳健的代码。

    除了在CODELLAMA-PYTHON-7B基础模型上的结果外,研究人员还在DeepSeek-Coder-Base 6.7B上应用了OSS-INSTRUCT,创建了Magicoder-DS和MagicoderS-DS。这两个模型在HumanEval、HumanEval+、MBPP和MBPP+上的表现同样优于DeepSeek-Coder-Instruct。

    结论
    Magicoder是一个令人振奋的研究成果,它通过OSS-INSTRUCT方法实现了在代码生成领域的重大突破。通过直接从开源学习创造高质量和创造性的代码指令,Magicoder能够提供更多样化、逼真且可控的编码能力。实验证明,Magicoder-CL和MagicoderS-CL在各项评估中都超越了其他模型,包括ChatGPT和Gemini。这意味着Magicoder在代码生成领域有着巨大的潜力。

    这项研究的成功不仅在于提出了创新的方法,还在于充分利用了大规模的开源代码资源。通过从开源环境中学习,Magicoder能够更好地克服LLM的固有偏见,并产生高质量的代码指令。

    未来,我们可以期待Magicoder的进一步发展和应用。它有望为软件开发人员提供更强大的代码生成工具,帮助他们提高效率和质量。同时,Magicoder也为研究人员提供了一个有趣的研究方向,可以进一步探索代码生成和自动化编程的可能性。

    如果你对Magicoder感兴趣,你可以在论文中详细了解其原理和实验结果。论文链接:https://arxiv.org/pdf/2312.02120.pdf

    此外,Magicoder的源代码也已经开源,你可以在GitHub上找到它:https://github.com/ise-uiuc/magicoder

    希望这篇博客能够为大家介绍清楚Magicoder大模型的重要性和创新之处。它不仅是代码生成领域的一项重要进展,还为我们展示了大模型在软件开发中的巨大潜力。让我们拭目以待,期待Magicoder在未来的发展中能够带来更多的惊喜和创新!💫🚀

  • LangChain代理:语言模型的智能行动者

    在人工智能的浪潮中,LangChain代理如同一颗冉冉升起的新星,它不仅仅是一个程序,更是一个智能体,能够执行一系列动作,就如同我们的大脑一般。让我们来揭开LangChain代理的神秘面纱,探索它如何像人类一样思考和行动。

    智能体的诞生

    LangChain代理的核心在于它的语言模型,它能够像大脑一样处理一系列要执行的动作。当你邀请朋友去吃饭时,你会考虑许多问题:他能吃辣吗?喜欢什么食物?去哪里吃?这一系列的思考过程,现在由LangChain的Large Language Models(LLM)来完成。

    LangChain的设计是将一系列动作编码在代码中,就像一条条链链在一起。在代理模型中,语言模型被用作推理引擎,用来决定执行哪些动作,以及这些动作的执行顺序。

    关键组件的构架

    LangChain代理涉及到几个关键组件,每个组件都是实现智能的关键:

    • 代理(Agent):由语言模型和提示词驱动,决定下一步行动。
    • 工具(Tool):代理可以调用的功能,如搜索或数据访问。
    • 工具包(Toolkit):将多个工具组合,共同完成目标。
    • 代理执行器(AgentExecutor):代理的运行平台,负责调用代理及执行动作。

    LangChain提供了多种代理类型,包括Zero-shot ReAct、Structured Input ReAct、OpenAI Functions等,每种代理都有其独特的功能和应用场景。

    工具的智能化

    工具是代理执行任务时调用的功能,它们通常用于与外部世界交互。LangChain官方提供了一个全面的工具列表,从维基百科搜索到资料库访问,应有尽有。

    如何运作?

    LangChain提供了丰富的工具,例如Search工具、AWS工具、Wikipedia工具等。这些工具都是BaseTool的子类,通过执行run函数,可以激活工具的功能。我们可以看到如何实际使用这些工具。安装所需的Python包后,您可以轻松创建工具实例或通过LangChain提供的辅助函数load_tools加载工具。

  • 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博客