【AI应用开发框架】应用phidata快速构建你的智能体(如个人知识库、自动选股等)

1.phidata是什么?

AI APP开发框架,基于此框架可快速搭建智能体或智能助手以实现记忆、知识库及工具使用等功能。

2.框架是怎样的?

3.为什么选择phidata?

问题:LLMs 的上下文有限,无法执行具体动作

解决方案:添加记忆、知识和工具

  • 记忆:通过将聊天历史记录存储在数据库中,使 LLMs 能够进行长期对话。

  • 知识:通过将信息存储在矢量数据库中,为LLMs提供业务上下文。

  • 工具:启用 LLMs 来执行从 API 提取数据、发送电子邮件或查询数据库等操作。

记忆和知识让LLMs变得更聪明,而工具则让他们变得自主。

4.怎么使用?

  • 第一步:安装pip install -U phidata

  • 第二步:创建 Assistant

  • 第三步:添加工具(功能)、知识(vectordb)和记忆(数据库)

  • 第四步:使用 Streamlit、FastApi 或 Django 构建您的 AI 应用程序

5.例子

(1)网页检索

from phi.assistant import Assistant
from phi.tools.duckduckgo import DuckDuckGo
from phi.llm.ollama import Ollama

assistant = Assistant(
    llm=Ollama(model="llama3"),
    show_tool_calls=True,
    # Let the Assistant search the web using DuckDuckGo
    tools=[DuckDuckGo()],
    # Return answers in Markdown format
    debug_mode=True,
    markdown=True,
)

assistant.print_response("What's happening in France?")

(2)API调用

import json
import httpx

from phi.assistant import Assistant
from phi.llm.ollama import Ollama

def get_top_hackernews_stories(num_stories: int = 10) -> str:
    """Use this function to get top stories from Hacker News.

    Args:
        num_stories (int): Number of stories to return. Defaults to 10.

    Returns:
        str: JSON string of top stories.
    """

    # Fetch top story IDs
    response = httpx.get("https://hacker-news.firebaseio.com/v0/topstories.json")
    story_ids = response.json()

    # Fetch story details
    stories = []
    for story_id in story_ids[:num_stories]:
        story_response = httpx.get(f"https://hacker-news.firebaseio.com/v0/item/{story_id}.json")
        story = story_response.json()
        print(story)
        if "text" in story:
            story.pop("text", None)
        stories.append(story)
        print(story)
    return json.dumps(stories)


assistant = Assistant(
    llm=Ollama(model="llama3"),
    tools=[get_top_hackernews_stories], show_tool_calls=False, markdown=True, debug_mode=False)
assistant.print_response("Summarize the top stories on hackernews?")

(3)工具使用

import json
from phi.assistant import Assistant
from phi.llm.ollama import Ollama
from phi.llm.openai import OpenAIChat
from phi.tools.file import FileTools
from phi.tools.sql import SQLTools
from phi.tools.shell import ShellTools

db_url = "postgresql+psycopg://ai:ai@localhost:5532/ai"

assistant = Assistant(
    llm=Ollama(model="llama3"),
    tools=[
        SQLTools(
            db_url=db_url,
        ),
        ShellTools(),
        FileTools()
    ],
    show_tool_calls=True,
)

#assistant.print_response("List the tables in the database. Tell me about contents of one of the tables", markdown=True)
assistant.print_response("What is the most advanced LLM currently? Save the answer to a file.", markdown=True)
assistant.print_response("Show me the contents of the current directory", markdown=True)

(4)知识库使用

from phi.knowledge.website import WebsiteKnowledgeBase
from phi.vectordb.pgvector import PgVector2
from phi.assistant import Assistant
from phi.llm.openai import OpenAIChat

db_url = "postgresql+psycopg://ai:ai@localhost:5532/ai"

# Create a knowledge base with the seed URLs
knowledge_base = WebsiteKnowledgeBase(
    urls=["https://docs.phidata.com/introduction"],
    # Number of links to follow from the seed URLs
    max_links=10,
    # Table name: ai.website_documents
    vector_db=PgVector2(
        collection="website_documents",
        db_url=db_url
    ),
)
# Load the knowledge base
knowledge_base.load(recreate=False)

