介绍
大语言模型(LLM)的功能正在迅速发展。它们使我们能够构建各种LLM应用程序。这些范围从任务自动化到工作流优化。一个令人兴奋的应用程序是使用LLMS创建智能新闻文摘或新闻通讯代理。该代理可以提取相关内容,总结它并以自定义格式交付。它可以与外部工具和数据源动态交互以获取相关信息。在本文中,让我们学习如何使用Langgraph和News API(例如News API)为个性化的每日新闻摘要构建新闻摘要代理。
概述
- 了解Langgraph及其关键组件(状态,节点和边缘)的体系结构,以构建可自定义的工作流代理。
- 了解如何将新闻纸这样的外部API集成以获取新闻通讯中动态内容的实时数据。
- 通过实施根据质量标准对新闻文章进行排名的评分系统,开发使用LLM进行内容评估的技能。
- 使用Python的电子邮件汇编库将其自动化电子邮件交付自动化的实用知识。
目录
- 关于Langgraph的简介
- 先决条件
- 定义应用程序流
- 获取新闻
- 得分新闻
- 发送电子邮件
- 建造代理
- 常见问题
关于Langgraph的简介
Langgraph建在Langchain的顶部。 Langgraph是一个框架,旨在构建将LLM与自定义逻辑和工具集成的动态工作流程。这允许高度定制且复杂的工作流程结合多个工具和API。
Langgraph由三个核心组成部分组成:
- 状态:状态包含整个应用程序中共享的数据。可以是任何可以持有数据的Python数据结构。我们可以使用具有不同参数的状态对象来定义它。另外,我们还可以使用仅包含消息列表的预构建的MessagessTate。
- 节点:节点是可以读取和修改状态的函数。这些功能将状态作为读或写入状态的第一个参数。我们还有一个开始节点来表示哪个节点将获取用户输入,并首先称为“表示图”末尾的末端节点。
- 边缘:边缘通过不同的节点定义数据流。我们还具有有条件的边缘,该边缘使用函数来确定下一步要转到哪个节点。 Langgraph的优点是我们可以通过许多方式自定义代理。因此,可以有不止一种方法来构建该代理。
如图所示,边缘连接节点,节点在状态中读取或写入数据。
另请阅读:优化组织与Genai代理商的电子邮件营销
先决条件
在开始构建LLM代理之前,请确保我们拥有所需的键和密码。
通过API访问LLM
首先为您使用的LLM生成一个API键。创建一个名称为“ .env”的文本文件。将此密钥牢固地存储在.env文件中,以使其私密且在项目中易于访问。
这是一个.env文件的示例
获取新闻数据
要收集新闻内容,我们将使用https://newsapi.org/。注册一个API键并将其存储在同一.ENV文件中以进行安全访问。
发送电子邮件
要使用Python发送电子邮件,我们可以启用“较不安全的应用程序”,然后将Gmail密码存储在.ENV文件中。如果该选项不可用,我们可以按照此处提到的步骤访问Gmail。
需要库
我们已将以下版本用于主要库:
- Langchain - 0.2.14
- Langgraph - 0.2.14
- Langchain-Openai - 0.1.14
- Newsapi-Python - 0.2.7
定义应用程序流
目的是使用自然语言查询代理商,以收集有关特定主题的新闻,并通过电子邮件获取新闻通讯。为了实现此流程,我们将首先定义三个工具来处理每个关键任务,然后构建代理来调用LLM和工具。
这三个工具如下:
- 获取新闻:新闻API根据解析的查询检索相关的新闻文章。
- 评分新闻:被提取的文章传递给另一个LLM,该法学硕士评估和评分为质量。输出是按其质量得分排序的文章列表。
- 发表新闻:最高得分的文章将格式化为可读的电子邮件,并发送给用户。
现在,我们可以开始定义功能。
获取新闻
导入必要的库并加载.env文件
导入操作系统 进口JSON 导入大熊猫作为pd 从DateTime Import DateTime,TimeDelta 从ipython.display导入图像,显示 从输入导入列表,文字,可选,打字,注释 来自langchain_core.tools导入工具 来自langchain_openai进口chatopenai 来自dotenv import load_dotenv load_dotenv('/。env') #替代.env文件,我们也可以使用.txt文件如下 用open('mykey.txt','r')作为文件: OpenAi_Key = file.read() os.environ ['OpenAI_API_KEY'] = OpenAi_Key
从Newsapiclient和API键启动News_API
从Newsapi Import Newsapiclient news_api_key = os.environ ['news_api_key'] news_api = newsapiclient(api_key = news_api_key)
现在,让我们使用Langchain的“工具”装饰器来定义Langchain工具
@工具 def get_news(查询:str,past_days:int,域:str): ”“” 获取有关给定参数的新闻,例如查询,过去_DAYS,等。 args: 查询:有关此主题的搜索新闻 过去_DAYS:过去应该搜索几天? 域:这些资源中的搜索新闻 ”“” 今天= dateTime.today() from_date =今天-TimeDelta(days = past_days) news_details = news_api.get_everything(q =查询,from_param = from_date,domains =域, sort_by ='相关性') 返回news_details
代理还可以根据相关性对文章进行分类。这是此功能的输出的示例:
'@tool'装饰器用于定义兰链工具。然后,我们可以将此工具绑定到LLM。在上述功能中,DOC字符串也很重要。这就是将LLM传递给LLM的原因,以将这些参数放在工具称呼LLM的输出中。
#初始化LLM gpt = chatopenai(型号=“ gpt-4o-mini”,温度= 0) #我们可以将工具绑定到LLM,以便LLM可以根据查询返回工具。 gpt_with_tools = gpt.bind_tools([[get_news])
得分新闻
Score_news功能通过根据预定义的标准对新闻文章进行评分来处理新闻文章。然后该函数返回最高质量文章的排序列表。
导入所需的方法
来自langchain_core.pydantic_v1导入基本模型,字段 来自langchain_core.prompts导入chatprompttemplate,提示键盘 来自langchain_core.messages导入人类
让我们定义功能
def score_news(news_details:dict): ”“” 计算News_articles的分数,然后按得分进行排序。 news_details:所有新闻文章 ”“” #访问国家的最后一条消息。 #将所有文章传递给LLM将增加成本。 #我们可以选择仅评分一些文章。 json_articles = json.loads(news_details ['消息'] [ - 1] .content) 如果len(json_articles)> 15: 文章= json_articles [:15] 别的: 文章= json_articles #系统提示指导LLM评分文章。 system_prompt =“”“” 您是新闻质量评估者。 我将为您提供新闻文章,其中包含标题,描述和截短的内容和其他详细信息。 根据以下标准分析和评分新闻文章: 清晰度:文章以简洁而可理解的方式传达信息的程度。 比例:1(不清楚)至25(非常清晰) 可信度:基于提供的描述和其他细节,文章有多大可能可信和实际上准确? 比例:1(不可信)至25(高度可信) 参与潜力:文章吸引读者的注意力或引起进一步思考的可能性。 比例:1(不参与)至25(非常吸引人) 影响:本文的潜在社会,技术或政治后果的重要性或影响力。 比例:1(最小影响)至25(高影响力) 为新闻文章提供100分的总分数,并为上述每个标准的分数添加得分。 您将评估很多新闻文章。因此,对他们进行评分,以便我们以后可以对所有这些分类。 ”“” 提示_template = chatprompttemplate.from_messages([(“系统”,system_prompt),(“人”,“ {news}”))) #定义pydantic类以以结构化格式获取输出。 课堂新闻(基本模型): “”“新闻评分系统”“” total_score:int = field(description ='新闻文章的总分') 来源:str = field(Description =“新闻的来源”) 作者:可选[str] = field(default = none,description =“新闻的作者”) 标题:str = field(description =“新闻的标题”) 描述:str = field(描述=“新闻描述”) URL:str = field(description =“新闻的URL”) urltoimage:可选[str] = field(default = none,description =“新闻的图像URL”) #GPT 4O在得分方面表现更好,但成本更高。 gpt_4o = chatopenai(型号='gpt-4o',温度= 0) structured_gpt = gpt_4o.with_structured_output(新闻) 链=提示_template | structred_gpt #将每篇文章发送到LLM,以获取其他细节。 结果= [chain.Invoke({'news':artical})。文章中文章的dict()] #按总分对文章进行排序。 df = pd.dataframe(结果).sort_values(by ='tucter_score',accending = false) 返回{“消息”:[humanMessage(content = df.to_dict(orient ='records'))]}}
该功能将状态作为输入,名称为news_details。由于国家包含所有消息,我们可以访问文章的最后一条消息。我们可以选择从顶部获得一些文章来节省成本。我们可以尝试不同的系统提示来获得最佳评分系统。
如果输出为定义格式,则更容易处理数据。因此,我们可以将LLM与结构化输出一起使用,其中结构是使用Pydantic类定义的。
然后,我们可以对每篇文章进行评分并将其存储在数据框架中。一旦我们使用总分数对文章进行排序,并将其添加为州的消息。
解释
1。输入
该函数将状态对象作为输入接收,其中包含所有消息。该州的最新信息持有新闻文章。为了最大程度地减少成本,我们可以限制文章的数量,而不是评分所有文章。
2。评分过程
我们为LLM提供了详细的系统提示,并根据系统提示中给出的标准指示其对每篇文章进行评分。
LLM根据系统提示中定义的标准评估每个文章,并分配100个总分,并增加每个标准的分数。
3。结构化输出
为了确保输出结构化且易于处理,我们定义了Pydantic模型(新闻)。该模型包括``total_score'',`title` titled'',`description`和`rl''等字段。通过使用这种结构化格式,LLM可以返回一致,组织良好的结果。
4。LLM集成
我们使用GPT-4O(以其在结构化任务中的准确性而闻名)来评分文章。发现在评估文章时,GPT-4O比GPT-4O-Mini好。每篇文章都通过LLM传递,并使用Pydantic转换为词典格式。
5。排序和输出
在评分了所有文章之后,我们将它们存储在Pandas DataFrame中,以降序顺序对其进行“ total_score”进行排序。然后,我们可以将排序列表作为消息返回到州,准备在工作流的下一部分中使用。
发送电子邮件
send_email功能列出了分类的新闻文章列表,生成了HTML电子邮件,并将其发送给收件人。
导入库
导入SMTPLIB,SSL 导入基础64 导入电子邮件
定义send_email功能
def send_email(sorted_news): #从国家的最后一条消息中获取分类新闻。 articles = sorted_news ['消息'] [ - 1] .content #如果News_article具有图像,我们可以在电子邮件中显示。 news_items_html =“” 对于文章中的文章[:10]: 如果文章['urltoimage']不是没有: news_items_html = f“” <div> <img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/174442792064130.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="”"> <div> <h3 id="a-href-E-C-actits-title-a"> <a href="%E2%80%9C"> {actits ['title']} </a> </h3> <p> {文章['description']} </p> </div> </div> ”“” 别的: news_items_html = f“” <div> <div> <h3 id="a-href-E-C-actits-title-a"> <a href="%E2%80%9C"> {actits ['title']} </a> </h3> <p> {文章['description']} </p> </div> </div> ”“” #用于造型HTML消息的CSS。我们在此处添加上面的“ news_items_html”。 html = f“” 身体 {{ 字体家庭:Arial,sans-serif; 背景色:#C4C4C4; 保证金:0; 填充:0; }}} 。容器 {{ 宽度:80%; 最大宽度:600px; 保证金:0自动; 背景色:#ffffff; 填充:20px; 盒子阴影:0 4PX 8PX RGBA(0,0,0,0.1); }}} h1 {{ 文字平衡:中心; 颜色:#333; }}} .news-item {{{ 显示:Flex; 准项目:中心; 正当:中间的空间; 边界底:1px固体#EEEEE; 填充:15px 0; }}} .news-item h3 {{{ 保证金:0; 字体大小:16px; 颜色:#007BFF; 左键:5px; }}} .news-item p {{{ 字体大小:14px; 颜色:#666666; 保证金:5px 0; 左键:5px; }}} .news-item a {{{ 颜色:#007BFF; 文本介绍:无; }}} .news-item img {{{ 宽度:100px; 身高:100px; 对象拟合:封面; 边界拉迪乌斯:8px; }}} 。页脚 {{ 保证金顶:20px; 文字平衡:中心; 字体大小:12px; 颜色:#999999; }}} <div> <h1 id="策划的新闻">策划的新闻</h1> {news_items_html} <div> <p>这是您的个性化新闻通讯。</p> </div> </div>
以上是使用AI代理创建个性化的新闻摘要的详细内容。更多信息请关注PHP中文网其他相关文章!

利用“设备” AI的力量:建立个人聊天机器人CLI 在最近的过去,个人AI助手的概念似乎是科幻小说。 想象一下科技爱好者亚历克斯(Alex)梦见一个聪明的本地AI同伴 - 不依赖

他们的首届AI4MH发射于2025年4月15日举行,著名的精神科医生兼神经科学家汤姆·因斯尔(Tom Insel)博士曾担任开幕式演讲者。 Insel博士因其在心理健康研究和技术方面的杰出工作而闻名

恩格伯特说:“我们要确保WNBA仍然是每个人,球员,粉丝和公司合作伙伴,感到安全,重视和授权的空间。” anno

介绍 Python擅长使用编程语言,尤其是在数据科学和生成AI中。 在处理大型数据集时,有效的数据操作(存储,管理和访问)至关重要。 我们以前涵盖了数字和ST

潜水之前,一个重要的警告:AI性能是非确定性的,并且特定于高度用法。简而言之,您的里程可能会有所不同。不要将此文章(或任何其他)文章作为最后一句话 - 目的是在您自己的情况下测试这些模型

建立杰出的AI/ML投资组合:初学者和专业人士指南 创建引人注目的投资组合对于确保在人工智能(AI)和机器学习(ML)中的角色至关重要。 本指南为建立投资组合提供了建议

结果?倦怠,效率低下以及检测和作用之间的差距扩大。这一切都不应该令任何从事网络安全工作的人感到震惊。 不过,代理AI的承诺已成为一个潜在的转折点。这个新课

直接影响与长期伙伴关系? 两周前,Openai提出了强大的短期优惠,在2025年5月底之前授予美国和加拿大大学生免费访问Chatgpt Plus。此工具包括GPT-4O,A A A A A


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SublimeText3 Linux新版
SublimeText3 Linux最新版

SublimeText3汉化版
中文版,非常好用

Atom编辑器mac版下载
最流行的的开源编辑器

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)