POML 与 OpenAI 集成

POML 与 OpenAI 集成

本文基于官方页面(microsoft.github.io/poml/stable... POML 与 OpenAI Python SDK 的集成方式,包括基础用法、消息参数获取、运行参数、结构化输出以及工具调用。

导语/背景介绍

  • 官方页面说明:POML 提供与 OpenAI Python SDK 的无缝集成(seamless integration),可将 POML 文件直接用于 OpenAI 的 Chat Completions API。

功能介绍

  • 生成 OpenAI 兼容参数:通过 format="openai_chat" 从 POML Prompt 文件生成可直接用于 chat.completions.create 的参数。
  • 消息与模型参数:返回的参数字典包含 messages、以及在 POML 中可选定义的 modeltemperature 等。
  • 运行参数:使用 <runtime> 标签声明运行时参数,自动转换为 OpenAI 兼容的 snake_case。
  • 结构化输出:使用 <output-schema> 支持 OpenAI 的 Structured Output(结构化输出)。
  • 工具调用:通过 <tool-definition> 定义函数调用,并用 <tool-request>/<tool-response> 处理往返交互。

使用方法

1) 基础用法(Basic Usage)

python 复制代码
import poml
from openai import OpenAI

client = OpenAI()
# 加载 POML 并获取 OpenAI 兼容参数
params = poml.poml("prompt.poml", format="openai_chat")
# 直接与 OpenAI SDK 一起使用
response = client.chat.completions.create(**params)

2) 获取 Chat Completion 消息参数(Getting Chat Completion Messages)

python 复制代码
params = poml.poml("prompt.poml", format="openai_chat")
# params 包含:
# {
#   "messages": [...],      # 聊天消息列表
#   "model": "gpt-4",       # 若在 POML 中指定
#   "temperature": 0.7,     # 若在 POML 中指定
#   ...
# }

3) 运行参数(Runtime Parameters)

xml 复制代码
<poml>
  <system-msg>You are a helpful assistant.</system-msg>
  <human-msg>Hello!</human-msg>
  <runtime
    model="gpt-4.1"
    temperature="0.7"
    max-tokens="150"
    top-p="1.0"
    frequency-penalty="0.5"
    presencePenalty="0.0" /> <!-- can be camelCase -->
</poml>
  • 运行参数会自动转换为 OpenAI 兼容的 snake_case。

4) 结构化输出(Response Format / Structured Output)

xml 复制代码
<poml>
  <system-msg>Extract the event information.</system-msg>
  <human-msg>Alice and Bob are going to a science fair on Friday.</human-msg>
  <output-schema>
    z.object({
      name: z.string(),
      date: z.string(),
      participants: z.array(z.string()),
    });
  </output-schema>
</poml>
python 复制代码
params = poml.poml("response_format.poml", format="openai_chat")
# params 将包含 "response_format"(用于结构化输出)
response = client.chat.completions.create(model="gpt-4.1", **params)
result = json.loads(response.choices[0].message.content)
print(result)  # {'name': 'Science Fair', 'date': 'Friday', 'participants': ['Alice', 'Bob']}

5) 工具调用(Tool Calls)

xml 复制代码
<poml>
  <p>What is my horoscope? I am an Aquarius.</p>
  <tool-definition name="get_horoscope" description="Get today's horoscope for an astrological sign.">
    {
      "type": "object",
      "properties": {
        "sign": {
          "type": "string",
          "description": "An astrological sign like Taurus or Aquarius"
        }
      },
      "required": ["sign"]
    }
  </tool-definition>

  <!-- Handle tool interactions with context -->
  <tool-request if="tool_request"
                id="{{ tool_request.id }}"
                name="{{ tool_request.name }}"
                parameters="{{ tool_request.parameters }}" />
  <tool-response if="tool_response"
                 id="{{ tool_response.id }}"
                 name="{{ tool_response.name }}">
    <object data="{{ tool_response.result }}"/>
  </tool-response>
</poml>
python 复制代码
# Initial request
context = {
    "tool_request": None,
    "tool_response": None,
}
params = poml.poml("tool_call.poml", context=context, format="openai_chat")
response = client.chat.completions.create(model="gpt-4.1", **params)

# Process tool call
tool_call = response.choices[0].message.tool_calls[0]
context["tool_request"] = {
    "name": tool_call.function.name,
    "parameters": json.loads(tool_call.function.arguments),
    "id": tool_call.id,
}

# Execute the function
result = {"horoscope": get_horoscope(**context["tool_request"]["parameters"])}

# Send tool response back
context["tool_response"] = {
    "name": tool_call.function.name,
    "result": result,
    "id": tool_call.id,
}
params = poml.poml("tool_call.poml", context=context, format="openai_chat")
response = client.chat.completions.create(model="gpt-4.1", **params)
print(response.choices[0].message.content)

使用场景

  • 官方页面未提供具体使用场景示例。

优势亮点(基于页面表述)

  • 与 OpenAI Python SDK 的无缝集成,可直接将 POML 文件用于 Chat Completions API。
  • 从 POML 生成 OpenAI 兼容参数(format="openai_chat"),可直接传入 chat.completions.create
  • <runtime> 声明的运行时参数自动转换为 snake_case,以兼容 OpenAI。
  • 通过 <output-schema> 支持 OpenAI 的结构化输出(Structured Output)。
  • 通过 <tool-definition> 支持 OpenAI 的函数调用(Function Calling),并可在上下文中处理 <tool-request>/<tool-response>

总结/展望

  • 本页展示了 POML 与 OpenAI 集成的关键能力:基础用法、参数获取、运行参数、结构化输出与工具调用。
  • 如需进一步细节与代码,请参考官方页面:
相关推荐
Robot侠7 小时前
极简LLM入门指南4
大数据·python·llm·prompt·提示工程
智泊AI15 小时前
为什么通用Agent很难实现企业化落地?
llm
大模型教程19 小时前
14天速成LLM高手!大佬开源学习笔记,GitHub狂揽700星
程序员·llm·agent
AI大模型19 小时前
大模型相关术语和框架总结|LLM、MCP、Prompt、RAG、vLLM、Token、数据蒸馏
程序员·llm·agent
AI大模型20 小时前
OpenAI官方出品 : 从0到1构建AI Agent实战指南, 解锁智能自动化新范式
程序员·llm·agent
Baihai_IDP20 小时前
你说的 CUDA 到底是哪个 CUDA?一文理清那些让人混淆的术语和版本号
人工智能·面试·llm
Mintopia21 小时前
🎩 AIGC技术提升Web服务效率的量化分析:从成本到体验
人工智能·llm·ai编程
扫地的小何尚1 天前
NVIDIA CUDA-Q QEC权威指南:实时解码、GPU解码器与AI推理增强
人工智能·深度学习·算法·llm·gpu·量子计算·nvidia
坐吃山猪1 天前
ClaudeCode安装记录
llm·claude
阿正的梦工坊1 天前
Search-R1:用强化学习训练LLM推理并利用搜索引擎
人工智能·机器学习·搜索引擎·llm