逐步掌握最佳Ai Agents框架-AutoGen 三 写新闻稿新方式

news2024/11/19 10:21:02

前言

今天带来的仍然是AutoGen基于AssistantAgent和UserProxyAgent的例子,以帮助大家一起消化目前最前卫的AI应用框架。这是一个AIGC最擅长,因为生成新闻稿嘛,同时又需要利用Agent的一个常规Demo。了解LangChain的同学,会通过对比发现,AutoGen做法的高级,并解锁新的AutoGen高级技能,Agent函数调用。

话说笔者当年读大学的时候,突然蹦出了一个要跨考新闻学的大胆想法。随即立马冲向书店,买来全套人大新闻学考研书籍,报了各种考研辅导班…

还记得,当年政治辅导班的老教授,听说我一个双非的筒子想跨考人大的新闻学的时候,一脸的尴尬… 今天,就让我们基于AutoGen,来一起写(生成)一篇新闻稿,弥补当年的遗憾…

主题

谁是最勇敢的人?当然是最可爱的人身边的战地记者,当年我突发奇想,想跨考新闻学也是因为这个。我们今天要写的新闻主题是关于最近最揪心的中东问题,写一篇新闻搞报道哈马斯

开发思路

  • AIGC

    有了大模型,写新闻这种事交给它就可以了,这是AIGC类大模型最擅长的。

  • Agent

    大模型不擅长的是新闻时事,比如chatgpt 3.5训练的数据截止两年前。怎么办呢,我们可以使用一个网络请求Agent,先去访问Google,得到“哈马斯”相关的新闻,再交给LLm来生成新闻。

  • 使用serpapi来获取Google接口数据

QQ图片20231115105159.jpg

上图,我们使用了serpapi的playgound, 搜索框输入了“哈马斯”,下半部分,左边是google页面显示截图,右边是serpapi返回的接口数据。

notebook代码

我这边AutoGen是跑在Colab上的,一个Google的线上NLP开放平台,巴适的很,一起薅羊毛啊!!!大家也可以点开autogen_news.ipynb - Colaboratory (google.com),边看文章,边点击运行代码。

  • 安装依赖
python

复制代码%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!!!

python复制代码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超链接

QQ图片20231115111109.png 上图是api_key

python

