项目概述
背景:Phidata是一个创新的框架,专门为大型语言模型(LLM)设计,通过为其增加记忆、知识和工具来弥补LLM在上下文理解和行动能力方面的局限性。这个框架的开发是为了解决当前LLM无法进行长期对话和缺乏具体执行能力的问题,从而使LLM在各种业务场景中的应用更加广泛和深入。
目标:Phidata旨在通过三大核心增强:记忆、知识和工具,将通用的LLM转变为高度专业化的AI助手。这一目标不仅提升了LLM的实用性,还扩展了其在行业中的应用领域,如数据分析、客户服务和内容创建等。
主要功能:
记忆:通过在数据库中存储聊天历史,Phidata赋予LLM长期对话的能力,使助手能够记住与用户的交互历史和上下文,提供连贯和个性化的交流体验。
知识:Phidata通过在向量数据库中存储关键信息,为LLM提供了必要的业务知识和上下文,这些知识支持模型理解和处理更复杂的查询和任务。
工具:Phidata集成了多种工具使LLM能执行具体操作,例如从API拉取数据、发送电子邮件、查询数据库等。这一功能极大地扩展了LLM的实用性,使其能够在各种情景下自动执行任务。
工作流程:
创建助手:首先创建一个助手实例,作为AI应用的基础。
添加工具、知识和存储:向助手添加功能性组件,如工具(进行数据操作)、知识(存储必要的信息)和存储(记录交互历史)。
服务部署:通过使用Streamlit、FastAPI或Django等现代Web框架部署应用,使助手可以在实际环境中服务用户。
Phidata的设计不仅提升了LLM的功能,还通过提供如PDF AI、ArXiv AI和HackerNews AI等示例应用程序,展示了其在实际应用中的广泛可能性,这些应用可以执行从总结PDF文档到回答专业论文问题、以及概括新闻故事等多种任务。
安装与配置
前提条件
在开始安装和配置Phidata之前,确保系统中已安装以下必要的软件和库:
安装步骤
克隆仓库
克隆Phidata的GitHub仓库到本地环境:
git clone [仓库地址]
进入仓库目录:
cd phidata
安装依赖
安装Phidata及其依赖:
pip install -U phidata
安装额外的库,例如用于Web搜索的 duckduckgo-search
或财务数据查询的 yfinance
:
pip install openai duckduckgo-search
pip install yfinance
环境设置
配置环境变量,例如OPENAI的API密钥:
export OPENAI_API_KEY=sk-xxxx
配置说明
Phidata可能需要配置一些环境变量或修改配置文件以正确运行。这包括:
运行项目
示例1:创建可以搜索网络的助手
创建一个名为 assistant.py
的文件:
from phi.assistant import Assistant
from phi.tools.duckduckgo import DuckDuckGo
assistant = Assistant(tools=[DuckDuckGo()], show_tool_calls=True)
assistant.print_response("What's happening in France?", markdown=True)
运行助手脚本:
python assistant.py
示例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.")
运行助手脚本:
python finance_assistant.py
通过遵循以上步骤,用户可以快速搭建并运行自己的Phidata AI助手,以实现特定的业务功能。
使用示例
LLM OS:使用LLM作为新型操作系统的CPU
通过Phidata,LLM可以作为操作系统的核心处理单元,处理复杂的任务和命令,实现一个以智能助手为中心的操作环境。
自主RAG(Retrieval-Augmented Generation)
Phidata使LLM能够自主检索其知识库、网络或聊天历史,以增强生成内容的相关性和准确性。
本地RAG
使用Llama3和Ollama在完全本地的环境中实现RAG,结合PgVector进行高效的数据检索和管理。
投资研究员
利用Llama3和Groq生成股票投资报告,提供深入的市场分析和投资建议。
新闻文章编写
使用Llama3和Groq技术,自动撰写新闻文章,覆盖多种主题和事件。
视频摘要
Phidata结合YouTube和Llama3实现视频内容的自动摘要,帮助用户快速获取视频主要信息。
研究助理
使用Llama3和Groq为学术研究和报告提供撰写支持,增强内容的深度和广度。
Python编程助手
Phidata允许创建可以编写并运行Python代码的助手,以执行数据分析和自动化任务。
示例代码
创建一个名为 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)
运行助手,首先安装必要的库:
pip install pandas
python python_assistant.py
SQL数据分析助手
Phidata通过DuckDbAssistant使LLM能够使用SQL进行数据分析。
示例代码
创建一个名为 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("What is the average rating of movies? Show me the SQL.", markdown=True)
安装DuckDb并运行数据助手:
pip install duckdb
python data_assistant.py
电影剧本生成助手
通过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="Provide a nice setting for a blockbuster movie.")
ending: str = Field(..., description="Ending of the movie. If not available, provide a happy ending.")
genre: str = Field(..., description="Genre of the movie. If not available, select action, thriller or romantic comedy.")
name: str = Field(..., description="Give a name to this movie")
characters: List[str] = Field(..., description="Name of characters for this movie.")
storyline: str = Field(..., description="3 sentence storyline for the movie. Make it exciting!")
movie_assistant = Assistant(
description="You help write movie scripts.",
output_model=MovieScript
)
pprint(movie_assistant.run("New York"))
运行 movie_assistant.py
生成电影剧本,输出如下:
MovieScript(
│ setting='A bustling and vibrant New York City',
│ ending='The protagonist saves the city and reconciles with their estranged family.',
│ genre='action',
│ name='City Pulse',
│ characters=['Alex Mercer', 'Nina Castillo', 'Detective Mike Johnson'],
│ storyline='In the heart of New York City, a former cop turned vigilante, Alex Mercer, teams up with a street-smart activist, Nina Castillo, to take down a corrupt political figure who threatens to destroy the city. As they navigate through the intricate web of power and deception, they uncover shocking truths that push them to the brink of their abilities. With time running out, they must race against the clock to save New York and confront their own demons.'
)
这些使用实例展示了Phidata如何通过增加记忆、知识和工具来扩展LLM的功能,使其在各种情景中提供高效、精准的服务。