AutoGen框架革新:解锁新闻稿写作的新境界
前言
今天带来的仍然是AutoGen基于AssistantAgent和UserProxyAgent的例子,以帮助大家一起消化目前最前卫的AI应用框架。这是一个AIGC最擅长,因为生成新闻稿嘛,同时又需要利用Agent的一个常规Demo。了解LangChain的同学,会通过对比发现,AutoGen做法的高级,并解锁新的AutoGen高级技能,Agent函数调用。
话说笔者当年读大学的时候,突然蹦出了一个要跨考新闻学的大胆想法。随即立马冲向书店,买来全套人大新闻学考研书籍,报了各种考研辅导班…
还记得,当年政治辅导班的老教授,听说我一个双非的筒子想跨考人大的新闻学的时候,一脸的尴尬… 今天,就让我们基于AutoGen,来一起写(生成)一篇新闻稿,弥补当年的遗憾…
主题
谁是最勇敢的人?当然是最可爱的人身边的战地记者,当年我突发奇想,想跨考新闻学也是因为这个。我们今天要写的新闻主题是关于最近最揪心的中东问题,写一篇新闻搞报道哈马斯。
开发思路
-
AIGC
有了大模型,写新闻这种事交给它就可以了,这是AIGC类大模型最擅长的。
-
Agent
大模型不擅长的是新闻时事,比如chatgpt 3.5训练的数据截止两年前。怎么办呢,我们可以使用一个网络请求Agent,先去访问Google,得到“哈马斯”相关的新闻,再交给LLm来生成新闻。
-
使用serpapi来获取Google接口数据
上图,我们使用了serpapi的playgound, 搜索框输入了“哈马斯”,下半部分,左边是google页面显示截图,右边是serpapi返回的接口数据。
notebook代码
我这边AutoGen是跑在Colab上的,一个Google的线上NLP开放平台,巴适的很,一起薅羊毛啊!!!大家也可以点开[autogen_news.ipynb - Colaboratory (google.com)],边看文章,边点击运行代码。
- 安装依赖
%pip install pyautogen~=0.1.0 google-search-results -q -U
pyautogen即AutoGen,目前还在早期版本0.1.0, 有些同学觉得API换的好勤,这很正常,非常早期。 google-search-results 即serpapi 提供的google api sdk。
- 定义接口函数
AutoGen中UserProxyAgent,具有强大功能,除了可以做我们的代理外,还可以执行我们定义好的函数。在这里我们定义好google search 的函数, 到时由UserProxyAgent 自动调用。赞啊,今天的能力增长点Get!!!
from serpapi import GoogleSearch # 引入 GoogleSearch模块
def search_google_news(keyword): # 定义搜索函数,交给proxy agent调用print(f"Keyword:{keyword}")search = GoogleSearch({ #向GoogleSearch传递配置参数"q":keyword, # 关键字"tbm": "nws", # 表示搜索的是新闻"api_key":"" # https://serpapi.com/manage-api-key 处获得})result = search.get_dict()print(result)return [item['link'] for item in result['news_results']] #只需要返回的每条记录中的link超链接
上图是api_key
{'position': 4, 'link': '<https://news.online.sh.cn/news/gb/content/2023-11/14/content_10141630.htm>', 'title': '内塔尼亚胡说“可能”与哈马斯达成放人协议', 'source': '上海热线', 'date': '16 hours ago', 'snippet': '新华社北京11月13日电以色列总理本雅明·内塔尼亚胡12日接受美国媒体采访时说,“可能”与巴勒斯坦伊斯兰抵抗运动(哈马斯)就释放遭扣押人员达成协议,...', 'thumbnail': '<https://serpapi.com/searches/655439e095bf92860deeae63/images/706261574d4453726e8c40185f13181cccd5b3544a7ebe85168ea4acb6679a89.jpeg>'}
上面是接口返回的一条数据的格式,在search_google_news函数中, 最后我们通过**[item[‘link’] for item in result[‘news_results’]]** 代码只返回链接部分
函数返回的结果是
['https://www.voachinese.com/a/us-britain-impose-sanctions-on-hamas-20231114/7354871.html', 'https://www.rfi.fr/cn/%E5%9B%BD%E9%99%85/20231114-%E8%A7%86%E9%A2%91-%E5%93%88%E9%A9%AC%E6%96%AF%E5%8A%A0%E6%B2%99%E5%A4%9A%E6%9C%BA%E6%9E%84%E5%A4%B1%E5%AE%88-%E4%BB%8D%E7%BB%AD%E5%8F%91%E7%81%AB%E7%AE%AD%E5%BC%B9%E7%82%B8%E4%BB%A5%E8%89%B2%E5%88%97','https://chinese.aljazeera.net/palestine-israel-conflict/liveblog/2023/11/15/%E4%BB%A5%E8%89%B2%E5%88%97%E5%AF%B9%E5%8A%A0%E6%B2%99%E6%88%98%E4%BA%89%E7%9A%84%E4%BB%8A%E6%97%A5%E5%8F%91%E5%B1%95%E4%BB%A5%E8%89%B2%E5%88%97%E8%A2%AD%E5%87%BB%E5%B8%8C%E6%B3%95%E5%8C%BB%E9%99%A2'....]
- 接下来引入AutoGen,完成配置,和前几篇文章一样,不懂的看前面文章的介绍
import autogenconfig_list = [{'model': 'gpt-3.5-turbo','api_key': ''}
]
llm_config={"timeout": 600,"seed": 42,"config_list": config_list,"temperature": 0,"functions": [{"name": "search_google_news","description": "Search google news by keyword","parameters": {"type": "object","properties": {"keyword": {"type": "string","description": "The keyword that's used to search google news",}},"required": ["keyword"],},}],
}
上面的llm_config 配置代码中,比上篇文章多了 functions 部分,即大模型可以使用的函数,name为search_google_news, agent就可以调用上面定义的函数了。并使用description 声明了agent调用哪个函数的自然语义,LLM可以根据用户的输入来对description做embedding的。required 是必须传的参数。
- 创建Agent
assistant = autogen.AssistantAgent( name="assistant", llm_config=llm_config )
#create a proxyAgent named user_proxyuser_proxy = autogen.UserProxyAgent( name="user_proxy",human_input_mode="NEVER", #用户输入模式是从命令行 max_consecutive_auto_reply=10, # 代理Agent会代替用户做执行,这里配置最大的连续自动proxy次数是 10 # `lambda`关键字在Python中用于创建匿名函数,也就是没有名字的函数。这个函数接受一个参数`x`,然后返回一个布尔值。检查`x`的"content"字段的值是否以"TERMINATE"结束code_execution_config={"work_dir":"."}, # 这个有点意思,感觉是我们在向代理agent授权。 system_message="When a link is provided, you should ask the assistant for fetching the content.Reply TERMINATE if the task has been solved at full satisfaction.Otherwise, reply CONTINUE, or the reason why the task is not solved yet." )function_map={"search_google_news":search_google_news}
- 开始agents对话
user_proxy.initiate_chat( assistant, message="""Search Google news in topic of "哈马斯",and write a news base on them.You should be avoid bullet points.Instead, use more expressive words to form a news that's like one written by a well recognized journalist.Start the keywords now"""
)
- 研究输出,了解 agent chat 工作流。
1. user_proxy接收到我们的指令,跟assistant聊天,下达任务。
user_proxy (to assistant): Search Google news in topic of "哈马斯",and write a news base on them. You should be avoid bullet points. Instead, use more expressive words to form a news that's like one written by a well recognized journalist. Start the keywords now
借助之前对Prompt 的理解,assistant应用借助了大模型,从user_proxy的命令语义中提取出了任务和关键字哈马斯。
assistant (to user_proxy):
***** Suggested function Call: search_google_news *****
Arguments: { "keyword": "哈马斯"
}
*******************************************************
2. assistant 结合llm_config配置的functions,chat 告诉user_proxy 执行search_google_news函数,并提供了相应的参数keyword。 实在太nb了。我个人理解AutoGen提供的这种Agent with funciton calls 能力,必然成为超越LangChain等框架的优势,有点像agent的agent…
3. 执行函数,拿到google API 返回,并获取link 列表
4.assistant 在拿到这些response后, 向user_proxy汇报,将去分析这些链接里的文章,assistant做为agent, 有远程请求网页,并parse的能力,这是我们之前在langChai中的agent能力。
5.assistant基于拿到的内容,开始aigc, 按之前用户的需求,写一篇新闻稿(written by a well recognized journalist,这里是prompt的情景设定)。
In the midst of escalating tensions in the Gaza Strip, the militant group 哈马斯 is facing significant challenges as it continues to engage in conflict with Israel. Recent developments have highlighted the complex dynamics at play in the region, with both military and political implications. According to reports, 哈马斯 has lost control over several key institutions in Gaza, raising concerns about its ability to maintain its stronghold in the area. The Israeli military has claimed that 哈马斯' grip on power has weakened, citing the loss of control over strategic locations. This has led to speculation about the group's future and its ability to effectively govern in the face of mounting pressure. In response to the situation, 哈马斯 has continued to launch rocket attacks against Israel, further fueling the conflict. Despite the setbacks, the group remains defiant, vowing to retaliate against what it perceives as Israeli aggression. The ongoing violence has resulted in civilian casualties and widespread destruction, exacerbating an already dire humanitarian situation in the region. The international community has also weighed in on the situation, with the United States and Britain imposing sanctions on 哈马斯. This move is seen as a significant step in isolating the group and holding it accountable for its actions. However, opinions on the effectiveness of such measures remain divided, with some arguing that they may further escalate tensions and hinder efforts towards a peaceful resolution. Meanwhile, the controversy surrounding 哈马斯 has extended beyond the conflict zone. In France, the use of the term "terrorist" to describe the group has sparked a heated debate. French news agency Agence France-Presse (AFP) has decided to refrain from using the term, citing concerns about its potential impact on public perception and the need for impartial reporting. This decision has drawn both support and criticism, highlighting the complexities of addressing the issue from a journalistic standpoint. As the situation in Gaza continues to evolve, the future of 哈马斯 remains uncertain. The group's ability to navigate the challenges it faces, both internally and externally, will undoubtedly shape the course of the conflict and its impact on the region. The international community, meanwhile, faces the daunting task of finding a sustainable and peaceful resolution to the long-standing Israeli-Palestinian conflict. Note: This news article is a fictional representation based on the provided keywords and search results. It does not reflect real events or news reporting.
好的任务完成,太酷了。
总结
本篇主要介绍了AutoGen的agent with function calls的Demo。作者有以下几个感受:
- LLM带来的Prompt Enginner, 让更多非软件专业的同学,能够加入到LLM的“掘金”中来。笔者正在力求与其它专业的同学沟通,AutoGen这种自动聊天的运行方式,让Prompt Enginner 更自然,更接地气。
- agent with function calls 强大了agent 的工程化能力,agent照章办事,又为prompt 提供了程序能力。
如何学习AI大模型?
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
相关文章:

