AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


还不会写WorkFlow?"讲课"即工作流,摩根大通用一段Prompt诱导LLMs自主生成
发布日期:2024-05-12 11:38:25 浏览次数: 1684




本文:5200字   阅读14分钟 

随着各种自动生成Prompt的工具被开源,Prompt Engineer的生存空间也在不断被压缩,一个明显的转变已经出现:要想在ALL IN AI的状态下生存下去,你要能从Prompt Engineer切换成WorkFlow Engineer。而WorkFlow领域的竞争也是非常激烈的,其中不乏摩根大通(J.P.摩根)AI研究中心这样的金融机构。

图片由DallE生成

摩根大通的AI研究机构竟然通过一段很简短的Prompt“教会”了让LLMs自动生成工作流。摩根大通人工智能的最新研究FlowMind表明,通过自动生成利用API来可靠地回答用户查询并执行自发任务的完整工作流,FlowMind在简单和中等难度问题上达到95%以上的准确率,引入用户反馈后,FlowMind+feedback将所有难度的准确率进一步提高到接近100%,同时不牺牲安全性和隐私性。要知道99.5%和100%在金融领域意味着什么?

这篇论文(2404.13050)最初发在ICAIF ’23, November 27–29, 2023, Brooklyn, NY, USA 上,为我们揭示了一个令人兴奋的研究成果FlowMind。FlowMind的一个关键特性在于其对LLMs经常遇到的幻觉的鲁棒性有一个完美的解决办法。研究者通过应用程序编程接口(APIs)的帮助来固定LLMs的推理。这些API是由领域专家开发和测试的可靠函数,确保了它们的准确性和可靠性。工业中开发的专有软件通常由这类可靠的API组成。FlowMind能够利用提供给它的API,同时确保LLMs不直接与任何专有代码或数据互动,保护代码和数据的隐私。这种保护是通过允许LLMs仅在API的高级描述上操作来实现的,增强了安全性并确保了工作流的可靠生成。

对于重复性任务,传统RPA需要领域专家手工设计工作流程,然后部署执行。而对于自发的、不可预测的任务,就无法轻易通过预定义的流程自动化了。

Flowmind如何实现?

01


FlowMind利用大语言模型的能力,可以自动生成工作流程来处理自发的任务。它将可用的API函数"讲授"给语言模型,然后语言模型根据用户需求,自主编写工作流程代码,调用这些API函数来完成任务,并可以与用户交互优化工作流。

这种称为FlowMind的新方法使用一种特殊的"讲座"提示来教育LLM关于上下文、可用的API以及编写工作流代码的必要性。FlowMind框架的两个关键阶段:


阶段1:遵循提出的通用讲座配方(lecture recipe)来生成一个讲座提示(lecture prompt),向语言模型(LLM)介绍上下文、APIs,并让其准备好编写代码。


阶段2:LLM可以接收用户的查询或任务,利用引入的APIs自动生成工作流代码。工作流代码被执行以输出结果。在阶段2,我们还在FlowMind和用户之间启用了一个反馈循环,FlowMind以通俗易懂的语言提供生成的工作流的高层描述,用户可以审阅并提供反馈,FlowMind据此优化工作流。

这两个阶段恰好对应了研究者介绍的两个主要内容,即"向语言模型讲课"和"工作流生成与执行"。以下就是这个通用讲座的配方(Prompt):

想象我们正在开发一个文档分析机器人。该机器人的任务是根据用户提供的信息进行查询和响应。


你可以使用的主要函数有:

·get_all_reports():返回所有的报告。
·get_report(fund_name):返回包含指定基金名称的报告。
·segment_report(report):对输入的报告进行分段解析,每个分段描述一个基金。
·fetch_block(report, fund_name):返回报告中与指定基金对应的分段。
·extract_entity(block, entity_label):从指定的文本分段中提取出特定标签的实体名称。
·extract_value(block, value_name):从输入的文本分段中提取出value_name所指定的数值。


等待用户的查询,然后编写Python代码(应用模块化)并使用这些函数来响应查询。让我知道你什么时候准备好接受用户查询。



这个Prompt的主要含义是:


1.假设正在开发一个文档分析机器人,它的任务是根据用户提供的查询信息进行相应的搜索和响应。


2.提示中列举了该机器人可用的几个主要函数,包括获取报告、报告分段、提取特定信息等。这些函数的输入输出和功能都有明确的定义。


3.机器人需要等待用户输入具体的查询,然后利用给定的这些函数,编写模块化的Python代码来处理用户的查询并给出恰当的响应。
4.当机器人准备好接受用户查询时,它应该给出提示,表明可以开始交互了。

种将任务细节抽象成统一接口函数的方式,可以让机器人更灵活地適应不同的应用场景和需求变化。同时面向普通用户的查询交互,也让整个系统更加人性化和实用化。

FlowMind处理两个NCEN-QA-Easy数据集中问题的整个过程,包括生成的工作流代码和输出的结果。让我们详细分析一下工作流代码的含义:




# Q1: Who is the custodian for the CROMWELL CENTERSQUARE REAL ESTATE FUND?
def get_custodian(fund_name):
  report = get_report(fund_name) # 用基金名称获取相应的N-CEN报告
  block = fetch_block(report, fund_name) # 从报告中提取出该基金对应的文本块
  custodian = extract_entity(block, "Custodian") # 从文本块中提取出"Custodian"实体
  return custodian

fund_name = "CROMWELL CENTERSQUARE REAL ESTATE FUND"
custodian = get_custodian(fund_name) # 调用get_custodian函数获取托管人信息
print("The custodian for the", fund_name, "is", custodian)

