社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python+新版DeepSeek V3轻松开发Agent

Python大数据分析 • 5 天前 • 76 次点击  

添加微信号"CNFeffery"

备注"AI应用"入技术交流群

1 简介

大家好我是费老师,前几天新版DeepSeek V3模型(代号250324)更新发布。作为支持函数调用的先进开源大模型,我们可以基于它进行高效的Agent功能开发,这也是当下非常火热🔥的AI应用领域。

今天的文章中,我就将带大家以Python生态中非常好用的Agent开发框架pydantic-ai为例,演示如何接入国内主流的DeepSeek V3服务,轻松实现常见的Agent开发相关功能。

2 基于pydantic-ai高效构建Agent

2.1 pydantic-ai运行环境的搭建

为方便演示,我们从虚拟环境的建立开始,以conda/mamba为例,建立示例Python虚拟环境,你也可以使用你习惯的其他工具建立环境:

mamba create -n llm-agent-dev python=3.10 -y

激活对应环境:

mamba activate llm-agent-dev

市面上常见的DeepSeek服务一般都兼容openai标准,因此我们不必安装完整的 pydantic-ai,执行下面的命令,仅安装openai标准相关的核心依赖即可(额外安装的jupyterlab是为了方便下文中做演示):

pip install "pydantic-ai-slim[openai]" jupyterlab

完成上面的环境搭建后,终端执行下列命令启动jupyterlab,接下来我们所有的示例代码都在jupyterlab中运行:

jupyter lab

⚠️需要注意的是,在jupyter环境中,请在所有代码之前,先执行一遍下列代码,否则后续的pydantic-ai部分代码会运行出错:

import nest_asyncio
nest_asyncio.apply()

2.2 定义模型提供源

为了能以兼容openai标准的形式,在pydantic-ai中调用国内常用的各种DeepSeek服务源,我们需要基于pydantic-ai中的OpenAIProvider来自定义模型提供源

from pydantic_ai.providers.openai import OpenAIProvider

譬如,接入DeepSeek官方开放平台:

# 示例1:DeepSeek官方
deepseek_provider = OpenAIProvider(
    base_url='https://api.deepseek.com'
    api_key=''
)

或是接入火山方舟平台:

# 示例2:火山方舟
ark_deepseek_provider = OpenAIProvider(
    base_url='https://ark.cn-beijing.volces.com/api/v3'
    api_key= ''
)

2.3 定义模型实例

有了已定义的模型提供源对象后,接下来我们就可以进行模型实例的定义,参考下列代码:

from pydantic_ai.models.openai import OpenAIModel

# 示例1:DeepSeek官方
deepseek_model = OpenAIModel(
    # 这里deepseek-chat对应目前最新的非深度思考模型V3
    'deepseek-chat',
    provider=deepseek_provider
)

# 示例2:火山方舟
ark_deepseek_model = OpenAIModel(
    '',
    provider=ark_deepseek_provider
)

有关在火山方舟平台中创建模型idapi key的具体步骤,请在玩转Dash公众号后台回复关键词火山方舟查看相应的短视频教程:

2.4 构建Agent

做好前面的准备后,我们接下来就可以开始编写Agent了,需要使用到pydantic-ai中的Agent类:

from pydantic_ai import Agent

2.4.1 最简单的Agent

我们从一个非常简单的Agent出发,实现一个文本情感分析智能助手,其中对于Agent()

  • 其第一个位置参数传入模型实例对象;

  • 参数result_type用于约束最终返回结果的格式,这里我们简单的设置为bool型;

  • 参数 system_prompt用于设置Agent的系统提示词内容;

# 定义Agent
agent = Agent(
    ark_deepseek_model,
    result_type=bool,
    system_prompt='你是一个文本情感分析智能助手,认真分析用户输入的内容,并判断其是否呈现积极情感'
)

针对已构建的Agent实例对象,pydantic-ai中提供了多种调用方式,本文以最基础的run_sync()同步调用方式为例,调用完成后通过其data属性获取计算结果,可以看到计算结果正确遵守了参数result_type的设定:

2.4.2 输出结果格式控制

