当前位置: 首页 > news >正文

Autogen_core: Model Context

目录

    • 示例代码
    • 代码解释
    • 另一个例子

示例代码

from dataclasses import dataclassfrom autogen_core import AgentId, MessageContext, RoutedAgent, SingleThreadedAgentRuntime, message_handler
from autogen_core.model_context import BufferedChatCompletionContext
from autogen_core.models import AssistantMessage, ChatCompletionClient, SystemMessage, UserMessage
from autogen_ext.models.openai import OpenAIChatCompletionClient
@dataclass
class Message:content: str
class SimpleAgentWithContext(RoutedAgent):def __init__(self, model_client: ChatCompletionClient) -> None:super().__init__("A simple agent")self._system_messages = [SystemMessage(content="You are a helpful AI assistant.")]self._model_client = model_clientself._model_context = BufferedChatCompletionContext(buffer_size=5)@message_handlerasync def handle_user_message(self, message: Message, ctx: MessageContext) -> Message:# Prepare input to the chat completion model.user_message = UserMessage(content=message.content, source="user")# Add message to model context.await self._model_context.add_message(user_message)# Generate a response.response = await self._model_client.create(self._system_messages + (await self._model_context.get_messages()),cancellation_token=ctx.cancellation_token,)# Return with the model's response.assert isinstance(response.content, str)# Add message to model context.await self._model_context.add_message(AssistantMessage(content=response.content, source=self.metadata["type"]))return Message(content=response.content)
runtime = SingleThreadedAgentRuntime()model_client = OpenAIChatCompletionClient(model="GLM-4-Air-0111",api_key = "your api key",base_url="https://open.bigmodel.cn/api/paas/v4/",model_capabilities={"vision": True,"function_calling": True,"json_output": True,})await SimpleAgentWithContext.register(runtime,"simple_agent_context",lambda: SimpleAgentWithContext(model_client),
)
# Start the runtime processing messages.
runtime.start()
agent_id = AgentId("simple_agent_context", "default")# First question.
message = Message("Hello, what are some fun things to do in Seattle?")
print(f"Question: {message.content}")
response = await runtime.send_message(message, agent_id)
print(f"Response: {response.content}")
print("-----")# Second question.
message = Message("What was the first thing you mentioned?")
print(f"Question: {message.content}")
response = await runtime.send_message(message, agent_id)
print(f"Response: {response.content}")# Stop the runtime processing messages.
await runtime.stop()
Question: Hello, what are some fun things to do in Seattle?
Response: Seattle is a vibrant city with a lot to offer! Here are some fun things to do, catering to different interests:**For the Outdoorsy Type:***   **Visit Pike Place Market:** This iconic public market is a must-see. Watch fish mongers throw fish, sample local produce, and grab a bite to eat.
*   **Explore the Seattle Great Wheel:** Enjoy stunning views of Elliott Bay and the city skyline from this Ferris wheel on the waterfront.
*   **Take a walk or bike ride along the Seattle Waterfront:** Enjoy the fresh air, views of the Puget Sound, and attractions like the Seattle Aquarium.
*   **Hike the Chirico Trail at Discovery Park:** This 2.8-mile loop offers beautiful views of Puget Sound and the Olympic Mountains.
*   **Go kayaking or stand-up paddleboarding:** Rent a vessel and explore the calm waters of Lake Union or the more adventurous Puget Sound.
*   **Visit the Japanese Garden at the Seattle Arboretum:** Stroll through this serene 3.5-acre garden featuring winding paths, water features, and traditional Japanese landscaping.
*   **Take a day trip to one of the nearby mountains:** Mount Rainier, Mount Baker, and the Cascades offer incredible hiking, scenic drives, and wildlife viewing opportunities.**For the Culture Enthusiast:***   **Explore the Museum of Pop Culture (MoPOP):** This museum dedicated to contemporary popular culture is a fun and interactive experience, with exhibits on music, science fiction, and fantasy.
*   **Visit the Seattle Art Museum (SAM):** Admire a diverse collection of art from around the world, including Native American art and contemporary works.
*   **See a show at the 5th Avenue Theatre or the Paramount Theatre:** Catch a Broadway show or a concert in one of these historic venues.
*   **Explore the historic Pioneer Square district:** This area features Victorian-era architecture, art galleries, and unique shops.
*   **Visit the Ballard Locks (Hiram M. Chittenden Locks):** Watch boats pass between Puget Sound and the Ship Canal, and enjoy the surrounding park.
*   **Attend a festival or event:** Seattle hosts numerous festivals throughout the year, including the Seattle International Film Festival, Bumbershoot, and the Capitol Hill Block Party.**For the Foodie:***   **Enjoy a coffee at a local cafe:** Seattle is the birthplace of Starbucks, but you'll find many independent coffee shops offering delicious brews.
*   **Try some fresh seafood:** From salmon to Dungeness crab, Seattle is known for its fresh seafood. Canlis, The Pink Door, and Ivar's Acres of Clams are great options.
*   **Explore the diverse culinary scene:** Seattle has a wide range of cuisines, from Vietnamese pho to Ethiopian injera. Explore the International District for a variety of options.
*   **Visit a food truck pod:** Food truck pods are a great way to sample a variety of cuisines in one location. South Lake Union and Capitol Hill have several pods.**For the Music Lover:***   **Visit the Experience Music Project (now part of MoPOP):** This museum celebrates the history of music, with a focus on Seattle's grunge scene.
*   **See a live music show:** Seattle has a thriving music scene, with venues like The Crocodile, Neumos, and The Showbox hosting shows almost every night.
*   **Explore the Music Row district on 5th Avenue:** This area is home to several music venues, record stores, and other music-related businesses.**Unique Seattle Experiences:***   **Ride the monorail:** This historic monorail connects downtown Seattle to the Seattle Center.
*   **Visit the Seattle Center:** This park, built for the 1962 World's Fair, features the Space Needle, the International Fountain, and other attractions.
*   **Take a Bill Speidel's Underground Tour:** Explore the hidden passages and history beneath the city streets.
*   **Go on a whale watching tour:** Several companies offer tours to see orcas and other marine wildlife in Puget Sound.**Tips for Planning Your Trip:***   **Best time to visit:** Spring and fall offer pleasant weather and fewer crowds. Summer can be warm and sunny, but also crowded and expensive.
*   **Getting around:** Seattle has a good public transportation system, including buses, light rail, and streetcars. Ride-sharing services are also readily available.
*   **Book accommodations and activities in advance:** Especially during peak season.This is just a starting point, and there's much more to discover in Seattle! To help me narrow down the options further, tell me:*   **When are you planning to visit?**
*   **How long will you be in Seattle?**
*   **What are your interests (e.g., outdoors, food, art, music)?**
*   **Who
-----
Question: What was the first thing you mentioned?
Response: The first thing I mentioned in my response about fun things to do in Seattle was **Visit Pike Place Market**.