复制代码{'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’]]** 代码只返回链接部分

函数返回的结果是

python复制代码['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,完成配置,和前几篇文章一样,不懂的看前面文章的介绍
python复制代码import autogen
    config_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
python复制代码assistant = autogen.AssistantAgent( 
    name="assistant", 
    llm_config=llm_config ) 
#create a proxyAgent named user_proxy

user_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对话
python复制代码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聊天,下达任务。

python

复制代码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的命令语义中提取出了任务和关键字哈马斯

python复制代码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…

image.png

3. 执行函数,拿到google API 返回,并获取link 列表

4.assistant 在拿到这些response后, 向user_proxy汇报,将去分析这些链接里的文章,assistant做为agent, 有远程请求网页,并parse的能力,这是我们之前在langChai中的agent能力。

image.png

5.assistant基于拿到的内容,开始aigc, 按之前用户的需求,写一篇新闻稿(written by a well recognized journalist,这里是prompt的情景设定)。

vbnet

复制代码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 提供了程序能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1791845.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++基础编程100题-004 OpenJudge-1.1-06 空格分隔输出

更多资源请关注纽扣编程微信公众号 http://noi.openjudge.cn/ch0101/06/ 描述 读入一个字符&#xff0c;一个整数&#xff0c;一个单精度浮点数&#xff0c;一个双精度浮点数&#xff0c;然后按顺序输出它们&#xff0c;并且要求在他们之间用一个空格分隔。输出浮点数时保留…

v1.2.70-FastJson的AutoType机制研究

v1.2.70-FastJson的AutoType机制研究 最近在对接Alexa亚马逊语音技能&#xff0c;Smart Home Skill Apis时&#xff0c;有一个配置的JSON字符串是这样的&#xff1a; { "capabilityResources": {"friendlyNames": [{"type": "asset",…

智慧农业灌溉系统的主要工作原理

一、概述   智慧农业灌溉系统是一种基于传感器技术和智能控制技术的灌溉系统。它能够根据土壤湿度、气象条件、作物需水量等多种因素&#xff0c;自动控制灌溉水量和灌溉时间&#xff0c;实现精准灌溉。相比传统的手动灌溉和定时灌溉&#xff0c;智慧农业灌溉系统更加高效、准…

【Kubernetes】9-Pod控制器

一、什么是 pod 的控制器 Pod控制器&#xff0c;又称之为工作负载&#xff08;workload&#xff09;&#xff0c;是用于实现管理pod的中间层 确保pod资源符合预期状态&#xff1b;pod的资源故障时会进行重启&#xff1b; 当重启策略无效时&#xff0c;则会重新新建pod的资源 二…

通过ssr-echarts,服务端生成echarts图

ssr-echarts &#xff1a;一个开源项目&#xff0c;它能够服务端渲染 ECharts 图表&#xff0c;并直接生成 PNG 图片返回。该项目提供了多种主题&#xff0c;并且支持 GET 和 POST 请求。如果参数较多&#xff0c;建议使用 POST 方法。用户可以自己部署这个服务。 1. 服务端安装…

uniapp打包网页版配置页面窗口标题

问题描述&#xff1a; 项目场景&#xff1a;在uniapp打包网页的时候会出现项目标题为&#xff1a;uni-app 原因分析&#xff1a; 当时是直接在这里面修改的&#xff0c;但是打包之后发现标题还是没有改过来 解决方案&#xff1a; 后来才发现这里修改是没有用的&#xff0…

最新OpenAI免费API-openai api key获取方式

最近又开始准备LLM 应用开发&#xff0c;要用到api key&#xff0c;才发现过我之前免费发放的额度没了&#xff01;我都没咋用过&#xff0c;痛心&#x1f62d;&#x1f62d;&#x1f62d;&#xff01; 现在 OpenAI 有要求必须充值 5 刀才能使用&#xff0c;问就是没钱&#x…

人工智能芯片封装技术及应用趋势分析

简介人工智能&#xff08;AI&#xff09;、物联网&#xff08;IoT&#xff09;和大数据的融合正在开创全新的智能时代&#xff0c;以智能解决方案改变各行各业。人工智能芯片在支持人工智能学习和推理计算方面发挥着非常重要的作用&#xff0c;可实现各行各业的多样化应用。 本…

Arduino网页服务器:如何将Arduino开发板用作Web服务器

大家好&#xff0c;我是咕噜铁蛋&#xff01;今天&#xff0c;我将和大家分享一个有趣且实用的项目——如何使用Arduino开发板搭建一个简易的网页服务器。通过这个项目&#xff0c;你可以将Arduino连接到互联网&#xff0c;并通过网页控制或查询Arduino的状态。 一、项目背景与…

C#——随机类Random类

Random类 C#的Random类是用于生成随机数的类&#xff0c;属于System命名空间&#xff0c;可以生成各种类型的随机数&#xff0c;例如整型、双精度浮点型、布尔型等。 使用方法&#xff1a; 使用random数据类型关键字 声明一个random的变量 值使用new random 来实例化这个变量…

基于STM32开发的智能农业灌溉控制系统

目录 引言环境准备智能农业灌溉控制系统基础代码实现&#xff1a;实现智能农业灌溉控制系统 4.1 土壤湿度传感器数据读取4.2 水泵控制4.3 环境监测与数据记录4.4 用户界面与多功能显示应用场景&#xff1a;农业灌溉与环境监测问题解决方案与优化收尾与总结 1. 引言 随着农业…

大模型+编程,未来程序员躺平还是失业?

前言 随着科技的飞速发展&#xff0c;大模型与编程技术的结合正在逐步改变着我们的世界。**在这样的背景下&#xff0c;很多程序员开始担忧&#xff1a;未来的我们&#xff0c;是会“躺平”享受技术的红利&#xff0c;还是会因为技术变革而面临失业的风险&#xff1f;**今天&a…

Linuxftp服务001匿名登入

在Linux系统中搭建FTP&#xff08;File Transfer Protocol&#xff09;服务&#xff0c;可以让用户通过网络在服务器与其他客户端之间传输文件。它有几种登入模式&#xff0c;今天我们讲一下匿名登入。 操作系统 CentOS Stream9 操作步骤 首先我们先下载ftp [rootlocalhost…

使用Matlab软件绘制函数图像

【实验目的】 1.利用Matlab实现平面上曲线和三维空间中曲线绘制&#xff0c;重点掌握隐函数、极坐标图像绘制的相关命令。 2.利用Matlab实现三维曲面绘制&#xff0c;加深对高等数学课程所学内容的理解 【实验内容与实现】 1、用两种方法绘制下面的曲线图 &#xff08;1&am…

区块链游戏(链游)安全防御:抵御攻击的策略与实践

一、引言 区块链游戏&#xff0c;或称为链游&#xff0c;近年来随着区块链技术的普及而迅速崛起。然而&#xff0c;如同其他任何在线平台一样&#xff0c;链游也面临着各种安全威胁。本文将探讨链游可能遭遇的攻击类型以及如何通过有效的策略和技术手段进行防御。 二、链游可…

3072. 将元素分配到两个数组中 II Rust 线段树 + 离散化

题目 给你一个下标从 1 开始、长度为 n 的整数数组 nums 。 现定义函数 greaterCount &#xff0c;使得 greaterCount(arr, val) 返回数组 arr 中 严格大于 val 的元素数量。 你需要使用 n 次操作&#xff0c;将 nums 的所有元素分配到两个数组 arr1 和 arr2 中。在第一次操…

完美解决 mysql 报错ERROR 1524 (HY000): Plugin ‘mysql_native_password‘ is not loaded

文章目录 错误描述错误原因解决步骤 跟着我下面的步骤走&#xff0c;解决你的问题&#xff0c;如果解决不了 私信我来给你解决 错误描述 执行ALTER USER root% IDENTIFIED WITH mysql_native_password BY 123456;报错ERROR 1524 (HY000): Plugin mysql_native_password is not …

PPT的文件怎么做二维码?适合多种文件使用的二维码制作技巧

现在很多人会将ppt文件转换成二维码之后&#xff0c;分享给其他人查看&#xff0c;比如常见的有学习资料、作品展示、个人简历、方案计划等内容都可以通过生成二维码的方式来提供展示。通过手机扫码就能够快速预览文件内容&#xff0c;与使用邮箱或网盘传输相比&#xff0c;更加…

SpaceX 首席火箭着陆工程师 MIT论文详解:非凸软着陆最优控制问题的控制边界和指向约束的无损凸化

上一篇blog翻译了 Lars Blackmore(Lars Blackmore is principal rocket landing engineer at SpaceX)的文章&#xff0c;SpaceX 使用 CVXGEN 生成定制飞行代码,实现超高速机载凸优化。利用地形相对导航实现了数十米量级的导航精度,着陆器在着陆过程中成像行星表面并将特征与机载…

Python考试复习--day7

1.IP地址转换I ipinput() if len(ip)32 and set(ip)<{0,1}:print(..join([ str(int(ip[8*i:8*(i1)],2)) for i in range(4)])) else:print(data error!) 2.找数字&#xff0c;做加法 ainput() binput() d1 d2 for i in a:if i.isnumeric():d1i for i in b:if i.isnumeric(…