Type something to search...
OpenAIs Swarm(第二部分):使用 Ollama 和 Pydantic 的直接、本地优先方法

OpenAIs Swarm(第二部分):使用 Ollama 和 Pydantic 的直接、本地优先方法

一个简短的代码参考以供构建。

TLDR:

结合Ollama和Swarm框架,呈现了一种以本地为优先的构建智能AI代理的方法。

Ollama可以在本地运行大型语言模型,确保隐私和控制,而Swarm则提供了一个结构化的环境,用于设计和管理AI代理。

我们以第一性原理的编程方法强调简单性和高效性,避免使用带来不必要抽象的复杂框架,从而增加使用的tokens数量,并延迟首次token的生成时间。

今天,我们将深入探讨一个实际的实现,不仅突出如何创建支持pydantic的代理,还展示了Agentic函数调用和结构化编程的强大功能。

理解堆栈

Ollama 集成

该实现利用了 Ollama,这是一个用于本地运行大型语言模型的开源框架。这个设置特别有趣之处在于它是如何通过与 OpenAI 兼容的 API 接口进行集成的:

client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")

此配置允许开发者在通过 Ollama 本地运行模型时,使用熟悉的 OpenAI 风格的交互。我们的示例使用了 Qwen 2.5 Coder 模型(32B 参数),这是一个非常强大的模型。

Swarm框架

Swarm提供了创建和管理AI代理的基础结构。它旨在促进:

  • 结构化的代理定义
  • 函数调用能力
  • 消息处理和响应处理
  • 上下文管理

深入探讨:构建信息提取代理

该实现展示了一个实际用例:一个旨在从非结构化文本中提取关于人员的结构化信息的代理。

例如,以下文本:

"Pat Lesieur is a 65-year-old software developer skilled 
in AI Agents and RAG workflows."

以及以下的 pydantic 类:

## 定义我们的 Pydantic 类以配合结构化输出模型
class PersonInfo(BaseModel):
    name: str
    age: int
    skills: List[str]
    bio: Optional[str] = None

该代理具有以下提示:

instructions="""You are a precise information 
extraction agent that converts unstructured 
text about people into a specific JSON format.
IMPORTANT: When calling process_extracted_data, you MUST format the data exactly as follows:
{
    "name": "string",
    "age": number,
    "skills": ["skill1", "skill2"],  # MUST be a JSON array/list of strings
    "bio": "string"
}
The skills parameter MUST ALWAYS be a JSON array/list of strings, NOT a comma-separated string.
CORRECT format for skills:
  "skills": ["AI Agents", "RAG workflows"]
INCORRECT format for skills:
  "skills": "AI Agents, RAG workflows"
Example input: "John Smith is a 35-year-old software developer skilled in Python and Cloud Architecture."
You should call process_extracted_data with:
{
    "name": "John Smith",
    "age": 35,
    "skills": ["Python", "Cloud Architecture"],
    "bio": "Software developer"
}"""

以产生:

=== process_extracted_data called ===
Received data:
name: Pat Lesieur
age: 65
skills: ['AI Agents', 'RAG workflows']
bio: Software developer
Successfully created PersonInfo: name='Pat Lesieur' age=65 skills=['AI Agents', 'RAG workflows'] bio='Software developer'
=== process_extracted_data finished ===

=== Complete Response Details ===
Message type: assistant
Content: 
Tool calls: [
  {
    "id": "call_62rrvh2u",
    "function": {
      "arguments": "{\"age\":65,\"bio\":\"Software developer\",\"name\":\"Pat Lesieur\",\"skills\":[\"AI Agents\",\"RAG workflows\"]}",
      "name": "process_extracted_data"
    },
    "type": "function",
    "index": 0
  }
]
Message type: tool
Content: name='Pat Lesieur' age=65 skills=['AI Agents', 'RAG workflows'] bio='Software developer'

代理架构

实现的核心围绕着一个使用 Pydantic 定义的 PersonInfo 模型:

class PersonInfo(BaseModel):
    name: str
    age: int
    skills: List[str]
    bio: Optional[str] = None

这种结构化的方法确保了类型安全和数据验证,使得代理的输出可靠且一致。

代理配置

代理配置了特定的指令和能力:

def create_person_info_agent() -> Agent:
    return Agent(
        name="PersonInfoAgent",
        instructions="""...""",
        functions=[process_extracted_data]
    )

主要特点包括:

  1. 清晰的指令设置
  2. 数据处理的功能注册
  3. 结构化的输出格式

强大的数据处理

该实现包括复杂的数据清理和处理:

def clean_json_string(data_str: str) -> str:
    # Handles markdown code blocks and formatting
    if "```" in data_str:
        match = re.search(r'```(?:json)?\n(.*?)\n```', data_str, re.DOTALL)
        if match:
            data_str = match.group(1)
    return data_str.strip()

