游乐游手机版
首页/AI教程/文章详情

如何将Agent包装成稳定API:从脚本开发到服务化部署

时间:2026-08-15 13:32
前几篇我们把简历 Agent 从 "会输出 "一路推到了 "带证据、能给建议 "。但所有代码都长这样:代码语言:python复制result = agent run_sync(resume_text)print(result output)这段代码放在本机调试时通常没什么问题,跑起来也很直接。但只要场景一变

前几篇我们把简历 Agent 从"会输出"一路推到了"带证据、能给建议"。但所有代码都长这样:

把 Agent 包装成稳定 API,从脚本到服务

代码语言:python

复制

result = agent.run_sync(resume_text)print(result.output)

这段代码放在本机调试时通常没什么问题,跑起来也很直接。但只要场景一变——比如要接给前端页面、对接其他系统,或者放进自动化流程里——这种脚本式写法就显得不太够用了。原因也很实际:它没有可调用的地址,没有清晰的接口边界,出了错,调用方往往也拿不到明确的反馈。

今天这篇,把 Agent 包成一个能被稳定调用的 API 服务。核心一句话:

一、先定义输入边界:AnalyzeRequest

用户传进来的东西,不能照单全收。今天定义了请求模型:

代码语言:python

复制

class AnalyzeRequest(BaseModel):resume_text: str = Field(min_length=20,max_length=8000,description="待分析的简历文本,不能太短,也不能无限长",)target_role: str | None = Field(default=None,max_length=80,description="目标岗位,例如:AI Agent 工程师、数据工程师",)

它的作用是:在请求进入 Agent 之前,先把不合理的数据拦在门外。

简历文本太短 → 不进 Agent文本太长 → 不进 Agent字段格式不对 → FastAPI 直接返回错误

这一步让我明白一个事实:AI 应用不能直接相信用户输入。输入边界越清楚,后面的 Agent 越稳定。把脏数据挡在门口,比让模型在内部纠错便宜得多。

二、再定义输出边界:AnalyzeResponse

光管输入不够,输出也得有统一格式。今天定义了响应模型:

代码语言:python

复制

class AnalyzeResponse(BaseModel):profile: ResumeAnalysistarget_role: str | None = Nonewarnings: list[str] = Field(default_factory=list)

早些时候,分析结果往往就是这样直接一并返回,没有再做额外拆分。

代码语言:json

复制

{ "summary": "...", "skills": [] }

现在包成统一外层:

代码语言:json

复制

{"profile": { "...": "Agent 分析结果" },"target_role": "AI Agent 工程师","warnings": []}

好处是:以后内部的 ResumeAnalysis 再怎么变复杂,API 外层结构依然稳定。

这是工程化里一条很重要的原则:

调用方只认 profile / target_role / warnings 这三样,你内部怎么重构都不影响他。

三、FastAPI 的价值:一句顶五件事

把接口挂起来的关键就一行:

代码语言:python

复制

@app.post("/analyze_resume", response_model=AnalyzeResponse)

response_model=AnalyzeResponse 这句话告诉 FastAPI:这个接口的返回值必须符合 AnalyzeResponse 的结构。

于是 FastAPI 自动帮你做完五件事:

请求参数校验响应结果校验JSON 转换API 文档生成(Swagger)错误信息返回

这也是 PydanticAI 和 FastAPI 天生一对的原因:PydanticAI 管 Agent 的结构化输出,FastAPI 管 Web API 的结构化输入输出。 两端都用 Pydantic 定义边界,衔接没有缝隙。

四、整体调用链路

今天的简历服务已经跑通这条链:

代码语言:shell

复制

用户 / 前端 ↓AnalyzeRequest 校验输入 ↓FastAPI 接口 ↓analyze_resume(resume_text) ↓PydanticAI Agent ↓ResumeAnalysis ↓AnalyzeResponse 包装输出 ↓返回 JSON

它比单个脚本更像一个真实项目,已经具备后端服务的雏形。

五、总结:把模型放进工程边界

今天最大的收获:

来源:https://cloud.tencent.com.cn/developer/article/2725562
上一篇AI辅助诊断模型特征存储全链路:数据标注与特征服务实践 下一篇浏览器本地运行中文AI配音:Hojo TTS Light 80M WebGPU与WASM实践
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
CAD零基础入门教程:坐标输入、图层管理与基础绘图命令
AI教程 · 2026-09-01

CAD零基础入门教程:坐标输入、图层管理与基础绘图命令

本文面向CAD零基础学习者,系统讲解坐标输入、图层管理与基础绘图命令的核心用法。通过分步实操与常见问题排查,帮助新手建立精确绘图习惯,掌握规范出图的基础能力。

CAD从入门到项目交付:绘图、标注、图块与实战工作流
AI教程 · 2026-09-01

CAD从入门到项目交付:绘图、标注、图块与实战工作流

掌握CAD的核心在于建立“画得准、标得清、复用快、交付稳”的工作流。本文提供从环境设置、高频命令组合、标注规范、图块标准化到项目分阶段交付的完整路径,帮助初学者避免常见返工陷阱,独立完成可检查、可复用、可打印的工程图纸。

Claude Code 登录指南:个人、Teams 与企业账号区分与授权步骤
AI教程 · 2026-09-01

Claude Code 登录指南:个人、Teams 与企业账号区分与授权步骤

本文详细解析 Claude Code 登录前的账号类型区分方法,涵盖个人订阅、Teams 席位与企业 Enterprise 席位的授权路径差异。提供终端登录命令、环境变量排查及常见异常处理步骤,帮助用户快速完成正确授权并避免登录路径混淆。

Claude Code 文件修改前的权限模式配置与命令审批指南
AI教程 · 2026-09-01

Claude Code 文件修改前的权限模式配置与命令审批指南

本文详细介绍Claude Code在修改文件前的权限模式配置方法,包括defaultMode可选值、permissions allow与deny规则设置、多层级配置文件管理以及 status验证技巧,帮助开发者安全高效地使用AI编程助手。

Claude Code接入VS Code后先测扩展和终端命令
AI教程 · 2026-09-01

Claude Code接入VS Code后先测扩展和终端命令

在VS Code中接入Claude Code后,建议优先验证扩展面板与集成终端两条入口。本文提供标准检查顺序、关键命令与常见故障排查路径,帮助你快速确认环境就绪,避免后续开发受阻。