代码解释

这段代码使用了一个名为 autogen_core 的库,该库通常用于创建和运行基于AI的聊天代理。代码的目的是创建一个简单的代理,它能够上下文感知地回答用户的问题。下面是代码的逻辑和功能的详细解释:

  1. 导入必要的类和模块

    • dataclass 用于定义简单的数据结构。
    • autogen_core 中的 AgentIdMessageContextRoutedAgentSingleThreadedAgentRuntimemessage_handler 用于创建和管理代理。
    • BufferedChatCompletionContext 用于管理聊天上下文。
    • AssistantMessageChatCompletionClientSystemMessageUserMessage 用于构建和发送消息。
    • OpenAIChatCompletionClient 是一个用于与OpenAI模型进行交互的客户端。
  2. 定义 Message 数据类

    • 这是一个简单的数据结构,用于存储消息的内容。
  3. 创建 SimpleAgentWithContext

    • 这个类继承自 RoutedAgent,代表一个能够处理消息的代理。
    • 构造函数初始化代理的名称、系统消息列表、模型客户端和模型上下文。
    • handle_user_message 方法是一个异步消息处理器,它接收用户消息,将其添加到模型上下文中,并使用模型客户端生成响应。
    • 生成的响应被添加回模型上下文,并返回给用户。
  4. 初始化运行时环境和模型客户端

    • runtime 是一个 SingleThreadedAgentRuntime 实例,用于管理代理的运行。
    • model_client 是一个 OpenAIChatCompletionClient 实例,配置了特定的模型名称、API密钥和基本URL。
  5. 注册和启动代理

    • SimpleAgentWithContext 被注册到运行时环境中,并指定了一个构造函数。
    • 运行时环境被启动以开始处理消息。
  6. 发送和接收消息

    • 通过 runtime.send_message 方法发送两个问题给代理,并打印出问题和相应的回答。
    • 第一个问题是关于在Seattle的有趣活动。
    • 第二个问题是关于代理提到的第一个活动。
  7. 停止运行时环境

    • 一旦消息处理完成,运行时环境被停止。

