当前位置: 首页 > news >正文

Agno智能体框架简单使用

Agno智能体框架简单使用

1 介绍

从Manus发布智能体平台后,进一步推动了智能体的快速发展,同时也推动了MCP发展。针对智能体的快速发展,有很多优秀团体开源了很多智能体项目。例如:Agno、OpenManus、MetaGPT、OWL和DeerFlow等框架。

Agno是一个类似与LlamaIndex、LangChain等研发灵活度比较大的Python框架。不同之处,LlamaIndex和LangChain偏向于RAG,Agno是偏向Agent,性能很高。

OpenManus、MetaGPT和OWL都是多智能体框架,其中OpenManus是继Manus发布后,几位大牛仅用了3个小时就开源的多智能体框架,真是太厉害了。DeerFlow是字节基于Deep Research思路开源的多智能体项目。上面这几个项目是已经封装好的项目,借助上面框架研制符合自己需求的系统比较麻烦。

上面开源的项目中调用互联网数据,可使Tavily、DuckDuckGo、SearXNG等几个引擎,Tavily是一款专为智能体检索与推理需求量身打造的工具,还具有爬虫功能,不过在一定的请求范围内收费。DuckDuckGo免费,但是有广告。SearXNG是元搜索免费,但是研发成本较高。

数据引擎

Tavily

https://www.tavily.com/

DuckDuckGo

https://github.com/duckduckgo/duckduckgo

SearXNG

https://docs.searxng.org/

AI爬虫工具

智能体离不开AI爬虫工具,其中Firecrawl、此处介绍两个优秀的爬虫工具。

firecrawl是一个具有高级抓取、爬行和数据提取功能的爬虫框架。

https://github.com/mendableai/firecrawl

Crawl4AI 是一个专为AI应用设计的现代化异步网页爬取框架。

https://github.com/unclecode/crawl4ai

智能体框架

Agno

# Agno官网地址
https://docs.agno.com/introduction# Agno的Github
https://github.com/agno-agi/agno

OpenManus

https://github.com/FoundationAgents/OpenManus

MetaGPT

https://github.com/FoundationAgents/MetaGPT

OWL

# OWL的Github地址
https://github.com/camel-ai/owl# Eigent的Github地址,Eigent是一个桌面版智能体,有兴趣可以看看
https://github.com/eigent-ai/eigent

DeerFlow

https://github.com/bytedance/deer-flow

2 Agno功能介绍

2.1 Agno能力

Agno是一个用于构建具有共享内存、知识和推理的多智能体python 框架。Agno可以构建5个级别的智能体。

等级一:具备工具和指令的智能体;

等级二:具备知识和存储的智能体;

等级三:具备记忆和推理的智能体;

等级四:具备推理和协作的团队智能体;

等级五:具备状态和决策的智能工作流;

2.2 Agno功能

Agno主要功能点有Tools、Agentic RAG、Agent、Teams和WorkFlows等。

Tools主要功能是帮助智能体完成与外界交互。如果待用的是vLLM构建的大模型,注意在构建时必须设置以下参数:

--enable-auto-tool-choice
--tool-call-parser hermes

Agentic RAG是对ReAct(Reason Act)和RAG的结合和优化。

Teams是智能体重要的功能,重点是多智能体的团队协作;

WorkFlows是偏向智能体流。

3 代码实现

Agno用起来很方便,Agno的接口比LlamaIndex和LangChain好用,性能也比较高。

3.1 简单工具调用

from agno.agent import Agent
from agno.models.openai import OpenAILike
from agno.tools.reasoning import ReasoningTools# 调用自己搭建的大模型接口
model = OpenAILike(id="XXX",api_key="XXX",base_url="XXX"
)# 构建智能体
agent = Agent(# 设置智能体model=model,# 设置工具调用tools=[ReasoningTools(add_instructions=True)],# 设置指令instructions=["Use tables to display data","Only output the report, no other text",],# 设置输出markdown=True
)# 执行
agent.print_response("Write a report on NVDA",# 按照流输出stream=True,# 显示推理国产show_full_reasoning=True,# 显示推理的中间过程stream_intermediate_steps=True
)

