中文
API RESTFORES compatibles con OpenAI para el roca de Amazon
El código fuente se refactora con la nueva API Converse por Bedrock que proporciona soporte nativo con llamadas de herramientas.
Si se enfrenta a algún problema, plantee un problema.
Amazon Bedrock ofrece una amplia gama de modelos básicos (como Claude 3 Opus/Sonnet/Haiku, Llama 2/3, Mistral/Mixtral, etc.) y un amplio conjunto de capacidades para que pueda construir aplicaciones generativas de IA. Consulte la página de destino de Amazon Bedrock para obtener información adicional.
A veces, es posible que se desarrolle aplicaciones utilizando API o SDK de OpenAI, y desea experimentar con Amazon Bedrock sin modificar su base de código. O es posible que simplemente desee evaluar las capacidades de estos modelos de base en herramientas como Autogen, etc. Bueno, este repositorio le permite acceder a los modelos de rock de Amazon sin problemas a través de API y SDK de OpenAI, lo que le permite probar estos modelos sin cambios en el código.
Si encuentra útil este repositorio de GitHub, considere darle una estrella gratuita para mostrar su agradecimiento y soporte para el proyecto.
Características:
Consulte la Guía de uso para obtener más detalles sobre cómo usar las nuevas API.
Nota: La API de finalización de texto heredado no es compatible, debe cambiar para usar la API de finalización de chat.
Familia de modelos de roca madre de Amazon compatible:
Puede llamar a la API models
para obtener la lista completa de ID de modelo compatibles.
Nota: El modelo predeterminado se establece en
anthropic.claude-3-sonnet-20240229-v1:0
que se puede cambiar a través de variables de entorno Lambda (DEFAULT_MODEL
).
Asegúrese de haber cumplido a continuación los requisitos previos:
Para obtener más información sobre cómo solicitar el acceso al modelo, consulte la Guía del usuario de Amazon Bedrock (Configuración> Acceso del modelo)
El siguiente diagrama ilustra la arquitectura de referencia. Tenga en cuenta que también incluye un nuevo VPC con dos subredes públicas solo para el equilibrador de carga de aplicación (ALB).
También puede optar por usar AWS Fargate detrás del ALB en lugar de AWS Lambda, la principal diferencia es la latencia del primer byte para la respuesta de transmisión (Fargate es más bajo).
Alternativamente, puede usar URL de la función Lambda para reemplazar Alb, ver ejemplo
Siga los pasos a continuación para implementar las API proxy de roca en su cuenta AWS. Solo admite regiones en las que está disponible el roca madre de Amazon (como us-west-2
). El despliegue tomará aproximadamente 3-5 minutos .
Paso 1: cree su propia clave API personalizada (opcional)
Nota: Este paso es usar cualquier cadena (sin espacios) que desee crear una clave API personalizada (credencial) que se utilizará para acceder a la API proxy más adelante. Esta clave no tiene que coincidir con su tecla OpenAI real, y no necesita tener una tecla API OpenAI. Se recomienda que tome este paso y se asegure de mantener la llave segura y privada.
Paso 2: implementa la pila de CloudFormation
Alb + Lambda
Alb + Fargate
BedrockProxyAPIKey
). Si no configuró una tecla API, deje este campo en blanco. Haga clic en "Siguiente". ¡Eso es todo! ? Una vez implementado, haga clic en la pestaña CloudFormation y vaya a la pestaña Salidas , puede encontrar la URL base API de APIBaseUrl
, el valor debe parecerse a http://xxxx.xxx.elb.amazonaws.com/api/v1
.
Todo lo que necesitas es la clave API y la URL de la base de la API. Si no configuró su propia tecla, se utilizará la tecla API predeterminada ( bedrock
).
Ahora, puede probar las API proxy. Digamos que desea probar el modelo de soneto Claude 3 (ID de modelo: anthropic.claude-3-sonnet-20240229-v1:0
) ...
Ejemplo de uso de API
export OPENAI_API_KEY= < API key >
export OPENAI_BASE_URL= < API base url >
# For older versions
# https://github.com/openai/openai-python/issues/624
export OPENAI_API_BASE= < API base url >
curl $OPENAI_BASE_URL /chat/completions
-H " Content-Type: application/json "
-H " Authorization: Bearer $OPENAI_API_KEY "
-d ' {
"model": "anthropic.claude-3-sonnet-20240229-v1:0",
"messages": [
{
"role": "user",
"content": "Hello!"
}
]
} '
Ejemplo de uso de SDK
from openai import OpenAI
client = OpenAI ()
completion = client . chat . completions . create (
model = "anthropic.claude-3-sonnet-20240229-v1:0" ,
messages = [{ "role" : "user" , "content" : "Hello!" }],
)
print ( completion . choices [ 0 ]. message . content )
Consulte la Guía de uso para obtener más detalles sobre cómo usar API de incrustación, API multimodal y llamada de herramienta.
La inferencia de región cruzada admite el acceso a los modelos fundamentales en todas las regiones, lo que permite a los usuarios invocar modelos alojados en diferentes regiones de AWS para inferencia. Principales ventajas:
Consulte la inferencia de región cruzada de roca madre
Limitación: Actualmente, Bedrock Access Gateway solo admite inferencia de región cruzada para los siguientes modelos:
Prerrequisitos:
Ejemplo de uso de la API:
us.anthropic.claude-3-5-sonnet-20240620-v1:0
curl $OPENAI_BASE_URL /chat/completions
-H " Content-Type: application/json "
-H " Authorization: Bearer $OPENAI_API_KEY "
-d ' {
"model": "us.anthropic.claude-3-5-sonnet-20240620-v1:0",
"max_tokens": 2048,
"messages": [
{
"role": "user",
"content": "Hello!"
}
]
} '
A continuación se muestra una imagen de configurar el modelo en Autogen Studio.
Asegúrese de usar ChatOpenAI(...)
en lugar de OpenAI(...)
# pip install langchain-openai
import os
from langchain . chains import LLMChain
from langchain . prompts import PromptTemplate
from langchain_openai import ChatOpenAI
chat = ChatOpenAI (
model = "anthropic.claude-3-sonnet-20240229-v1:0" ,
temperature = 0 ,
openai_api_key = os . environ [ 'OPENAI_API_KEY' ],
openai_api_base = os . environ [ 'OPENAI_BASE_URL' ],
)
template = """Question: {question}
Answer: Let's think step by step."""
prompt = PromptTemplate . from_template ( template )
llm_chain = LLMChain ( prompt = prompt , llm = chat )
question = "What NFL team won the Super Bowl in the year Justin Beiber was born?"
response = llm_chain . invoke ( question )
print ( response )
Esta aplicación no recopila ninguno de sus datos. Además, no registra ninguna solicitud o respuesta de forma predeterminada.
La respuesta corta es que API Gateway no admite eventos (SSE) de servidor para la respuesta.
Esta solución solo es compatible con las regiones donde el lecho de roca de Amazon está disponible, ya que por ahora, a continuación, la lista.
En términos generales, todas las regiones que admite Amazon Bedrock también serán compatibles con, si no, plantearán un problema en Github.
Tenga en cuenta que no todos los modelos están disponibles en esas regiones.
Sí, puede clonar el repositorio y construir la imagen del contenedor por usted mismo ( src/Dockerfile
) y luego empujar a su repositorio ECR. Puede usar scripts/push-to-ecr.sh
Reemplace la URL de repositorio en la plantilla de CloudFormation antes de implementar.
Sí, puedes ejecutar esto localmente.
La URL de la base de la API debe verse como http://localhost:8000/api/v1
.
En comparación con la llamada de AWS SDK, la arquitectura referenciada traerá una latencia adicional en la respuesta, puede intentar probarlo por su cuenta.
Además, puede usar la URL de la función de adaptador web de Lambda + (ver ejemplo) para reemplazar Alb o AWS Fargate para reemplazar Lambda para obtener un mejor rendimiento en la respuesta de transmisión.
Actualmente, no hay ningún plan para apoyar a los modelos Sagemaker. Esto puede cambiar siempre que haya una demanda de los clientes.
Los modelos y modelos ajustados con rendimiento aprovisionado actualmente no son compatibles. Puede clonar el repositorio y hacer la personalización si es necesario.
Para usar las últimas funciones, no necesita volver a desplegar la pila CloudFormation. Simplemente necesita extraer la última imagen.
Para hacerlo, depende de la versión que haya implementado:
Deploy new image
y haga clic en Guardar.Tasks
, seleccione la única tarea que se está ejecutando y simplemente haga clic en Menú Stop selected
. Una nueva tarea con la última imagen comenzará automáticamente. Ver contribuyendo para más información.
Esta biblioteca tiene licencia bajo la licencia MIT-0. Ver el archivo de licencia.