# Create an assistant with the knowledge base
assistant = Assistant(
    llm=OpenAIChat(model="gpt-3.5-turbo"),
    knowledge_base=knowledge_base,
    add_references_to_prompt=True,
)

# Ask the assistant about the knowledge base
assistant.print_response("How does phidata work?")

(5)多助手协同

"""
Please install dependencies using:
pip install openai newspaper4k lxml_html_clean phidata
"""

from pathlib import Path
from shutil import rmtree
from phi.llm.ollama import Ollama

from phi.assistant import Assistant
from phi.tools.yfinance import YFinanceTools
from phi.tools.newspaper4k import Newspaper4k
from phi.tools.file import FileTools


reports_dir = Path(__file__).parent.joinpath("junk", "reports")
if reports_dir.exists():
    rmtree(path=reports_dir, ignore_errors=True)
reports_dir.mkdir(parents=True, exist_ok=True)

stock_analyst = Assistant(
    llm=Ollama(model="llama3"),

    name="Stock Analyst",
    role="Get current stock price, analyst recommendations and news for a company.",
    tools=[
        YFinanceTools(stock_price=True, analyst_recommendations=True, company_news=True),
        Newspaper4k(),
        FileTools(base_dir=reports_dir),
    ],
    description="You are an stock analyst tasked with producing factual reports on companies.",
    instructions=[
        "The investment lead will provide you with a list of companies to write reports on.",
        "Get the current stock price, analyst recommendations and news for the company",
        "If you find any news urls, read the article and include it in the report.",
        "Save your report to a file in markdown format with the name `company_name.md` in lower case.",
        "Let the investment lead know the file name of the report.",
    ],
    # debug_mode=True,
)
research_analyst = Assistant(
    llm=Ollama(model="llama3"),
    name="Research Analyst",
    role="Writes research reports on stocks.",
    tools=[FileTools(base_dir=reports_dir)],
    description="You are an investment researcher analyst tasked with producing a ranked list of companies based on their investment potential.",
    instructions=[
        "You will write your research report based on the information available in files produced by the stock analyst.",
        "The investment lead will provide you with the files saved by the stock analyst."
        "If no files are provided, list all files in the entire folder and read the files with names matching company names.",
        "Read each file 1 by 1.",
        "Then think deeply about whether a stock is valuable or not. Be discerning, you are a skeptical investor focused on maximising growth.",
        "Finally, save your research report to a file called `research_report.md`.",
    ],
    # debug_mode=True,
)

investment_lead = Assistant(
    llm=Ollama(model="llama3"),
    name="Investment Lead",
    team=[stock_analyst, research_analyst],
    tools=[FileTools(base_dir=reports_dir)],
    description="You are an investment lead tasked with producing a research report on companies for investment purposes.",
    instructions=[
        "Given a list of companies, first ask the stock analyst to get the current stock price, analyst recommendations and news for these companies.",
        "Ask the stock analyst to write its results to files in markdown format with the name `company_name.md`.",
        "If the stock analyst has not saved the file or saved it with an incorrect name, ask them to save the file again before proceeding."
        "Then ask the research_analyst to write a report on these companies based on the information provided by the stock analyst.",
        "Make sure to provide the research analyst with the files saved by the stock analyst and ask it to read the files directly."
        "The research analyst should save its report to a file called `research_report.md`.",
        "Finally, review the research report and answer the users question. Make sure to answer their question correctly, in a clear and concise manner.",
        "If the research analyst has not completed the report, ask them to complete it before you can answer the users question.",
        "Produce a nicely formatted response to the user, use markdown to format the response.",
    ],
    # debug_mode=True,
)
investment_lead.print_response(
    "How would you invest $10000 in META, GOOG, NVDA and TSLA? Tell me the exact amount you'd invest in each.",
    markdown=True,
)

(6)更多

如workflow,模版创建等见官方文档

6.其他

(1)LLM支持

  • OpenAI

  • OpenAI Like

  • Anthropic Claude

  • Ollama

  • Hermes2

  • AWS Bedrock

  • Together

  • Anyscale

  • Gemini

  • Groq

  • Fireworks

  • Azure

  • Mistral

  • Cohere

