欢迎回到光标，欢迎来到第五周目录。
开始了。
我们要去第一个实验室。
第五周第一天 Autogen Agent Chat，这是 Autogen 的主要部分。
这有点类似于船员。
我们现在所做的很多事情看起来会非常熟悉，因为它与工作人员非常一致
和 OpenAI 代理 SDK，特别是我们总是做的第一件事，即加载环境
照常。
好的。
所以第一个概念就是模型。
该模型与我们之前的 LM 等概念类似。
它就像调用大型语言模型的包装器。
在这里，我们导入了一个名为 OpenAI Chat 完成客户端的东西，它是
我们将使用 LM，即 GPT 4 mini。
这就是创建模型客户端的方法。
这确实非常简单。
您只需传递模型的名称即可。
那么让我们运行一下吧。
而且我只是想在这里向您展示您可以与奥巴马做同样的事情来运行本地模型
像美洲驼 3.2 一样。
这是完全一样的想法。
您可以运行它，并且可以以完全相同的方式继续所有这些，而是​​在本地运行
使用 GPT 4 或 mini。
好的，这是第一个概念。
第二个概念是消息。
这对于 Autogen 代理聊天来说是一个不同的概念。
您正是根据这个想法创建了一个名为文本消息的对象。
在这种情况下，就有内容了。
我现在的信息是我想去伦敦。
而来源就是用户我。
因此，如果我们运行它并打印它，我们会看到它是一条短信。
源头是用户。
还有，呃，这就是内容。
现在这就是全部了。
这就是信息。
第三个概念是代理。
这与我们过去看到的非常相似。
我们导入的东西叫做助理代理。
就是这个，呃，你会看到很多次。
这是 Autogen 代理聊天中使用的最基础的类。
因此，我们创建一个新的助理代理实例。
我们给它一个名字，航空公司代理，我们给它一个模型客户端，底层LM，我们给它一个系统
消息类似于 OpenAI 中的说明。
您是航空公司的得力助手。
你给出了一个简短幽默的回答。
因此，让我们给它一个值，看看它会产生什么影响。
呃，呃，模型客户端流就是我们希望它流回结果的方式。
呃，所以这是我们已经不时做过的事情，但那是一个代理
已创建。
然后将所有这些结合在一起的东西就是所谓的消息。
这就是我们要求代理传递一堆消息的方法，我们在这里就这样做了。
我们只是将单个消息放入列表中。
我们将其传递到所有消息中。
您还必须传递一个称为取消令牌的东西，这就是它如何知道消息何时发送
完成了。
关于代理聊天，这是一件很麻烦的事情，但我不会担心。
你就打电话吧，嗯。
当然，它是异步的。
这是一个协程，所以我们必须等待它。
等待代理在列表中传递消息。
您传入此取消令牌，框架将通过该令牌知道此代理何时
完全的。
然后我要打印聊天消息内容。
所以我们传递这个消息。
嗯，我想去伦敦的消息，助理是，呃，你的有用助理
航空公司。
您给出简短、幽默的答案。
让我们看看如果这样做会发生什么。
很棒的选择。
请记住，如果开始下雨，这并不是恐慌的迹象。
伦敦正在欢迎您。
哈!
当然，我们的经纪人给出了一个很好幽默的答案，值得指出的是，我们有
与 OpenAI 代理 SDK 相同的时刻。
做到这一点非常容易，将其打包并进行调用。
这确实是一个很好的、轻量级的抽象。
这并没有太多的繁重，只是围绕调用 LMS 的轻量级抽象。
好吧，让我们更进一步。
当然，我们必须引入工具。
一切都与工具有关。
让我们引入一个工具，现在就做一些更有趣的事情。
现在我们将制作一个可以获取门票价格的工具。
我们将为我们的代理商提供查询票价的能力。
我们不妨使用 SQLite 数据库，因为人们常常喜欢思考，比如说，好吧，
如果我们的代理能够查询数据库，那会是什么样子？
现在，有一些复杂的方法可以实际编写一个 SQL 工具，为代理提供服务
编写SQL的能力。
但在这种情况下，它非常简单。
我们可以编写一个可以在数据库中查找的工具。
所以让我们现在就这样做。
所以我们要导入Sqlite3。
我们将创建票证数据库，如果它已经存在，我们将删除它，因为我们运行了
这个之前。
一旦它被删除，我们将连接到一个新的数据库并创建一个名为城市的表，
其中有城市名称和往返价格。
呃，熟悉这个的人都知道它创建了一个 DB 数据库
现在将是空的。
我们将用一堆飞往伦敦、巴黎、罗马、马德里的机票填充我们的数据库，
巴塞罗那和柏林。
这已经完成了。
我们将编写一个简单的查询函数获取城市价格，它需要一个名称，它会得到
前往城市的往返价格。
它将简单地连接到数据库，并运行一个在城市中传递的小选择语句
命名并返回结果。
是的，对于有安全意识的人来说，也许我应该做更多的事情来确保
验证这一点并确保城市名称是城市名称及其所有其余部分。
但这目前只是一个玩具示例。
所以我们运行这个。
我们已经得到了城市价格。
我们来看看吧。
让我们尝试获取伦敦的城市价格。
它已填充到数据库中。
我们回到99。
我们去罗马吧，我们花 99 美元回来。
这似乎确实有效。
现在检查一下。
这和以前一样。
这，呃，创建一个助理特工。
我现在称其为智能代理，因为它会比以前更智能。
呃，其他方面都一样。
这也是一样的。
我们传入相同的底层客户端，相同的底层消息系统消息。
呃，其实我已经加进去了，但是我不确定是否有必要告诉它它有这个能力
寻找往返机票。
嗯，我们又开始直播了。
我们将此函数作为我们的工具之一传递到这里。
还有这个有点奇怪的属性反映了工具的使用，呃，这是一种指示方式
我们不只是希望它返回工具结果。
我们确实希望它能够接受并继续处理，即使工具返回后也是如此。
真的。
我们继续，直到它回复。
所以你很少会不希望这是真的。
所以我认为你应该始终假设这将是你的默认设置。
嗯，那是我没有想到一些显而易见的事情。
所以，这就是我们这样做的方式。
这里有一点需要指出，它与其他框架有一个微小的差异，一个微小的差异
autogen 可能更好一点，更优越一点，你会注意到我们
直接在这里传递这个Python函数即可。
我们没有任何装饰器或任何东西。
您还记得在 OpenAI 代理 SDK 中，我们必须放入一个装饰器。
我们必须在像 Landgraaf 这样的东西中，你必须，呃，将它包装在一个工具中。
我们没有必要做这样的事情。
它，嗯，它真的很轻。
当然，这是因为他们在抽象代码中添加了一些额外的东西
它将 this 视为一个 Python 函数。
它使用此注释来确定该工具的描述。
所以它只是为你做了一些事情。
它让生活变得更加轻松。
消除了一些学习曲线，我认为这非常好。
嗯，所以我们现在要做的就是简单地通过消息给智能代理打电话
传递我们相同的消息。
我想去伦敦。
嗯，然后只是为了好玩，我将打印内部消息。
我提到消息构造不仅仅适用于人类和代理。
它还适用于代理之间和代理内部发生的事情。
所以我们可以通过打印其内部消息来看到这一点。
然后我们将打印结果并运行它。
这就是发生的事情。
所以你首先可以看到有一个函数调用。
这是一条内部消息，城市名称设置为伦敦。
这是一个获取城市价格的函数调用。
呃，结果回来了。
结果是 2.99，就这样。
正如您所希望的那样，这又链接到那里。
然后，这就是模型的最终响应：T 城和高帽。
一张去伦敦的往返机票要花 2.99 美元。
请记住，您唯一应该带上的就是您的幽默感，因为天气可能需要
它。
非常滑稽。
我们开始吧。
呃，所以，呃。
伟大的。
很好的答案。
但当然，比伟大的答案更重要的是，写起来非常简单
工具，让它对数据库进行 SQL 调用。
这是正确的。
就坐在那儿。
呃，要运行该工具，嗯，它只是显示，呃，首先，嗯，有多快
简单的代理聊天是，但其次，你对这些东西的理解有多好，因为
老实说，这对你来说太熟悉了，仅仅不到十分钟，你就已经熟悉了
代理聊天专家。