本文摘要:(由ai生成)
Qt Group的Daniel Smith利用GPT-4模型改进API审查流程,提高了效率和准确性。深圳市优飞迪科技是国家级高新技术企业,专注于产品开发平台、数字孪生、工业软件仿真技术和物联网领域,与国际国内厂商建立战略合作。公司技术团队由顶尖学府专业人士组成,提供端到端服务。两家公司在各自领域展现了创新实力和技术优势。
diff --git a/.../qconnectionfactories.h b/.../qconnectionfactories.h
index b56a34f..7eabfd6 100644
--- a/src/remoteobjects/qconnectionfactories.h
+++ b/src/remoteobjects/qconnectionfactories.h
@@ -18,7 +18,7 @@
#include <QtNetwork/qabstractsocket.h>
#include <QtRemoteObjects/qtremoteobjectglobal.h>
-
+#include <QtRemoteObjects/qremoteobjectnode.h>
QT_BEGIN_NAMESPACE
@@ -116,6 +116,7 @@
Q_SIGNALS:
void shouldReconnect(QtROClientIoDevice*);
+ void setError(QRemoteObjectNode::ErrorCode);
protected:
virtual void doDisconnectFromServer() = 0;
diff --git a/.../qremoteobjectnode.h b/.../qremoteobjectnode.h
index 18f75bc..13e2540 100644
--- a/src/remoteobjects/qremoteobjectnode.h
+++ b/src/remoteobjects/qremoteobjectnode.h
@@ -6,6 +6,7 @@
#include <QtCore/qsharedpointer.h>
#include <QtCore/qmetaobject.h>
+#include <QtNetwork/qlocalserver.h>
#include <QtRemoteObjects/qtremoteobjectglobal.h>
#include <QtRemoteObjects/qremoteobjectregistry.h>
#include <QtRemoteObjects/qremoteobjectdynamicreplica.h>
@@ -61,7 +62,8 @@
MissingObjectName,
HostUrlInvalid,
ProtocolMismatch,
- ListenFailed
+ ListenFailed,
+ SocketAccessError
};
Q_ENUM(ErrorCode)
@@ -181,6 +183,7 @@
~QRemoteObjectHost() override;
QUrl hostUrl() const override;
bool setHostUrl(const QUrl &hostAddress, AllowedSchemas allowedSchemas=BuiltInSchemasOnly) override;
+ static void setLocalServerOptions(QLocalServer::SocketOptions options);
Q_SIGNALS:
void hostUrlChanged();
在输入提示语后,GPT-4提供了以下对新增API的分析,并进行了很好的总结:
diff --git a/.../qvariantanimation.h b/.../qvariantanimation.h
index 640c057..4bdb971 100644
--- a/src/corelib/animation/qvariantanimation.h
+++ b/src/corelib/animation/qvariantanimation.h
BINDABLE bindableEasingCurve)
public:
- typedef QPair<qreal, QVariant> KeyValue;
+ using KeyValue = std::pair<qreal, QVariant>;
typedef QList<KeyValue> KeyValues;
QVariantAnimation(QObject *parent = nullptr);
在qvariantanimation.h中,KeyValue的定义从typedef更改为using声明,这将基础类型从QPair更改为std::pair,可能会影响API用户与KeyValue实例的交互方式。
生成式AI总是有些难以捉摸。正如之前所述,它会不断地猜测下一个词,一次又一次,直到认为应该停止为止。(你可以了解一下LLM的原理,确实令人困惑。)虽然GPT 3.5非常适合用来闲聊,但它经常忘记你告诉它的内容,也不太能很好地遵循指令。它还会受到“近因偏见”的影响,即在你的提示语中,靠后的词被认为比前面的词更重要。这带来了一些问题,因为有些指令可能被忽略,或者更糟糕的是,生成输出时可能完全未考虑某些变更的差异。这导致使用GPT3.5进行分析时效果不够理想。即便采取措施要求输出更加一致、降低创造性,它仍然会不一致地忽略掉请求的整个部分,或者完全臆想出变更中新增或删除了什么。
Dall-E 3提示语:一个自信的机器人在办公室里,自豪地在白板上展示错误信息。这个机器人显得自信满满,面带微笑地用记号笔划线标出错误的答案。这一幕略带幽默,突显了机器人对其错误答案的错误自信。环境是现代办公室,白板上满是方程式和文本,其中一些部分被明显地标记为错误,但机器人似乎毫无察觉。
2023年11月,微软推出了GPT 3.5的增强版,命名为3.5-instruct,顾名思义,这一版本是为了提高其遵循指令的能力。尽管这样做有所改进,但模型仍然对实际改变的差异产生了错误的幻觉。
为了解决这些问题中的一些,尝试了best-of-three模型,需要三次尝试中的两次同意变更的重要性才能采纳结果。这至少提高了整体的准确性,但输出仍然缺乏细节,并且明显由于没有完全理解在软件开发层面所做的改变而受到影响。
当GPT-4的成本降低后,即使是粗略的测试也显示出了显著改善的结果。GPT-4对其所读内容有更好的记忆力,并能对其作出决策背后的推理进行更清晰的说明。由于准确性更高,机器人被重新调整为单次配置,自那以后只需对提示语做一些小调整。
AI并不是万能的解决方案。即便它有这个潜力,那也与现在仍相去甚远。与人类不同,它不知道自己实际在做什么,它只是通过选择最可能的下一个词来响应上下文提示语。这意味着,如果它在任何中间点上选择错误,剩余的回复可能会走向错误的方向,产生一个充满自信但非常错误的答案。我们可以采取一些措施来缓解这个问题,但这需要时间和成本。尽管当前一代的生成式AI存在不足,但我们已经为减轻API审查的工作量打下了坚实的基础。
下一步,我们希望探索更大的上下文以评估变更的重要性,包括在单次评估中包含多个文件,以便完全理解整个变更,而不是像目前这样逐个文件进行评估。此外,我们希望未来的GPT迭代或相关LLM技术能够提高准确率和遵循指令的能力。尽管GPT-4在这个用例上远超GPT-3.5,但它仍然会不时犯错、忽略上下文。
通过在代码合并时批量审查过渡到单次变更的审查,我们可以节省发布前紧急时期审查所需时间。新方法也为讨论提供了更多背景,如此变更的必要性的讨论可以一次到位。在我们传统的审查流程中,一个相当复杂的脚本执行了一堆硬编码逻辑来排除不相关的代码行,创建了一次性提交,集 合了所有的API变更以供审查。虽然先前的方法能快速提供变更的概览,但缺失了必要的上下文。另外,追踪变更的源头和讨论其重要性也是一个耗时的过程。考虑到编写变更与进行API审查之间可能会有相当一段时间的间隔,回忆每个变更背后的原因可能颇具挑战性。
这个概念验证版的API审查机器人只是帮助Qt项目的所有参与者更方便地做出贡献,并更快地使变更得到关注的辅助工具。虽然到头来每次变更仍需人工审核,我们仍希望这一新机器人能让这一流程变得更加轻松。