OpenAI Swarm + Ollama实战:打造本地新闻聚合系统

一步步教你用Openai Swarm框架编排AI代理,使用本地模型Llama实现新闻自动化处理

defagi avatar
  • defagi
  • 2 min read

本文将详细介绍如何利用开源AI模型Llama 3.2、代理编排框架Swarm以及DuckDuckGo搜索引擎,搭建一个完全本地化的AI新闻聚合系统。适合想要入门AI应用开发的开发者阅读。 类似Swarm的ai agent开发框架还有langchain/langgraph/autogen。

技术栈

为什么选择构建本地AI agent系统?

随着AI技术的快速发展,在本地机器上运行复杂的AI系统已经成为可能。相比云端AI服务,本地部署具有以下优势:

  1. 数据隐私安全: 所有数据处理都在本地完成,避免敏感信息泄露
  2. 低延迟响应: 无需网络传输,响应速度更快
  3. 成本可控: 无需支付API调用费用
  4. 完全自主: 可以自由定制和修改系统行为

系统架构设计

本系统采用双代理协作的架构设计:

graph LR
    A[用户输入] --> B[新闻助手]
    B --> C[DuckDuckGo搜索]
    C --> D[编辑助手]
    D --> E[最终输出]

新闻助手职责

  • 接收用户查询主题
  • 调用DuckDuckGo API搜索相关新闻
  • 初步过滤无关内容

编辑助手职责

  • 整合多篇新闻内容
  • 提炼关键信息
  • 生成结构化摘要

详细实现步骤

1. 环境配置

首先需要安装必要的依赖包:

# 拉取Llama 3.2模型
ollama pull llama3.2

# 设置环境变量
export OPENAI_MODEL_NAME=llama3.2
export OPENAI_BASE_URL=http://localhost:11434/v1
export OPENAI_API_KEY=any

# 安装Python依赖
pip install git+https://github.com/openai/swarm.git duckduckgo-search

2. 核心代码实现

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")

使用示例

以下是一个实际运行示例:

# 搜索AI制药相关新闻
result = run_news_workflow("AI制药技术最新进展")
print(result)

输出示例:

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的方法局限性的认识

推荐

Ollama安装指南:解决国内下载慢和安装卡住问题

Ollama安装指南:解决国内下载慢和安装卡住问题

本文提供了在国内网络环境下快速安装 Ollama 的详细步骤,包括修改安装脚本、使用 GitHub 镜像和文件加速服务等技巧,帮助你轻松突破安装障碍。