3.2 使用Agentic RAG

数据加载有很多方法,注意必须设置嵌入模型,知识初始化有很多方法,请参考官网。

自定义Embedding模型

from typing import List, Tuple, Optional, Dictfrom agno.embedder.base import Embedder
from sentence_transformers import SentenceTransformerclass EmbeddingCustom(Embedder):def __init__(self):self.embedding_model = SentenceTransformer(model_name_or_path="E:/model/all-MiniLM-L6-v2")def get_embedding_and_usage(self, text: str) -> Tuple[List[float], Optional[Dict]]:return self.get_embedding(text), Nonedef get_embedding(self, text: str) -> List[float]:return self.embedding_model.encode(text).tolist()

使用ChromaDB

from typing import Listfrom agno.agent import Agent
from agno.document import Document
from agno.knowledge import AgentKnowledge
from agno.models.openai import OpenAILike
from agno.tools.reasoning import ReasoningTools
from agno.vectordb.chroma import ChromaDbfrom custorm_embedding import EmbeddingCustom# 构建知识
knowledge_base = AgentKnowledge(# 设置RAG检索后,返回检索后的文献数量,默认5条。num_documents=10,# 设置向量库vector_db=ChromaDb(collection="recipes1",embedder=EmbeddingCustom())
)# 构建文档列表
# !! 注意document的数据列表不能重复
documents: List[Document] = list()
documents.append(Document(content="data1",meta_data={"id": "1"},id="1")
)
documents.append(Document(content="data2",meta_data={"id": "2"},id="2")
)
knowledge_base.load_documents(documents)# 构建模型
model = OpenAILike(id="XXX",api_key="XXX",base_url="XXX"
)# 构建智能体
agent = Agent(# 设置模型model=model,# 设置知识knowledge=knowledge_base,# 设置搜索search_knowledge=True,# 添加工具tools=[ReasoningTools(add_instructions=True)],# 添加指令instructions=["Include sources in your response.","Always search your knowledge before answering the question.","Only include the output in your response. No other text.",],markdown=True
)# 执行
if __name__ == "__main__":agent.print_response("What are Agents?",stream=True,show_full_reasoning=True,stream_intermediate_steps=True,)

使用LanceDB

ChromaDB仅仅支持向量检索,LanceDB支持向量、关键词和混合检索。

from typing import Listfrom agno.agent import Agent
from agno.document import Document
from agno.knowledge import AgentKnowledge
from agno.models.openai import OpenAILike
from agno.tools.reasoning import ReasoningTools
from agno.vectordb.chroma import ChromaDbfrom custorm_embedding import EmbeddingCustom# 构建知识
knowledge_base = AgentKnowledge(# 设置RAG检索后,返回检索后的文献数量,默认5条。num_documents=10,# 设置向量库vector_db=LanceDb(# 设置表明table_name="recipes",uri="/tmp/lancedb",# 设置检索类型,设置混合模型search_type=SearchType.hybrid,embedder=EmbeddingCustom())
)# 构建文档列表
# !! 注意document的数据列表不能重复
documents: List[Document] = list()
documents.append(Document(content="data1",meta_data={"id": "1"},id="1")
)
documents.append(Document(content="data2",meta_data={"id": "2"},id="2")
)
knowledge_base.load_documents(documents)# 构建模型
model = OpenAILike(id="XXX",api_key="XXX",base_url="XXX"
)# 构建智能体
agent = Agent(# 设置模型model=model,# 设置知识knowledge=knowledge_base,# 设置搜索search_knowledge=True,# 添加工具tools=[ReasoningTools(add_instructions=True)],# 添加指令instructions=["Include sources in your response.","Always search your knowledge before answering the question.","Only include the output in your response. No other text.",],markdown=True
)# 执行
if __name__ == "__main__":agent.print_response("What are Agents?",stream=True,show_full_reasoning=True,stream_intermediate_steps=True,)

3.3 Team团队

