性软件one一个就够了?让大模型自动推理工作

各位老铁们,大家好,今天由我来为大家分享性软件one一个就够了,以及让大模型自动推理工作的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

人的专注力只有10分钟,通篇言简意赅,一看就懂!

①什么是Agent?

②他们是如何工作的?

③工具、代理执行器代码实跑

langchain更新太快了,我们整个教程默认统一使用版本0.0.235!

雄哥一直都说,一口吃不成胖子!成功都是一步步走出来的!

总共10篇,每篇都有任务,你只要跟着走!有条件的到星球打卡,你肯定有所获!那些只看不做的,最后也就一晃眼,啥都得不到!

以后你想看想学了,不好意思,一天一个大版本,你已经跟不上了!

第一部分:什么是Agent?

Agent,也就是代理,它的核心就是利用一个语言模型来处理一系列要执行的动作。就像我们的大脑,我们做一件事,例如请强哥去吃饭,那我要想强哥能不能吃辣,喜欢吃哪些菜?去哪里吃?吃多久?等等诸如此类的过程,那现在LLM也能做这件事了!

LangChain的链(第六课,记得吧?)将一系列的动作硬编码在代码中。而在Agent中,语言模型被用作推理引擎,来确定应该执行哪些动作以及以何种顺序执行。

他这就涉及到几个关键组件,接下来我们做逐一介绍:

Agent代理Tool工具Toolkit工具包AgentExecutor代理执行器

1.1Agent

Agent由一个语言模型和一个提示词驱动,决定下一步要采取什么措施的类。提示词可以包括以下内容:

代理的个性(用于使其以特定方式回应)代理的背景(用于为其提供更多关于所要执行任务类型的上下文信息)引导策略(用于激发更好的推理能力)

LangChain提供了不同类型的代理(先介绍,等下说怎么用):

#Zero-shotReAct

利用ReAct框架根据工具的描述来决定使用哪个工具,可以使用多个工具,但需要为每个工具提供描述信息。工具的选择单纯依靠工具的描述信息。

#StructuredInputReAct

相较于单一字符串作为输入的代理,该类型的代理可以通过工具的参数schema创建结构化的动作输入。"参数schema"可以看作是一份说明书,告诉代理应该如何接受和理解输入数据。这种说明书定义了输入数据的结构,就像填写表格或问卷一样。"StructuredInputReAct"能够更好地处理组织良好、结构化的输入数据,这有助于更精确地执行任务和操作。这就好比让计算机明白你在做什么,而不只是听一句普通的话。

#OpenAIFunctions

该类型的代理用来与OpenAIFunctionCall(Langchain的语言链)机制配合工作。它可以用来执行各种与语言有关的操作,比如翻译、文本生成、问题回答等等。

#Conversational

这类代理专为对话场景设计,使用具有对话性的提示词,利用ReAct框架选择工具,并利用记忆功能来保存对话历史。它可以让计算机理解你的问题或指令,并用自然的方式回答你,就像在与一个真实的人进行对话一样。

#Selfaskwithsearch

这类代理利用工具查找问题的事实性答案。这个组件对于自动化信息查找和知识获取非常有用,可以用在各种应用中,比如自动化数据收集、自动问答系统、智能助手等等。

#ReActdocumentstore

利用ReAct框架与文档存储进行交互,使用时需要提供Search工具和Lookup工具,分别用于搜索文档和在最近找到的文档中查找术语。

#Plan-and-executeagents

代理规划要做的事情,然后执行子任务来达到目标。

这里我们多次提到“工具”,也就是Tool,接下来我们就介绍什么是Tool。

1.2Tool工具

这是代理可以调用的功能,通常用来与外部世界交互,比如维基百科搜索,资料库访问等。langchain官方有一个很全面的工具包列表,去他官网看看:

https://python.langchain.com/docs/integrations/tools/

1.3Toolkit

通常,在达成特定目标时,需要使用一组工具。LangChain提供了Toolkit工具包的概念,将多个工具组合在一起。

1.4AgentExecutor

代理执行器是代理的运行时。程序运行中,由它来调用代理并执行其选择的动作。

第二部分:他们是怎样工作的?

LangChain提供了一系列工具,比如Search工具,AWS工具,Wikipedia工具等。这些工具都是BaseTool的子类。通过调用run函数,执行工具的功能。

我们以LangChain内置的工具DuckDuckGoSearchRun为例,来看看如何使用工具。

注,要使用DuckDuckGoSearchRun工具,需要安装以下python包:

pipinstallduckduckgo-search

2.1通过工具类创建工具实例

该类提供了通过DuckDuckGo搜索引擎搜索的功能。

fromlangchain.toolsimportDuckDuckGoSearchRunnsearch=DuckDuckGoSearchRun()nsearch.run("WhoiswinnerofFIFAworldcup2018?")

你应该得到如下输出:

