现在我们回到光标，进入第四个实验。
因为这一天我们一天要做两个实验。
第四周第四天为明天的大项目做准备，这个项目被称为“Sidekick”。
现在是引入结构化输出和多代理流程的时候了。
所以我们有一堆导入，我们将像往常一样设置我们的点环境。
现在我们将使用结构化输出。
您会记得结构化输出的第一步是定义模式。
我们用什么来描述 NLM 必须返回的结果。
特别是，我们要开发的是一个评估器，它是
将决定法学硕士的答案是否良好。
因此，我们的评估器将在评估器输出中使用该对象进行响应。
或者实际上它会使用 JSON 进行响应。
JSON 必须符合这一点。
所以我们只是描述这意味着什么。
将会有一个现场反馈，这将是对工人反应的反馈。
呃成功标准。
实际上，让我们将其更改为援助响应，因为这将需要更多的文字。
会明白的。
我们在此协助响应中将其称为“Worker”。
我们开始吧。
现在你可以看到我打字了。
所以援助响应成功标准的反馈就是是否已经满足成功标准
以及需要的用户输入。
真的。
如果需要用户提供更多输入或澄清，或者助理遇到困难。
因此，这将使我们能够有一个评估员来评估我们的结果
用他们的术语来说，就是“工人”，“助理”。
它将决定是否可以将其转发回用户，或者是否需要
返回助理进行更多工作。
一种情况是，如果满足成功标准并且它完成了它的工作。
但另一种情况是，如果工作人员似乎陷入困境或需要澄清，在这种情况下
应该返回。
我们就这样吧。
嗯，好吧。
现在来管理状态。
你还记得状态吗，它实际上可以是任何 Python 对象。
它可以是 Pydantic 对象。
但我们经常使用类型字典。
这就是我们在这里所做的。
现在，我们第一次有一些真正的重要信息可以存储在该州。
以前我们总是有消息，但现在我们有一个真实的状态，我们有很多东西。
我们仍然有消息，它代表用户和助手之间的讨论，
但我们还有其他东西来代表从评估器传递的信息。
回到正题。
我要打电话给工人，助理。
嗯，所以我们还会有更多的东西。
我们将制定成功标准，该标准将被预先设定以定义其含义
为了取得成功，员工将对工作进行反馈。
顺便说一句，你可以像这样使用可选。
如果可以为空，则可以为无，也可以为字符串。
满足的成功标准是布尔值是真还是假，并且如果成功，则为真
满足标准的结果，并且不需要返回给工作人员以获取更多信息。
如果我们需要返回用户以获取更多信息，则需要用户输入。
这就是我们的状态。
所以这是一个更丰富的状态。
这表明你可以在这个州拥有任何你想要的东西。
状态实际上取决于你和你的逻辑流程。
这种状态就像是在图表中移动的东西，每个人都得到了他们的机会。
每个节点都会获取状态并有机会返回新状态。
这是对该状态的一些改变。
我们只指定一个减速器广告消息，这意味着如果这些节点之一返回
有些消息，它们会累积起来。
它们将与现有消息连接起来。
但是，如果这些节点之一返回所需的用户输入，这将覆盖旧状态中的任何内容。
因此，当您返回新状态时，如果您在此处更改这些值之一，它将成为新设置
对于图表中位于您下游的任何内容。
好的。
接下来我们设置剧作家工具。
这与之前使用异步浏览器、剧作家浏览器和剧作家的代码相同
浏览器工具包。
所以我们就运行它。
这很简单。
现在我们将有两个要初始化的 llms。
其中之一称为工人。
LLM扮演的是助理的角色。
这将是 GPT 4 mini。
它将绑定到这些工具，以便它会自动包含 JSON gutpf。
然后我们将分别拥有一名法学硕士评估员。
这是一个单独的法学硕士。
我们正在设置它。
而之前我们说过绑定工具。
现在我们说结构化输出并传入 Pydantic 对象。
这意味着响应将符合此输出。
现在并非所有模型都设置为支持结构化输出。
因此，如果您要尝试不同的模型，您可能会发现某些模型无法做到这一点
模型。
当然，如果是这种情况，替代方法就是采用老式方法，即
意味着不要使用像这样的结构化输出并传递迂腐的对象，而是询问模型
在提示中以 JSON 进行响应。
你给它架构。
您给出并列出它应该以哪种 JSON 进行响应。
你也许可以举几个例子来确保做得好确实是有偏见的，然后你就有了
解析响应中的 JSON。
这就是当我们进行这样的结构化输出时幕后发生的所有事情。
所以这意味着恭喜你。
您现在学习如何使用图形进行结构化输出。
就是这么简单。
好的。
所以这个函数看起来有点长。
这个节点，聋哑工人，代表我们的工人节点，我们的助手。
但这只是很长，因为我们这里有很多提示。
所以它是一个节点。
因此，像往常一样，它需要一个状态并返回一个状态。
您可以看到它正在返回带有消息的内容。
我们知道消息会累积，因为我们有减速器。
因此，这将添加更多消息。
好的。
所以我们收到了一条很长的系统消息。
让我来给你讲讲吧。
我们说，看起来你是一个有用的助手，可以使用工具来完成任务。
您继续执行一项任务，直到您向用户提出问题或澄清，或者成功为止
已满足标准。
这就是成功的标准，我们从国家那里得到它。
这是应该在国家举行的事情。
您应该回复用户有关作业的问题或您的最终答复。
如果您对用户有疑问，您需要通过清楚地说明您的问题来回复。
一个例子可能是这样的。
对我来说，这样做并不是非常必要，但我想明确表示，它会
说当它有一个问题和某种力量时，强行表达观点。
如果您回复了最终答案并且没有提出问题，只需回复答案即可。
我这么说是因为这些模特喜欢回答诸如“我可以帮助你做其他事情吗？”之类的问题。
这可能会让我们的评估人员感到困惑，因为他们正在寻找是否需要帮助。
所以我希望在这方面非常清楚。
好的。
当然，所有这些事情都有待实验。
没有硬性规定。
这并不是一个规则，你必须把它放在提示中。
我希望你现在知道这一点。
这实际上是人工智能工程的一部分，即关于实验、研发。
你可以想象我在过去的几个小时里一直在制作这个提示。
因此，显然你需要磨练一些效果良好的东西。
您可能会发现，特别是对于不同的模型或者您有不同的任务，这是
无论如何，你必须进行调整才能获得你想要的性能。
呃，如果，如果我们在这个领域得到了一些关于工作的反馈，那么这意味着
评估已经进行但进展不顺利。
已经有了反馈，并且又回来寻求更多反馈。
那么接下来我们就添加到系统消息中。
之前你以为你完成了作业，但你的回复被拒绝了，因为成功
不符合标准。
这是关于为什么被拒绝的反馈。
然后我们给出反馈。
然后，根据此反馈，请继续完成作业，确保您满足成功标准。
呃，这里已经写得很详细了。
嗯，好吧。
然后我这里有一些有点做作的代码，它们看起来是否已经存在
里面有一条系统消息。
如果已经存在，那么它只是用该系统消息替换现有的任何系统消息。
如果它没有找到系统消息，那么，呃，它，呃，它会创建一条新消息并将其放在
正面。
所以这只是为了确保我们处理这些不同的场景。
现在，这有点做作，因为，呃，Landgraf 可能已经建立了一个系统
信息。
所以，我们必须对此小心一些，并且可能值得做一些测试以确保
它适用于不同的型号。
好的。
因此，最后我们使用工具调用工作人员 LM 并调用消息。
我们收到响应，这就是我们随后返回的内容。
所以我们就有了。
呃，好吧。
现在我们有了一个非常有趣的东西，称为工作路由器。