使用 Ollama、Swarm 和 DuckDuckGo 构建本地 AI 新闻聚合器

在当今快节奏的世界中,跟上特定领域最新新闻的步伐可能会很具挑战性。如果我们能够利用生成式AI和代理的力量,创建一个完全在本地机器上运行的个性化新闻聚合器呢?在本文中,我们将探讨如何使用Ollama的Llama 3.2模型、Swarm进行代理编排,以及DuckDuckGo进行网络搜索来构建这样的系统。

本地AI的力量

随着大型语言模型的兴起,我们现在能够在个人电脑上运行复杂的AI系统。这为创建针对我们特定需求定制的工具开辟了无限可能。我们的新闻聚合器就是这一潜力的完美例证。

我们系统的组成部分

  1. Ollama with Llama 3.2: 这是我们系统的核心,为我们的AI代理提供动力。

  2. Swarm: 一个代理编排框架,允许我们创建和管理多个AI代理。

  3. DuckDuckGo Search: 提供最新的网页搜索结果,而不跟踪用户数据。

工作原理

我们的新闻聚合器由两个主要的AI代理组成:

  1. 新闻助手:使用DuckDuckGo搜索获取特定主题的最新新闻文章。

  2. 编辑助手:审查并精炼收集到的新闻以供最终展示。

让我们来分解一下工作流程:

1. 设置环境

ollama pull llama3.2  
  
export OPENAI_MODEL_NAME=llama3.2  
export OPENAI_BASE_URL=http://localhost:11434/v1  
export OPENAI_API_KEY=any  
  
pip install git+https://github.com/openai/swarm.git duckduckgo-search  

我们首先导入必要的库并初始化我们的 Swarm 客户端:

from duckduckgo_search import DDGS  
from swarm import Swarm, Agent  
from datetime import datetime  
  
current_date = datetime.now().strftime("%Y-%m")  
client = Swarm()  

2. 创建新闻搜索功能

我们定义一个函数来使用 DuckDuckGo 搜索新闻:

pythondef get_news_articles(topic):  
  ddg_api = DDGS()  
  results = ddg_api.text(f"{topic} {current_date}", max_results=5)  
  if results:  
      news_results = "\n\n".join([f"Title: {result['title']}\nURL: {result['href']}\nDescription: {result['body']}" for result in results])  
      return news_results  
  else:  
      return f"Could not find news results for {topic}."  

3. 定义我们的 AI 代理

我们使用 Ollama 的 Llama 3.2 模型创建两个代理:

news_agent = Agent(  
  model="llama3.2",  
  name="News Assistant",  
  instructions="You provide the latest news articles for a given topic using DuckDuckGo search.",  
  functions=[get_news_articles],  
)  
  
editor_agent = Agent(  
  model="llama3.2",  
  name="Editor Assistant",  
  instructions="You review and finalise the news article for publishing.",  
)  

4. 协调工作流程

我们定义一个函数来运行我们的新闻聚合工作流程:

def run_news_workflow(topic):  
  # Fetch news  
  news_response = client.run(  
      agent=news_agent,  
      messages=[{"role": "user", "content": f"Get me the news about {topic} on {current_date}"}],  
  )  
  raw_news = news_response.messages[-1]["content"]  
  
  # Pass news to editor for final review  
  edited_news_response = client.run(  
      agent=editor_agent,  
      messages=[{"role": "system", "content": raw_news}],  
  )  
  print(f"{edited_news_response.messages[-1]['content']}")  

5. 运行系统

最后,我们可以针对任何感兴趣的话题运行我们的新闻聚合器:

run_news_workflow("AI in Drug Discovery")  

完整代码 : app.py

from duckduckgo_search import DDGS  
from swarm import Swarm, Agent  
from datetime import datetime  
  
current_date = datetime.now().strftime("%Y-%m")  
  
# 初始化 Swarm 客户端  
client = Swarm()  
  
# 1. 创建互联网搜索工具  
  
def get_news_articles(topic):  
    print(f"正在为 {topic} 进行 DuckDuckGo 新闻搜索...")  
  
    # DuckDuckGo 搜索  
    ddg_api = DDGS()  
    results = ddg_api.text(f"{topic} {current_date}", max_results=5)  
    if results:  
        news_results = "\n\n".join([f"标题: {result['title']}\n网址: {result['href']}\n描述: {result['body']}" for result in results])  
        return news_results  
    else:  
        return f"未能找到关于 {topic} 的新闻结果。"  
  
