OpenAI 的 Agent SDK 通过提供简单而强大的原语,使构建复杂的多代理生态系统变得轻而易举。其核心概念包括:
• 代理(Agents)– 由 LLM 驱动的实体,配备有指令和工具
• 委派(Handoffs)– 允许代理之间互相委派任务
• 护栏(Guardrails)– 使您能够验证和控制代理的输入
本文关注于一个真实场景中的用例:构建一个初步分流代理,该代理将问题分派给数学、物理、化学或地理等领域的主题专家。系统甚至包含护栏来防止处理不当内容。
初步分流主题专家示例
在本示例中,初步分流代理监听问题,并将每个查询转发给相应的主题专家代理。如果没有哪个主题专家与问题对应,则回复“对不起,我不知道答案”。同时,输入护栏确保问题中不包含不合适的内容。
下面是完整的代码示例:
import asyncio
import re
from agents import Agent, Runner, input_guardrail, GuardrailFunctionOutput, InputGuardrailTripwireTriggered
# 定义检测不当语言的护栏
@input_guardrail
async def inappropriate_language_guardrail(ctx, agent, input):
inappropriate_words = ['stupid'] # 在此处添加不当词语
pattern = re.compile('|'.join(inappropriate_words), re.IGNORECASE)
if pattern.search(input):
return GuardrailFunctionOutput(
output_info="检测到不当语言。",
tripwire_triggered=True
)
return GuardrailFunctionOutput(
output_info="未检测到不当语言。",
tripwire_triggered=False
)
# 定义具有定制响应前缀的专业化代理
math_agent = Agent(
name="数学专家",
instructions=(
"你是数学领域的主题专家(SME)。"
"在每个回答前请先加上:'这是你的数学专家。你的问题答案如下:' "
"然后,提供对数学问题的详细解答。"
)
)
physics_agent = Agent(
name="物理专家",
instructions=(
"你是物理领域的主题专家(SME)。"
"在每个回答前请先加上:'这是你的物理专家。你的问题答案如下:' "
"然后,提供对物理问题的详细解答。"
)
)
chemistry_agent = Agent(
name="化学专家",
instructions=(
"你是化学领域的主题专家(SME)。"
"在每个回答前请先加上:'这是你的化学专家。你的问题答案如下:' "
"然后,提供对化学问题的详细解答。"
)
)
geography_agent = Agent(
name="地理专家",
instructions=(
"你是地理领域的主题专家(SME)。"
"在每个回答前请先加上:'这是你的地理专家。你的问题答案如下:' "
"然后,提供对地理问题的详细解答。"
)
)
# 定义负责将问题分派给相应主题专家的初步分流代理
triage_agent = Agent(
name="初步分流代理",
instructions=(
"你负责将问题分派给相应的主题专家。"
"如果问题涉及数学,请转交给数学专家。"
"如果涉及物理,请转交给物理专家。"
"如果涉及化学,请转交给化学专家。"
"如果涉及地理,请转交给地理专家。"
"如果问题与这些科目均不相关,则回复'对不起,我不知道答案。'"
),
handoffs=[math_agent, physics_agent, chemistry_agent, geography_agent],
input_guardrails=[inappropriate_language_guardrail],
)
# 运行初步分流代理的函数
async def main():
question = "Explain the Riemann hypothesis to a 10 year old"
try:
result = await Runner.run(triage_agent, input=question)
print(result.final_output)
except InputGuardrailTripwireTriggered:
print("您的问题包含不合适的语言,无法处理。")
if __name__ == "__main__":
asyncio.run(main())
运行示例
- 设置您的开发环境(例如在 Mac 或 Ubuntu 上,使用 python3.12):
- 创建目录并建立虚拟环境
mkdir agent_demo cd agent_demo python3 -m venv .venv source .venv/bin/activate
- 安装必要的库:
python3 -m pip install openai-agents
- 创建目录并建立虚拟环境
- 在运行代码之前,请正确设置您的 OpenAI API Key:
export OPENAI_API_KEY="your_api_key_here"
- 运行上述示例:
python3 example.py
本示例的功能
- 护栏(inappropriate_language_guardrail)会对输入的问题扫描所有不允许出现的词语(例如 “stupid”),如果发现不当语言,则停止处理。
- 定义了四个主题专家代理(数学、物理、化学、地理),每个代理都有自定义指令,在回答前附加一个响应前缀。
- 初步分流代理读取输入问题,根据其内容,将问题委派给相应的主题专家;如果问题不相关,则回复“对不起,我不知道答案”。
- 最后,异步的 main 函数运行初步分流代理,并打印最终输出,展示系统的各项功能。
本文展示了 OpenAI 的 Agent SDK 如何帮助开发者轻松构建一个既具可扩展性又模块化的多代理系统,能够应用于现实场景,同时不牺牲易用性和灵活性。
阅读英文原文
AI好书推荐
AI日新月异,再不学来不及了。但是万丈高楼拔地起,离不开良好的基础。您是否有兴趣了解人工智能的原理和实践? 不要再观望! 我们关于 AI 原则和实践的书是任何想要深入了解 AI 世界的人的完美资源。 由该领域的领先专家撰写,这本综合指南涵盖了从机器学习的基础知识到构建智能系统的高级技术的所有内容。 无论您是初学者还是经验丰富的 AI 从业者,本书都能满足您的需求。 那为什么还要等呢?