完成的功能

  • 这段代码创建了一个能够理解上下文的聊天代理,它可以接收用户的问题,并根据之前的对话历史生成相关的回答。
  • 该代理使用了一个远程的AI模型(通过 OpenAIChatCompletionClient)来生成回答。
  • 通过将用户的每个问题和代理的回答存储在上下文中,代理能够理解对话的流程并提供更相关的回答。

请注意,为了使代码能够运行,需要确保 autogen_coreautogen_ext 库是可用的,并且 OpenAIChatCompletionClient 能够与指定的模型进行通信。此外,代码中使用了异步编程,这意味着它需要在支持异步操作的Python环境中运行。

另一个例子

from dataclasses import dataclass
from autogen_core import AgentId, MessageContext, RoutedAgent, SingleThreadedAgentRuntime, message_handler
from autogen_core.model_context import BufferedChatCompletionContext
from autogen_core.models import AssistantMessage, ChatCompletionClient, SystemMessage, UserMessage
from autogen_ext.models.openai import OpenAIChatCompletionClient@dataclass
class Message:content: strclass CodeExplainerAgent(RoutedAgent):def __init__(self, model_client: ChatCompletionClient) -> None:super().__init__("A code explainer agent")self._system_messages = [SystemMessage(content="You are an AI assistant specialized in explaining Python code.")]self._model_client = model_clientself._model_context = BufferedChatCompletionContext(buffer_size=5)@message_handlerasync def handle_user_message(self, message: Message, ctx: MessageContext) -> Message:user_message = UserMessage(content=message.content, source="user")await self._model_context.add_message(user_message)response = await self._model_client.create(self._system_messages + (await self._model_context.get_messages()),cancellation_token=ctx.cancellation_token,)assert isinstance(response.content, str)await self._model_context.add_message(AssistantMessage(content=response.content, source=self.metadata["type"]))return Message(content=response.content)runtime = SingleThreadedAgentRuntime()model_client = OpenAIChatCompletionClient(model="GLM-4-Air-0111",api_key="your api key",base_url="https://open.bigmodel.cn/api/paas/v4/",model_capabilities={"vision": True,"function_calling": True,"json_output": True,}
)await CodeExplainerAgent.register(runtime,"code_explainer_agent",lambda: CodeExplainerAgent(model_client),
)runtime.start()
agent_id = AgentId("code_explainer_agent", "default")# 代码解释示例
message = Message("解释以下代码:\n```python\nimport numpy as np\nA = np.array([[1, 2], [3, 4]])\nprint(A.T)\n```")
print(f"Question: {message.content}")
response = await runtime.send_message(message, agent_id)
print(f"Response: {response.content}")
print("-----")# 继续问上下文相关问题
message = Message("代码中的 `.T` 是什么意思?")
print(f"Question: {message.content}")
response = await runtime.send_message(message, agent_id)
print(f"Response: {response.content}")await runtime.stop()
Question: 解释以下代码:
```python
import numpy as np
A = np.array([[1, 2], [3, 4]])
print(A.T)
```
Response: 这段代码首先导入了NumPy库,并将其命名为`np`。NumPy是一个用于科学计算的Python库,它提供了一个强大的N维数组对象和一系列用于快速操作数组的函数。接着,代码创建了一个2x2的NumPy数组`A`,其元素为[[1, 2], [3, 4]]。最后,代码使用`.T`属性来获取数组`A`的转置,并将其打印出来。`.T`属性是NumPy数组的一个特性,它返回数组的转置视图。对于二维数组,这意味着行和列将互换。当运行这段代码时,输出将是:```
[[1 3][2 4]]
```这显示了原始数组`A`的转置,其中第一行[1, 2]变成了第一列,第二行[3, 4]变成了第二列。
-----
Question: 代码中的 `.T` 是什么意思?
Response: 在 NumPy 中,`.T` 属性用于获取数组的转置。转置是一个矩阵操作,它将矩阵的行和列进行互换。例如,如果一个矩阵 `A` 的形状是 `(m, n)`,那么它的转置 `A.T` 的形状将是 `(n, m)`。在您的代码示例中:```python
import numpy as np
A = np.array([[1, 2], [3, 4]])
print(A.T)
````A` 是一个 2x2 的矩阵:```
A = [[1, 2],[3, 4]]
```应用 `.T` 属性后,我们得到 `A` 的转置:```
A.T = [[1, 3],[2, 4]]
```这里,原来的行变成了列,原来的列变成了行。对于更高维度的数组,`.T` 同样适用,并且可以结合 `axes` 参数进行更复杂的转置操作,但那超出了您当前代码的范围。对于大多数矩阵操作,简单地使用 `.T` 就足够了。

