Copilot
# 👨✈️Copilot
LLM与应用程序连接的桥梁:利用LLM来分析用户需求并控制应用程序输出,自动快捷地生成满足用户需求的结果。
Next-generation AI:across business applications or interactions with AI across business roles and processes
# 基本知识
# 介绍
(个人理解)
目前感觉Copilot相关的应用还是挺多的,我们经常说的Copilot主要是指最早的应用,即GitHub Copilot,这也是一款由 OpenAI 推出的人工智能代码自动补全AI工具,它可以帮助程序员更快、更准确地编写代码。
最近微软又推出了 Microsoft 365 Copilot与Power BI Copilot,这两个也涉及到Copilot,但跟前面提到的GitHub Copilot应该是有区分的,如果一定要有一个统一的定义的话,我觉得Copilot可以认为是大型语言模型(LLM)在具体下游服务或者已有应用的扩展,如在Microsoft 365 Copilot中,可以输入的需求文本输出对应的代码(如微软图形的API和SDK调用等)来连接微软365应用程序中的数据和智能,并访问和操作这些数据和智能。
# ChatGPT和Copilot有什么区别?
Dynamics 365 和 Power Platform 中的 Copilot 提供企业就绪的 AI - Microsoft Dynamics 365 博客 (opens new window)
ChatGPT 是一种通用的大型语言模型 (LLM),由 OpenAI 在海量文本数据集上进行训练,旨在进行类似人类的对话并回答有关各种主题的各种问题。Copilot也使用LLM;但是,会针对业务流程、业务数据以及安全和隐私要求提示和优化企业就绪的 AI 技术。 对于 Dynamics 365 和 Microsoft Power Platform 用户,Copilot 会根据手头任务的上下文建议可选操作和内容建议。用于自然语言生成的Copilot的几种方式是独一无二的:
- AI 生成的响应具有独特的上下文,并且与业务数据告知的手头任务相关 - 无论是从 Dynamics 365 中响应电子邮件、部署自动执行特定手动流程的低代码应用程序,还是从您的客户关系管理 (CRM) 系统创建目标客户细分列表。
- Copilot 同时使用 LLM(如 GPT)和您组织的业务数据来生成更准确、相关和个性化的结果。简而言之,业务数据保留在租户中,仅用于改进方案的上下文,LLM 本身不会从您的使用情况中学习。
- Copilot 由 Microsoft Azure OpenAI Service 提供支持,在企业级安全性、合规性和隐私的基础上从头开始设计。
# Dynamics 365 和 Power Platform 中的 Copilot 如何工作?
借助 Copilot,Dynamics 365 和 Power Platform 可以利用基础模型的强大功能以及应用于业务数据的专有 Microsoft 技术:
- 搜索(使用必应和 Microsoft Azure 认知搜索): 将特定于域的上下文引入 Copilot 提示,使响应能够集成来自组织租户中的手册、文档或其他数据等内容的信息。目前,Microsoft Power Virtual Agent 和 Dynamics 365 Customer Service 使用这种检索增强生成方法作为调用 LLM 的预处理。
- Microsoft 应用程序(如 Dynamics 365、Viva Sales 和 Microsoft Power Platform)以及存储在 Microsoft Dataverse 中的业务数据。
- Microsoft Graph:Microsoft Graph API 将来自客户信号的其他上下文引入提示中,例如来自电子邮件、聊天、文档、会议等的信息。

