将复杂任务分解为简单的子任务的策略

使用意图分类来识别用户查询的最相关指令

对于需要处理不同情况的大量独立指令的任务,首先对查询类型进行分类,并使用该分类确定所需的指令,可以带来一些好处。这可以通过定义固定的类别和硬编码与处理给定类别任务相关的指令来实现。该过程还可以递归应用于将任务分解为一系列阶段。这种方法的优点在于每个查询只包含执行任务的下一个阶段所需的指令,这可能导致与使用单个查询执行整个任务相比较低的错误率。这还可以降低成本,因为较大的提示运行成本更高(请参阅定价信息)。

例如,假设对于客户服务应用程序,查询可以有以下有用的分类方式:

Role Prompt
SYSTEM You will be provided with customer service queries. Classify each query into a primary category and a secondary category. Provide your output in json format with the keys: primary and secondary.
Primary categories: Billing, Technical Support, Account Management, or General Inquiry.
Billing secondary categories:
- Unsubscribe or upgrade
- Add a payment method
- Explanation for charge
- Dispute a charge
Technical Support secondary categories:
- Troubleshooting
- Device compatibility
- Software updates
Account Management secondary categories:
- Password reset
- Update personal information
- Close account
- Account security
General Inquiry secondary categories:
- Product information
- Pricing
- Feedback
- Speak to a human
USER I need to get my internet working again.

根据客户查询的分类,可以为GPT模型提供一组更具体的指令来处理下一步操作。例如,假设客户需要“故障排除”的帮助。

Role Prompt
SYSTEM You will be provided with customer service inquiries that require troubleshooting in a technical support context. Help the user by:

- Ask them to check that all cables to/from the router are connected. Note that it is common for cables to come loose over time.
- If all cables are connected and the issue persists, ask them which router model they are using
- Now you will advise them how to restart their device:
– If the model number is MTD-327J, advise them to push the red button and hold it for 5 seconds, then wait 5 minutes before testing the connection.
– If the model number is MTD-327S, advise them to unplug and replug it, then wait 5 minutes before testing the connection.
- If the customer’s issue persists after restarting the device and waiting 5 minutes, connect them to IT support by outputting {“IT support requested”}.
- If the user starts asking questions that are unrelated to this topic then confirm if they would like to end the current chat about troubleshooting and classify their request according to the following scheme:

<insert primary/secondary classification scheme from above here>
USER I need to get my internet working again.

请注意,模型已被指示在对话状态发生变化时发出特殊字符串。这使得我们可以将我们的系统转变为一个状态机,其中状态决定了注入哪些指令。通过跟踪状态、确定在该状态下哪些指令是相关的,以及可选地确定从该状态允许的状态转换,我们可以在用户体验周围设置保护措施,这在非结构化的方法中很难实现。

对于需要非常长对话的对话应用程序,对先前的对话进行概述或筛选

由于GPT具有固定的上下文长度,在用户和助手之间的对话中,如果将整个对话包含在上下文窗口中,对话将无法无限地进行下去。

针对这个问题,有各种解决方法之一是对先前的对话进行总结。一旦输入的大小达到预定的阈值长度,可以触发一个查询,对对话的一部分进行总结,并将先前对话的摘要包含在系统消息中。或者,可以在整个对话过程中异步地在后台对先前的对话进行总结。

另一种解决方案是动态选择与当前查询最相关的先前对话部分。请参考策略“使用基于嵌入的搜索实现高效的知识检索”。

以分段方式概述长文档并递归构建完整摘要

由于GPT具有固定的上下文长度,在单个查询中无法用于概括长于上下文长度减去生成摘要长度的文本。

为了概括一个非常长的文档,比如一本书,我们可以使用一系列查询来概括文档的每个部分。可以将部分摘要连接并进行总结,产生总结的总结。这个过程可以递归进行,直到整个文档被概括为止。如果需要使用先前部分的信息来理解后面的部分,那么在概括某一点的内容时,包含前面文本的运行摘要可能会有所帮助。OpenAI在之前的研究中使用GPT-3的变体研究了这种概括书籍的方法的有效性。

请我喝杯咖啡吧~

支付宝
微信