The2018FIFAWorldCupwasthe21stFIFAWorldCup,...MarioZagallo(Brazil)andFranzBeckenbauer(Germany)havealsoachievedthefeat.

注,限于篇幅,这里对模型的回答文本在本讲中做了截取。

2.2通过辅助函数load_tools加载

LangChain提供了函数load_tools基于工具名称加载工具。

先来看看DuckDuckGoSearchRun类的定义吧:

classDuckDuckGoSearchRun(BaseTool):n"""ToolthataddsthecapabilitytoquerytheDuckDuckGosearchAPI."""name="duckduckgo_search"ndescription=(n"AwrapperaroundDuckDuckGoSearch."n"Usefulforwhenyouneedtoanswerquestionsaboutcurrentevents."n"Inputshouldbeasearchquery."n)

发现没有!name变量定义了工具的名称!

这正是我们使用load_tools函数加载工具时所需要的。当然,目前比较棘手的是,load_tools的实现对工具名称做了映射,因此并不是所有工具都如实使用工具类中定义的name。

比如,DuckDuckGoSearchRun的名称是duckduckgo_search,但是load_tools函数需要使用ddg-search来加载该工具。参考源代码load_tools.py了解工具数据初始化的详情。

用法:

fromlangchain.agentsimportload_toolsnnntools=load_tools(['ddg-search'])nsearch=tools[0]nsearch.run("WhoiswinnerofFIFAworldcup2018?")

你应该看到与方法1类似的输出。

最后,分享一个辅助函数get_all_tool_names,用于获取所有工具的名称。

fromlangchain.agentsimportnget_all_tool_namesget_all_tool_names()

当前LangChain版本0.0.235中,我们应该能看到如下列表:

['python_repl',n'requests',n'requests_get',n'requests_post',n'requests_patch',n'requests_put',n'requests_delete',n'terminal',n'sleep',n'wolfram-alpha',n'google-search',n'google-search-results-json',n'searx-search-results-json',n'bing-search',n'metaphor-search',n'ddg-search',n'google-serper',n'google-serper-results-json',n'serpapi',n'twilio',n'searx-search',n'wikipedia',n'arxiv',n'pupmed',n'human',n'awslambda',n'sceneXplain',n'graphql',n'openweathermap-api',n'dataforseo-api-search',n'dataforseo-api-search-json',n'news-api',n'tmdb-api',n'podcast-api',n'pal-math',n'pal-colored-objects',n'llm-math',n'open-meteo-api']

第三部分:工具、代理执行器代码实跑

Agent通常需要Tool配合工作,因此我们将Agent实例放在Tool之后。我们以Zero-shotReAct类型的Agent为例,来看看如何使用。代码如下:

fromlangchain.agentsimportload_toolsnfromlangchain.agentsimportinitialize_agentnfromlangchain.agentsimportAgentTypenfromlangchain.llmsimportOpenAInnnimportosnos.environ['OPENAI_API_KEY']="您的有效openaiapikey"nnnllm=OpenAI(temperature=0)ntools=load_tools(["ddg-search","llm-math"],llm=llm)nagent=initialize_agent(tools,llm,nagent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,verbose=True)nagent.run("WhatistheheightdifferencebetweenEiffelTowerandTaiwan101Tower?")

雄哥这里解释一下代码:

设置环境变量OPENAI_API_KEY并实例化OpenAI语言模型,用于后续的推理。通过load_tools加载DuckDuckGo搜索工具和llm-math工具。通过initialize_agent函数初始化代理执行器,指定代理类型为ZERO_SHOT_REACT_DESCRIPTION,并打开verbose模式,用于输出调试信息。通过run函数运行代理。

参考initialize_agent的实现,我们会看到它返回的是AgentExecutor类型的实例

这也是代理执行器的常见用法!请前往源代码initialize.py了解更多初始化代理执行器的详情。

