尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

OpenAI Agents SDK 如何动态生成 instructions 与使用 Prompt 模板

OpenAI Agents SDK 如何动态生成 instructions 与使用 Prompt 模板 OpenAI Agents SDK 如何动态生成 instructions 与使用 Prompt 模板【免费下载链接】openai-agents-pythonA lightweight, powerful framework for multi-agent workflows项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-python在 openai-agents-python 中Agent的系统提示词默认是一条写死的instructions字符串。实际业务里常见两种需求同一条指令要根据运行时上下文用户身份、风格配置等现场拼出来或者指令已经在 OpenAI 平台上以 Prompt 模板的形式维护代码里只引用模板 ID 并填变量。本文介绍 SDK 对这两种需求的支持方式把instructions设为函数动态 instructions以及给Agent传prompt参数静态引用或运行时生成 Prompt 模板。前提是已安装openai-agents并配置OPENAI_API_KEYprompt模板方式额外要求通过 Responses API 访问 OpenAI 模型。准备环境按 快速开始文档 的要求一次性完成环境搭建mkdir my_project cd my_project python -m venv .venv激活虚拟环境macOS / Linuxsource .venv/bin/activate安装 SDK 并设置 API keysk-...替换为你自己的 keyexport只对当前终端会话生效pip install openai-agents export OPENAI_API_KEYsk-...Windows 下设置 key 的等价命令是set OPENAI_API_KEYsk-...Command Prompt或$env:OPENAI_API_KEY sk-...PowerShell。用函数动态生成 instructionsinstructions除了接受字符串也可以接受一个函数。函数会收到RunContextWrapper其中包着你传给Runner.run()的上下文对象和当前Agent实例必须返回最终的提示词字符串。同步函数和async函数都可以。最小可运行示例。上下文类型用dataclass定义Agent通过泛型参数与之绑定这样函数内部可以类型安全地访问上下文字段from dataclasses import dataclass from agents import Agent, RunContextWrapper dataclass class UserContext: name: str uid: str is_pro_user: bool def dynamic_instructions( context: RunContextWrapper[UserContext], agent: Agent[UserContext] ) - str: return fThe users name is {context.context.name}. Help them with their questions. agent AgentUserContext运行Runner.run(agent, ..., contextUserContext(...))时SDK 会先调用这个函数把instructions解析成具体字符串再进入模型调用。仓库中提供了一个完整的可执行示例 examples/basic/dynamic_system_prompt.py它定义了一个带style字段的上下文haiku/pirate/robot三选一每次运行时随机取一个风格custom_instructions函数根据run_context.context.style返回不同的系统提示词然后用Runner.run(agent, user_message, contextcontext)跑完一轮对话。直接执行python examples/basic/dynamic_system_prompt.py验证方式是看终端输出先打印Using style: 风格和固定的用户消息User: Tell me a joke.最后打印Assistant: 模型回复。不同风格应产出风格一致的回答例如文档示例输出中haiku风格得到一首俳句式笑话robot风格得到带Beep boop的回复Using style: robot User: Tell me a joke. Assistant: Beep boop! Why was the robot so bad at soccer? Beep boop... because it kept kicking up a debug! Beep boop!以上为文档示例实际每次运行的回复内容会因模型采样而异判断标准是回复风格与所选style一致。引用 OpenAI 平台上的 Prompt 模板如果指令已经在 OpenAI 平台上维护可以让 Agent 通过prompt参数引用它。文档明确说明这种方式在通过 Responses API 访问 OpenAI 模型时生效。先在平台上创建 Prompt 模板按 agents 文档 给出的步骤打开 OpenAI 平台的playground/prompts页面创建一个新的 prompt 变量poem_style创建内容为Write a poem in {{poem_style}}的 system prompt。创建后会得到一个以pmpt_开头的 prompt ID后续步骤都需要用到它。静态引用直接传字典prompt参数接受一个字典包含模板id以及可选的version和要代入的variablesfrom agents import Agent agent Agent( namePrompted assistant, prompt{ id: pmpt_123, version: 1, variables: {poem_style: haiku}, }, )其中pmpt_123是文档中的占位值必须替换成你在自己项目里创建的 prompt IDvariables里的键要与平台上定义的变量名对应。动态生成传一个函数prompt也可以是一个函数运行时由 SDK 调用接收一个GenerateDynamicPromptData对象包含contextRunContextWrapper和agent两个字段。函数返回结构同上的字典同步或async均可from dataclasses import dataclass from agents import Agent, GenerateDynamicPromptData, Runner dataclass class PromptContext: prompt_id: str poem_style: str async def build_prompt(data: GenerateDynamicPromptData): ctx: PromptContext data.context.context return { id: ctx.prompt_id, version: 1, variables: {poem_style: ctx.poem_style}, } agent Agent(namePrompted assistant, promptbuild_prompt) result await Runner.run( agent, Say hello, contextPromptContext(prompt_idpmpt_123, poem_stylelimerick), )注意build_prompt的返回值必须是符合Prompt结构的字典否则 SDK 会抛出UserErrorversion字段是可选的不传就不发送。运行仓库示例可选分支仓库提供了 examples/basic/prompt_template.py支持静态默认和--dynamic两种模式并用--prompt-id指定模板 ID。该示例文档明确提示内置的默认 prompt ID 在你的项目里不可用必须先按上面步骤创建自己的模板再传入。示例还包含一行[debug] DynamicContext initialized with poem_style: ...的调试输出可用于确认动态路径被走到了。运行方式python examples/basic/prompt_template.py --prompt-id 你的 prompt ID --dynamic省略--dynamic时走静态引用路径variables固定为poem_style: limerick。验证与查看痕迹两种方式的验证点一致运行后打印result.final_output。动态 instructions 看回复是否遵循函数返回的指令Prompt 模板看回复是否为按poem_style变量风格生成的内容。如需复核一次运行实际发送的内容与调用链可以在 OpenAI Dashboard 的 Trace viewer 中查看该次 agent run 的 traces快速开始文档 中的 View your traces 一节。限制与边界prompt模板方式仅在通过 Responses API 访问 OpenAI 模型时生效不适用于其他 provider 的模型。prompt ID 与创建它的 OpenAI 项目绑定文档和示例中的pmpt_123、pmpt_6965...都不能直接用于你自己的项目。动态instructions函数每次 run 都会被调用返回字符串即可动态prompt函数返回的必须是字典两者不要混用结构。上下文对象是任意 Python 对象经Runner.run(..., context...)传入后会在整个 run 内透传给 agent、tools 与 handoffs字段定义方式参见 agents 文档的 Context 一节。两条路径的取舍指令逻辑在代码里、依赖运行时状态时用动态instructions函数指令在 OpenAI 平台上维护、需要按变量渲染时用prompt静态字典或动态函数。两种机制都要求OPENAI_API_KEY已配置且openai-agents已安装其余部分与 快速开始 中的基础流程一致。【免费下载链接】openai-agents-pythonA lightweight, powerful framework for multi-agent workflows项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-python创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表