phidata 介绍
了解项目的详细信息和使用方法
什么是 phidata?
Phidata 是一个用于构建自主助手(即智能体)的框架,这些助手具有长期记忆、上下文知识和使用函数调用执行操作的能力。
使用 phidata 将任何大语言模型 (LLM) 转变为能够:
- 使用 DuckDuckGo、Google 等搜索网络
- 使用 SQL、DuckDb 等分析数据
- 进行研究并生成报告
- 从 PDF、API 等回答问题
- 为电影、书籍等编写脚本
- 总结文章、视频等
- 执行任务如发送电子邮件、查询数据库等
- 以及更多...
为什么选择 phidata?
问题: 我们需要将通用的 LLM 转变为专门为我们的用例设计的助手。
解决方案: 扩展 LLM 以具备记忆、知识和工具:
- 记忆:将聊天记录存储在数据库中,使 LLM 能够进行长期对话。
- 知识:将信息存储在向量数据库中,为 LLM 提供业务背景。
- 工具:使 LLM 能够执行操作,如从 API 获取数据、发送电子邮件或查询数据库。
记忆和知识使 LLM 更智能,而工具使它们更具自主性。
工作原理
- 步骤 1: 创建一个
Assistant
- 步骤 2: 添加工具(函数)、知识(向量数据库)和存储(数据库)
- 步骤 3: 使用 Streamlit、FastApi 或 Django 来构建您的 AI 应用
安装
shell1pip install -U phidata
快速入门
可以搜索网络的助手
创建一个文件 assistant.py
python1from phi.assistant import Assistant 2from phi.tools.duckduckgo import DuckDuckGo 3 4assistant = Assistant(tools=[DuckDuckGo()], show_tool_calls=True) 5assistant.print_response("法国发生了什么事?", markdown=True)
安装库,导出您的 OPENAI_API_KEY
并运行 Assistant
shell1 2 3pip install openai duckduckgo-search 4 5export OPENAI_API_KEY=sk-xxxx 6 7python assistant.py
可以查询财务数据的助手
创建一个文件 finance_assistant.py
python1from phi.assistant import Assistant 2from phi.llm.openai import OpenAIChat 3from phi.tools.yfinance import YFinanceTools 4 5assistant = Assistant( 6 llm=OpenAIChat(model="gpt-4o"), 7 tools=[YFinanceTools(stock_price=True, analyst_recommendations=True, company_info=True, company_news=True)], 8 show_tool_calls=True, 9 markdown=True, 10) 11assistant.print_response("NVDA 的股价是多少?") 12assistant.print_response("撰写 NVDA 和 AMD 的比较报告,使用所有可用的工具。")
安装库并运行 Assistant
shell1pip install yfinance 2 3python finance_assistant.py
更多信息
- 阅读文档 docs.phidata.com
- 在 discord 与我们聊天
示例
- LLM OS:使用 LLM 作为新兴操作系统的 CPU。
- 自主 RAG:为 LLM 提供工具以搜索其知识、网络或聊天记录。
- 本地 RAG:使用 Ollama 和 PgVector 的 Llama3 完全本地化的 RAG。
- 投资研究员:使用 Llama3 和 Groq 生成股票投资报告。
- 新闻文章:使用 Llama3 和 Groq 撰写新闻文章。
- 视频摘要:使用 Llama3 和 Groq 对 YouTube 视频进行总结。
- 研究助手:使用 Llama3 和 Groq 撰写研究报告。
可以编写和运行 Python 代码的助手
显示代码
PythonAssistant
可以通过编写和运行 Python 代码来完成任务。
- 创建一个文件
python_assistant.py
python1from phi.assistant.python import PythonAssistant 2from phi.file.local.csv import CsvFile 3 4python_assistant = PythonAssistant( 5 files=[ 6 CsvFile( 7 path="https://phidata-public.s3.amazonaws.com/demo_data/IMDB-Movie-Data.csv", 8 description="包含来自 IMDB 的电影信息。", 9 ) 10 ], 11 pip_install=True, 12 show_tool_calls=True, 13) 14 15python_assistant.print_response("电影的平均评分是多少?", markdown=True)
- 安装 pandas 并运行
python_assistant.py
shell1pip install pandas 2 3python python_assistant.py
可以使用 SQL 分析数据的助手
显示代码
DuckDbAssistant
可以使用 SQL 执行数据分析。
- 创建一个文件
data_assistant.py
python1import json 2from phi.assistant.duckdb import DuckDbAssistant 3 4duckdb_assistant = DuckDbAssistant( 5 semantic_model=json.dumps({ 6 "tables": [ 7 { 8 "name": "movies", 9 "description": "包含来自 IMDB 的电影信息。", 10 "path": "https://phidata-public.s3.amazonaws.com/demo_data/IMDB-Movie-Data.csv", 11 } 12 ] 13 }), 14) 15 16duckdb_assistant.print_response("电影的平均评分是多少?显示 SQL。", markdown=True)
- 安装 duckdb 并运行
data_assistant.py
文件
shell1pip install duckdb 2 3python data_assistant.py
可以生成 pydantic 模型的助手
显示代码
我们最喜欢的 LLM 功能之一是从文本生成结构化数据(即 pydantic 模型)。使用此功能可以提取特征、生成电影脚本、生成假数据等。
让我们创建一个 Movie Assistant 来为我们编写 MovieScript
。
- 创建一个文件
movie_assistant.py
python1from typing import List 2from pydantic import BaseModel, Field 3from rich.pretty import pprint 4from phi.assistant import Assistant 5 6class MovieScript(BaseModel): 7 setting: str = Field(..., description="为一部大片提供一个美好的背景。") 8 ending: str = Field(..., description="电影的结局。如果没有提供,提供一个快乐的结局。") 9 genre: str = Field(..., description="电影的类型。如果没有提供,选择动作、惊悚或浪漫喜剧。") 10 name: str = Field(..., description="为这部电影取一个名字。") 11 characters: List[str] = Field(..., description="这部电影中的角色名称。") 12 storyline: str = Field(..., description="电影的三句话故事情节。让它令人兴奋!") 13 14movie_assistant = Assistant( 15 description="你帮助编写电影脚本。", 16 output_model=MovieScript, 17) 18 19pprint(movie_assistant.run("New York"))
- 运行
movie_assistant.py
文件
shell1python movie_assistant.py
- 输出是
MovieScript
类的对象,如下所示:
shell1MovieScript( 2│ setting='繁华而充满活力的纽约市', 3│ ending='主角拯救了城市,并与疏远的家人和解。', 4│ genre='动作', 5│ name='City Pulse', 6│ characters=['Alex Mercer', 'Nina Castillo', 'Detective Mike Johnson'], 7│ storyline='在纽约市的中心,前警察变成了义务警员,Alex Mercer 与街头聪明的活动家 Nina Castillo 联手打击威胁摧毁城市的腐败政治人物。在穿越权力和欺骗的错综复杂的网络时,他们发现了令人震惊的真相,这些真相将他们推向了能力的极限。随着时间的流逝,他们必须争分夺秒地拯救纽约并面对自己的恶魔。' 8)
使用知识和存储的 PDF 助手
显示代码
让我们创建一个可以回答 PDF 问题的 PDF 助手。我们将使用 PgVector
作为知识和存储。
**知识库:**助理可以搜索的信息以改进其响应(使用向量数据库)。
**存储:**为助手提供长期记忆(使用数据库)。
- 运行 PgVector
安装 docker 桌面版 并使用以下命令在端口 5532 上运行 PgVector:
bash1docker run -d \ 2 -e POSTGRES_DB=ai \ 3 -e POSTGRES_USER=ai \ 4 -e POSTGRES_PASSWORD=ai \ 5 -e PGDATA=/var/lib/postgresql/data/pgdata \ 6 -v pgvolume:/var/lib/postgresql/data \ 7 -p 5532:5432 \ 8 --name pgvector \ 9 phidata/pgvector:16
- 创建 PDF 助手
- 创建一个文件
pdf_assistant.py
python1import typer 2from typing import Optional, List 3from phi.assistant import Assistant 4from phi.storage.assistant.postgres import PgAssistantStorage 5from phi.knowledge.pdf import PDFUrlKnowledgeBase 6from phi.vectordb.pgvector import PgVector2 7 8db_url = "postgresql+psycopg://ai:ai@localhost:5532/ai" 9 10knowledge_base = PDFUrlKnowledgeBase( 11 urls=["https://phi-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf"], 12 vector_db=PgVector2(collection="recipes", db_url=db_url), 13) 14# 第一次运行后注释掉 15knowledge_base.load() 16 17storage = PgAssistantStorage(table_name="pdf_assistant", db_url=db_url) 18 19 20def pdf_assistant(new: bool = False, user: str = "user"): 21 run_id: Optional[str] = None 22 23 if not new: 24 existing_run_ids: List[str] = storage.get_all_run_ids(user) 25 if len(existing_run_ids) > 0: 26 run_id = existing_run_ids[0] 27 28 assistant = Assistant( 29 run_id=run_id, 30 user_id=user, 31 knowledge_base=knowledge_base, 32 storage=storage, 33 # 在响应中显示工具调用 34 show_tool_calls=True, 35 # 使助手能够搜索知识库 36 search_knowledge=True, 37 # 使助手能够读取聊天记录 38 read_chat_history=True, 39 ) 40 if run_id is None: 41 run_id = assistant.run_id 42 print(f"开始运行:{run_id}\n") 43 else: 44 print(f"继续运行: 45 46{run_id}\n") 47 48 # 以 CLI 应用程序运行助手 49 assistant.cli_app(markdown=True) 50 51 52if __name__ == "__main__": 53 typer.run(pdf_assistant)
- 安装库
shell1pip install -U pgvector pypdf "psycopg[binary]" sqlalchemy
- 运行 PDF 助手
shell1python pdf_assistant.py
- 提问:
怎么做泰式炒河粉?
-
查看助手如何搜索知识库并返回响应。
-
消息
bye
退出,再次使用python pdf_assistant.py
启动助手并询问:
我上条消息是什么?
查看助手现在如何在会话之间保持存储。
- 使用
--new
标志运行pdf_assistant.py
文件以开始新运行。
shell1python pdf_assistant.py --new
查看 cookbook 获取更多示例。
下一步
演示
查看以下使用 phidata 构建的 AI 应用:
- PDF AI 总结和回答 PDF 的问题。
- ArXiv AI 使用 ArXiv API 回答有关 ArXiv 论文的问题。
- HackerNews AI 总结故事、用户并分享 HackerNews 上的新内容。