步骤:
Copilot 请求APP中业务用户(如 Microsoft Dynamics 365 Sales 或 Microsoft Power Apps)的input prompt。
Copilot 通过一种称为grounding的方法对提示进行预处理,该方法提高了提示的特异性,因此您可以获得与您的特定任务相关且可操作的答案。
它通过调用Microsoft Graph和Dataverse并访问您同意并授予权限以检索您的业务内容和上下文的企业数据来实现这一点。我们还将基础范围限定为通过基于角色的访问控制对经过身份验证的用户可见的文档和数据。例如,有关福利的 Intranet 问题只会根据与员工角色相关的文档返回答案。
这种信息检索称为检索增强生成,并允许Copilot提供正确类型的信息作为LLM的输入,将此用户数据与其他输入(例如从知识库文章中检索的信息)相结合以改进提示。
Copilot从LLM获取响应并对其进行后处理。此后处理包括对 Microsoft Graph 的其他grounding调用、负责任的 AI 检查、安全性、合规性和隐私审查以及command generation。
Copilot 向用户返回建议的响应,并将命令返回到应用程序,以便人机交互可以查看和评估。
Copilot 以迭代方式处理和编排这些复杂的服务,以产生与您的业务相关、准确且安全的结果。
# 应用
# GitHub Copilot
GitHub Copilot · Your AI pair programmer (opens new window)
程序员“摸鱼”神器,GitHub Copilot"凭本事"完全免费了!! - 知乎 (zhihu.com) (opens new window)
GitHub Copilot 使用 OpenAI Codex 实时建议代码和整个功能,就在你的编辑器上。
Copilot 的核心技术基于 GPT-3 模型,但是在编码方面是优于GPT-3的,它可以根据程序员输入的上下文和代码提示,自动生成符合语法和逻辑的代码片段。
# Microsoft 365 Copilot
Microsoft 365 Copilot - 维基百科,自由的百科全书 (wikipedia.org) (opens new window)
Microsoft 365 Copilot是基于大型语言模型(LLM)和微软图形(Microsoft Graph)的数据和智能的人工智能(AI)辅助工具。 LLM是一种使用深度学习技术训练的神经网络模型,它可以根据大量的文本数据学习语言的规律和模式,并根据给定的输入生成相应的输出。微软图形是一种云服务平台,它可以连接微软365应用程序中的数据和智能,并提供一系列的API和SDK来访问和操作这些数据和智能。
Microsoft 365 Copilot使用了GPT-4作为其核心的LLM,它是一种由OpenAI开发的自然语言生成(NLG)模型,它可以根据任意的文本输入生成连贯和有意义的文本输出。GPT-4是继GPT-3之后的最新版本,它拥有超过1000亿个参数,可以处理更复杂和多样化的任务。微软公司是OpenAI的合作伙伴之一,拥有GPT-4的独家许可权,可以将其应用在微软365 Copilot等产品中。
Microsoft 365 Copilot还利用了微软图形(Microsoft Graph)的数据和智能,它可以连接微软365应用程序中的数据和智能,并提供一系列的API和SDK来访问和操作这些数据和智能。微软图形可以帮助Microsoft 365 Copilot了解用户的偏好、习惯、工作流程、日程安排、联系人、项目、文件等信息,并根据这些信息生成更个性化和适合用户场景的内容。微软图形还可以帮助Microsoft 365 Copilot与其他微软365应用程序进行交互和协作,例如在Word中插入Excel中的图表,在PowerPoint中引用Outlook中的邮件,在Teams中创建Word中的任务等。
# Power BI Copilot
借助 Power BI 中的 Copilot,我们将大型语言模型的强大功能注入 Power BI 的每一层,以帮助用户完成更多工作并从数据中创造更多价值。使用Copilot,您可以简单地描述您正在寻找的视觉效果和见解,Copilot将完成剩下的工作。 用户可以在几秒钟内创建和定制报表,生成和编辑 DAX 计算,创建叙述性摘要,并询问有关其数据的问题,所有这些都使用对话语言。Power BI 能够轻松定制叙述的语气、范围和样式,并将其无缝添加到报表中,还可以通过易于理解的文本摘要提供更具影响力的数据见解。
# 相关工作
# Codex
如何使用 Codex 模型处理代码 - Azure OpenAI Service | Microsoft Learn (opens new window)
Evaluating large language models trained on code(2021)
# Sheet-Copilot(2023)
Sheetcopilot: Bringing software productivity to the next level through large language models
# 摘要
计算机终端用户花费了数十亿小时来完成日常任务,如表格数据处理和项目时间表安排。这些任务大多重复且容易出错,但大多数最终用户缺乏自动化这些繁重工作的技能。随着大型语言模型(LLM)的出现,用自然语言用户请求指导软件成为一个可实现的目标。
在这项工作中,我们提出了一个SheetCopilot代理,它接受自然语言任务和控制电子表格来满足需求。我们提出了一组原子操作作为电子表格软件功能的抽象。
我们进一步为LLM设计了一个基于状态机的任务规划框架,以与电子表格进行稳健的交互。
我们策划了一个包含221个电子表格控制任务的代表性数据集,并建立了一个全自动的评估管道,用于严格衡量LLM在软件控制任务中的能力。
# Copilot设计挑战
在设计一个框架以促进LLM和复杂软件应用程序之间的交互方面存在一些挑战:
将应用程序的复杂内部状态和巨大功能转换为模型可理解的文本形式。这需要确定如何通过自然语言系统地表示软件接口和逻辑;
使模型能够准确、安全地生成软件命令和参数。必须存在验证、调试以及根据需要拒绝或修改模型输出的机制,以避免不希望的操作或状态;
为模型提供在多步骤任务期间监视软件状态更改、异常和错误的方法,以便这些模型能够做出适当的响应。需要模型来理解软件反馈和诊断问题,并根据需要调整指令以稳健地实现目标。
此外,使LLM能够指导复杂的软件还需要管理数据集,以捕捉真实世界语言使用的多样性和模糊性,并开发自动化技术来可靠地评估大规模的模型性能。
# 数据集和评估
[TODO]
# 架构
概括: 操纵SheetCopylot来控制Microsoft Excel等软件,逐步生成满足用户要求的解决方案。在每个步骤中,SheetCopilot都会根据工作表状态计划一个初始原子操作,然后使用提供操作用法和示例的外部文档来修改此步骤。最后,从修改后的步骤中提取动作及其参数,并将其提交到模拟环境中执行。右侧的整个过程显示SheetCopilot使用提供的可用原子操作成功地解决了指令中指定的任务。

