AI助手的超级工具箱:Phidata框架实战指南

目录

  • 引言
  • 一、Phidata概述
  • 二、Phidata的安装与快速入门
    • 1、安装Phidata
    • 2、环境配置
    • 3、快速入门
      • 3.1 可以搜索网页的助手
      • 3.2 可以查询财务数据的助手
  • 三、Phidata的高级应用
    • 1、可以编写和运行Python代码的助手
    • 2、可以使用 SQL 分析数据的助手
    • 3、可生成 Pydantic 模型的助手
    • 4、具有知识和存储的 PDF 助手
  • 四、Phidata和Langchain对比
  • 结语


引言

在人工智能技术的浪潮中,AI助手正变得越来越智能,它们在理解语言、提供信息和辅助决策方面展现出巨大潜力。然而,现有模型在记忆对话、理解复杂上下文和执行操作方面存在局限。Phidata框架应运而生,旨在弥补这些不足,通过增强记忆、知识整合和工具调用能力,推动AI助手向更高层次的智能和自主性发展。

Phidata不仅提升了AI助手的智能水平,还扩展了它们的应用范围,使其能够更加精准地理解和响应用户需求。本文将深入探讨Phidata的工作原理、安装步骤、快速入门指南以及其在多个领域的实际应用案例,展现Phidata如何助力构建下一代智能AI助手。
在这里插入图片描述

一、Phidata概述

大语言模型在实际应用中常常面临挑战:它们缺乏长期记忆,难以理解复杂的上下文,且无法执行实际的操作。Phidata框架的出现,正是为了解决这些问题,它是一个创新的工具,旨在将传统的大型语言模型(LLMs)转变为具有长期记忆、深入情境理解能力以及通过函数调用执行操作的自治助手。
在这里插入图片描述

Phidata是一个尖端的框架,专门为开发自治助手而设计。这些助手不仅能够记住过去的交互,还能够利用存储的知识提供更加精准和相关的回应。更重要的是,它们能够通过调用各种工具和API,执行从数据检索到发送电子邮件等一系列操作。

Phidata的核心组件:

  • 记忆:Phidata允许在数据库中存储聊天历史,使AI能够维持长期对话并回忆过去的互动,这大大增强了用户体验的连贯性。
  • 知识:通过向量数据库存储信息,Phidata为AI提供了丰富的业务上下文,这使得AI的回应更加相关和准确。
  • 工具:Phidata赋予AI执行操作的能力,无论是通过API获取数据、发送电子邮件还是执行数据库查询,都极大地扩展了AI的应用范围。

记忆和知识使LLM更聪明,而工具则使它们自主。

二、Phidata的安装与快速入门

Phidata框架的安装和使用过程旨在为开发者提供一个快速上手的途径,使得即使是初学者也能够轻松地构建起自己的AI助手。本章节将详细介绍Phidata的安装步骤和快速入门指南,帮助开发者迈出构建智能AI助手的第一步。

Phidata框架的工作原理可以概括为三个主要步骤:
步骤1:创建一个Assistant
步骤2:添加工具(函数)、知识(vectordb)和存储(数据库)
步骤3:使用 Streamlit、FastApi 或 Django 构建 AI 应用程序

1、安装Phidata

安装Phidata是一个简单直接的过程,可以通过Python的包管理器pip来完成。首先,确保你的开发环境中已经安装了Python和pip。接着,在命令行工具中执行以下命令来安装Phidata:

pip install -U phidata

这个命令会从Python包索引中下载并安装最新版本的Phidata框架及其所有依赖。

2、环境配置

在安装Phidata之后,你可能需要配置一些环境变量,特别是如果你打算使用Phidata与特定的API或服务进行交互时。例如,如果你计划使用OpenAI的API,你需要设置OPENAI_API_KEY环境变量。

3、快速入门

3.1 可以搜索网页的助手

创建一个能够使用DuckDuckGo进行网络搜索的AI助手
创建文件assistant.py


from phi.assistant import Assistant
from phi.tools.duckduckgo import DuckDuckGo
assistant = Assistant(tools=[DuckDuckGo()], show_tool_calls=True)
assistant.print_response("Whats happening in France?", markdown=True)

安装库,导出OPENAI_API_KEY、并运行Assistant

pip install openai duckduckgo-search
export OPENAI_API_KEY=sk-xxxx
python assistant.py

3.2 可以查询财务数据的助手