definitialize_agent(ntools:Sequence[BaseTool],nllm:BaseLanguageModel,nagent:Optional[AgentType]=None,ncallback_manager:Optional[BaseCallbackManager]=None,nagent_path:Optional[str]=None,nagent_kwargs:Optional[dict]=None,n*,ntags:Optional[Sequence[str]]=None,n**kwargs:Any,n)->AgentExecutor:n"""LoadanagentexecutorgiventoolsandLLM.

雄哥解释一下代码:

雄哥先初始化一个代理(agent)执行器(AgentExecutor)。函数的参数如下:

-`tools`是一个序列(Sequence),包含了一些基础工具(BaseTool)。

-`llm`是一个基础语言模型(BaseLanguageModel)。

-`agent`是一个可选参数,代表代理类型(AgentType)。

-`callback_manager`也是一个可选参数,代表回调管理器(BaseCallbackManager)。

-`agent_path`是一个可选参数,代表代理路径的字符串。

-`agent_kwargs`是一个可选参数,代表代理的关键字参数的字典。

-`tags`也是一个可选参数,代表标签的序列。

-`**kwargs`是一个特殊的参数,用于接收任意其他未命名的关键字参数。

函数的返回值类型是`AgentExecutor`。

你应该得到如下输出:

>EnteringnewAgentExecutorchain...nIneedtofindouttheheightsofbothtowers.nAction:duckduckgo_searchnActionInput:"EiffelTowerheight"nObservation:Itwasthefirststructureintheworldtosurpassboththe200-metreand300-metremarkinheight.Duetotheadditionofabroadcastingaerialatthetopofthetowerin1957,itisnowtallerthantheChryslerBuildingby5.2metres(17ft).Eiffel'sconceptofa300-metre(984-foot)towerbuiltalmostentirelyofopen-latticewroughtironarousedamazement,skepticism,andnolittleoppositiononaestheticgrounds.Whencompleted,thetowerservedastheentrancegatewaytotheexposition.Builtforthe1889World'sFairinParis,theEiffelTowerisa1,000-foottallwroughtirontower,consideredanarchitecturalwonderandoneoftheworld'smostrecognizablestructures.TheEiffelTowerreachedtheheightof330meters(1,083feet)onMarch15,2022thankstothissuccessfulanddizzyingoperationcarriedoutbyhelicopter.Whichwasafirst!BrowseourresourcesonthelinksbetweentheTowerandradio.DiscoverhowdidradiosavetheTower.AllabouttheTower'sScientificUsesHeightoftheEiffelTower.ThemainstructureoftheisEiffelToweris300meterstall,althoughtheheightincludingantennasis324meters.Thisheightisroughlyequivalenttothatofan81-storeybuilding.Interestingly,theEiffelTowercanshrinkby6inchesduringcoldtemperatures.Thetowerhasasquarebasethatmeasures125meters...nThought:IneedtofindouttheheightofTaiwan101Tower.nAction:duckduckgo_searchnActionInput:"Taiwan101Towerheight"nObservation:DesignedbyC.Y.Lee&Partners,alocalarchitecturalfirm,theskyscraperhas101storiesandreachesaheight,includingthespire,of1,667feet(508metres).AtthetimeofitsofficialopeninginOctober2004,itwastheworld'stallestbuilding,havingsurpassedthePetronasTwinTowersinKualaLumpur,Malaysia.Taipei101isthetallestbuildinginTaiwan.TheelevatorsofTaipei101thattransportpassengersfromthe5thtothe89thfloorin37seconds(attaining60.6km/h...Theheightof101floorscommemoratestherenewaloftime:thenewcenturythatarrivedasthetowerwasbuilt(100+1)andallthenewyearsthatfollow(1January=1-01...Lastupdated:Sep1,2021?3minreadTaipei101,locatedinTaiwan,isoneofthetallesthigh-risebuildingsintheworld.Visitorscanexplorethebuildingthatincludesalargeshoppingmall,world-classrestaurants,andanoutdoorobservationdeck.LearnFromtheBestFoodDesign&StyleArts&EntertainmentMusicBusinessSports&GamingWithaheightof1667feetor508meters,Taipei101hasthedistinctionofbeingthethirdtallestbuildingintheworld,andtallestoutsidetheMiddleEast.Itsspireaddstoitsheight,andthetotalmakesithigherthantheKualaLumpurPetronasTwinTowers.TheTaipei101towerinTaipei,Taiwan,wastheworld'stallestbuildingfrom2004until2010whenitwasbeatenoutbyDubai'simpressiveBurjKhalifa.Regardless,Taipei101isstillconsideredthetallestgreenbuildingintheworldforitsinnovativeandenergy-savingdesign.Eventhe2015-2016NewYear'sEvefirework'sshowwasnature...nThought:Inowknowtheheightsofbothtowers,soIcancalculatethedifference.nAction:CalculatornActionInput:330-508nObservation:Answer:-178nThought:Inowknowthefinalanswer.nFinalAnswer:TheheightdifferencebetweenEiffelTowerandTaiwan101Toweris178meters.nnn>Finishedchain.nnn'TheheightdifferencebetweenEiffelTowerandTaiwan101Toweris178meters.'

今天作业

跟着雄哥上面的代码,跑一个简单的实例,并且截图上来!

这是雄哥的colab地址(跑这里不算完成作业):

https://colab.research.google.com/drive/1lAqySlOqwc4NCTurYhZivzz6mEJ4_dTZ?usp=sharing

雄哥之前都说过,大模型落地有四种主流方法,LangChain就是其中之一(其他三种看下面)!

【先导篇】0基础大模型实战!开波!"这个老板真傻!吃饭的家伙都公开!

今天我们围绕落地一个LangChain应用为目标,展开一个为期10期的精讲!带大家0基础入门LangChain!

关于性软件one一个就够了,让大模型自动推理工作的介绍到此结束,希望对大家有所帮助。