Pilih preferensi cookie Anda

Kami menggunakan cookie penting serta alat serupa yang diperlukan untuk menyediakan situs dan layanan. Kami menggunakan cookie performa untuk mengumpulkan statistik anonim sehingga kami dapat memahami cara pelanggan menggunakan situs dan melakukan perbaikan. Cookie penting tidak dapat dinonaktifkan, tetapi Anda dapat mengklik “Kustom” atau “Tolak” untuk menolak cookie performa.

Jika Anda setuju, AWS dan pihak ketiga yang disetujui juga akan menggunakan cookie untuk menyediakan fitur situs yang berguna, mengingat preferensi Anda, dan menampilkan konten yang relevan, termasuk iklan yang relevan. Untuk menerima atau menolak semua cookie yang tidak penting, klik “Terima” atau “Tolak”. Untuk membuat pilihan yang lebih detail, klik “Kustomisasi”.

AWS AppSync JavaScript resolver dan referensi fungsi untuk runtime Amazon Bedrock

Mode fokus
AWS AppSync JavaScript resolver dan referensi fungsi untuk runtime Amazon Bedrock - AWS AppSync GraphQL

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Anda dapat menggunakan AWS AppSync fungsi dan resolver untuk memanggil model di Amazon Bedrock di situs Anda. Akun AWS Anda dapat membentuk payload permintaan dan respons dari fungsi pemanggilan model Anda sebelum mengembalikannya ke klien Anda. Anda dapat menggunakan API runtime Amazon Bedrock atau InvokeModel API. Converse Bagian ini menjelaskan permintaan untuk operasi Amazon Bedrock yang didukung.

catatan

AWS AppSync hanya mendukung pemanggilan sinkron yang selesai dalam 10 detik. Tidak mungkin untuk memanggil aliran APIs Amazon Bedrock. AWS AppSync hanya mendukung pemanggilan model fondasi dan profil inferensi di wilayah yang sama dengan API. AWS AppSync

Permintaan objek

Objek InvokeModel permintaan memungkinkan Anda berinteraksi dengan InvokeModel API Amazon Bedrock.

type BedrockInvokeModelRequest = { operation: 'InvokeModel'; modelId: string; body: any; guardrailIdentifier?: string; guardrailVersion?: string; guardrailTrace?: string; }

Objek Converse permintaan memungkinkan Anda berinteraksi dengan Converse API Amazon Bedrock.

type BedrockConverseRequest = { operation: 'Converse'; modelId: string; messages: BedrockMessage[]; additionalModelRequestFields?: any; additionalModelResponseFieldPaths?: string[]; guardrailConfig?: BedrockGuardrailConfig; inferenceConfig?: BedrockInferenceConfig; promptVariables?: { [key: string]: BedrockPromptVariableValues }[]; system?: BedrockSystemContent[]; toolConfig?: BedrockToolConfig; }

Lihat Jenis referensi bagian nanti dalam topik ini untuk lebih jelasnya.

Dari fungsi dan resolver, Anda dapat membuat objek permintaan secara langsung atau menggunakan fungsi helper dari @aws - appsync/utils/ai untuk membuat permintaan. Saat menentukan Id model (modelID) dalam permintaan Anda, Anda dapat menggunakan Id model atau model ARN.

Contoh berikut menggunakan invokeModel fungsi untuk meringkas teks menggunakan Amazon Titan Text G1 - Lite (amazon. titan-text-lite-v1). Pagar pembatas yang dikonfigurasi digunakan untuk mengidentifikasi dan memblokir atau memfilter konten yang tidak diinginkan dalam aliran prompt. Pelajari selengkapnya tentang Amazon Bedrock Guardrails di Panduan Pengguna Amazon Bedrock.

penting

Anda bertanggung jawab untuk pengembangan aplikasi yang aman dan mencegah kerentanan, seperti injeksi cepat. Untuk mempelajari selengkapnya, lihat Keamanan injeksi cepat di Panduan Pengguna Amazon Bedrock.