创建文件finance_assistant.py

from phi.assistant import Assistant
from phi.llm.openai import OpenAIChat
from phi.tools.yfinance import YFinanceTools

assistant = Assistant(
    llm=OpenAIChat(model="gpt-4o"),
    tools=[YFinanceTools(stock_price=True, analyst_recommendations=True, company_info=True, company_news=True)],
    show_tool_calls=True,
    markdown=True,
)
assistant.print_response("What is the stock price of NVDA")
assistant.print_response("Write a comparison between NVDA and AMD, use all tools available.")

安装库并运行Assistant

pip install yfinance
python finance_assistant.py

三、Phidata的高级应用

随着对Phidata框架的深入了解,我们发现它不仅适用于构建基础的AI助手,还拥有一系列高级功能,这些功能极大地扩展了AI助手的能力,使其能够处理更加复杂的任务。本章节将详细介绍Phidata的一些高级功能,包括数据模型生成、SQL数据分析、以及Python代码执行等。

1、可以编写和运行Python代码的助手

Phidata框架的一个独特之处在于它允许AI助手编写和执行Python代码。这使得AI助手能够直接处理编程任务,或者根据用户需求动态生成脚本。
文件:python_assistant.py
代码示例

from phi.assistant.python import PythonAssistant
from phi.file.local.csv import CsvFile

python_assistant = PythonAssistant(
    files=[
        CsvFile(
            path="https://phidata-public.s3.amazonaws.com/demo_data/IMDB-Movie-Data.csv",
            description="Contains information about movies from IMDB.",
        )
    ],
    pip_install=True,
    show_tool_calls=True,
)
# python_assistant.print_response("What is the average rating of movies?", markdown=True)
python_assistant.print_response("电影的平均分是多少?", markdown=True)

安装pandas、运行助手

pip install pandas
python python_assistant.py

2、可以使用 SQL 分析数据的助手

Phidata可以与SQL数据库结合使用,为AI助手提供强大的数据分析能力。通过集成SQL查询功能,AI助手能够直接对数据库中的数据进行操作和分析。

文件:data_assistant.py
代码示例

import json
from phi.assistant.duckdb import DuckDbAssistant

duckdb_assistant = DuckDbAssistant(
    semantic_model=json.dumps({
        "tables": [
            {
                "name": "movies",
                "description": "Contains information about movies from IMDB.",
                "path": "https://phidata-public.s3.amazonaws.com/demo_data/IMDB-Movie-Data.csv",
            }
        ]
    }),
)

duckdb_assistant.print_response("电影的平均评分是多少?给我看看 SQL。", markdown=True)

安装duckdb 并运行filedata_assistant.py

pip install duckdb
python data_assistant.py

3、可生成 Pydantic 模型的助手

Phidata框架支持从文本生成结构化数据,即Pydantic模型。这一功能对于数据提取、生成剧本、创建假数据等任务非常有用。

创建一个电影助手,为我们编写电影脚本
文件:movie_assistant.py

代码示例

from typing import List
from pydantic import BaseModel, Field
from rich.pretty import pprint
from phi.assistant import Assistant

class MovieScript(BaseModel):
    setting: str = Field(..., description="为大片提供一个不错的场景。")
    ending: str = Field(..., description="电影的结尾。如果不可用,请提供一个快乐的结局。")
    genre: str = Field(..., description="电影的类型。如果不可用,请选择动作、惊悚或浪漫喜剧。")
    name: str = Field(..., description="给这部电影取一个名字")
    characters: List[str] = Field(..., description="这部电影的角色名称。")
    storyline: str = Field(..., description="电影的 3 句故事情节。让它变得激动人心!")

movie_assistant = Assistant(
    description="你帮助编写电影剧本。",
    output_model=MovieScript,
)

pprint(movie_assistant.run("纽约"))

运行 movie_assistant.py 文件

python movie_assistant.py

输出是 MovieScript 类的对象,如下所示:

MovieScript(setting='繁华且充满活力的纽约市',
│   ending='主人公拯救了城市并与疏远的家人和解。',
│   genre='动作',
│   name='城市脉动',
│   characters=['亚历克斯·默瑟', '尼娜·卡斯蒂略', '侦探迈克·约翰逊'],
│   storyline='在纽约市的中心,前警察变成的义警亚历克斯·默瑟,与街头聪明的活动家尼娜·卡斯蒂略联手,打倒威胁要摧毁城市的腐败政治人物。他们穿越权力和欺骗的复杂网络,揭示了令人震惊的真相,将他们推到了能力的极限。在时间不多的情况下,他们必须与时间赛跑,拯救纽约并面对自己的恶魔。'
)

