创建示例库实例后,您可以开始编写示例并将其上传到该实例。您可以在示例存储实例中存储的示例数量没有限制。您将示例上传到示例商店实例后,示例会立即可用。
需要上传示例的几种情况包括:
查询与现有示例不相关。
模型难以进行某些推理。
可用的示例并未涵盖您预期的所有函数、结果或推理。
通过编写符合预期格式的相关示例,您可以实现以下目标:
提高 LLM 注意并使用示例的能力,避免因对提示进行细微更改而导致响应模式发生意外更改。
减少为不相关的查询添加示例的潜在负面影响。
LLM 对类似查询的执行效果符合预期。
如果 LLM 显示意外行为或推理,您可以上传更正后的响应,以引导模型在后续请求中遵循预期的模式或推理。
借助本页上的示例,您可以根据 LLM 输出编写示例。与手动编写示例相比,基于 LLM 输出编写示例具有以下优势:
根据预期的 LLM 输出编写示例所需的手动工作量较少。
通过创建基于 LLM 意外行为的示例,您可以直接纠正失败案例。
您可以根据表现良好的模型的响应来编写示例,以改进其他模型的行为。例如,如果 Gemini 1.5 Pro 提供的响应优于 Gemini 1.5 Flash,但延迟时间更长,您可以使用这些响应编写示例,以便在使用 Gemini 1.5 Flash 时实现更低的延迟时间和类似的性能。
使用示例来提高函数调用性能
您可以使用少量示例来演示以下内容,从而提高函数调用性能:* 调用特定函数时。
如何提取要在函数调用中使用的参数。
模型根据函数(或多步推理中的多个函数)返回的响应做出响应的方式。
如需详细了解函数调用,请参阅函数调用文档。
前提条件
在使用本页上的 Python 示例之前,您必须在本地 Python 环境中安装并初始化适用于示例存储库的 Vertex AI SDK for Python。
运行以下命令以安装适用于示例商店的 Python 版 Vertex AI SDK。
# Install gcloud !pip install google-cloud WHL_FILEPATH = "gs://vertex_sdk_private_releases/example_stores/google_cloud_aiplatform-1.71.dev20241116+example.stores-py2.py3-none-any.whl" !gsutil cp {WHL_FILEPATH} . # Install the private SDK !pip install {WHL_FILEPATH.split("/")[-1]} --force-reinstall
使用以下代码示例导入并初始化适用于示例商店的 SDK。
from google.cloud.aiplatform.private_preview import example_stores import vertexai vertexai.init( project="PROJECT_ID", location="LOCATION" )
替换以下内容:
PROJECT_ID:您的项目 ID。
LOCATION:您的区域。 仅支持
us-central1
。
上传示例
使用以下示例将示例上传到示例商店实例。每个请求最多可以上传 5 个示例。
Python
以下示例可让您使用从 LLM 收到的响应,创建示例并将其上传到示例存储区实例,从而改进 LLM 行为和函数调用性能。在使用以下示例之前,请确保您已完成以下操作:按照《Vertex AI 快速入门:使用客户端库》中的 Python 设置说明执行操作。如需了解详情,请参阅 Vertex AI Python API 参考文档。
如需通过设置应用默认凭据向 Vertex AI 进行身份验证。如需了解详情,请参阅为本地开发环境设置身份验证。
上传符合预期响应的示例
在 LLM 的响应符合预期格式的情况下,使用以下示例编写并上传示例。借助此示例,您可以发送请求、根据响应创建示例,然后将示例上传到示例商店实例。
from google.cloud.aiplatform.private_preview.example_stores.gapic.types import ContentsExample, StoredContentsExample
tool = Tool(
function_declarations=[get_product_sku_func],
)
model = GenerativeModel("gemini-1.5-pro-001")
user_content = Content(
role="user",
parts=[Part.from_text("EXAMPLE_REQUEST")],
)
response = model.generate_content(
user_content,
tools=[tool],
)
function_response = Content(
parts=[
Part.from_function_response(
name="FUNCTION_NAME",
response={
"RESPONSE_PARAMETER_NAME": "RESPONSE_PARAMETER_VALUE"
}
)
]
)
final_model_response = Content(
role="model",
parts=[Part.from_text("EXAMPLE_RESPONSE")],
)
example = {
"contents_example": {
"contents": [user_content],
"expected_contents": [
{"content": response.candidates[0].content},
{"content": function_response},
{"content": final_model_response},
],
},
"search_key": user_content.text,
}
example_store.upsert_examples(examples=[example])
替换以下内容:
FUNCTION_NAME:LLM 或代理调用的函数的名称。
EXAMPLE_REQUEST:用户向 LLM 或代理发出的请求或查询。
RESPONSE_PARAMETER_NAME:从调用的函数传递的响应参数的名称。
RESPONSE_PARAMETER_VALUE:响应参数的值。
EXAMPLE_RESPONSE:示例响应,表示 LLM 或代理的预期行为。
上传示例以更正非预期响应
如果 LLM 未按预期生成响应,您可以根据更正后的响应创建示例。这有助于 LLM 遵循后续请求的预期推理。
使用以下示例,将包含更正后的响应的示例上传到示例商店实例。
function_response = Content(
parts=[
Part.from_function_response(
name="FUNCTION_NAME",
response={
"RESPONSE_PARAMETER_NAME": "RESPONSE_PARAMETER_VALUE"
}
)
]
)
final_model_response = Content(
role="model",
parts=[Part.from_text("EXAMPLE_RESPONSE")],
)
expected_function_call = Content(
parts=[
Part.from_dict({
"function_call": {
"name": "EXPECTED_FUNCTION_NAME",
"args": {"EXPECTED_PARAMETER_NAME": "EXPECTED_PARAMETER_VALUE"}
}
})
]
)
example = {
"contents_example": {
"contents": [user_content],
"expected_contents": [
{"content": expected_function_call},
{"content": function_response},
{"content": final_model_response},
],
},
"search_key": user_content.text,
}
example_store.upsert_examples(examples=[example])
替换以下内容:
FUNCTION_NAME:LLM 或代理调用的函数的名称。
EXAMPLE_REQUEST:用户向 LLM 或代理发出的查询或请求。
RESPONSE_PARAMETER_NAME:从调用的函数传递的响应参数的名称。
RESPONSE_PARAMETER_VALUE:响应参数的值。
EXAMPLE_RESPONSE:示例响应,表示 LLM 或代理的预期行为。
EXPECTED_FUNCTION_NAME:查询预计要调用的函数。
EXPECTED_PARAMETER_NAME:响应中预期的参数名称。
EXPECTED_PARAMETER_VALUE:响应中参数的值。
REST
如需将示例上传到示例商店实例,请使用 exampleStores.upsertExamples
方法发送 POST
请求。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:您的项目 ID。
- LOCATION:要在其中创建示例商店的区域。仅支持区域
us-central1
。 - EXAMPLE_STORE_ID:要上传示例的示例商店实例的 ID。
HTTP 方法和网址:
POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/exampleStores/EXAMPLE_STORE_ID:upsertExamples
请求 JSON 正文:
{ "examples": [ { "stored_contents_example": { "contents_example": { "contents": [ { "role": "user", "parts": [ { "text": "Is there a store in Mountain View, CA that I can visit to try the new Pixel 8 Pro?" } ] } ], "expected_contents": [ { "content": { "role": "model", "parts": [ { "text": ""Yes, there is a store located at 2000 N Shoreline Blvd, Mountain View, CA 94043, US." } ] } } ] }, "search_key_generation_method": { "last_entry": {} } } } ] }
如需发送请求,请选择以下方式之一:
curl
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/exampleStores/EXAMPLE_STORE_ID:upsertExamples"
PowerShell
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/exampleStores/EXAMPLE_STORE_ID:upsertExamples" | Select-Object -Expand Content
您应该会收到类似以下示例的 JSON 响应,其中 EXAMPLE_ID 表示为示例生成的 ID。
后续步骤
- 了解如何通过示例向代理或 LLM 传授知识。