Building Your First AI Agent in Python with the OpenAI Agents SDK
TL;DR · AI 摘要
Building Your First AI Agent in Python with the OpenAI Agents SDK - KDnuggets publ: 26-Oct, 2026 - Blog Top Posts About...
核心要点
- 主题聚焦:Building Your First AI Agent in Python with the
- 来源:KDnuggets,建议结合原文判断细节。
- AI 分析暂不可用,本条为保底评分与摘要。
使用OpenAI Agents SDK在Python中构建你的第一个AI代理 - KDnuggets
publ: 2026年10月26日
- 博客热门文章
- 主题 AI 职业建议 计算机视觉 数据工程 数据科学 语言模型 机器学习 MLOps NLP 编程 Python SQL
- 数据集
- 活动
- 资源 快速参考指南 推荐 技术简报
- 广告
订阅时事通讯
#header end
/ad_wrapper
使用OpenAI Agents SDK在Python中构建你的第一个AI代理
使用OpenAI Agents SDK在Python中构建你的第一个AI代理,通过一个简单的端到端工作流添加网络搜索、Python工具、对话记忆和追踪功能。
作者:
Abid Ali Awan,KDnuggets助理编辑,2026年10月26日,Python
<div class="addthis_native_toolbox"></div>
现在用Python构建AI代理比以往任何时候都更容易。通过OpenAI Agents SDK,你可以创建代理、连接工具、维护对话状态,并运行多步骤工作流,而无需从头开始构建自己的工具调用循环。
在本教程中,我们将构建一个实用的研究代理,该代理可以搜索网络、调用自定义Python函数、记住之前的对话,并决定何时使用每种功能。
什么是AI代理?
标准的大型语言模型(LLM)应用程序通常遵循一个简单的流程:
提示 — 模型 — 响应
模型接收提示,生成答案,然后停止。
AI代理增加了工具和执行循环:
用户 — 代理 — 如果需要 — 工具 — 代理 — 最终响应
代理不再只是生成文本,而是可以决定是否需要先采取行动,例如搜索网络、调用Python函数或从记忆中检索信息。
通过OpenAI Agents SDK,Runner会自动管理这个过程。它向模型发送请求,执行任何请求的工具,将结果传回代理,并继续执行直到代理生成最终答案。
这种能够推理、使用工具并在多步骤中继续工作的能力,使代理区别于基本的LLM应用程序。
设置项目
在构建代理之前,让我们创建一个干净的Python环境并安装所需的一切。
使用uv创建Python项目:
mkdir first-ai-agent
cd first-ai-agent
uv init
uv add openai-agents或者使用pip安装包:
pip install openai-agents设置你的OpenAI API密钥:
export OPENAI_API_KEY="your-api-key"在Windows上,export命令在Git Bash中有效。在命令提示符或PowerShell中,你可以使用:
setx OPENAI_API_KEY "your-api-key"构建你的第一个代理
现在我们可以将几行Python代码转换为一个代理,该代理决定何时需要从网络获取最新信息。
创建main.py:
from agents import Agent, Runner, WebSearchTool
agent = Agent(
name="Research Assistant",
instructions=(
"You are a concise research assistant. "
"Use web search when current information is required."
),
tools=[WebSearchTool()],
)
result = Runner.run_sync(
agent,
"What are the latest developments in Python?"
)
print(result.final_output)运行它:
uv run main.py输出:
截至 **2026 年 9 月 14 日**,主要的 Python 开发进展如下:
- **Python 3.14 是最新的稳定功能系列**;最新维护版本是 **3.14.7**。它新增了官方支持的多线程构建、延迟注解评估、模板字符串字面量(`t""`)等功能。
- **Python 3.15 即将发布**:最终版本计划于 **2026 年 10 月 1 日** 发布。
对于新项目,**Python 3.14.7** 目前是默认的最安全选择。WebSearchTool() 是一个托管的 OpenAI 工具,因此模型可以自行决定何时需要当前信息,而无需你手动调用搜索 API。
例如,我们的运行流程正确识别了 Python 3.14.7 作为当前稳定版本。
添加你自己的 Python 工具
网络搜索很有用,但当代理还能与你自己的 Python 代码交互时,其能力会显著提升。
添加一个计算工具:
from agents.decorators import tool
@tool
def calculate_total(
price: float,
quantity: int
) -> float:
"""计算订单总成本。"""
return price * quantity然后将其交给代理:
agent = Agent(
name="Assistant",
instructions="协助研究和计算。",
tools=[
WebSearchTool(),
calculate_total,
],
)进行测试:
result = Runner.run_sync(
agent,
"我需要 14 个每小时 2.49 美元的 GPU,"
"每小时总成本是多少?"
)
print(result.final_output)14 个 GPU × 2.49 美元/小时 = **每小时 34.86 美元**。SDK 会自动使用函数名称、参数、类型提示和文档字符串来创建模型可理解的工具模式。你无需手动定义 JSON 模式或编写工具调用循环。
提示:编写清晰的文档字符串,因为它们能帮助模型理解工具的功能及其使用场景。
添加对话记忆
一个实用的代理不应在下一条消息到达时忘记所有内容,因此让我们为其添加对话记忆。
为了让代理具备对话能力,添加一个会话:
from agents import SQLiteSession
session = SQLiteSession(
"user_1",
"conversations.db"
)然后将其传递给每次运行:
while True:
message = input("你: ")
if message.lower() in {"exit", "quit"}:
break
result = Runner.run_sync(
agent,
message,
session=session,
)
print("代理:", result.final_output)现在尝试:
第二次请求会自动接收之前的对话内容,因此代理能理解“最新版本”所指的内容。
由于我们使用了基于文件的 SQLite 数据库,重启程序后历史记录也可以持久化保存。
对于更大规模的应用,SDK 还提供了针对 Redis、SQLAlchemy 和 MongoDB 等系统的会话后端。
完整代理的工作原理
到目前为止,所有组件都已整合:
代理决定采取什么行动,Runner 执行代理循环和任何请求的工具,会话则在请求之间保留对话历史。
以下是完整的 main.py 文件:
import os
import sys
from agents import Agent, Runner, SQLiteSession, WebSearchTool
from agents.decorators import tool
@tool
def calculate_total(
price: float,
quantity: int
) -> float:
"""Calculate the total cost of an order."""
return price * quantity
def main() -> None:
if not os.environ.get("OPENAI_API_KEY"):
sys.exit(
"Error: set the OPENAI_API_KEY environment variable first."
)
agent = Agent(
name="Assistant",
instructions="""
Help the user with research and calculations.
Use the available tools when necessary.
""",
tools=[
WebSearchTool(),
calculate_total,
],
)
session = SQLiteSession(
"user_1",
"conversations.db"
)
try:
while True:
try:
message = input("You: ")
except (EOFError, KeyboardInterrupt):
print()
break
command = message.strip().lower()
if command in {"exit", "quit"}:
break
if not command:
continue
try:
result = Runner.run_sync(
agent,
message,
session=session,
)
except Exception as exc:
print(
f"Agent error "
f"({type(exc).__name__}): {exc}"
)
continue
print("Agent:", result.final_output)
finally:
session.close()
if __name__ == "__main__":
main()这为我们提供了一个小型但完整的会话代理,具备网络搜索功能、自定义的 Python 工具、持久化记忆、基本的错误处理以及连续的聊天界面。
Agents SDK 默认启用了追踪功能,这在工作流程变得更加复杂时特别有用。追踪功能可让您检查模型调用、工具使用、交接和其他代理运行期间的步骤。
您可以在 OpenAI 仪表板中查看这些追踪信息,以了解代理是如何得出答案的、选择了哪些工具以及问题发生在哪里。这使得追踪在调试工具调用行为和改进代理指令方面特别有用。
最后的想法
构建第一个 AI 代理更多是赋予模型执行有用操作的能力,而不是创建一个复杂的自主系统。
在本指南中,我们从一个简单的代理开始,添加了网络搜索功能,连接了一个自定义的 Python 工具,引入了持久化的对话记忆,并最终在包含追踪和错误处理的完整应用程序中整合了所有内容。
这个基础已经足够构建出令人惊讶的强大工作流程。从这里开始,随着应用程序的增长,您可以逐步添加 API、MCP 服务器、防护措施、交接、更多专用工具和额外的代理。
模式保持不变:为代理提供合适的工具,让它决定何时使用这些工具,而 Agents SDK 则处理执行循环。
从小规模开始,先让一个工作流程变得有用,只有在真正需要更多复杂性时才进行扩展。
Abid Ali Awan(@1abidaliawan)是一位认证的数据科学家,热爱构建机器学习模型。目前,他专注于内容创作,并撰写关于机器学习和数据科学技术的博客文章。Abid拥有技术管理硕士学位和电信工程学士学位。他的愿景是为有心理疾病困扰的学生构建一个基于图神经网络的AI产品。
有关此主题的更多内容
- 使用Claude Agent SDK入门
- 构建和部署首个自主代理的7个步骤
- 将OpenAI Codex转化为强大AI编码代理的5个技巧
- 使用Docker Agent构建AI代理
- 构建强大AI代理的5大代理技能市场
- 使用代理开发工具包构建生产级AI代理
<hr class="grey-line"><br> <div><h3>我们推荐的5门免费课程</h3><br> </div>
WordPress的Mailchimp插件v4.14.1 - https://wordpress.org/plugins/mailchimp-for-wp/
/ WordPress的Mailchimp插件
您可以从这里开始编辑。
如果评论已关闭。
<= 上一篇
下一篇 =>
#content end
<script type="text/javascript">kda_sid_write(kda_sid_n);</script>
最新文章
- 2026年成为计算机视觉工程师的路线图 使用OpenAI Agents SDK在Python中构建首个AI代理 7个高级Python设计模式供数据科学家使用 公司在说他们想要“AI经验”时实际意味着什么 2026年你应该尝试的5个免费AI编码代理 如何使用ijson在Python中处理大型JSON文件
热门文章
- 5个开发者必备的Docker容器
- AI代理技能的5个最佳GitHub仓库
- 7个可替代付费订阅的开源AI工具
- 2026年你应该尝试的5个免费AI编码代理
- AI软件克隆的兴起:为什么REA和ArtCraft正在病毒式传播
- 2026年可使用的5个免费LLM API提供商
- 使用Scikit-LLM进行命名实体识别
- Google开源Harness²:无需重新训练的自我改进AI代理
- 5个适合LLM推理工程的有趣项目
- Claude Haiku 5.5:新功能及如何用于快速、低成本的AI工作流
#content_wrapper end
© 2026
Guiding Tech Media
|
关于
联系我们
广告合作
隐私政策
服务条款
发布于2026年10月26日
blank
不,谢谢!
/.main_wrapper
<script defer type="text/javascript" src="https://s7.addthis.com/js/300/addthis_widget.js#pubid=gpsaddthis"></script>
noptimize
/noptimize