参考链接:https://microsoft.github.io/autogen/stable/user-guide/core-user-guide/components/model-context.html

相关文章:

Autogen_core: Model Context

目录 示例代码代码解释另一个例子 示例代码 from dataclasses import dataclassfrom autogen_core import AgentId, MessageContext, RoutedAgent, SingleThreadedAgentRuntime, message_handler from autogen_core.model_context import BufferedChatCompletionContext from …...

SpringBoot AOP 和 事务

SpringBoot 整合 AOP 动态代理技术 JDK 动态代理 JDK 动态代理是 Java 自带的一种代理方式。它要求目标类必须有接口,基于这个接口,JDK 在运行时会动态生成一个代理对象。这个代理对象和目标对象就像 “拜把子” 的兄弟,因为它们都实现了相同…...

Ubuntu全面卸载mysql

如果你已经看到whereis mysql输出了与MySQL相关的路径,说明MySQL仍然存在于系统中。要卸载MySQL,可以按照以下步骤操作,确保完全删除所有相关的文件和配置: 1. 停止MySQL服务 首先,停止MySQL服务: sudo …...

android的gradle

资料: GitHub - ChenSWD/CopyGradleInAction: 备份《Gradle IN Action》书中的源码,添加了部分注释 //github上一个开源项目,外加pdf书 Gradle User Manual gradle官网 讲的挺好的博客 Gradle之重新认识Gradle(项目结构、命令行、tas…...

前端开发之jsencrypt加密解密的使用方法和使用示例

目录 RSA密钥生成选项简介 jsencrypt 使用教程 一、安装 jsencrypt 二、使用 jsencrypt 进行加密和解密 1. 创建密钥对 2. 加密数据 3. 解密数据 三、实际应用示例 加密数据并存储到 localStorage 中: 从 localStorage 中读取加密数据并解密: …...

电路研究9.2.5——合宙Air780EP中GPS 相关命令使用方法研究

注:本命令仅适用于合宙 4G CAT1 模块(Air780EG 系列)。 正好,我们使用的Air780EP好像也有4G CAT1模块,好像也属于Air780EG系列吧。 这个例子好像比较少就个。 18.9 使用方法举例 18.1GPS 开关:ATCGNSPWR 这…...

Python标准库 - os (3) 调度策略、系统信息

文章目录 6 调度策略6.1 调度策略常量6.2 访问和设置进程的调度策略 7 系统信息7.1 系统信息7.2 系统配置信息7.3 系统负载7.4 路径相关常量7.5 生成随机字节 os模块提供了各种操作系统接口。包括环境变量、进程管理、进程调度、文件操作等方面。 这里整理了进程调度和查看系统…...

【NLP251】NLP RNN 系列网络