# Q2: What is the gross commission for the TCW ARTIFICIAL INTELLIGENCE EQUITY FUND?
def get_gross_commission(fund_name):
  report = get_report(fund_name) # 用基金名获取报告
  block = fetch_block(report, fund_name) # 提取基金对应的文本块
  gross_commission = extract_value(block, "gross_commission") # 从文本块中提取"gross_commission"数值
  return gross_commission

fund_name = "TCW ARTIFICIAL INTELLIGENCE EQUITY FUND"  
gross_commission = get_gross_commission(fund_name) # 调用函数获取总佣金
print("The gross commission for", fund_name, "is", gross_commission)



可以看到,FlowMind根据问题自动生成了相应的Python函数来查询所需信息。函数的基本逻辑是:


1. 用get_report函数根据基金名称获取相应的N-CEN报告


2. 用fetch_block函数从报告中提取出该基金对应的文本块


3. 根据问题所问的具体信息,用extract_entity或extract_value函数从文本块中提取出相应的实体名称或数值


4. 返回提取出的结果


主程序则是直接调用生成的函数,传入问题中提到的基金名称,获取所需信息,并打印输出结果。

这段代码展示了FlowMind根据不同问题灵活生成定制化查询函数的能力。生成的代码逻辑清晰,恰到好处地利用了"讲座"环节引入的一系列API函数,代码模块化程度高,可读性强,安全性也越强。同时,FlowMind生成的代码直接就能运行,并输出正确结果,证明其代码的高完整性和有效性。

FlowMind的研究结果

02


研究人员在他们创建的一个名为NCEN-QA的新基准数据集上测试了FlowMind它包含600个关于N-CEN报告中发现的数据的问答对,投资公司每年提交这些报告,其中包含他们管理的基金的信息。通过为FlowMind提供用于解析和提取N-CEN报告信息的API,他们能够评估其自动生成工作流以回答NCEN-QA中问题的能力。

所有评测方法在NCEN-QA数据集上的准确率结果,包括基线方法、消融实验和完整的FlowMind方法。主要结论如下:


1.完整的FlowMind方法在所有难度级别的问题上都显著优于基线方法GPT-Context-Retrieval。FlowMind在简单和中等难度问题上达到95%以上的准确率,在困难问题上也有89.5%。


2.消融实验显示了"讲座"提示中每个组成部分的重要性:


·去掉上下文(FlowMind-NCT)后性能有所下降


·函数描述不包含语义化的参数名(FlowMind-BA)使性能大幅下降


·不明确要求生成代码(FlowMind-NCP)的性能最差


3.引入用户反馈后,FlowMind+feedback将所有难度的准确率进一步提高到接近100%。

这些结果定量地验证了FlowMind方法的有效性,以及"讲座"提示各组分和用户反馈机制的价值。FlowMind的另一个创新方面是它能够接受用户反馈来改进生成的工作流。通过向用户提供工作流的高级描述,他们可以审查它并提供建议,FlowMind然后将其纳入以在需要时更新代码。在启用用户反馈的情况下,FlowMind将所有问题类型的准确性提高到接近100%

FlowMind对于我们有何意义?

03

让我们先总结一下,FlowMind在实现工作流方面主要采用了以下方法:

1. 首先通过"讲座"提示来教育语言模型,为其提供上下文信息、可用API的描述以及编写工作流代码的要求。


2. LLM根据"讲座"中的信息,利用提供的API自动生成工作流代码。生成的代码是模块化的,能够恰当地调用API完成任务。


3. 将生成的工作流代码提供给用户审阅,并允许用户给出反馈意见。LLM根据用户反馈对代码进行优化和调整。


4. 优化后的工作流代码可以执行以可靠地完成用户要求的任务,并给出结果。


这种工作流的实现方式对我们日常构建Agent和工作流有很大的借鉴意义:


1. 利用提示工程对LLM进行必要的知识灌输和任务指导。精心设计的提示可以让LLM更好地理解任务要求,并基于已有的工具生成问题解决方案。


2. 将LLM与外部API和工具相结合,避免大模型直接接触原始数据。API可以封装专家知识和复杂细节,LLM则负责根据需求组装和编排API完成任务。


3. 让用户参与到工作流生成的闭环中。用户反馈可以帮助优化和纠正工作流,提高其可靠性和适用性。要让用户易于理解和评判工作流逻辑。


4. 自动化地端到端生成工作流代码。利用LLM的代码生成能力,我们可以大幅提高构建Agent和工作流的效率,让系统根据高层需求自主设计实现方案。


FlowMind为我们展示了一种强大的范式,让语言模型与外部工具智能协作,并持续吸收人类反馈优化,以灵活可靠地解决各种任务。伴随着大模型能力的不断进步,FlowMind为我们如何更好地利用它们创造变革性的人工智能系统照亮了前进的方向。

根据文中的提示(通用讲座配方),我总结了一段可用于Python写工作流的代码,将来会放在群里,我在群里也为你准备了不少Prompt的示例,关于DSPy的问题SEMMO的问题你都可以来群里问我。另外,群里为你准备了开群以来大量的Prompt模板、模块和一些代码文件完整示例,等你来一起讨论!另外,如果你有更多关于论文里Prompt的问题也可以到群里来,我会耐心解答你的问题。

Reference:https://arxiv.org/pdf/2404.13050

<本文完结>

转载请与本喵联系,私自抓取转载将被起诉
AI已成为我洞察世界并输出想法的工具

本地部署LLM成为你自己AI资源的掌控者

本地离线生成式AI文生文全要素提效指南,更安全更经济更高效


这份指南还包含8500条复杂Prompt,以及管理工具和方法(包含system提示词)

想把方法论转化为复杂提示词?Prompt心法与算法高级指南,帮你从知到行升维实践


关于Prompt,这本手册,是你和我沟通的桥梁

第一性原理下的Prompt,助你跃升为大师的指导手册



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询