运行代理

该系统通过 Swarm 客户端将一切结合在一起:

swarm_client = Swarm(client=client)
response = swarm_client.run(
    agent=agent,
    model_override=model,
    messages=[{
        "role": "user",
        "content": input_text
    }],
    execute_tools=True
)

主要优点

  1. 本地模型执行:通过使用 Ollama,您可以控制自己的数据并在本地运行模型。
  2. 结构化输出:Pydantic 集成确保类型安全和经过验证的输出。
  3. 灵活架构:修改代理的指令和数据模型可以轻松适应不同的用例。
  4. 开发者友好:与 OpenAI 兼容的接口使得熟悉 OpenAI API 的开发者易于适应。

实际应用

该实现特别适用于:

  • 从非结构化文本中提取信息
  • 自动化数据处理管道
  • 构建对话 AI 代理
  • 从自然语言输入创建结构化数据

结论

结合 Ollama 和 Swarm 展示了一种构建 AI 代理的强大方法。通过利用 Ollama 的本地模型执行和 Swarm 提供的结构化代理框架,开发者可以创建复杂的 AI 应用程序,既能保持数据隐私,又能提供可靠的结构化输出。

该实现展示了现代 AI 开发如何强大且实用,结合了本地模型执行与结构化编程实践的最佳之处。

Related Posts

使用 ChatGPT 搜索网络功能的 10 种创意方法

使用 ChatGPT 搜索网络功能的 10 种创意方法

例如,提示和输出 你知道可以使用 ChatGPT 的“搜索网络”功能来完成许多任务,而不仅仅是基本的网络搜索吗? 对于那些不知道的人,ChatGPT 新的“搜索网络”功能提供实时信息。 截至撰写此帖时,该功能仅对使用 ChatGPT 4o 和 4o-mini 的付费会员开放。 ![](https://images.weserv.nl/?url=https://cdn-im

阅读更多
在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和科技这样一个动态的行业中,保持领先意味着不断提升你的技能。无论你是希望深入了解人工智能模型性能、掌握数据分析,还是希望通过人工智能转变传统领域如法律,这些课程都是你成功的捷径。以下是一个精心策划的高价值课程列表,可以助力你的职业发展,并让你始终处于创新的前沿。 1. 生成性人工智能简介课程: [生成性人工智能简介](https://genai.works

阅读更多
10 个强大的 Perplexity AI 提示,让您的营销任务自动化

10 个强大的 Perplexity AI 提示,让您的营销任务自动化

在当今快速变化的数字世界中,营销人员总是在寻找更智能的方法来简化他们的工作。想象一下,有一个个人助理可以为您创建受众档案,建议营销策略,甚至为您撰写广告文案。这听起来像是一个梦想? 多亏了像 Perplexity 这样的 AI 工具,这个梦想现在成为现实。通过正确的提示,您可以将 AI 转变为您的 个人营销助理。在本文中,我将分享 10 个强大的提示,帮助您自动

阅读更多
10+ 面向 UI/UX 设计师的顶级 ChatGPT 提示

10+ 面向 UI/UX 设计师的顶级 ChatGPT 提示

人工智能技术,如机器学习、自然语言处理和数据分析,正在重新定义传统设计方法。从自动化重复任务到实现个性化用户体验,人工智能使设计师能够更加专注于战略思维和创造力。随着这一趋势的不断增长,UI/UX 设计师越来越多地采用 AI 驱动的工具来促进他们的工作。利用人工智能不仅能提供基于数据的洞察,还为满足多样化用户需求的创新设计解决方案开辟了机会。 1. 用户角色开发 目的

阅读更多
在几分钟内完成数月工作的 100 种人工智能工具

在几分钟内完成数月工作的 100 种人工智能工具

人工智能(AI)的快速发展改变了企业的运作方式,使人们能够在短短几分钟内完成曾经需要几周或几个月的任务。从内容创作到网站设计,AI工具帮助专业人士节省时间,提高生产力,专注于创造力。以下是按功能分类的100个AI工具的全面列表,以及它们在现实世界中的使用实例。 1. 研究工具 研究可能耗时,但人工智能工具使查找、分析和组织数据变得更加容易。**ChatGPT, Cop

阅读更多
你从未知道的 17 个令人惊叹的 GitHub 仓库

你从未知道的 17 个令人惊叹的 GitHub 仓库

Github 隐藏的宝石!! 立即收藏的代码库 学习编程相对简单,但掌握编写更好代码的艺术要困难得多。GitHub 是开发者的宝藏,那里“金子”是其他人分享的精心编写的代码。通过探索 GitHub,您可以发现如何编写更清晰的代码,理解高质量代码的样子,并学习成为更熟练开发者的基本步骤。 1. notwaldorf/emoji-translate *谁需

阅读更多