deepseekers 一个面向 deepseek 的 AI Agent 框架(1)—结构化的输出

解释说明在 Deeepseekers 关于结构化输出给出方案,和实现思路。

  • 针对非推理模型的解决方案 deepseek-chat
  • 针对推理模型的解决方案 deepseek-reasoner

结构化输出重要性

结构化输出是指 LLM 生成的结果,按预定义的格式或模式来输出,例如 JSON、XML、表格、列表等。这种能力对于 LLM 在实际应用中至关重要,原因如下:

  • 兼容现有系统
  • 提升可控性
  • 通向多多模态的接口

简化后续处理: 将 LLM 的输出结构化为 Pydantic 模型后,Agent 可以直接访问和操作这些数据,而无需进行额外的文本解析工作,从而简化了后续的逻辑处理。

这是 deepseek 官网提供的关于结构化输出示例,在示例中给出如何通过在 system_prompt 中给示例,不难看出是通过 json example 来演示告诉 LLM 应该如何输出。

ini 复制代码
system_prompt = """  
The user will provide some exam text. Please parse the "question" and "answer" and output them in JSON format.  
  
EXAMPLE INPUT:  
Which is the highest mountain in the world? Mount Everest.  
  
EXAMPLE JSON OUTPUT:  
{  
"question": "Which is the highest mountain in the world?",  
"answer": "Mount Everest"  
}  
"""

对于通过 pydantic 定义的数据模型,提供方法将其转换为符合上面 deepseek 官网提供的示例的形式,然后将模型的 json schema 添加到 prompt ,这里我用 Result 的类对 LLM 返回的 response 进行进一步封装,这样好处可以屏蔽不同 LLM 供应商返回数据结构的差异性。还有就是对 response 进行解析将输出转换为预期的数据结构

python 复制代码
if isinstance(self.result_type, types.GenericAlias):
            origin = self.result_type.__origin__
            args = self.result_type.__args__
            if origin is list and args:
                result_type = args[0]
            data = json.loads(self.response.choices[0].message.content)
            return [result_type(**item) for item in data['items']]

接下来就通过一个示例来详细解释如何使用 deepseekers 完成数据结构输出。

python 复制代码
from rich.console import Console
from rich.panel import Panel
from pydantic import BaseModel,Field
from deepseekers.core import DeepSeekClient,Agent
from deepseekers.core.message import HumanMessage,SystemMessage
from deepseekers.core.utils import _json_schema_to_example

console = Console()

class Pizza(BaseModel):
    name:str = Field(title="name of pizza",description="披萨的名称",examples=["海鲜披萨"])
    description:str = Field(title="description of pizza",description="对于披萨的简单介绍",examples=["丰富的海鲜如虾、鱿鱼和贻贝搭配番茄酱和奶酪,海洋的味道在口中爆发。"])


# 初始化一个 client
client = DeepSeekClient(name="deepseek-client")

system_message = SystemMessage(content="you are very help assistant")
human_message = HumanMessage(content="生成 10 种以上披萨")


agent = Agent(
    name="pizza_generator",
    model_name="deepseek-chat",
    system_message=system_message,
    client=client,
    result_type=list[Pizza]
    )

result = agent.run(human_message)
print(result.get_data())
for pizza in result.get_data():
    console.print(Panel(pizza.description,title=f"🍕 {pizza.name}"))
python 复制代码
result_type=list[Pizza]

对于推理模型关于结构化输出的解决方案

  • Prompt 引导 JSON 输出 + json_extract + Pydantic 模型

是引导 LLM 尽量输出 JSON 格式的数据,即使本身不具备强结构化输出的能力,然后通过后处理的方式提取和校验 JSON 数据,并最终转换为 Pydantic 模型。

  • 使用支持结构化输出的 Agent 分析和提取

也可以使用支持结构化输出 LLM-based Agent 来分析 LLM 的原始的输出,并根据预定义的结构提取所需的数据结构的数据。

相关推荐
熊猫钓鱼>_>4 小时前
MiniMax 深度观察:不是又一个大模型,是AI生产效率的范式革新
人工智能·ai·自然语言处理·媒体·benchmark·minimax·行业
TechWayfarer5 小时前
Cloudflare 9·15新政倒计时:用IP风险画像识别AI爬虫,防止误伤Googlebot
网络·人工智能·爬虫·python·tcp/ip·网络安全
Anhty5 小时前
2026九月最新变声器测评:iOS安卓双端适配,低延迟运行更稳定
android·人工智能·功能测试·ios·智能手机
禹凕5 小时前
滑动窗口算法实战指南
python·算法
DisonTangor5 小时前
【腾讯混元雪耻归来】 Hy4 preview:770B 参数 MoE 旗舰模型,1M 上下文全面开源
人工智能·算法·开源·aigc·腾讯云·腾讯云ai代码助手
luckystar513~5 小时前
Hermes 实战 :系列收官/生产化——安全审计与运维
运维·人工智能·安全·agent·智能体开发·hermes实战·智能体网关
Mickey Q5 小时前
【深度学习】数值稳定性和模型初始化
人工智能·深度学习
冬奇Lab5 小时前
Code Agent 解剖(20):从零扩展——给 agent 加一个新工具
人工智能·开源
论文复现现场5 小时前
RTX 4090 24GB 能跑 Qwen3.8-27B 吗?单卡显存计算与云端部署指南
人工智能·python·云计算·llama·gpu算力
七牛云行业应用5 小时前
Harness Engineering 是什么:从“写提示词“到“设计 Agent 边界“的工程方法论
人工智能·agent·ai编程