NLP251 系列主要记录从NLP基础网络结构到知识图谱的学习 1.原理及网络结构 1.1RNN 在Yoshua Bengio论文中( http://proceedings.mlr.press/v28/pascanu13.pdf )证明了梯度求导的一部分环节是一个指数模型…...

【漫话机器学习系列】067.希腊字母(greek letters)-写法、名称、读法和常见用途

希腊字母(Greek Letters) 希腊字母在数学、科学、工程学和编程中广泛使用,常用于表示变量、常量、参数、角度等。以下是希腊字母的完整列表及其常见用途。 大写与小写希腊字母表 大写小写名称(英文)名称(…...

2.文件IO

2.文件IO **1. 文件I/O概述****2. 文件I/O函数接口****3. 文件定位****4. 文件描述符与文件流指针的转换****5. 文件I/O与标准I/O的比较****6. 练习与作业****7. 文件I/O与标准I/O的对应关系****8. 其他注意事项****9. 总结** 1. 文件I/O概述 文件I/O:操作系统为了…...

毕业设计--具有车流量检测功能的智能交通灯设计

摘要: 随着21世纪机动车保有量的持续增加,城市交通拥堵已成为一个日益严重的问题。传统的固定绿灯时长方案导致了大量的时间浪费和交通拥堵。为解决这一问题,本文设计了一款智能交通灯系统,利用车流量检测功能和先进的算法实现了…...

【SpringBoot教程】Spring Boot + MySQL + HikariCP 连接池整合教程

🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 在前面一篇文章中毛毛张介绍了SpringBoot中数据源与数据库连接池相关概念,今天毛毛张要分享的是关于SpringBoot整合HicariCP连接池相关知识点以及底层源码…...

设计模式的艺术-策略模式

行为型模式的名称、定义、学习难度和使用频率如下表所示: 1.如何理解策略模式 在策略模式中,可以定义一些独立的类来封装不同的算法,每个类封装一种具体的算法。在这里,每个封装算法的类都可以称之为一种策略(Strategy…...

【memgpt】letta 课程1/2:从头实现一个自我编辑、记忆和多步骤推理的代理

llms-as-operating-systems-agent-memory llms-as-operating-systems-agent-memory内存 操作系统的内存管理...

动态规划DP 最长上升子序列模型 合唱队形(题目分析+C++完整代码)

概览检索 动态规划DP 最长上升子序列模型 合唱队形 原题链接 AcWiing 482. 合唱队形 题目描述 N位同学站成一排,音乐老师要请其中的 (N−K)位同学出列,使得剩下的 K位同学排成合唱队形。 合唱队形是指这样的一种队形:设 K位同学从左到右…...

【踩坑】解决Hugging-face下载问题

解决Hugging-face下载问题 问题1:couldnt connect to https://huggingface.co问题2:HTTPSConnectionPool(hostcdn-lfs-us-1.hf-mirror.com, port443)设置hf_transfer加快速度 问题3:requests.exceptions.ChunkedEncodingError: (Connection b…...

Spring AI 在微服务中的应用:支持分布式 AI 推理

1. 引言 在现代企业中,微服务架构 已成为开发复杂系统的主流方式,而 AI 模型推理 也越来越多地被集成到业务流程中。如何在分布式微服务架构下高效地集成 Spring AI,使多个服务可以协同完成 AI 任务,并支持分布式 AI 推理&#x…...

5.3.2 软件设计原则

文章目录 抽象模块化信息隐蔽与独立性衡量 软件设计原则:抽象、模块化、信息隐蔽。 抽象 抽象是抽出事物本质的共同特性。过程抽象是指将一个明确定义功能的操作当作单个实体看待。数据抽象是对数据的类型、操作、取值范围进行定义,然后通过这些操作对数…...

java求职学习day20

1 在线考试系统 1.1 软件开发的流程 需求分析文档、概要设计文档、详细设计文档、编码和测试、安装和调试、维护和升级 1.2 软件的需求分析 在线考试系统的主要功能分析如下: ( 1 )学员系统 (1.1)用户模块&…...

Python NumPy(8):NumPy 位运算、NumPy 字符串函数

1 NumPy 位运算 位运算是一种在二进制数字的位级别上进行操作的一类运算,它们直接操作二进制数字的各个位,而不考虑数字的整体值。NumPy 提供了一系列位运算函数,允许对数组中的元素进行逐位操作,这些操作与 Python 的位运算符类似…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...