# 2. 创建 AI 代理  
  
def transfer_to_editor_assistant(raw_news):  
    print("将文章传递给编辑助手...")  
    return editor_agent.run({"role": "system", "content": raw_news})  
  
# 新闻代理以获取新闻  
news_agent = Agent(  
    model="llama3.2",  
    name="新闻助手",  
    instructions="您提供有关给定主题的最新新闻文章,使用 DuckDuckGo 搜索。",  
    functions=[get_news_articles],  
)  
  
# 编辑代理以编辑新闻  
editor_agent = Agent(  
    model="llama3.2",  
    name="编辑助手",  
    instructions="您审阅并最终确定新闻文章以供发布。",  
)  
  
# 3. 创建工作流程  
  
def run_news_workflow(topic):  
    print("运行新闻代理工作流程...")  
  
    # 第一步: 获取新闻  
    news_response = client.run(  
        agent=news_agent,  
        messages=[{"role": "user", "content": f"获取关于 {topic} 在 {current_date} 的新闻"}],  
    )  
    raw_news = news_response.messages[-1]["content"]  
    print(f"获取的新闻: {raw_news}")  
  
    # 第二步: 将新闻传递给编辑进行最终审查  
    edited_news_response = client.run(  
        agent=editor_agent,  
        messages=[{"role": "system", "content": raw_news}],  
    )  
    print(f"{edited_news_response.messages[-1]['content']}")  
  
  
# 运行给定主题的新闻工作流程示例  
run_news_workflow("药物发现中的 AI")  

示例输出

Running news Agent workflow...  
Running DuckDuckGo news search for AI in Drug Discovery...  
Fetched news: Here's a formatted answer based on the news articles:  
  
**药物发现中的人工智能:革命性的转变**  
  
人工智能(AI)在药物发现中的作用标志着制药领域的革命性转变。AI利用复杂的算法进行自主决策,从数据分析中增强人类能力,而不是取代它们。  
  
**挑战与局限性**  
  
尽管有着令人期待的进展,但在该领域中仍然存在挑战和局限性。论文《AI在药物发现中的作用》探讨了这些问题,强调了高质量数据的必要性、伦理问题的解决以及对基于AI的方法局限性的认识。  
  
**AI在药物发现中的应用**  
  
AI有潜力在药物发现、设计和研究药物间相互作用中发挥关键作用。AI在药物发现中的应用包括:  
  
* 多靶点药理学:AI可以预测化合物对多种疾病的有效性。  
* 化学合成:AI可以优化化学合成过程,以实现更快和更高效的生产。  
* 药物重定位:AI可以识别现有药物的新用途。  
* 预测药物特性:AI可以预测化合物的效力、毒性和物理化学特性。  
  
**药物发现中AI的未来**  
  
随着AI的不断发展,预计将对制药行业产生重大影响。AI的成功应用将依赖于高质量数据的可用性、伦理问题的解决以及对基于AI的方法局限性的认识。  

本地 AI 新闻聚合的好处

  • 隐私:所有处理都在您的本地机器上进行,确保您的数据留在您自己手中。

  • 定制化:您可以轻松修改代理的指令或添加新的代理以满足您的特定需求。

  • 最新信息:通过使用 DuckDuckGo 搜索,您总是能获得关于您选择主题的最新新闻。

  • AI 驱动的策展:编辑助手帮助精炼和组织收集的新闻,提供更精致的最终输出。

结论

这个本地的人工智能驱动新闻聚合器展示了将大型语言模型与网络搜索能力结合的潜力。通过利用Ollama的Llama 3.2模型、Swarm进行代理编排,以及DuckDuckGo进行搜索,我们创建了一个强大的工具,可以让我们在任何感兴趣的话题上保持信息灵通,同时维护我们的隐私,并完全在本地计算机上运行。

随着人工智能的不断发展,创建个性化、人工智能驱动工具的可能性只会不断扩大。这个新闻聚合器只是一个开始——想象一下,利用这些技术你还可以构建哪些其他创新应用!

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值