目录
- 引言
- 一、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 进行知识和存储。
知识库: 助手可以搜索以改善其响应的信息(使用向量数据库)。
存储: 为助手提供长期记忆(使用数据库)。
- 运行 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
- 创建 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)
- 安装库
pip install -U pgvector pypdf "psycopg[binary]" sqlalchemy
- 运行 PDF 助手
python pdf_assistant.py
• 问一个问题:
如何制作泰式炒河粉?
• 看助手如何搜索知识库并返回响应。
• 消息 bye 退出,再次使用 python pdf_assistant.py 启动助手并询问:
我上次的信息是什么?
看看助手现在如何在会话之间保持存储。
• 使用 --new 标志运行 pdf_assistant.py 文件以启动新运行。
python pdf_assistant.py --new
四、Phidata和Langchain对比
Phidata和Langchain都是针对构建智能AI助手和自动化工作流程的框架,但它们在设计理念、功能特性和使用场景上可能存在一些差异。以下是一些可能的区别,但请注意,具体差异可能会随着各自项目的发展而变化:
-
设计理念:
- Phidata:专注于为大型语言模型(LLMs)提供长期记忆、深入的情境理解和执行操作的能力,使其更加智能和自适应。
- Langchain:可能更侧重于提供一个端到端的解决方案,用于构建语言模型的应用程序,包括数据管理、模型调用和结果呈现。
-
功能特性:
- Phidata:提供记忆、知识和工具的整合,允许AI助手存储聊天历史、利用业务上下文知识,并执行API调用等操作。
- Langchain:可能包含更多与特定语言模型的集成、数据处理和工作流自动化的工具,以及可能的特定领域优化。
-
技术栈和集成:
- Phidata:可能更倾向于提供灵活性,允许开发者选择和集成不同的工具和API。
- Langchain:可能提供了一套更完整的工具集,包括数据存储、模型调用API和用户界面等。
-
社区和生态系统:
- Phidata:可能拥有一个围绕其框架的工具和最佳实践的社区。
- Langchain:可能有更广泛的社区支持和更丰富的生态系统,包括插件、扩展和第三方集成。
-
使用场景:
- Phidata:适用于需要高度定制AI助手和自动化任务的场景。
- Langchain:可能更适合需要快速部署和全栈解决方案的场景。
-
开发和维护:
- 两者都可能是开源项目,但它们的开发速度、社区活跃度和更新频率可能有所不同。
结语
通过本文对Phidata框架的全面介绍,我们得以一窥其在智能AI助手开发中的潜力与应用。Phidata以其独特的记忆、知识与工具整合,突破了传统语言模型的局限,为AI的实际应用提供了新的可能性。
从快速入门到高级功能,Phidata展现了其在金融、新闻、视频分析等多个领域的强大能力。其易用性、灵活性和开源社区的支持,为AI技术的创新和个性化应用提供了坚实的基础。
随着技术的不断演进,Phidata有望成为智能助手开发的新标杆,推动AI技术的创新和应用。我们期待更多的开发者加入Phidata社区,共同推动AI技术的发展,创造更加智能化的未来。
🎯🔖更多专栏系列文章:AIGC-AI大模型开源精选实践
😎 作者介绍:我是寻道AI小兵,资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索。
📖 技术交流:建立有技术交流群,可以扫码👇 加入社群,500本各类编程书籍、AI教程、AI工具等你领取!
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我,让我们携手同行AI的探索之旅,一起开启智能时代的大门!