- Visão geral
- Introdução aos agentes da UiPath
- Introdução
- Configure seu ambiente
- Crie o agente
- Testar o agente
- Introdução aos agentes da UiPath usando o LangGraph
- Construção de um agente de pouco código no Studio Web
- Adicionando ferramentas ao seu agente UiPath
Defina o contrato do agente, escreva o prompt do sistema e configure os esquemas de entrada e saída no agent.json.
Com a CLI instalada e sua conta da UiPath conectada, você está pronto para estruturar o agente.
Etapa 4 - Estruturar a solução e o agente
Agentes de pouco código residem dentro de uma solução, a unidade implantável que a CLI carrega para o Studio Web. Você cria a solução primeiro e, em seguida, estrutura o agente dentro dela.
-
Crie um diretório de trabalho e estruture a solução:
mkdir Monster-Selector-Lab cd Monster-Selector-Lab uip solution init MonsterSelectormkdir Monster-Selector-Lab cd Monster-Selector-Lab uip solution init MonsterSelectorIsso cria um diretório
MonsterSelector/contendoMonsterSelector.uipx(o manifesto da solução), além de arquivos de resumoAGENTS.mdeCLAUDE.mdque orientam agentes de codificação para a estrutura da solução. -
Estruture o projeto do agente dentro do diretório da solução:
uip agent init MonsterSelector/MonsterSelectoruip agent init MonsterSelector/MonsterSelectoruip agent init <path>o projeto do agente no caminho fornecido e o registra automaticamente na solução. Ele geraagent.json(a solicitação do sistema, esquemas e configurações do modelo),entry-points.json, um frameworkevals/vazio e um ID do projeto gerado automaticamente. -
Mova para o diretório da solução para as etapas restantes:
cd MonsterSelectorcd MonsterSelector
Dois diretórios chamados SeletorDeMonstro. Seu diretório de laboratório agora contém MonsterSelector/ (a solução) que, por sua vez, contém outro MonsterSelector/ (o projeto do agente). Isso é normal: a solução e o projeto do agente podem compartilhar um nome. Ao trabalhar nas próximas etapas, preste atenção em qual diretório você está. A etapa 4 termina com você dentro do diretório da solução (Monster-Selector-Lab/MonsterSelector/).
Etapa 5 - Configurar o agente
A configuração do agente é definida pelos arquivos agent.json e entry-points.json . Você os edita diretamente para implementar o design do início deste laboratório, substituindo o conteúdo do espaço reservado que o suporte gerou.
Configurar o agent.json
Para substituir o framework, abra MonsterSelector/agent.json (em relação ao diretório da solução em que você está). Substitua todo o seu conteúdo pelo seguinte. A única exceção é o valor projectId na última linha; mantenha o UUID que seu framework gerou em vez de usar o espaço reservado mostrado aqui.
O JSON abaixo implementa o design do que você está construindo:
- Esquema de entrada:
questDescription(string) emonsters(array), ambos obrigatórios. - Esquema de saída:
monsterIndexstring). - Prompt do sistema: o texto da instrução em
messages[0](a funçãosystem) que informa ao modelo como raciocinar. - Turno do usuário: a mensagem em
messages[1](a funçãouser) que carregaquestDescriptionemonstersno prompt no tempo de execução: essa é a vez de conversa do LLM, não um usuário final humano.
{
"version": "1.1.0",
"settings": {
"model": "gpt-4.1-2025-04-14",
"maxTokens": 16384,
"temperature": 0,
"engine": "basic-v2",
"maxIterations": 25,
"mode": "standard"
},
"inputSchema": {
"type": "object",
"properties": {
"questDescription": {
"type": "string",
"description": "Description of the quest"
},
"monsters": {
"type": "array",
"description": "Candidate monsters from the D&D 5e API"
}
},
"required": ["questDescription", "monsters"]
},
"outputSchema": {
"type": "object",
"properties": {
"monsterIndex": {
"type": "string",
"description": "The index slug of the chosen monster"
}
}
},
"metadata": {
"storageVersion": "50.0.0",
"isConversational": false,
"showProjectCreationExperience": false,
"targetRuntime": "pythonAgent"
},
"type": "lowCode",
"messages": [
{
"role": "system",
"content": "You are an RPG game master helping to select the most thematically appropriate monster for a quest. Given a quest description and a list of candidate monsters (each with a name and an index slug), pick the ONE monster whose lore, environment, or threat level best fits the quest. Return ONLY the index slug of your chosen monster. Do not return the full object or any commentary - just the string slug. If multiple candidates fit, favor the most iconic or thematically resonant choice.",
"contentTokens": [
{
"type": "simpleText",
"rawString": "You are an RPG game master helping to select the most thematically appropriate monster for a quest. Given a quest description and a list of candidate monsters (each with a name and an index slug), pick the ONE monster whose lore, environment, or threat level best fits the quest. Return ONLY the index slug of your chosen monster. Do not return the full object or any commentary - just the string slug. If multiple candidates fit, favor the most iconic or thematically resonant choice."
}
]
},
{
"role": "user",
"content": "{{input.questDescription}} {{input.monsters}}",
"contentTokens": [
{ "type": "variable", "rawString": "input.questDescription" },
{ "type": "simpleText", "rawString": " " },
{ "type": "variable", "rawString": "input.monsters" }
]
}
],
"projectId": "your-scaffold-generated-uuid-here"
}
{
"version": "1.1.0",
"settings": {
"model": "gpt-4.1-2025-04-14",
"maxTokens": 16384,
"temperature": 0,
"engine": "basic-v2",
"maxIterations": 25,
"mode": "standard"
},
"inputSchema": {
"type": "object",
"properties": {
"questDescription": {
"type": "string",
"description": "Description of the quest"
},
"monsters": {
"type": "array",
"description": "Candidate monsters from the D&D 5e API"
}
},
"required": ["questDescription", "monsters"]
},
"outputSchema": {
"type": "object",
"properties": {
"monsterIndex": {
"type": "string",
"description": "The index slug of the chosen monster"
}
}
},
"metadata": {
"storageVersion": "50.0.0",
"isConversational": false,
"showProjectCreationExperience": false,
"targetRuntime": "pythonAgent"
},
"type": "lowCode",
"messages": [
{
"role": "system",
"content": "You are an RPG game master helping to select the most thematically appropriate monster for a quest. Given a quest description and a list of candidate monsters (each with a name and an index slug), pick the ONE monster whose lore, environment, or threat level best fits the quest. Return ONLY the index slug of your chosen monster. Do not return the full object or any commentary - just the string slug. If multiple candidates fit, favor the most iconic or thematically resonant choice.",
"contentTokens": [
{
"type": "simpleText",
"rawString": "You are an RPG game master helping to select the most thematically appropriate monster for a quest. Given a quest description and a list of candidate monsters (each with a name and an index slug), pick the ONE monster whose lore, environment, or threat level best fits the quest. Return ONLY the index slug of your chosen monster. Do not return the full object or any commentary - just the string slug. If multiple candidates fit, favor the most iconic or thematically resonant choice."
}
]
},
{
"role": "user",
"content": "{{input.questDescription}} {{input.monsters}}",
"contentTokens": [
{ "type": "variable", "rawString": "input.questDescription" },
{ "type": "simpleText", "rawString": " " },
{ "type": "variable", "rawString": "input.monsters" }
]
}
],
"projectId": "your-scaffold-generated-uuid-here"
}
temperature: 0 reduz a variação de saída, mas não torna o modelo totalmente determinístico. Mesmo em 0, o modelo pode ocasionalmente retornar diferentes saídas válidas entre as execuções. Para esse agente, qualquer escolha de alvo deDas está correta; a reprodutibilidade exata da string não é o objetivo.
Configurar entry-points.json
Agora MonsterSelector/entry-points.json e substitua todo o seu conteúdo pelo seguinte. Mais uma vez, mantenha o valor uniqueId que seu robô gerou em vez de usar o espaço reservado.
O JSON abaixo define um agent ponto de entrada, que você chama nas etapas abaixo. Uma solução pode expor vários pontos de entrada (por exemplo, uma variante simples e uma variante de entrada estendida do mesmo agente), mas é tudo o que precisamos aqui.
{
"$schema": "https://cloud.uipath.com/draft/2024-12/entry-point",
"$id": "entry-points.json",
"entryPoints": [
{
"filePath": "/content/agent.json",
"uniqueId": "your-scaffold-generated-uuid-here",
"type": "agent",
"input": {
"type": "object",
"properties": {
"questDescription": {
"type": "string",
"description": "Description of the quest"
},
"monsters": {
"type": "array",
"description": "Candidate monsters from the D&D 5e API"
}
},
"required": ["questDescription", "monsters"]
},
"output": {
"type": "object",
"properties": {
"monsterIndex": {
"type": "string",
"description": "The index slug of the chosen monster"
}
}
}
}
]
}
{
"$schema": "https://cloud.uipath.com/draft/2024-12/entry-point",
"$id": "entry-points.json",
"entryPoints": [
{
"filePath": "/content/agent.json",
"uniqueId": "your-scaffold-generated-uuid-here",
"type": "agent",
"input": {
"type": "object",
"properties": {
"questDescription": {
"type": "string",
"description": "Description of the quest"
},
"monsters": {
"type": "array",
"description": "Candidate monsters from the D&D 5e API"
}
},
"required": ["questDescription", "monsters"]
},
"output": {
"type": "object",
"properties": {
"monsterIndex": {
"type": "string",
"description": "The index slug of the chosen monster"
}
}
}
}
]
}
Compreensão do agent.json e do entry-points.json
agent.jsona definição do agente: as configurações do modelo, o prompt do sistema e os esquemas de entrada e saída.entry-points.jsonexpõe esses esquemas para o runtime da solução.- Importante: os blocos
inputSchemaeoutputSchemadevem ser idênticos em ambos os arquivos. Uma incompatibilidade faz com que a validação falhe.
Adaptação ao seu caso de uso. Para criar um agente diferente, substitua as strings content em messages[0] por sua solicitação do sistema e atualize os blocos properties em inputSchema e outputSchema para corresponder aos campos aos quais sua solicitação se refere. Espelhe essas mesmas alterações em entry-points.json. O settings, metadata, type e a estrutura da mensagem permanecem as mesmas.
Etapa 6 - Validar o agente
No diretório da solução, valide o agente:
uip agent validate MonsterSelector
uip agent validate MonsterSelector
Você deve ver "Status": "Valid" com "StorageVersion": "50.0.0" e um resumo "Validated" mostrando agent: true. A validação também gera os arquivos .agent-builder/ usados pelo Studio Web; você não precisa tocar neles.
Se a validação falhar, confirme se inputSchema e outputSchema são idênticos em agent.json e entry-points.json, e se cada referência de variável em messages[1].content usa o prefixo input. (por exemplo, {{input.questDescription}}).
Com o agente validado localmente, você está pronto para carregá-lo no Studio Web e executar um teste ao vivo na próxima seção.