(2)内置Toolkits

  • ApifyTools to use Apify Actors.

  • ArxivTools to read arXiv papers.

  • DuckDbTools to run SQL using DuckDb.

  • DuckDuckGoTools to search the web using DuckDuckGo.

  • EmailTools to send emails.

  • ExaTools to search the web using Exa.

  • FileTools to read and write files.

  • Newspaper4kTools to read articles using Newspaper4k.

  • OpenBBTools to search for stock data using OpenBB.

  • PubmedTools to search Pubmed.

  • PythonTools to write and run python code.

  • ResendTools to send emails using Resend.

  • SerpapiTools to search Google, Youtube, and more using Serpapi.

  • ShellTools to run shell commands.

  • SQLTools to run SQL queries.

  • TavilyTools to search the web using Tavily.

  • WebsiteTools to scrape websites.

  • WikipediaTools to search Wikipedia.

  • YFinanceTools to search Yahoo Finance.

  • YoutubeTools to search Youtube.

  • ZendeskTools to search Zendesk.

(3)内置知识库加载器

  • PDF knowledge base: 将本地PDF文件加载到知识库

  • PDF URL knowledge base: 将 PDF 文件从 URL 加载到知识库

  • Text knowledge base: 将文本/docx文件加载到知识库

  • JSON knowledge base:将JSON文件加载到知识库

  • Website knowledge base: 将网站数据加载到知识库

  • Wikipedia knowledge base: 将维基百科文章加载到知识库

  • ArXiv knowledge base: 将 ArXiv 论文加载到知识库

  • Combined knowledge base: 将多个知识库组合为1

  • LangChain knowledge base: 使用Langchain检索器作为知识库

  • Load knowledge base manually:手动加载知识库

(4)支持的向量数据库

  • PgVector

  • SingleStore

  • Pinecone

  • LanceDB

(5)支持的数据库存储

  • PostgreSQL

  • SingleStore

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/665994.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[数据集][目标检测]猫狗检测数据集VOC+YOLO格式8291张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):8291 标注数量(xml文件个数):8291 标注数量(txt文件个数):8291 标注…

LeetCode-131 分割回文串