AutoGen框架革新:解锁新闻稿写作的新境界
前言 今天带来的仍然是AutoGen基于AssistantAgent和UserProxyAgent的例子,以帮助大家一起消化目前最前卫的AI应用框架。这是一个AIGC最擅长,因为生成新闻稿嘛,同时又需要利用Agent的一个常规Demo。了解LangChain的同学,会通过对比…...

数据结构之队列详解
1.队列的概念以及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFo(Frist in Frist out)的特性 入队列:进行插入才操作的一端称为队尾 出队列:进行删除操作的一…...

[渗透测试] 反序列化漏洞
反序列化漏洞 序列化:将对象的状态信息转换为可以传输或存储的形式的过程。简单的来说,就是将一个抽象的对象转换成可以传输的字符串 ,以特定的形式在进行之间实现跨平台的传输。 序列化大多以字节流、字符串、json串的形式来传输。将对…...
C++ 类型转换 包括C风格的转换、static_cast、const_cast、reinterpret_cast、dynamic_cast、模板特化等
C 类型转换 包括C风格的转换、static_cast、const_cast、reinterpret_cast、dynamic_cast、模板特化等 flyfish 0. 隐式转换(Implicit Conversions) 隐式转换是编译器自动进行的类型转换,通常在需要将一个类型转换为另一个类型以匹配函数参…...
等保通过标准
等保测评,即信息系统安全等级保护测评,是国家对信息系统安全等级保护的一种评估活动。它涉及到安全管理、安全技术、安全运维等多个方面,旨在评定信息系统是否达到了国家设定的安全等级保护标准。等保测评的通过标准通常会根据信息系统的安全…...
reduceByKey 函数详解
reduceByKey 函数详解 实现原理 reduceByKey 函数主要用于处理分布式数据集。它接收两个操作符作为参数: keySelector:这是一个映射函数,用于从输入元素中提取键。 valueReducer:这是另一个函数,用于将具有相同键的…...