通过上面的例子get到pydantic-ai中编写Agent并调用的基础方式后,下面我们为Agent定义复杂一些的计算返回结果格式,pydantic-aipydantic出自同一团队,因此在数据格式校验等方面一脉相承非常的方便:

from typing import List
from pydantic import BaseModel, Field

# 示例结果格式约束类
class DemoResult(BaseModel):
    is_positive: bool = Field(description='是否为积极情感')
    keywords: List[str] = Field(description='有关具体商品要素的简短名词,如无则输出[]')

# 定义Agent
agent = Agent(
    ark_deepseek_model,
    result_type=DemoResult,
    system_prompt='你是一个文本情感分析智能助手,认真分析用户输入的内容,对其进行情感倾向分析'
)

调用并查看结果,非常准确且稳定:

2.4.3 更复杂的输出结果格式控制

在上面例子的基础上,我们定义更复杂的计算结果格式约束,譬如我们命令智能体在计算结果中,需要增加字段 score,取值需要在-11之间,用来衡量情感倾向程度:

# 示例结果格式约束类
class DemoResult(BaseModel):
    is_positive: bool = Field(description='是否为积极情感')
    keywords: List[str] = Field(description='有关具体商品要素的简短名词,如无则输出[]')
    score: float = Field(
        description='情感倾向分数,取值范围在-1到1之间,越大越积极,0表示中性'
        ge=-1# 约束数值下限
        le=1# 约束数值上限
    )

# 定义Agent
agent = Agent(
    ark_deepseek_model,
    result_type=DemoResult,
    system_prompt='你是一个文本情感分析智能助手,认真分析用户输入的内容,对其进行情感倾向分析'
)

调用并查看结果,完美😎:

2.5 工具调用

在此基础上,让我们编写的Agent支持工具调用也非常的简单,譬如下面的例子中,我们定义的智能体需要根据输入的问题内容,自动判断并执行自定义函数get_today()get_now()

from pydantic_ai import Tool
from datetime import datetime

def get_today() -> str:
    """计算当前的日期"""

    return datetime.now().strftime('%Y-%m-%d')

def get_now() -> str:
    """计算当前的时间"""

    return datetime.now().strftime('%Y-%m-%d %H:%M:%S')

# 定义Agent
agent = Agent(
    ark_deepseek_model,
    tools=[
        Tool(get_today),
        Tool(get_now),
    ],
    system_prompt='请你调用合适的工具函数完成任务,并用中文回答结果,如果没有适合调用的函数就回复“我无法处理本次任务”'
)

示例调用结果如下,可以看到,我们编写的 Agent根据输入的不同提问内容,准确判断并完成了相关工具函数的调用,最终分别给出了妥当的计算结果:

2.6 处理多轮对话

在前面的例子中,我们每次调用Agent都是独立执行了run_sync('问题内容'),这样的每次调用都是单轮对话,不会有上下文记忆,通过下面的例子可以看出这个特点:

若需要在针对具体Agent的持续调用中,实现多轮对话效果,只需要将上一步调用结果的new_messages()内容,通过参数message_history传递即可,这样我们的Agent就像下面展示的那样具有了上下文记忆能力:

除此之外,Agent调用结果对应的new_messages()内容,还可以与JSON格式进行互转,这在很多AI应用开发场景中非常的受用:

除了本文介绍的基础功能外,pydantic-ai还支持mcp等丰富的智能体开发常用功能,欢迎大家持续关注我们的相关教程文章🚀。

更多参考资料:

  • pydantic-ai官网:https://ai.pydantic.dev/
  • pydantic-ai仓库:https://github.com/pydantic/pydantic-ai

以上就是本文的全部内容,欢迎在评论区与我们进行讨论~

本文完整代码获取:玩转Dash公众号后台回复关键词 智能体01

· 推荐阅读 ·

magic-dash:新一代Python全栈应用开发方案

纯Python开发Deepseek联网问答助手

Python+DeepSeek新玩法:一句话搞定应用生成+发布


长按识别下方二维码

即刻加入我们的知识圈子

超多AI干货内容等你来探索


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/180490
 
76 次点击