Herramientas de OpenAI
El adaptador de OpenAI permite que los modelos GPT interactúen con Asset Core a través de la llamada a funciones, utilizando la misma superficie de herramientas que otros adaptadores.
Requisitos Previos
- Daemons de Asset Core en ejecución
- Acceso a la API de OpenAI
- Python o Rust para integración
Paso 1 - Obtener definiciones de herramientas
El adaptador proporciona definiciones de herramientas compatibles con OpenAI:
use assetcore_adapters::openai::tools::OpenAiToolDefinition;
let tools = OpenAiToolDefinition::all();
En Python, formatearías estos como especificaciones de funciones para la API de OpenAI.
Paso 2 - Definir las herramientas para OpenAI
Format tools for the OpenAI Chat Completions API:
tools = [
{
"type": "function",
"function": {
"name": "assetcore_commit",
"description": "Submit a transaction to Asset Core",
"parameters": {
"type": "object",
"properties": {
"operations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"op": {"type": "string"},
"args": {"type": "object"}
},
"required": ["op", "args"]
},
"description": "List of operations to execute"
},
"idempotency_key": {
"type": "string",
"description": "Optional deduplication key"
}
},
"required": ["operations"]
}
}
},
{
"type": "function",
"function": {
"name": "assetcore_write_health",
"description": "Check Asset Core write daemon health",
"parameters": {"type": "object", "properties": {}}
}
}
]
Paso 3 - Ejecutar llamadas a herramientas
Cuando GPT devuelve una llamada a la herramienta, ejecútala contra Asset Core:
import httpx
import json
async def execute_tool(tool_name: str, arguments: dict) -> str:
if tool_name == "assetcore_commit":
async with httpx.AsyncClient() as client:
response = await client.post(
"http://localhost:8080/v1/commit",
json=arguments
)
return response.text
elif tool_name == "assetcore_write_health":
async with httpx.AsyncClient() as client:
response = await client.get(
"http://localhost:8080/v1/health"
)
return response.text
else:
return json.dumps({"error": f"Unknown tool: {tool_name}"})
Paso 4 - Completar el ciclo de conversación
Integrarse con la API de OpenAI:
from openai import OpenAI
client = OpenAI()
messages = [
{"role": "user", "content": "Create a container with ID 1001"}
]
response = client.chat.completions.create(
model="gpt-4",
messages=messages,
tools=tools,
tool_choice="auto"
)
# Check for tool calls
if response.choices[0].message.tool_calls:
for tool_call in response.choices[0].message.tool_calls:
result = await execute_tool(
tool_call.function.name,
json.loads(tool_call.function.arguments)
)
# Add tool result to messages
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": result
})
# Get final response
final_response = client.chat.completions.create(
model="gpt-4",
messages=messages
)
Paso 5 - Utilizar el ejecutor de Rust
Para aplicaciones de Rust, utiliza el ejecutor incorporado:
use assetcore_adapters::openai::executor::OpenAiToolExecutor;
use assetcore_adapters::http_client::DaemonClient;
let client = DaemonClient::new(
"http://localhost:8080",
"http://localhost:8081"
);
let executor = OpenAiToolExecutor::new(client);
// Execute a tool call
let result = executor.execute(
"assetcore_commit",
serde_json::json!({
"operations": [
{
"op": "CreateContainer",
"args": {
"container_id": 1001,
"kind": "Standard"
}
}
]
})
).await?;
Solución de problemas
Argumentos de función inválidos
GPT puede generar argumentos que no coinciden con el esquema. Valide antes de la ejecución y devuelva mensajes de error claros.
Limitación de tasa
OpenAI tiene límites de tasa. Implemente retrocesos y reintentos para su uso en producción.
Orden de llamada de herramientas
GPT puede solicitar múltiples llamadas a herramientas en paralelo. Los compromisos de Asset Core son secuenciales; ejecútalos en orden.
Próximos pasos
- Visión general de los agentes - Arquitectura y diseño
- Integración MCP - Protocolo alternativo
- Gemini - integración del modelo de Google