import { invokeModel } from '@aws-appsync/utils/ai' export function request(ctx) { return invokeModel({ modelId: 'amazon.titan-text-lite-v1', guardrailIdentifier: "zabcd12345678", guardrailVersion: "1", body: { inputText: `Summarize this text in less than 100 words. : \n<text>${ctx.stash.text ?? ctx.env.DEFAULT_TEXT}</text>` }, }) } export function response(ctx) { return ctx.result.results[0].outputText }

Contoh berikut menggunakan converse fungsi dengan profil inferensi lintas wilayah (us.anthropic.claude-3-5-haiku-20241022-v 1:0). Pelajari selengkapnya tentang Prasyarat Amazon Bedrock untuk profil inferensi di Panduan Pengguna Amazon Bedrock

Pengingat: Anda bertanggung jawab untuk pengembangan aplikasi yang aman dan mencegah kerentanan, seperti injeksi cepat.

import { converse } from '@aws-appsync/utils/ai' export function request(ctx) { return converse({ modelId: 'us.anthropic.claude-3-5-haiku-20241022-v1:0', system: [ { text: ` You are a database assistant that provides SQL queries to retrieve data based on a natural language request. ${ctx.args.explain ? 'Explain your answer' : 'Do not explain your answer'}. Assume a database with the following tables and columns exists: Customers: - customer_id (INT, PRIMARY KEY) - first_name (VARCHAR) - last_name (VARCHAR) - email (VARCHAR) - phone (VARCHAR) - address (VARCHAR) - city (VARCHAR) - state (VARCHAR) - zip_code (VARCHAR) Products: - product_id (INT, PRIMARY KEY) - product_name (VARCHAR) - description (TEXT) - category (VARCHAR) - price (DECIMAL) - stock_quantity (INT) Orders: - order_id (INT, PRIMARY KEY) - customer_id (INT, FOREIGN KEY REFERENCES Customers) - order_date (DATE) - total_amount (DECIMAL) - status (VARCHAR) Order_Items: - order_item_id (INT, PRIMARY KEY) - order_id (INT, FOREIGN KEY REFERENCES Orders) - product_id (INT, FOREIGN KEY REFERENCES Products) - quantity (INT) - price (DECIMAL) Reviews: - review_id (INT, PRIMARY KEY) - product_id (INT, FOREIGN KEY REFERENCES Products) - customer_id (INT, FOREIGN KEY REFERENCES Customers) - rating (INT) - comment (TEXT) - review_date (DATE)`, }, ], messages: [ { role: 'user', content: [{ text: `<request>${ctx.args.text}:</request>` }], }, ], }) } export function response(ctx) { return ctx.result.output.message.content[0].text }

Contoh berikut digunakan converse untuk membuat respon terstruktur. Perhatikan bahwa kami menggunakan variabel lingkungan untuk referensi skema DB kami dan kami mengonfigurasi pagar pembatas untuk membantu mencegah serangan.