4、具有知识和存储的 PDF 助手

让我们创建一个 PDF 助手来回答来自 PDF 的问题。我们将使用 PgVector 进行知识和存储。

知识库: 助手可以搜索以改善其响应的信息(使用向量数据库)。
存储: 为助手提供长期记忆(使用数据库)。

  1. 运行 PgVector
    安装 docker 桌面版 并使用以下命令在端口 5532 上运行 PgVector:
docker run -d \
  -e POSTGRES_DB=ai \
  -e POSTGRES_USER=ai \
  -e POSTGRES_PASSWORD=ai \
  -e PGDATA=/var/lib/postgresql/data/pgdata \
  -v pgvolume:/var/lib/postgresql/data \
  -p 5532:5432 \
  --name pgvector \
  phidata/pgvector:16
  1. 创建 PDF 助手
    创建文件 pdf_assistant.py
import typer
from typing import Optional, List
from phi.assistant import Assistant
from phi.storage.assistant.postgres import PgAssistantStorage
from phi.knowledge.pdf import PDFUrlKnowledgeBase
from phi.vectordb.pgvector import PgVector2

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

knowledge_base = PDFUrlKnowledgeBase(
    urls=["https://phi-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf"],
    vector_db=PgVector2(collection="recipes", db_url=db_url),
)
# Comment out after first run
knowledge_base.load()

storage = PgAssistantStorage(table_name="pdf_assistant", db_url=db_url)


def pdf_assistant(new: bool = False, user: str = "user"):
    run_id: Optional[str] = None

    if not new:
        existing_run_ids: List[str] = storage.get_all_run_ids(user)
        if len(existing_run_ids) > 0:
            run_id = existing_run_ids[0]

    assistant = Assistant(
        run_id=run_id,
        user_id=user,
        knowledge_base=knowledge_base,
        storage=storage,
        # 在响应中显示工具调用
        show_tool_calls=True,
        # 使助手能够搜索知识库
        search_knowledge=True,
        # 使助手能够读取聊天记录
        read_chat_history=True,
    )
    if run_id is None:
        run_id = assistant.run_id
        print(f"启动运行: {run_id}\n")
    else:
        print(f"继续运行: {run_id}\n")

    # 以 cli 应用程序形式运行助手
    assistant.cli_app(markdown=True)


if __name__ == "__main__":
    typer.run(pdf_assistant)
  1. 安装库
pip install -U pgvector pypdf "psycopg[binary]" sqlalchemy
  1. 运行 PDF 助手
python pdf_assistant.py

• 问一个问题:

如何制作泰式炒河粉?

• 看助手如何搜索知识库并返回响应。
• 消息 bye 退出,再次使用 python pdf_assistant.py 启动助手并询问:

我上次的信息是什么?

看看助手现在如何在会话之间保持存储。

• 使用 --new 标志运行 pdf_assistant.py 文件以启动新运行。

python pdf_assistant.py --new

四、Phidata和Langchain对比

Phidata和Langchain都是针对构建智能AI助手和自动化工作流程的框架,但它们在设计理念、功能特性和使用场景上可能存在一些差异。以下是一些可能的区别,但请注意,具体差异可能会随着各自项目的发展而变化:

  1. 设计理念

    • Phidata:专注于为大型语言模型(LLMs)提供长期记忆、深入的情境理解和执行操作的能力,使其更加智能和自适应。
    • Langchain:可能更侧重于提供一个端到端的解决方案,用于构建语言模型的应用程序,包括数据管理、模型调用和结果呈现。
  2. 功能特性

    • Phidata:提供记忆、知识和工具的整合,允许AI助手存储聊天历史、利用业务上下文知识,并执行API调用等操作。
    • Langchain:可能包含更多与特定语言模型的集成、数据处理和工作流自动化的工具,以及可能的特定领域优化。
  3. 技术栈和集成

    • Phidata:可能更倾向于提供灵活性,允许开发者选择和集成不同的工具和API。
    • Langchain:可能提供了一套更完整的工具集,包括数据存储、模型调用API和用户界面等。
  4. 社区和生态系统

    • Phidata:可能拥有一个围绕其框架的工具和最佳实践的社区。
    • Langchain:可能有更广泛的社区支持和更丰富的生态系统,包括插件、扩展和第三方集成。
  5. 使用场景

    • Phidata:适用于需要高度定制AI助手和自动化任务的场景。
    • Langchain:可能更适合需要快速部署和全栈解决方案的场景。
  6. 开发和维护

    • 两者都可能是开源项目,但它们的开发速度、社区活跃度和更新频率可能有所不同。