CSI-RS在信道中传输的过程
简单介绍CSI-RS信号生成,在信道中传输和接收的过程 1.载波配置 首先需要配置载波相关的参数 系统带宽和子载波间隔 5G NR中,系统带宽和子载波间隔是两个关键参数,共同决定无线资源的分配和使用 系统带宽 5G NR支持广泛的系统带宽&…...
建造者模式(Builder Pattern)工作原理
文章目录 [toc]建造者模式(Builder Pattern)工作原理一、基本概念二、主要角色三、工作流程(一)定义产品(二)定义抽象建造者(三)定义具体建造者(四)定义指挥者…...
Ubuntu22.04安装Go语言的几种方式
在 Ubuntu 22.04 上安装 Go 语言可以通过几种不同的方法,以下是两种常见的安装方法: 方法1:使用 go 官方安装脚本 打开终端。 下载 Go 语言的安装脚本: curl -O https://go.dev/dl/go1.22.5.linux-amd64.tar.gz请检查 Go 官方网…...

Typora笔记上传到CSDN
1.Typora 安装 Typora链接:百度网盘 提取码:b6d1 旧版本是不需要破解的 后来的版本比如1.5.9把放在typora的根目录下就可以了 2.上传到CSDN 步骤 csdn 写文章-使用MD编辑器-导入本地md文件即可 问题 图片没法显示 原因 图片的链接是本地的 当然没法…...