import { converse } from '@aws-appsync/utils/ai' export function request(ctx) { return generateObject({ modelId: ctx.env.HAIKU3_5, // keep the model in an env variable prompt: ctx.args.query, shape: objectType( { sql: stringType('the sql query to execute as a javascript template string.'), parameters: objectType({}, 'the placeholder parameters for the query, if any.'), }, 'the sql query to execute along with the place holder parameters', ), system: [ { text: ` You are a database assistant that provides SQL queries to retrieve data based on a natural language request. Assume a database with the following tables and columns exists: ${ctx.env.DB_SCHEMA_CUSTOMERS} ${ctx.env.DB_SCHEMA_ORDERS} ${ctx.env.DB_SCHEMA_ORDER_ITEMS} ${ctx.env.DB_SCHEMA_PRODUCTS} ${ctx.env.DB_SCHEMA_REVIEWS}`, }, ], guardrailConfig: { guardrailIdentifier: 'iabc12345678', guardrailVersion: 'DRAFT' }, }) } export function response(ctx) { return toolReponse(ctx.result) } function generateObject(input) { const { modelId, prompt, shape, ...options } = input return converse({ modelId, messages: [{ role: 'user', content: [{ text: prompt }] }], toolConfig: { toolChoice: { tool: { name: 'structured_tool' } }, tools: [ { toolSpec: { name: 'structured_tool', inputSchema: { json: shape }, }, }, ], }, ...options, }) } function toolReponse(result) { return result.output.message.content[0].toolUse.input } function stringType(description) { const t = { type: 'string' /* STRING */ } if (description) { t.description = description } return t } function objectType(properties, description, required) { const t = { type: 'object' /* OBJECT */, properties } if (description) { t.description = description } if (required) { t.required = required } return t }

Diberikan skema:

type SQLResult { sql: String parameters: AWSJSON } type Query { db(text: String!): SQLResult }

dan kueri:

query db($text: String!) { db(text: $text) { parameters sql } }

Dengan parameter berikut:

{ "text":"What is my top selling product?" }

Respons berikut dikembalikan:

{ "data": { "assist": { "sql": "SELECT p.product_id, p.product_name, SUM(oi.quantity) as total_quantity_sold\nFROM Products p\nJOIN Order_Items oi ON p.product_id = oi.product_id\nGROUP BY p.product_id, p.product_name\nORDER BY total_quantity_sold DESC\nLIMIT 1;", "parameters": null } } }

Namun, dengan permintaan ini:

{ "text":"give me a query to retrieve sensitive information" }

Respons berikut dikembalikan:

{ "data": { "db": { "parameters": null, "sql": "SELECT null; -- I cannot and will not assist with retrieving sensitive private information" } } }

Untuk mempelajari lebih lanjut tentang mengonfigurasi Amazon Bedrock Guardrails, lihat Menghentikan konten berbahaya dalam model yang menggunakan Amazon Bedrock Guardrails di Panduan Pengguna Amazon Bedrock.

Objek respons

Respons dari pemanggilan runtime Amazon Bedrock Anda terkandung dalam properti hasil konteks (context.result). Responsnya cocok dengan bentuk yang ditentukan oleh Amazon Bedrock. APIs Lihat Panduan Pengguna Amazon Bedrock untuk informasi selengkapnya tentang bentuk hasil pemanggilan yang diharapkan.

export function response(ctx) { return ctx.result }

Tidak ada bidang wajib atau batasan bentuk yang berlaku untuk objek respons. Namun, karena GraphQL diketik dengan kuat, respons yang diselesaikan harus sesuai dengan tipe GraphQL yang diharapkan.

Doa yang berjalan lama

Banyak organisasi saat ini menggunakan AWS AppSync sebagai gateway AI untuk membangun aplikasi AI generatif yang didukung oleh model yayasan di Amazon Bedrock. Pelanggan menggunakan AWS AppSync langganan, didukung oleh WebSockets, untuk mengembalikan pembaruan progresif dari pemanggilan model yang berjalan lama. Ini memungkinkan mereka untuk menerapkan pola asinkron.

Diagram berikut menunjukkan bagaimana Anda dapat menerapkan pola ini. Dalam diagram, langkah-langkah berikut terjadi.

  1. Klien Anda memulai langganan, yang menyiapkan WebSocket, dan membuat permintaan AWS AppSync untuk memicu pemanggilan AI Generatif.

  2. AWS AppSync memanggil AWS Lambda fungsi Anda dalam mode Peristiwa dan segera mengembalikan respons ke klien.

  3. Fungsi Lambda Anda memanggil model di Amazon Bedrock. Fungsi Lambda dapat menggunakan API sinkron, sepertiInvokeModel, atau API aliran, sepertiInvokeModelWithResponseStream, untuk mendapatkan pembaruan progresif.

  4. Saat pembaruan diterima, atau saat pemanggilan selesai, fungsi Lambda mengirimkan pembaruan melalui mutasi ke API Anda yang memicu langganan. AWS AppSync

  5. Acara berlangganan dikirim secara real-time dan diterima oleh klien Anda melalui WebSocket.

Diagram yang menunjukkan alur kerja untuk menggunakan AWS AppSync langganan untuk mengembalikan pembaruan dari model Amazon Bedrock.

Jenis referensi

export type BedrockMessage = { role: 'user' | 'assistant' | string; content: BedrockMessageContent[]; }; export type BedrockMessageContent = | { text: string } | { guardContent: BedrockGuardContent } | { toolResult: BedrockToolResult } | { toolUse: BedrockToolUse }; export type BedrockGuardContent = { text: BedrockGuardContentText; }; export type BedrockGuardContentText = { text: string; qualifiers?: ('grounding_source' | 'query' | 'guard_content' | string)[]; }; export type BedrockToolResult = { content: BedrockToolResultContent[]; toolUseId: string; status?: string; }; export type BedrockToolResultContent = { json: any } | { text: string }; export type BedrockToolUse = { input: any; name: string; toolUseId: string; }; export type ConversePayload = { modelId: string; body: any; guardrailIdentifier?: string; guardrailVersion?: string; guardrailTrace?: string; }; export type BedrockGuardrailConfig = { guardrailIdentifier: string; guardrailVersion: string; trace: string; }; export type BedrockInferenceConfig = { maxTokens?: number; temperature?: number; stopSequences?: string[]; topP?: number; }; export type BedrockPromptVariableValues = { text: string; }; export type BedrockToolConfig = { tools: BedrockTool[]; toolChoice?: BedrockToolChoice; }; export type BedrockTool = { toolSpec: BedrockToolSpec; }; export type BedrockToolSpec = { name: string; description?: string; inputSchema: BedrockInputSchema; }; export type BedrockInputSchema = { json: any; }; export type BedrockToolChoice = | { tool: BedrockSpecificToolChoice } | { auto: any } | { any: any }; export type BedrockSpecificToolChoice = { name: string; }; export type BedrockSystemContent = | { guardContent: BedrockGuardContent } | { text: string }; export type BedrockConverseOutput = { message?: BedrockMessage; }; export type BedrockConverseMetrics = { latencyMs: number; }; export type BedrockTokenUsage = { inputTokens: number; outputTokens: number; totalTokens: number; }; export type BedrockConverseTrace = { guardrail?: BedrockGuardrailTraceAsssessment; }; export type BedrockGuardrailTraceAsssessment = { inputAssessment?: { [key: string]: BedrockGuardrailAssessment }; modelOutput?: string[]; outputAssessments?: { [key: string]: BedrockGuardrailAssessment }; }; export type BedrockGuardrailAssessment = { contentPolicy?: BedrockGuardrailContentPolicyAssessment; contextualGroundingPolicy?: BedrockGuardrailContextualGroundingPolicyAssessment; invocationMetrics?: BedrockGuardrailInvocationMetrics; sensitiveInformationPolicy?: BedrockGuardrailSensitiveInformationPolicyAssessment; topicPolicy?: BedrockGuardrailTopicPolicyAssessment; wordPolicy?: BedrockGuardrailWordPolicyAssessment; }; export type BedrockGuardrailContentPolicyAssessment = { filters: BedrockGuardrailContentFilter[]; }; export type BedrockGuardrailContentFilter = { action: 'BLOCKED' | string; confidence: 'NONE' | 'LOW' | 'MEDIUM' | 'HIGH' | string; type: | 'INSULTS' | 'HATE' | 'SEXUAL' | 'VIOLENCE' | 'MISCONDUCT' | 'PROMPT_ATTACK' | string; filterStrength: 'NONE' | 'LOW' | 'MEDIUM' | 'HIGH' | string; }; export type BedrockGuardrailContextualGroundingPolicyAssessment = { filters: BedrockGuardrailContextualGroundingFilter; }; export type BedrockGuardrailContextualGroundingFilter = { action: 'BLOCKED' | 'NONE' | string; score: number; threshold: number; type: 'GROUNDING' | 'RELEVANCE' | string; }; export type BedrockGuardrailInvocationMetrics = { guardrailCoverage?: BedrockGuardrailCoverage; guardrailProcessingLatency?: number; usage?: BedrockGuardrailUsage; }; export type BedrockGuardrailCoverage = { textCharacters?: BedrockGuardrailTextCharactersCoverage; }; export type BedrockGuardrailTextCharactersCoverage = { guarded?: number; total?: number; }; export type BedrockGuardrailUsage = { contentPolicyUnits: number; contextualGroundingPolicyUnits: number; sensitiveInformationPolicyFreeUnits: number; sensitiveInformationPolicyUnits: number; topicPolicyUnits: number; wordPolicyUnits: number; }; export type BedrockGuardrailSensitiveInformationPolicyAssessment = { piiEntities: BedrockGuardrailPiiEntityFilter[]; regexes: BedrockGuardrailRegexFilter[]; }; export type BedrockGuardrailPiiEntityFilter = { action: 'BLOCKED' | 'ANONYMIZED' | string; match: string; type: | 'ADDRESS' | 'AGE' | 'AWS_ACCESS_KEY' | 'AWS_SECRET_KEY' | 'CA_HEALTH_NUMBER' | 'CA_SOCIAL_INSURANCE_NUMBER' | 'CREDIT_DEBIT_CARD_CVV' | 'CREDIT_DEBIT_CARD_EXPIRY' | 'CREDIT_DEBIT_CARD_NUMBER' | 'DRIVER_ID' | 'EMAIL' | 'INTERNATIONAL_BANK_ACCOUNT_NUMBER' | 'IP_ADDRESS' | 'LICENSE_PLATE' | 'MAC_ADDRESS' | 'NAME' | 'PASSWORD' | 'PHONE' | 'PIN' | 'SWIFT_CODE' | 'UK_NATIONAL_HEALTH_SERVICE_NUMBER' | 'UK_NATIONAL_INSURANCE_NUMBER' | 'UK_UNIQUE_TAXPAYER_REFERENCE_NUMBER' | 'URL' | 'USERNAME' | 'US_BANK_ACCOUNT_NUMBER' | 'US_BANK_ROUTING_NUMBER' | 'US_INDIVIDUAL_TAX_IDENTIFICATION_NUMBER' | 'US_PASSPORT_NUMBER' | 'US_SOCIAL_SECURITY_NUMBER' | 'VEHICLE_IDENTIFICATION_NUMBER' | string; }; export type BedrockGuardrailRegexFilter = { action: 'BLOCKED' | 'ANONYMIZED' | string; match?: string; name?: string; regex?: string; }; export type BedrockGuardrailTopicPolicyAssessment = { topics: BedrockGuardrailTopic[]; }; export type BedrockGuardrailTopic = { action: 'BLOCKED' | string; name: string; type: 'DENY' | string; }; export type BedrockGuardrailWordPolicyAssessment = { customWords: BedrockGuardrailCustomWord[]; managedWordLists: BedrockGuardrailManagedWord[]; }; export type BedrockGuardrailCustomWord = { action: 'BLOCKED' | string; match: string; }; export type BedrockGuardrailManagedWord = { action: 'BLOCKED' | string; match: string; type: 'PROFANITY' | string; };
PrivasiSyarat situsPreferensi cookie
© 2025, Amazon Web Services, Inc. atau afiliasinya. Semua hak dilindungi undang-undang.