LeetCode-131 分割回文串 题目描述解题思路C 代码 题目描述 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串。返回 s 所有可能的分割方案。 示例 1: 输入:s “aab” 输出:[[“a”,“a”,“b”],…

1.8k Star!RAGApp:在任何企业中使用 Agentic RAG 的最简单方法!

原文链接:(更好排版、视频播放、社群交流、最新AI开源项目、AI工具分享都在这个公众号!) 1.8k Star!RAGApp:在任何企业中使用 Agentic RAG 的最简单方法! 🌟在任何企业中使用 Agent…

大数据信用报告分析和评估有什么意义

大数据信用这个词在现在已经是很常见的了,只要是申贷的朋友对它就不陌生,在明面上的信用资质刚刚满足审核要求,但又要把控风险的时候,这个时候大数据信用就会作为风控机构交叉核查的重要依据。那你知道大数据信用报告分析和评估有…

二、线性回归模型

目录 一、线性回归 1.模型示例 2.代码实验(C1_W1_Lab03_Model_Representation) (1).工具使用 (2).问题描述-房价预测 (3).输入数据 (4).绘制数据集坐标点 (5).建模构造函数 二、代价函数(Cost function) 1.解释一下概念…

上架 Google Play 的那些辛酸泪

一、注册 Google 账号 首先你要有个账号,地址如下: accounts.google.com/signup/v2/w… 按照 Google 爸爸要求,该填写的都填了,随后点击下一步。 验证手机号: 输入验证码验证当前手机号: 其他信息填写&a…

废品回收小程序怎么做?有哪些核心功能?

废品回收行业正逐步走向高质量发展的道路。在国家政策的推动下,再生资源市场需求旺盛,行业内部竞争格局逐渐明朗。 随着互联网技术的发展,"互联网回收"成为废品回收行业的一个新趋势。通过微信小程序这种线上平台,用户…

Linux--EXT2文件系统

参考资料: linux之EXT2文件系统--理解block/block group/索引结点inode/索引位图_一个块组中索引节点表和数据块区最多占用字节-CSDN博客 linux环境: Linux version 5.15.146.1-microsoft-standard-WSL2 (root65c757a075e2) (gcc (GCC) 11.2.0, GNU ld…

Wpf 使用 Prism 实战开发Day30

登录界面设计 一.准备登录界面图片素材(透明背景图片) 1.把准备好的图片放在Images 文件夹下面,格式分别是.png和.ico 2.选中 login.png图片鼠标右键,选择属性。生成的操作选择>资源 3.MyTodo 应用程序右键,属性&a…

音量的对数表示与浮点数表示

音量用浮点数(float)和对数(logarithmic scale)表示各有特点和应用场景 浮点数:直接使用线性刻度表示音量,例如在0.0(最小音量)到1.0(最大音量)的范围内。对…

YZW900规格书

title: “深圳市沃进科技有限公司” 深圳市沃进科技有限公司 TOP视图 特性 异地组网,远程访问有线/无线备份单模双卡备份5G转有线,5G转WIFI2.4G5.8G双频WIFI三网口,WAN/LAN可切换软硬件看门狗智能防掉线云平台、客户端远程管理安装支架安装铝…

MyBatis延迟加载缓存分页逆向工程

文章目录 延迟加载概述步骤 缓存一级缓存介绍原理 二级缓存介绍 设置缓存对象策略原理开启步骤属性解释是否使用一级缓存 分页插件使用步骤 逆向工程介绍搭建使用增删修改查 延迟加载 概述 延迟加载本身是依赖于多表查询的 延迟加载中返回值要选择resultMap返回的结果一定是D…

【QEMU 中文文档】0. Hello QEMU!

最近,我开始研究QEMU这个超强的虚拟化和仿真工具。不得不说,读英文文档真是让我头大 🥴。于是我灵机一动,为什么不做个QEMU的中文文档呢?毕竟,现在有了ChatGPT的强大翻译能力,我决定尝试一下&am…

分形之科赫雪花

前言 分形是一种具有自相似性的几何图形或数学对象。它的特点是无论在任何放大或缩小的尺度下,都能够看到与整体相似的图形。分形的形状可以非常复杂,常常具有分支、重复的图案,以及细节层次丰富的结构。 分形在自然界中广泛存在,如云朵、树枝、山脉、海岸线等,它们都展…

铁塔基站用能监控能效解决方案

截至2023年10月,我国5G基站总数达321.5万个,占全国通信基站总数的28.1%。然而,随着5G基站数量的快速增长,基站的能耗问题也逐渐日益凸显,基站的用电给运营商带来了巨大的电费开支压力,降低5G基站的能耗成为…

一图了解【电子面拦截】接口

【电子面拦截】又可以成为快递拦截 商品还在运输途中,买家申请仅退款、想修改地址怎么办? 百递云API开放平台最新推出「电子面单拦截」接口,提供三种拦截类型,助力快速拦截处理在途包裹。 下图带您了解👇

Leecode---栈---每日温度 / 最小栈及栈和队列的相互实现

栈:先入后出;队列:先入先出 一、每日温度 Leecode—739题目: 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温…

2.6 Docker部署多个前端项目

2.6 Docker部署多个项目 三. 部署前端项目 1.将前端项目打包到同一目录下(tcm-ui) 2. 部署nginx容器 docker run --namenginx -p 9090:9090 -p 9091:9091 -d nginx3. 复制nginx.conf文件到主机目录 docker cp nginx:/etc/nginx/nginx.conf /root/ja…

大模型之路,从菜鸟到模型大师只需要一步

前言: 在这个数据爆炸的时代,大模型技术正以前所未有的速度发展。从自然语言处理到计算机视觉,从智能推荐到自动驾驶,大模型正逐渐渗透到我们生活的方方面面。那么,如何从菜鸟成长为模型大师呢?本文将为你…

【JMeter接口自动化】第8讲 Fiddler抓包Jmeter

1)配置好Fiddler 设置Fiddler-Tools-Options-HTTPS 设置Fiddler-Tools-Options-Connections,设置端口为8888 2)查看IP 在CMD中输入ipconfig 查看IP地址 3)配置Jmeter Http请求——基本,设置Http请求,使用…