Modbus转BACnet/IP网关BA100-配硬件说明
在现代自动化系统中,不同设备和系统之间的通信至关重要,Modbus和BACnet/IP协议虽然各有优势,但它们之间的直接通信存在障碍。钡铼Modbus转BACnet/IP网关作为连接这两种协议的桥梁,允许不同系统之间的无缝数据交换。 一、Modbus转…...

DjangoRF实战-2-apps-users
1、用户模块 创建一个用户模块子应用,用来管理用户,和认证和授权。 1.1根目录创建apps, 为了使用方便,还需要再pycharm中设置一下资源路径,就可以自动提示 1.2注册子应用 1.3添加应用根目录到环境变量path python导…...

java面试题,有synchronized锁,threadlocal、数据可以设置默认值、把redis中的json转为对象
有面试题,有synchronized锁,threadlocal 一、面试题小记二、加锁synchronized1. 先看代码2. synchronized 讲解2.1. 同步代码块2.2. 同步方法2.3. 锁的选择和影响2.4. 注意事项2.5 锁的操作,手动释放锁,显式地获取锁(属…...
Apache Spark:深度解析
文章目录 引言Apache Spark 官网链接Spark 的原理1. 核心组件2. 弹性分布式数据集(RDD)3. 执行模型 基础使用1. 环境搭建2. 示例代码 高级功能1. DataFrame 和 Dataset2. 机器学习3. 流处理 优缺点优点缺点 结论 引言 Apache Spark 是一个快速、通用、可…...
使用umi作为模板如何实现权限管理
三种权限管理的方法: 在做后台管理系统时,难免会使用到权限管理,权限管理方式有三种,分别是:路由、守卫、后端配合。 路由:通过动态路由,根据登录人员不同注册不同的路由,直接让没…...

系统架构设计师教程 第4章 信息安全技术基础知识-4.1 信息安全基础知识-解读
系统架构设计师教程 第4章 信息安全技术基础知识-4.1 信息安全基础知识 4.1.1 信息安全的概念4.1.1.1 信息安全的范围4.1.1.1.1 设备安全4.1.1.1.2 数据安全4.1.1.1.3 内容安全4.1.1.1.4 行为安全 4.1.2 信息存储安全4.1.2.1 信息使用的安全4.1.2.1.1 用户的标识与验证4.1.2.1.…...
【Rust光年纪】探索Rust游戏开发世界:六款引人注目的游戏引擎与框架
探索Rust游戏开发引擎:选择合适的工具 前言 随着Rust语言的不断发展,越来越多的游戏开发者开始将其视作构建游戏引擎和框架的理想选择。本文将介绍几个用于Rust语言的游戏引擎和框架,分别对其核心功能、使用场景、安装与配置以及API进行概览…...

从数据时代到智能时代,星环科技信雅达联合发布金融全栈解决方案
近年来,星环科技与信雅达在金融行业的多个关键领域展开了广泛而深入的合作,推出了一系列面向金融科技领域的联合解决方案。此次合作基于星环科技在大数据、人工智能和云计算领域的先进技术,以及信雅达在金融领域的深厚积累,围绕数…...
自定义维度映射:Kylin Cube设计的高级玩法
自定义维度映射:Kylin Cube设计的高级玩法 在数据仓库领域,Apache Kylin以其高性能的分析能力而闻名。Kylin通过构建多维数据立方体(Cube)来实现对大数据集的快速查询。Cube设计中的维度映射是优化查询性能的关键环节。本文将探讨…...
c17 新特性 字面量,变量,函数,隐藏转换等
导论 c17新特性引入了许多新的语法,这些语法特性更加清晰,不像传统语法,语义飘忽不定,比如‘a’你根本不知道是宽字符还是UTF-8 字符。以及测试i i,最后结果到底是多少。这种问题很大情况是根据编译器的优化进行猜测&a…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...

群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...