SheetCopylot支持与电子表格进行自然语言交互。它将以自然语言描述的电子表格和用户任务作为输入,并生成修改电子表格内容和创建图表的计划。
采用了受GPT-3等模型启发的上下文学习框架。我们提出了“原子操作”——一组表示常见电子表格函数的虚拟API。这些操作允许语言模型准确地与电子表格软件交互。
还提出了一个基于状态机的任务规划框架来处理语言模型和电子表格之间复杂的多回合交互。
原子操作和基于状态机的规划框架使语言模型能够通过自然语言有效而稳健地指导电子表格软件。
# Prompting LMs as a SheetCopilot
我们设计了一个系统的提示模板,将LMs变成Copilot,提示包括:
一个通用的角色描述:起到了锚的作用,使LM能够理解上下文
一个带参数的原子操作列表:为LM提供了任务规划所需的接口信息
一组输出需求:告诉LM如何生成可以通过编程提取和执行的文本
一个用户和助手之间的多轮交互示例:提示了LMs观察-建议-修改行为循环是如何出现的,并提高了总体规划质量。
# Atomic Action as A Bridge for LMs and Software
最先进的LMs已经显示出为家庭任务、软件控制和调试生成详细计划的高超能力。然而,生成的计划是用自然语言编写的,人类很容易阅读,但不能直接用于机器执行。为了克服上述限制,我们建议将现有电子表格软件的功能建模为一组称为原子操作的虚拟API。
原子操作由API名称、类型化参数列表、用法文档字符串和几个用法示例组成。这些原子操作可以在不同的电子表格平台上实现。原子操作涉及单元格值修改、格式化、工作表管理、公式和函数、图表以及数据透视表。
选择适当的原子操作粒度是至关重要的,因为操作必须具有表达性且简洁,才能适应LM上下文窗口。我们确定我们的原子操作如下:
提取顶级超级用户电子表格问答中涉及的所有操作;
将提取的动作嵌入候选动作中并进行聚类;
选择涵盖我们在数据集中收集的所有任务的最小操作集。
与生成VBA代码的代理的关系LMs也能够生成机器可读代码。这种方法对Microsoft Excel特别有吸引力,因为它附带了一种名为Visual Basic for Applications(VBA)的嵌入式脚本语言。然而,代码生成方法面临着来自LMs方面和电子表格软件方面的挑战。在代码LMs方面,现有的代码LMs训练语料库几乎不包含VBA源文件,因为与C++或Python相比,它只是一种小众编程语言。在电子表格软件方面,Google Sheets、Libre Office和WPS等软件要么根本不支持VBA(Google Sheets),要么只支持VBA函数的有限子集(Libre Office或WPS)。因此,我们提倡一种更不依赖于嵌入式编程语言支持的软件无关方法。
# State Machine-based Task Planning
一个普通的电子表格任务通常需要几个步骤,而一个复杂的任务通常需要十几个步骤。开环计划——随着步骤的增加,直接从指令中生成完整的任务计划变得越来越困难。每个步骤都会改变表格状态,因此正确的步骤T+1依赖于完全理解片材状态在之前的T个步骤之后是如何变化的。随着任务变得越来越复杂,开环规划举步维艰。我们提出了一种基于状态机的计划器,该计划器根据来自LMs或软件的反馈来修改计划。我们的计划分为观察、提议、修改和行动阶段。下面将描述这些阶段之间的状态转换:

Observing Stage:在这个阶段,我们将工作表状态St的简短描述添加到查询中,提供诸如每列的名称和LM的总行数等信息,以确定原子操作参数。这允许LM通过观察先前操作的结果以闭环方式生成解决方案,而无需隐式建模图纸状态。
Proposing Stage:在这个阶段,我们连接系统提示P、初始任务指令I、工作表状态St和计划历史Ht,并要求LM计划下一个原子动作At+1。
来自语言模型的直接响应Rt+1并不总是可转换为可容许的原子作用At+1。在验证步骤中发现的常见错误包括缺少格式要求、产生未定义动作的幻觉以及错误地确定动作参数。
Revising Stage:采用两种方法来修改所提出的原子动作:基于反馈的方法和基于检索的方法。
基于反馈的修订利用了来自原子操作验证和电子表格软件执行的错误反馈。例如,如果原子动作验证步骤检测到幻觉的原子动作,则将创建一个新的提示来通知LM该错误,并要求其重申可用的原子动作。
此外,我们使用基于检索的修订为LM提供详细的外部知识,由于上下文窗口限制,这些知识不适合系统提示。例如,如果LM使用具有错误参数的原子操作,则在新提示中提供包含该操作的参数描述和使用示例的详细文档,以提高LM正确确定原子操作参数的概率。这个过程类似于人类程序员在遇到不太熟悉的API时的行为。
修订阶段的一个特殊情况是,在被提供了关于最初提出的原子动作的更多信息后,LM突然发现它选择了错误的动作,并决定返回修订阶段。
Acting Stage:在提议和修改阶段之后,原子动作At+1被提交给电子表格软件以供执行。
如果执行成功,则更新计划历史Ht,
如果软件报告运行时错误,状态机将返回建议阶段,提示LM根据错误反馈重新规划。
# Hallucination Mitigation
为了使状态机不那么频繁地由于幻觉引起的错误而返回到提议阶段,我们采用了以下方法
输出格式:原子操作的基本功能需要精确格式化的计划结果。然而,我们发现LM可能会生成语义正确但不可接受的行动计划。因此,我们要求LM用特殊的令牌(例如@)包装动作,并检测输出中的令牌,以检查输出是否正确格式化。
原子行动:消除歧义LMs中的内化知识可能与文档中的原子行动定义相混淆。由于这种冲突,LMs容易产生自我错觉,这意味着它会产生未定义的行为幻觉或添加非法行为论据。为了解决这个问题,原子操作名称被一组同义词取代,这些同义词与嵌入空间中的官方名称相距甚远。例如,Write和SetConditionalFormat分别替换为RangeInputValue和FormatWithRules。
# 实验
[TODO]