from agno.models.openai import OpenAILike
from agno.team import Team
from agno.agent import Agentmodel = OpenAILike(id="XXX",api_key="XXX",base_url="XXX"
)team = Team(model=model,members=[Agent(model=model, name="Agent 1", role="You answer questions in English"),Agent(model=model, name="Agent 2", role="You answer questions in Chinese")]
)# 执行
if __name__ == "__main__":team.print_response("What are Agents?",stream=True,show_full_reasoning=True,stream_intermediate_steps=True,)

3.4 Workflow工作流

from typing import Iteratorfrom agno.agent import Agent, RunResponse
from agno.models.openai import OpenAILike
from agno.utils.log import logger
from agno.utils.pprint import pprint_run_response
from agno.workflow import Workflowclass CacheWorkflow(Workflow):# 设置描述description: str = "A workflow that caches previous outputs"# 构建模型model = OpenAILike(id="moonshot-v1-8k",api_key="sk-76yEcp3Ztk2PAmEqVB0Q1HpmjSaTMhKXut2R5ArResIVNjpB",base_url="https://api.moonshot.cn/v1")# 设置智能体agent = Agent(model=model)# 运行工作流的任务执行def run(self, message: str) -> Iterator[RunResponse]:logger.info(f"Checking cache for '{message}'")# Check if the output is already cachedif self.session_state.get(message):logger.info(f"Cache hit for '{message}'")yield RunResponse(run_id=self.run_id, content=self.session_state.get(message))returnlogger.info(f"Cache miss for '{message}'")# Run the agent and yield the responseyield from self.agent.run(message, stream=True)# Cache the output after response is yieldedself.session_state[message] = self.agent.run_response.contentif __name__ == "__main__":workflow = CacheWorkflow()# Run workflow (this is takes ~1s)response: Iterator[RunResponse] = workflow.run(message="Tell me a joke.")# Print the responsepprint_run_response(response, markdown=True, show_time=True)# Run workflow again (this is immediate because of caching)response: Iterator[RunResponse] = workflow.run(message="Tell me a joke.")# Print the responsepprint_run_response(response, markdown=True, show_time=True)
http://www.dtcms.com/a/324849.html

相关文章:

  • docker等基础工具使用
  • 从策略梯度到 PPO
  • java中的继承
  • Flutter开发 LinearProgressIndicato、CircularProgressIndicator
  • django基于Python的设计师作品平台的数据可视化系统设计与实现
  • QT的常用控件说明
  • Java基础—解析注解
  • 游戏常用运行库合集:一键解决游戏兼容性问题
  • 锂电池SOH预测 | 第35讲 Matlab基于BiLSTM的锂电池健康状态估计(锂电池SOH预测),附锂电池最新文章汇集
  • scanpy单细胞转录组python教程(二):单样本数据分析之数据质控
  • springboot的基础要点
  • 【Task3】【Datawhale AI夏令营】多模态RAG
  • 3.4路由守卫
  • Words or Vision Do Vision-Language Models Have Blind Faith in Text
  • Java中new的相关知识
  • nginx-主配置文件
  • Redis的批处理优化
  • 【高等数学】第八章 向量代数与空间解析几何——第六节 空间曲线及其方程
  • ECP HRFORM 提示ADS服务异常
  • 【嵌入式电机控制#补充3】SDK电机控制台的功能
  • C9800在NAT设备之后怎么办?
  • [创业之路-541]:经营分析会 - 企业的经营分析会,研发负责人负责提供哪些信息?
  • Linux810 shell 条件判断 文件工具 ifelse
  • 【牛客刷题】小红的项链(字节跳动面试题)
  • Linux操作系统从入门到实战(十七)进程与进程基本概念
  • doubletrouble靶机攻略
  • Docker 数据卷的核心原理与管理逻辑
  • 【数据结构与算法-Day 14】先进先出的公平:深入解析队列(Queue)的核心原理与数组实现
  • 端口扫描器用户使用手册 (EXE版)
  • JavaScript 变量:数据存储的核心机制