结语

通过本文对Phidata框架的全面介绍,我们得以一窥其在智能AI助手开发中的潜力与应用。Phidata以其独特的记忆、知识与工具整合,突破了传统语言模型的局限,为AI的实际应用提供了新的可能性。

从快速入门到高级功能,Phidata展现了其在金融、新闻、视频分析等多个领域的强大能力。其易用性、灵活性和开源社区的支持,为AI技术的创新和个性化应用提供了坚实的基础。

随着技术的不断演进,Phidata有望成为智能助手开发的新标杆,推动AI技术的创新和应用。我们期待更多的开发者加入Phidata社区,共同推动AI技术的发展,创造更加智能化的未来。

在这里插入图片描述

🎯🔖更多专栏系列文章:AIGC-AI大模型开源精选实践

😎 作者介绍:我是寻道AI小兵,资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索。
📖 技术交流:建立有技术交流群,可以扫码👇 加入社群,500本各类编程书籍、AI教程、AI工具等你领取!
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我,让我们携手同行AI的探索之旅,一起开启智能时代的大门!

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

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

相关文章

探索Uptime命令:Linux系统管理员的必备工具

欢迎来到我的博客,代码的世界里,每一行都是一个故事 🎏:你只管努力,剩下的交给时间 🏠 :小破站 探索Uptime命令:Linux系统管理员的必备工具 前言基本用法语法输出示例输出字段解释系…

【RF Transceiver】ADRV9040 8T8R

具有DFE、400MHz iBW射频收发器的8T8R SoC 特性 8个差分发送器(Tx) 8个差分接收器(Rx) 2个观察接收器(ORx) 单频段和多频段(N x 2T2R/4T4R)能力 可调范围1内4个波段轮廓 调谐范围&a…

记录一个笔误引发的bug导致生产环境报错,但是本地环境,测试环境运行正常

记录一个笔误引发的bug导致生产环境报错,但是本地环境,测试环境运行正常 因为headers请求头过长导致报错 在feign外调其他系统时候,是重新封装headers 问题在于 MultiValueMap 属于静态变量。这里讲userAgent的内容传递过去。是不断累加的…

Stable Diffusion【进阶篇】:真人漫改之迪士尼风格定制

大家好,我是极客菌 关于真人漫改是一个应用比较多的图片定制方向,本文以及后面的章节我们结合一些具体的大模型或者LORA来更深入的实践一下。 一. 迪士尼风格 在SD的大模型中,实现迪士尼或者皮卡斯风格的图片,首推 Disney Pix…

C# 任务调度 c# TaskScheduler

摘要 在C#中,TaskScheduler是一种非常有用的功能,它允许您在指定的时间或间隔内执行任务。TaskScheduler是一个抽象类,它提供了一个通用的方法来计划和执行任务。您可以使用TaskScheduler来调度多个任务,并且在多线程环境中控制它…

智能体——父亲兴趣爱好助手

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大二学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL&#xff0…

HDOJ5616 Jam‘s balance

目录 HDOJ5616 Jams balance题目描述背景输入输出 题解解法一解法二优化 打赏 HDOJ5616 Jam’s balance 题目描述 背景 有 N N N个已知质量的砝码,分别询问给出的 M M M个质量能否被称出 输入 第一行输入一个变量 T T T,表示有 T T T组数据&#xf…

LLM生成模型在生物蛋白质应用:ESM3

参考: https://github.com/evolutionaryscale/esm 报告:https://www.evolutionaryscale.ai/blog/esm3-release 通过GPT模型原理,输入蛋白质序列等模态输出预测的蛋白质序列及结构 使用 参考:https://colab.research.google.c…

智能扫地机,让生活电器更加便民-NV040D扫地机语音方案

一、语音扫地机开发背景: 随着人工智能和物联网技术的飞速发展,智能家居设备已成为现代家庭不可或缺的一部分。其中,扫地机作为家庭清洁的重要工具,更是得到了广泛的关注和应用。 然而,传统的扫地机在功能和使用上仍存…

