phidata自定义工具的使用方法

设置代理

duckduckgo运行速度慢,可以在windows环境,需要打开科学上网,7899为设置的代理端口,自行设置

set HTTP_PROXY=http://127.0.0.1:7899
set HTTPS_PROXY=https://127.0.0.1:7899

主要逻辑

利用自带的duckduckgo网络搜索工具和本地自己写的文件保存函数,实现将搜索到的关于奥运会的信息保存到本地的PDF文件中。

代码

from phi.agent import Agent
from phi.model.openai import OpenAIChat
from phi.tools.duckduckgo import DuckDuckGo
from phi.model.openai.like import OpenAILike
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont


from dotenv import load_dotenv
import os
load_dotenv()

# 使用openai接口定义模型
llm = OpenAILike(
        id="deepseek-chat",
        api_key=os.getenv("DEEPSEEK_API_KEY"),
        base_url="https://api.deepseek.com",
    )


# 自定义phidata函数工具
def write_text_to_pdf(file_name, text_content):
    """这个函数可以将文本内容写入到PDF文件中,并把文件保存在本地

    Args:
        file_name (str): 文件的名称,定义名字的时候文件的后缀必须为.pdf
        text_content (str): 文本的内容

    Returns:
        str: 返回一个文件保存成功的字符串提示,提示文件已经保存和文件保存的路径
    """
    # 注册中文字体 # 使用 SIMSUNB.TTF 字体文件
    font_path = os.path.abspath('./phi_data_study/font/SIMSUN.TTC')
    pdfmetrics.registerFont(TTFont("SimSun", font_path))  # 注册字体并命名为 SimSunB
    
    # 创建一个 PDF 画布对象
    pdf_canvas = canvas.Canvas(file_name, pagesize=letter)
    
    # 获取页面宽度和高度
    width, height = letter
    
    # 设置字体和字号(使用支持中文的字体)
    pdf_canvas.setFont("SimSun", 12)  # 使用 SimSun 字体
    
    # 将文本写入 PDF
    text_lines = text_content.split('\n')  # 按行分割文本
    y = height - 50  # 从页面顶部开始写入
    for line in text_lines:
        pdf_canvas.drawString(50, y, line)  # 在 (50, y) 位置写入文本
        y -= 15  # 每行文本之间的间距
        if y <= 50:  # 如果接近页面底部,创建新页面
            pdf_canvas.showPage()
            y = height - 50

    # 保存 PDF 文件
    pdf_canvas.save()
    return f"文件已经保存在了 {file_name} 中,请查看"

## 定义AGENT
web_agent = Agent(
    name="Web Agent",
    model=llm,
    # 定义函数
    tools=[DuckDuckGo(),write_text_to_pdf ],
    instructions=["总结一下搜索到的内容,并根据搜索的结果生成一个pdf文件,文件的名称必须和回答的内容相关,最后保存数据"],
    show_tool_calls=True,
    markdown=True,
)

web_agent.print_response("关于2008年奥运会相关的信息?", stream=False)

运行结果

在这里插入图片描述
生成的pdf文件
在这里插入图片描述
PDF文件内容
在这里插入图片描述

之后会逐步深入讲解PHIDATA,敬请期待

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值