使用说明
主控程序
此应用程序提供了OpenAI与任何使用JWT或开放的API之间的通信。客户端和服务器模型上下文协议(MCP)的混合服务。
先决条件
- Java 21
- 梅文
需要的设置
- 环境变量
quarkus.rest.client.openai_url=https://api.openai.com
openai.model=gpt-4.1
openai.api.key=sk-proj-...
openai.prompt.id=pmpt_6904952...
openai.prompt.version=3
# apenas para segurança mínima
mcp.username=tiagolofi
mcp.password=********
mcp.roles=admin,user
# chaves RSA
private.key=MIIEvAIB...
public.key=MIIBIjANB...
- 包含工具列表的文件 : 工具
Meta Prompt
Meta Prompt 是一个在https://platform.openai.com/chat您将负责处理服务发送的订单。
例如:
Você é um agente de IA que vai receber um prompt e um conjunto de dados (.json). Você deve utilizar o conjunto de dados para responder a solicitação do prompt. Caso não seja passado um conjunto de dados. Você deve responder apenas a solicitação do prompt.
Prompt: {{prompt}}
Dados: {{data}}
Tools
这是一组可以执行的工具。此对象是从一个文件序列化的 .json以便在可能的情况下添加新功能。
Tool
这是基于两个主要步骤的服务中将展示的功能:
- 向外部API执行HTTP请求,然后;
- 向请求 OpenAi 的客户端发送提示符,其中包含必要的数据。
Resquest
对象 Request 加载目标URL的标题,参数和路径的必要信息,并传递到终端 POST /mcp.
{
"headers": [
{
"name": "Authentication",
"value": "Bearer eyJjd..."
}
],
"params": [
{
// ?campo=valor
"name": "campo",
"value": "valor"
}
],
"paths": [
// base_url/teste
"teste"
],
"prompt": "string", // a solicitação para a OpenAI
"type": "PROMPT", // se for WEB_SEARCH, os demais parâmetros não devem ser passados.
"data": {} // Objeto genérico, pode ser qualquer coisa. Deve ser usado como coringa para executar `POST` na URL desejada
}
例子 - Tool 和 Curl
示例 1 - IBGE 名称 API
{
"id": 1,
"description": "calcula quantidade de registros de um nome em um período de tempo",
"uri": "https://servicodados.ibge.gov.br/api/v2/censos/nomes",
"method": "GET"
}
curl -X 'POST' \
'http://localhost:8080/mcp?toolId=1' \
-H 'accept: application/json' \
-H 'Authorization: Bearer eyJjd...' \
-H 'Content-Type: application/json' \
-d '{
"paths": [
"moises"
],
"prompt": "Quantas pessoas com o nome informado foram registradas entre 1980 e 2000?",
"type": "PROMPT"
}'
例2:哈利·波特之家
{
"id": 2,
"description": "faz um resumo de uma casa em Harry Potter",
"uri": "https://wizard-world-api.herokuapp.com/Houses",
"method": "GET"
}
curl -X 'POST' \
'http://localhost:7777/mcp?toolId=2' \
-H 'accept: application/json' \
-H 'Authorization: Bearer eyJjd...' \
-H 'Content-Type: application/json' \
-d '{
"paths": [
"805fd37a-65ae-4fe5-b336-d767b8b7c73a"
],
"prompt": "Use os dados para descrever a casa Corvinal",
"type": "PROMPT"
}'
例4:直接询问某个问题
{
"id": 3,
"description": "Análise psicológica do personagem Bayek de Siuá, de Assassins Creed Origins",
"uri": null,
"method": null
},
curl -X 'POST' \
'http://localhost:7777/mcp?toolId=3' \
-H 'accept: application/json' \
-H 'Authorization: Bearer eyJjdH...' \
-H 'Content-Type: application/json' \
-d '{
"prompt": "O que levou o Bayek a sair em sua jornada?",
"type": "PROMPT"
}'
例三:网络搜索
{
"id": 4,
"description": "Últimas notícias sobre o futebol nordestino",
"uri": null,
"method": null
}
curl -X 'POST' \
'http://localhost:7777/mcp?toolId=4' \
-H 'accept: application/json' \
-H 'Authorization: Bearer eyJjdH...' \
-H 'Content-Type: application/json' \
-d '{
"prompt": "Me dê as últimas notícias sobre o Moto Clube do Maranhão",
"type": "WEB_SEARCH"
}'
对 Tool 中使用的服务进行身份验证
利用端点 /external/login 对感兴趣的服务进行身份验证,例如:
curl -X 'POST' \
'http://localhost:8080/external/login' \
-H 'accept: */*' \
-H 'Authorization: Bearer eyJjdH...' \
-H 'Content-Type: application/json' \
-d '{
"uri": "http://localhost:8080/login",
"headers": null,
"data": {"username": "tiagolofi", "password": "*******"}
}'
该请求的响应是对该服务的 URI 的响应。之后,您必须立即使用代币或将其存储在安全的位置,以便可以重复使用。
