这张图展示了三种不同的基于大型语言模型(LLM)的处理方式:
零/少样本提示(Zero/Few-shot Prompting):直接将用户的查询输入到LLM中,LLM直接返回答案,无需复杂的逻辑流程。
固定LLM流程(Fixed LLM Flow,例如RAG):引入了固定的步骤,比如先通过向量检索获取相关信息(Step 1),再由LLM生成答案(Step 2)。
LLM智能体(LLM Agent):采用动态的工作流。LLM不仅回答问题,还能够定义并更新任务执行的步骤,循环处理直到完成最终答案的生成。
这张图逐步说明了从简单到复杂的LLM应用演进过程,体现了智能代理的灵活性与扩展性。
LLM代理与少样本提示或固定工作流程的主要区别在于其动态决策与自适应能力。在获得一组工具(如代码执行、网络搜索等)访问权限后,LLM代理能够自主决定:
这种适应性让LLM代理能够以最小的配置应对多样化用例,显著提升了系统的灵活性和实用性。
第一步:选择正确的LLM。
选择合适的模型对于实现您期望的性能至关重要。需要考虑的因素包括许可、成本和语言支持等。构建一个LLM代理最重要的考虑因素是模型在编码、工具调用和推理等关键任务上的性能。评估的基准包括:
另一个关键因素是模型的上下文窗口。代理工作流程可能会消耗大量标记——有时多达10万个或更多——更大的上下文窗口非常有帮助。
简单LLM与智能体之间的主要区别在于系统提示。
预期的LLM代理行为可以通过系统提示进行编码,以实现具体的功能和目标。
常见的代理模式可以根据需求进行定制。
工具使用是其中一种模式,代理能够判断何时将查询路由到合适的工具,或者依赖其自身的知识处理问题。
另一个模式是反思,代理在回复用户之前会审查并纠正自己的答案。这种反思步骤还可以被添加到大多数LLM系统中,提升回答的准确性。
原因-行动(ReAct)模式中,代理通过迭代推理解决问题,执行动作,观察结果,并根据需要决定是采取进一步行动还是直接提供响应。
最后,计划-执行模式让代理能够预先规划,将任务分解为子步骤(如有必要),并逐步完成每个步骤,从而实现更复杂的任务。
p.p1{margin:0.0px0.0px0.0px0.0px;font:13.0px'HelveticaNeue'}p.p2{margin:0.0px0.0px0.0px0.0px;font:13.0px'HelveticaNeue';min-height:15.0px}classArxivInput(BaseModel):"""InputfortheArxivtool."""query:str=Field(description="searchquerytolookup")classArxivQueryRun(BaseTool):#type:ignore[override,override]"""ToolthatsearchestheArxivAPI."""name:str="arxiv"description:str=("AwrapperaroundArxiv.org""UsefulforwhenyouneedtoanswerquestionsaboutPhysics,Mathematics,""ComputerScience,QuantitativeBiology,QuantitativeFinance,Statistics,""ElectricalEngineering,andEconomics""fromscientificarticlesonarxiv.org.""Inputshouldbeasearchquery.")api_wrapper:ArxivAPIWrapper=Field(default_factory=ArxivAPIWrapper)#type:ignore[arg-type]args_schema:Type[BaseModel]=ArxivInputdef_run(self,query:str,run_manager:Optional[CallbackManagerForToolRun]=None,)->str:"""UsetheArxivtool."""returnself.api_wrapper.run(query)p常见的内存处理策略包括多种方式,适应不同的对话需求和系统限制。
滑动记忆是一种方法,通过保留最后k轮对话内容并丢弃较旧内容,确保内存容量有限时仍能处理最近的上下文。
令牌内存则专注于保留最近的n个令牌,从而以更精细的粒度控制内存占用。
摘要记忆利用LLM在每轮对话中生成对话摘要,替代存储具体的消息。这种方式能有效减少存储负担,同时保留对话的关键内容。
此外,还可以通过LLM检测并存储关键时刻到长期记忆中,让代理能够“记住”用户的重要信息。这种个性化记忆提升了用户体验,使对话更加智能化和贴合需求。
最后一步是设置编排逻辑,决定LLM生成输出后的具体操作。根据输出结果,可以采取以下两种行动:
通过合理设计编排逻辑,能够确保代理在每个步骤中高效执行任务并与用户保持流畅的交互。
p.p1{margin:0.0px0.0px0.0px0.0px;font:13.0px'HelveticaNeue'}p.p2{margin:0.0px0.0px0.0px0.0px;font:13.0px'HelveticaNeue';min-height:15.0px}deforchestrator(llm_agent,llm_output,tools,user_query):"""OrchestratestheresponsebasedonLLMoutputanditeratesifnecessary.Parameters:-llm_agent(callable):TheLLMagentfunctionforprocessingtooloutputs.-llm_output(dict):InitialoutputfromtheLLM,specifyingthenextaction.-tools(dict)
ictionaryofavailabletoolswiththeirexecutionmethods.-user_query(str):Theoriginaluserquery.Returns:-str:Thefinalresponsetotheuser."""whileTrue:action=llm_output.get("action")ifaction=="tool_call":#Extracttoolnameandparameterstool_name=llm_output.get("tool_name")tool_params=llm_output.get("tool_params",{})iftool_nameintools:try:#Executethetooltool_result=tools[tool_name](**tool_params)#SendtooloutputbacktotheLLMagentforfurtherprocessingllm_output=llm_agent({"tool_output":tool_result})exceptExceptionase:returnf"Errorexecutingtool'{tool_name}':{str(e)}"else:returnf"Error:Tool'{tool_name}'notfound."elifaction=="return_answer":#Returnthefinalanswertotheuserreturnllm_output.get("answer","Noanswerprovided.")else:return"Error:UnrecognizedactiontypefromLLMoutput."恭喜你!现在,你已经拥有了一个能够应对各种用例的强大系统——从竞争分析和高级研究,到自动化复杂工作流程,通通不在话下!无论是提升工作效率,还是解锁更多创新机会,这个系统都能为你带来前所未有的助力。你准备好开始探索它的无限潜力了吗?在实现目标的过程中,你最期待的是什么呢?欢迎在评论区分享你的想法和体验,让我们一起讨论如何更好地利用这一强大工具!| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |