A POML (Prompt Orchestration Markup Language) é uma nova linguagem de marcação desenvolvida pela Microsoft, projetada especificamente para enfrentar os desafios encontrados na engenharia de palavras de prompt avançadas para modelos de linguagem em grande escala (LLMs). Na prática, os prompts complexos geralmente carecem de uma estrutura organizacional eficaz, são difíceis de integrar vários formatos de dados e são suscetíveis à sensibilidade do modelo a formatos específicos. A POML separa o conteúdo dos prompts de sua apresentação, fornecendo um conjunto de sintaxe estruturada semelhante ao HTML e um sistema de estilo semelhante ao CSS. Esse design não só melhora a legibilidade, a capacidade de manutenção e a reutilização dos prompts, mas também permite que os desenvolvedores incorporem perfeitamente várias fontes de dados externas, como texto, tabelas, imagens etc., por meio de tags especializadas. O POML também oferece ferramentas de desenvolvimento, incluindo plug-ins do VS Code e SDKs multilíngues, para ajudar os desenvolvedores a criar e testar aplicativos LLM complexos com mais eficiência.
Lista de funções
- sintaxe de marcação estruturada (SMG)Use tags semelhantes a HTML (como
<role>
,<task>
,<example>
) para organizar as palavras-chave, permitindo um design modular que aprimora a legibilidade e a reutilização. - Processamento diversificado de dados:: Adoção
<document>
,<table>
,<img>
e outros componentes especializados que podem incorporar ou referenciar diretamente dados externos e personalizar o formato. - Separação de conteúdo e estiloSistema de estilo semelhante ao CSS que permite o uso de
<stylesheet>
ou atributos inline para ajustar o formato de saída (por exemplo, nível de redundância, formato de sintaxe) sem precisar modificar a lógica central. - Mecanismo de modelos incorporadoSuporte para o uso de
{{ }}
Variáveis,for
Ciclo,if
Julgamentos condicionais e<let>
Definição de variável para geração dinâmica de palavras-chave orientadas por dados. - Ferramentas de desenvolvimento avançadasVisual Studio Code: fornece um plug-in do Visual Studio Code que oferece suporte a realce de sintaxe, preenchimento automático, visualização em tempo real e diagnóstico de erros.
- SDK em vários idiomasFornecimento de kits de desenvolvimento de software para Node.js (JavaScript/TypeScript) e Python para facilitar a integração em fluxos de trabalho e estruturas LLM existentes.
Usando a Ajuda
O POML simplifica o processo de criação, teste e manutenção de dicas complexas, fornecendo uma linguagem de marcação, ferramentas de desenvolvimento e SDK. A seguir, você encontrará detalhes sobre como instalar e usar o POML.
1. instalação
O POML oferece uma variedade de métodos de instalação, e os desenvolvedores podem escolher o mais adequado de acordo com seu ambiente de trabalho.
Plug-in do Visual Studio Code
Essa é a maneira mais recomendada de começar, pois os plug-ins oferecem uma grande variedade de recursos para aprimorar o desenvolvimento.
- Abra o Visual Studio Code.
- Clique no ícone "Extensions" (Extensões) na barra de atividades à esquerda.
- Digite "POML" na caixa de pesquisa.
- Localize o plug-in lançado oficialmente e clique em "Instalar".
Depois de instalar o plug-in, você terá destaque de sintaxe, preenchimento automático de código, avisos de documento ao passar o mouse, visualização ao vivo e verificação de erros.
Node.js (NPM)
Se o seu projeto for baseado em um ambiente Node.js, você poderá instalar as bibliotecas JavaScript/TypeScript do POML via npm.
npm install pomljs
Python (PyPI)
Para os desenvolvedores de Python, a biblioteca POML pode ser instalada via pip.
pip install poml
Se você quiser fazer uma instalação de desenvolvimento local a partir de um repositório clonado do GitHub, poderá usar o seguinte comando:
pip install -e .
2. configuração do modelo LLM
Para testar palavras de prompt no plug-in do VS Code, você precisa configurar a API do Big Language Model usada.
- No VS Code, por meio da barra de menus
文件 > 首选项 > 设置
Abra a tela Configurações. - Digite "POML" na caixa de pesquisa para encontrar o item de configuração relevante.
- Defina as seguintes informações de acordo com seu provedor de modelos (por exemplo, OpenAI, Azure, Google etc.):
- Provedor modeloSelecione o fornecedor do modelo.
- Chave da APIPreencha sua chave de API.
- URL do ponto de extremidadePreencha o endereço do ponto de extremidade da API do modelo.
Você também pode adicionar essas informações de configuração diretamente ao seusettings.json
Documentação.
3. preparação do primeiro documento POML
A sintaxe do POML é muito intuitiva e semelhante à do HTML. Aqui está um exemplo básico, salve-o comoexample.poml
Documentação.
<poml>
<role>你是一位耐心的老师,正在向一个10岁的孩子解释概念。</role>
<task>参考提供的图片,解释光合作用的概念。</task>
<img src="photosynthesis_diagram.png" alt="光合作用示意图" />
<output-format>
让解释保持简单、有趣,并且不超过100个字。
开头请说“你好,未来的科学家!”。
</output-format>
</poml>
Explicação do código.
<poml>
Tag raiz: A tag raiz de todo o conteúdo.<role>
Define a função que se espera que o LLM desempenhe.<task>
Descrição: Descreve as tarefas específicas que precisam ser concluídas pelo LLM.<img>
Incorporar uma imagem como referência contextual.src
aponta para o caminho do arquivo de imagem local.<output-format>
Formato de saída: especifica explicitamente os requisitos de formatação do conteúdo de saída.
4. sintaxe principal e operações funcionais
Incorporação de dados
Um dos recursos mais avançados do POML é a capacidade de integrar facilmente diferentes tipos de dados.
- Arquivo (de computador): Uso
<document>
As tags são incorporadas em um arquivo de texto externo.
<document src="./report.txt" />
- tabular: Uso
<table>
As guias podem definir diretamente os dados da tabela ou fazer referência a arquivos CSV.
<table src="./data.csv" />
mecanismo de modelo
O POML tem uma função de modelo integrada para gerar dinamicamente o conteúdo da palavra-chave.
- variante: Uso
<let>
Defina as variáveis e passe o{{ }}
Use no texto.
<let name="concept">光合作用</let>
<task>请解释什么是{{concept}}。</task>
- ciclo: Uso
for
percorre os dados.
<let name="topics" type="json">["光合作用", "细胞呼吸", "基因遗传"]</let>
<task>
请依次解释以下概念:
<for each="item" in="topics">- {{item}}
</for>
</task>
- julgamento condicional: Uso
if
para gerar conteúdo diferente com base nas condições.
<let name="is_simple" type="boolean">true</let>
<if condition="is_simple">
<task>请用简单的语言解释这个概念。</task>
</if>
estilização
aprovar (um projeto de lei ou inspeção etc.)<stylesheet>
que define o "estilo" da palavra-chave da mesma forma que o CSS, separando o conteúdo da formatação. Isso ajuda a lidar com as diferentes preferências do LLM para formatos específicos.
<stylesheet>
task {
format: "markdown";
verbosity: "high";
}
</stylesheet>
<task>解释黑洞的形成过程。</task>
Neste exemplo, o<task>
O conteúdo da tag será apresentado ao LLM em um formato Markdown altamente detalhado, conforme definido pela folha de estilo.
cenário do aplicativo
- Criação de inteligências de diálogo complexas
Ao desenvolver bots de atendimento ao cliente ou assistentes pessoais, você precisa lidar com várias rodadas de diálogo, bases de conhecimento externas e formatos de saída variáveis. A lógica do diálogo, as informações do usuário, os dados do documento e os requisitos de saída podem ser gerenciados de forma modular usando o POML, tornando os prompts claramente estruturados e fáceis de manter e ampliar. - Geração automatizada de conteúdo
Em cenários como geração de relatórios, elaboração de códigos ou criação de cópias de marketing, o conteúdo altamente personalizado pode ser gerado em lote, combinando dinamicamente dados (por exemplo, arquivos CSV, dados JSON) com estruturas de texto fixas usando o mecanismo de modelos do POML. - Ferramentas de educação e treinamento
É possível criar um auxílio dinâmico ao aprendizado. Por exemplo, o estilo de linguagem e o nível de detalhes usados para explicar o mesmo conceito científico (por exemplo, fotossíntese) podem ser adaptados dinamicamente de acordo com a idade dos alunos (como uma variável) e ilustrados com uma variedade de mídias, como imagens e tabelas. - Desenvolvimento de aplicativos multimodais
Para aplicativos LLM que precisam lidar com várias entradas, como texto e imagens, o POML oferece uma interface unificada. Por exemplo, ao desenvolver uma ferramenta de análise de imagem, é possível usar a interface<task>
Descreva a tarefa de análise com<img>
é passada a imagem a ser analisada com a tag<output-format>
Especifica a saída dos resultados da análise no formato JSON.
QA
- O que é o POML? Qual é o problema que ele resolve?
O POML é uma linguagem de marcação projetada para modelos de linguagem em larga escala (LLMs). Ela resolve principalmente os problemas de estrutura confusa, integração de dados difícil, requisitos de formatação variável e falta de suporte de ferramentas profissionais encontrados ao escrever prompts complexos, tornando o desenvolvimento e a manutenção de prompts mais sistemáticos e eficientes. - Qual é a diferença entre o POML e a escrita de prompts de texto direto?
Escrever prompts de texto diretamente é como escrever código em um bloco de notas, o que é simples, mas se torna incontrolável quando a lógica se torna complexa; o POML fornece uma estrutura semelhante à da Web (HTML), estilo (CSS) e recursos dinâmicos (mecanismo de modelo) que separam as diferentes partes do prompt (por exemplo, funções, tarefas, dados e requisitos de formatação), facilitando a leitura, a modificação e a reutilização. - Preciso aprender um idioma totalmente novo para usar o POML?
Não. A sintaxe do POML se baseia em HTML e é muito intuitiva e fácil de entender. Se você tiver alguma experiência com linguagens de marcação, como HTML ou XML, verá que é muito rápido começar a usar o POML. O plug-in oficial do VS Code também reduz bastante a curva de aprendizado. - O uso do POML afeta o desempenho interativo com o LLM?
Não. O POML em si não interage diretamente com o LLM; o arquivo POML é "renderizado" em um texto simples final ou em uma solicitação multimodal ao usar o SDK ou a ferramenta antes de ser enviado ao LLM, portanto, é uma ferramenta para aumentar a eficiência durante a fase de desenvolvimento sem adicionar sobrecarga extra à solicitação final da API.