|
LLM Agents 作为一个新兴且极具潜力的领域,正逐渐改变人们与技术交互的方式。本文将深入探讨 LLM Agents,重点聚焦于 ReAct 框架,剖析其原理、优势以及实际应用。 ingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">一、AI Agents 的演进“Agents” 这一概念在人工智能领域并非新生事物。从早期简单的语音激活玩具到如今功能强大的数字助理,AI Agents 经历了漫长的发展历程。 1916 年的 Radio Rex 是最早的例子之一,这是一款语音激活玩具,当你呼唤它的名字时,它会做出反应,尽管功能简单,却开启了机器依照指令行动的先河。1952 年,Bell Labs 推出 Audrey,它能够识别 spoken digits,为语音识别技术奠定了基础。 1960 年代,MIT 的 Joseph Weizenbaum 创造了 ELIZA,它通过简单的模式匹配模拟对话。虽然 ELIZA 的回复并非基于真正的理解,但却引发了人们对机器智能交互的思考,产生了著名的 ELIZA 效应。1970 年代,Carnegie Mellon University 开发的 Harpy,是早期的语音识别系统,它利用语言模型减少错误,能理解大约 1000 个单词 。 到了 1980 年代,IBM 的 Tangora 使用统计方法识别多达 20000 个单词,为现代语音转文本软件奠定了基础。1990 年代,Dragon NaturallySpeaking 成为首批商业语音识别系统之一,能够实时将语音转录为文本,改变了人们与计算机的交互方式。同年,IBM Simon 智能手机结合了基本的语音识别和短信功能,预示着多功能数字助理的到来。 2011 年,Apple 推出 Siri,利用自然语言处理理解用户请求,执行各种任务并进行基本对话。2014 年,Amazon 的 Alexa 问世,迅速融入智能家居生态系统,不仅能回答问题,还能管理家庭设备、下单购物和提供娱乐 。这些系统都可被视为 “Agents”,其中部分借助人工智能的系统,如 Siri 和 Alexa,属于 “AI Agents”。 ingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">二、LLM Agents 的崛起随着 LLM 的发展,LLM Agents 应运而生。LLM Agents 是能够利用 LLM 对问题进行推理、制定解决方案并借助一系列工具、内存和检索执行计划的系统。它主要包含四个关键组件:检索、推理、记忆和工具使用。 检索功能使 Agent 能够获取实时数据,确保信息的准确性。例如,在金融领域,Agent 可以获取最新的市场趋势数据,为投资者提供及时的建议。推理方面,通过先进的提示技术,如思维链,引导 Agent 做出决策。以医疗领域为例,Agent 可以根据患者的症状和医学知识进行推理,提供初步的诊断建议。记忆包括短期记忆(近期对话历史)、长期记忆(结构化信息存储)和特定任务回忆,使 Agent 能够适应不同场景并提供个性化服务。工具使用则让 Agent 能够与外部系统交互,获取数据或执行操作,比如在电商场景中,Agent 可以调用库存系统查看商品是否有货 。
ingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">三、ReAct 框架解析ingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">3.1 ReAct 框架概述ReAct,即 Reasoning and Acting,于 2023 年 3 月在论文 “ReAct: Synergizing Reasoning and Acting in Language Models” 中被提出。它旨在让 LLM 在解决任务时更像人类一样思考和行动。 ReAct 框架主要包含三个步骤:推理、行动和观察。当接收到问题时,Agent 首先进行推理,生成解决问题的思路、计划或策略。然后,根据推理结果采取行动,比如搜索信息或与环境进行交互。最后,Agent 观察行动产生的新信息,并利用这些信息进一步推理和行动,直到得出最终答案。 以 “What is the population of the capital of France?” 为例,ReAct Agent 会先推理出需要将问题拆分为两部分:找出法国的首都,然后查询该首都的人口。接着,它会执行搜索 “capital of France” 的行动,观察搜索结果得知法国首都是巴黎。之后,再次推理需要查找巴黎的人口,并采取搜索 “population of Paris” 的行动 。 ingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">3.2 ReAct 框架的优势ReAct 框架具有显著的优势。首先是协同组合,它将推理和行动相结合,发挥两者的协同作用。通过推理指导行动,行动又为进一步推理提供依据,形成一个高效的循环。其次,ReAct 框架提高了可解释性和可信度。它生成的任务解决轨迹比没有推理痕迹的基线更具可解释性,让人们能够区分模型内部知识和外部环境信息。最后,ReAct 框架使问题解决过程更具事实依据和可靠性。借助外部知识库,Agent 能够获取更准确的信息,从而得出更可靠的答案 。 ingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">四、基于 ReAct 框架构建文本到 SQL 的 AgentingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">4.1 数据库搭建为了构建一个文本到 SQL 的 Agent,首先需要搭建一个示例数据库。这里使用 SQLite 数据库,并创建两个表:“companies” 表用于存储公司详细信息,包括 id、title 和 description;“customers” 表用于存储客户信息,包括 id、name、revenue 以及一个外键 company_id,用于关联 “companies” 表。 importsqlite3defcreate_sample_database():"""CreateasimpleSQLitedatabasewitha'companies'tableanda'customers'table.Eachcompanyhasanid,title,anddescription.Eachcustomerhasanid,name,revenue,andaforeignkeycompany_idreferencingthecompaniestable.Thisfunctionresetsthedatabaseforacleanslate."""conn=sqlite3.connect("sample.db")cur=conn.cursor()#EnableforeignkeysupportinSQLite.cur.execute(" RAGMAforeign_keys=ON;")#Createthecompaniestable.cur.execute("""CREATETABLEcompanies(idINTEGERPRIMARYKEY,titleTEXTNOTNULL,descriptionTEXT)""")#Createthecustomerstablewithaforeignkeytocompanies.cur.execute("""CREATETABLEcustomers(idINTEGERPRIMARYKEY,nameTEXTNOTNULL,revenueREALNOTNULL,company_idINTEGER,FOREIGNKEY(company_id)REFERENCEScompanies(id)ONDELETESETNULL)""")#Insertsampledataintocompanies.companies_data=[(1,'AcmeCorp','Leadingproviderofinnovativesolutions'),(2,'BetaInc','Specializesindataanalyticsandinsights'),(3,'GammaLLC',' ioneerincloudcomputingservices')]cur.executemany("INSERTINTOcompanies(id,title,description)VALUES(?,?,?)",companies_data)#Insertsampledataintocustomers.customers_data=[(1,'Alice',1500.0,1),(2,'Bob',2400.0,2),(3,'Charlie',1800.0,1),(4,'Diana',3200.0,3),(5,'Ethan',2100.0,2)]cur.executemany("INSERTINTOcustomers(id,name,revenue,company_id)VALUES(?,?,?,?)",customers_data)conn.commit()returnconningFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">4.2 系统提示设置接下来,需要为 LLM 设置系统提示,向其提供数据库模式。系统提示告知 LLM 有关表及其列的信息,以便它能够生成有效的 SQL 查询。
system_prompt=f"""YouareahelpfulassistantthattranslatesnaturallanguagequeriesintoSQLqueriesforthefollowingSQLitedatabaseschema.Table"companies":-id:INTEGERPRIMARYKEY-title:TEXTNOTNULL-description:TEXTTable"customers":-id:INTEGERPRIMARYKEY-name:TEXTNOTNULL-revenue:REALNOTNULL-company_id:INTEGER(Foreignkeyreferencingcompanies(id))Instructions:1.Whenyoureceiveatextquerythatisrelevanttothisschema,generatethecorrespondingSQLquery.ReturnonlytheSQLquerywithnoadditionalcommentaryorcharacterslike```orquotese.g.SELECT*FROMCOMPANIES.2.Ifyoureceiveatextquerythatincludesanerrormessage,generateacorrectedSQLquerythatfixestheerror,againreturningonlytheSQLquery.3.Ifthequeryisirrelevant,donotoutputanyextratext.""" 4.3 ReAct 逻辑实现Agent 的核心逻辑围绕 ReAct 循环展开:使用 LLM 从自然语言请求生成 SQL 查询,执行查询,如果出现错误,则将错误消息反馈给 LLM,以便其调整并迭代,直到查询成功运行。 importtimedeftest():nl_request=input("Enternaturallanguagequery:").strip()ifnotnl_request:print("Nonaturallanguagequeryprovided.")returnconn=sqlite3.connect("sample.db")max_iterations=5iteration=0feedback=Nonefinal_result=Nonewhileiteration<max_iterations:iteration+=1print(f"---Iteration{iteration}---")sql_query=generate_sql_query(nl_request,feedback)ifnotsql_query:print("NocorrespondingSQLqueryforthisquery.")breakresult,error=execute_query(conn,sql_query)iferror:print(f"SQLexecutionerror:{error}")feedback=f"Thequeryresultedinthefollowingerror:{error}.PleaseadjusttheSQLqueryaccordingly."time.sleep(1)else:ifnotresult:print("Noresultsfound.")else:print("Queryexecutedsuccessfully.Results:")forrowinresult:print(row)final_result=resultbreakiffinal_resultisNone:print("FailedtogenerateavalidSQLqueryafterseveraliterations.")conn.close()在这个简单的示例中,由于数据库较为简单,Agent 通常能一次生成正确的 SQL 查询。但在更复杂的数据库场景中,ReAct Agent 可能需要多次迭代来优化查询,确保最终的 SQL 准确匹配用户的请求 。 五、ReAct 框架的应用拓展除了文本到 SQL 的转换,ReAct 框架在其他领域也有着广泛的应用前景。在智能客服领域,ReAct Agent 可以更好地理解用户的复杂问题,通过推理和行动,调用知识库、查询相关数据,为用户提供更准确、更全面的解答。在智能写作辅助方面,它可以根据作者的写作意图,推理出合适的写作思路,然后调用各种工具,如语法检查工具、素材库等,帮助作者提升写作质量 。 在数据分析领域,ReAct Agent 能够根据用户提出的分析需求,推理出所需的数据和分析方法,然后调用相应的数据处理工具和算法,生成分析报告。例如,当用户想要分析某产品在不同地区的销售趋势时,Agent 可以先推理出需要从销售数据库中获取相关数据,然后使用数据分析工具进行数据处理和可视化,最终向用户呈现清晰的分析结果 。 本文详细介绍了 LLM Agents 的发展历程,重点探讨了 ReAct 框架。从 AI Agents 的早期雏形到 LLM Agents 的兴起,再到 ReAct 框架的深入剖析和实际应用,我们看到了人工智能在交互能力和问题解决能力上的不断进步。ReAct 框架通过将推理和行动相结合,为 LLM Agents 的发展提供了一个强大的解决方案,展现出了显著的优势和广泛的应用潜力 。 |