深圳比创达EMC|EMC与EMI滤波器:在电子设备中的平衡之道

随着科技的快速发展,电子设备已经深入到我们生活的方方面面,从家用电器到工业设备,从通信设备到医疗仪器,都离不开电子技术的支持。然而,电子设备在带来便利的同时,也面临着电磁兼容(EMC&#x…

一个很好用的地图工具的使用:思极地图,以及vue+思极地图的使用

前言: 随着现在国网等一部分公司的需求,在线地图-思极地图 出现在我们眼前,给我们带来了很多便利,这里分享下他的信息与使用。 实现效果: 相关资料: 1、官网地址 2、在线地址 3、官方api地址 实现步骤-js…

河南资信乙级预评价:人员需缴唯一社保吗?

河南资信乙级预评价中,人员确实需要缴纳唯一社保。以下是详细的解读和归纳: 一、社保唯一性的定义 社保唯一性指的是参与河南资信乙级预评价的咨询工程师(投资)必须在申请单位有唯一且连续的社保缴纳记录。这一要求旨在确保咨询…

鸿蒙 HarmonyOS NEXT星河版APP应用开发阶段三-热门组件使用及案例

一、样式和结果重用 介绍 /* Extend:扩展组件(样式、事件) Styles: 抽取通用数据、事件 Builder:自定义构建函数(结构、样式、事件) */Extend /* 作用:扩展组件(样式、事件) 场景:…

C语言 | Leetcode C语言题解之第189题轮转数组

题目&#xff1a; 题解&#xff1a; void swap(int* a, int* b) {int t *a;*a *b, *b t; }void reverse(int* nums, int start, int end) {while (start < end) {swap(&nums[start], &nums[end]);start 1;end - 1;} }void rotate(int* nums, int numsSize, int…

JavaScript创建标签式组件

我们本篇将实现下面的这个标签式组件 我们本篇将实现下面的这个标签式组件 ● 当然我们首先将我们需要的元素存储到变量中&#xff0c;方便后面使用 const tabs document.querySelectorAll(.operations__tab); //获取所有的button const tabsContainer document.querySele…

ROS CDK魔法书:点亮博客上云新技能(Python篇)

引言 在数字世界的浩瀚海洋中&#xff0c;信息与数据如同戏剧中的主角&#xff0c;舞动着无形的旋律&#xff0c;构建起信息时代的交响乐。而在这其中&#xff0c;作为一位技术领域的探索者&#xff0c;你的使命便是挥舞着编码的魔杖&#xff0c;创造和守护着这些宝贵的数字灵…

外贸邮件推送有哪些策略?如何提升转化率?

外贸邮件推送的效果怎么优化&#xff1f;邮件推送的技巧有哪些&#xff1f; 外贸邮件推送是一种有效的市场营销策略&#xff0c;可以帮助企业开拓国际市场&#xff0c;增加销售额。然而&#xff0c;成功的外贸邮件推送并不是一蹴而就的&#xff0c;需要精心策划和执行。AokSen…

【RF Transceiver】ADRV9040 THEORY OF OPERATION

工作原理 概述 GENERAL 该 ADRV9040 是一款高度集成的射频收发器&#xff0c;能够针对各种应用进行配置。该器件集成了在单个器件中提供所有发射器、流量接收机和观测接收机功能所需的所有射频、混合信号和数字模块。可编程性使该器件能够适应 TDD 模式下的许多 3G/4G/5G 蜂窝…

“论大数据处理架构及其应用”高分范文,软考高级,系统架构设计师

论文真题 大数据处理架构是专门用于处理和分析巨量复杂数据集的软件架构。它通常包括数据收集、存储、处理、分析和可视化等多个层面&#xff0c;旨在从海量、多样化的数据中提取有价值的信息。Lambda架构是大数据平台里最成熟、最稳定的架构&#xff0c;它是一种将批处理和流…

vue3使用vant4的列表vant-list点击进入详情自动滚动到对应位置,踩坑日记(一天半的踩坑经历)

1.路由添加keepAlive <!-- Vue3缓存组件&#xff0c;写法和Vue2不一样--><router-view v-slot"{ Component }"><keep-alive><component :is"Component" v-if"$route.meta.keepAlive"/></keep-alive><component…