บทความนี้เขียนขึ้นใน colaboration Enrique Rodriguez
เตรียมพร้อมที่จะเริ่มต้นการเดินทางที่น่าตื่นเต้นในขณะที่เรารวมพลังของ Bedrock ของ Amazon, ReactJS และ AWS JavaScript SDK เพื่อสร้างแอปพลิเคชัน AI กำเนิดที่มีรหัสการรวมขั้นต่ำ
การบูรณาการ AI Generative เข้ากับแอปพลิเคชันที่มีอยู่นำเสนอความท้าทาย นักพัฒนาหลายคนมีประสบการณ์ จำกัด ในรูปแบบการฝึกอบรม แต่จุดมุ่งหมายคือการรวมความสามารถของ AI แบบกำเนิดกับการเปลี่ยนแปลงรหัสน้อยที่สุด
ในการแก้ปัญหานี้เราได้สร้างแอปพลิเคชั่นที่รวมพลังของ Generative AI ด้วยการโทรไปยัง Amazon Bedrock API จากเว็บแอปพลิเคชันเช่นสปาที่สร้างขึ้นด้วย JavaScript และ React Framework ไม่มีมิดเดิลแวร์ลดอุปสรรคสำหรับการรวมการสร้าง AI ผ่านการรวมรหัสน้อยที่สุด
ตลอดการสอนนี้คุณจะได้เรียนรู้วิธีการใช้ข้อมูลรับรองของ Amazon Cognito และบทบาทของ IAM เพื่อเข้าถึง Amazon Bedrock API อย่างปลอดภัยภายในแอปพลิเคชัน ReactJS ของคุณที่สร้างขึ้นด้วยระบบการออกแบบ CloudScape เราจะแนะนำคุณตลอดกระบวนการปรับใช้ทรัพยากรที่จำเป็นทั้งหมดและโฮสต์แอพโดยใช้ AWS Amplify ปรับปรุงกระบวนการตั้งค่าและการปรับใช้
เพื่อเพิ่มความยืดหยุ่นและการปรับแต่งของโมเดลมูลนิธิ (FM) เราจะสาธิตวิธีกำหนดบทบาทที่แตกต่างกันโดยใช้พรอมต์ระบบ ด้วยการสร้างตาราง Amazon DynamoDB คุณสามารถจัดเก็บและดึงบทบาทต่าง ๆ ช่วยให้คุณสามารถจัดการและเข้าถึงระบบที่มีความแตกต่างที่เกี่ยวข้องกับแต่ละบทบาทที่คุณต้องการกำหนดให้กับ FM วิธีที่เก็บข้อมูลส่วนกลางนี้ช่วยให้การกำหนดบทบาทแบบไดนามิกและการตอบสนอง AI ที่ปรับแต่งตามบทบาทที่เลือก

ในที่เก็บของแอปพลิเคชันนี้คุณจะพบรหัสพร้อมที่จะปรับใช้แบ็กเอนด์และส่วนหน้า
backend แบ็กเอนด์: กลุ่มผู้ใช้ Amazon Cognito และกลุ่มเอกลักษณ์ที่มีบทบาทของ AWS และการเข้าถึงบทบาท Managemen (บทบาท IAM) ที่มีนโยบายที่มีสิทธิ์ในการเรียกใช้อเมซอน
{ policyName: "amplify-permissions-custom-resources",
policyDocument: {
Version: "2012-10-17",
Statement: [
{
Resource: "*",
Action: ["bedrock:InvokeModel*", "bedrock:List*", "bedrock:Retrieve*"],
Effect: "Allow",
}
]
}
}
ตรวจสอบ "การรวมการรับรองความถูกต้องของ Amazon Cognito และการอนุญาตด้วยเว็บและแอพมือถือ" สำหรับการเรียกใช้การดำเนินการ AWS API โดยผู้ใช้ที่ได้รับการรับรองความถูกต้องด้วย Amazon Cognito
สิทธิ์นี้สามารถปรับแต่งได้ที่นี่: รหัสบทบาทของ IAM
✅ Frontend: Application Application หน้าเดียว (SPA) ที่สร้างขึ้นด้วยระบบการออกแบบ CloudScape
แอปพลิเคชันนี้ประกอบด้วยการสาธิต 4 ครั้ง:

การสาธิตทั้งหมดมีส่วนร่วมในการใช้ Bedrockruntimeclient หรือ Bedrockagentruntimeclient เพื่อเรียกใช้ข้อเท็จจริงหรือบริการ bedrockagent สำหรับการสนทนาการสนทนา BedrockagentClient ยังใช้ในการแสดงรายการฐานความรู้ปัจจุบันที่ถูกปรับใช้ในบัญชีเดียวกัน
import { BedrockAgentClient } from "@aws-sdk/client-bedrock-agent"
import { BedrockAgentRuntimeClient } from "@aws-sdk/client-bedrock-agent-runtime"Amazon Bedrock เป็นบริการที่ได้รับการจัดการอย่างเต็มที่ซึ่งมีตัวเลือกของโมเดลฐานรากที่มีประสิทธิภาพสูง (FMS) พร้อมกับความสามารถในวงกว้างที่คุณต้องการในการสร้างและปรับขนาดแอปพลิเคชัน AI กำเนิด
ในการเรียกใช้ FM คุณต้องระบุภูมิภาคการสตรีมการตอบสนองและข้อมูลรับรอง API จากการตรวจสอบกลุ่มผู้ใช้ สำหรับอาร์กิวเมนต์แบบจำลองคุณระบุแบบจำลองเพื่อสุ่มตัวอย่างโทเค็ getModel สูงสุด 1,000 โท
export const getModel = async ( modelId = "anthropic.claude-instant-v1" ) => {
const session = await fetchAuthSession ( ) ; //Amplify helper to fetch current logged in user
let region = session . identityId . split ( ":" ) [ 0 ] //
const model = new Bedrock ( {
model : modelId , // model-id you can try others if you want
region : region , // app region
streaming : true , // this enables to get the response in streaming manner
credentials : session . credentials , // the user credentials that allows to invoke bedrock service
// try to limit to 1000 tokens for generation
// temperature = 1 means more creative and freedom
modelKwargs : { max_tokens_to_sample : 1000 , temperature : 1 } ,
} ) ;
return model ;
} ; ในการเลือก ModelID ก่อนอื่นคุณจะแสดงรายการโมเดลมูลนิธิ Amazon Bedrock โดยใช้ ListFoundationModels บนฟังก์ชั่น getFMs (llmlib.js) FM แต่ละตัวมีวิธีการเรียกใช้แบบจำลองของตัวเองและบล็อกนี้มุ่งเน้นไปที่โมเดลมานุษยวิทยาหลายรูปแบบเท่านั้น
export const getFMs = async ( ) => {
const session = await fetchAuthSession ( )
let region = session . identityId . split ( ":" ) [ 0 ]
const client = new BedrockClient ( { region : region , credentials : session . credentials } )
const input = { byProvider : "Anthropic" , byOutputModality : "TEXT" , byInferenceType : "ON_DEMAND" }
const command = new ListFoundationModelsCommand ( input )
const response = await client . send ( command )
return response . modelSummaries
}รหัสนี้ช่วยให้คุณสามารถเลือกระหว่าง Antropic Claude 3 Sonnet หรือ Haiku

เราจะนำคุณผ่านกลุ่มตัวอย่างแต่ละกลุ่มเพื่อเน้นความแตกต่างของพวกเขา

InvokeModelWithResponSestream ใช้เพื่อเรียกใช้โมเดล BETROCK ของ Amazon เพื่อเรียกใช้การอนุมานโดยใช้พารามิเตอร์พรอมต์และการอนุมานที่ให้ไว้ในตัวถังคำขอ
const session = await fetchAuthSession ( )
let region = session . identityId . split ( ":" ) [ 0 ]
const client = new BedrockRuntimeClient ( { region : region , credentials : session . credentials } )
const input = {
body : JSON . stringify ( body ) ,
contentType : "application/json" ,
accept : "application/json" ,
modelId : modelId
}
const command = new InvokeModelWithResponseStreamCommand ( input )
const response = await client . send ( command ) ในบล็อกก่อนหน้านี้เราอ้างอิงสองวิธีในการเรียกใช้โมเดล - หนึ่งที่มุ่งเน้นเพียงแค่ถามคำถามและรับคำตอบและอีกวิธีหนึ่งสำหรับการสนทนาอย่างเต็มที่กับโมเดล ด้วยมานุษยวิทยา claude 3 การสนทนาได้รับการจัดการโดยข้อความ API: messages=[{"role": "user", "content": content}]
แต่ละข้อความอินพุตจะต้องเป็นวัตถุที่มี role (ผู้ใช้หรือผู้ช่วย) และเนื้อหา content สามารถอยู่ในสตริงเดียวหรืออาร์เรย์ของบล็อกเนื้อหาแต่ละบล็อกมี type ที่กำหนดเอง (ข้อความหรือรูปภาพ)
type text ที่เท่ากัน: {"role": "user", "content": [{"type": "text", "text": "Hello, Claude"}]}

type image ที่เท่าเทียมกัน: {"role": "user", "content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/jpeg",
"data": "/9j/4AAQSkZJRg...",
}
},
{"type": "text", "text": "What is in this image?"}
]}

นี่คือตัวอย่างของร่างกาย:
content = [
{"type": "image", "source": {"type": "base64",
"media_type": "image/jpeg", "data": content_image}},
{"type":"text","text":text}
]
body = {
"system": "You are an AI Assistant, always reply in the original user text language.",
"messages":content,"anthropic_version": anthropic_version,"max_tokens":max_tokens}
ปัจจุบัน️มานุษยวิทยารองรับประเภทต้นทาง Base64 สำหรับรูปภาพและรูปภาพ/jpeg, image/png, image/gif และประเภทสื่อ/webp คุณสามารถดูการแปลงภาพเป็น base64 สำหรับแอพนี้ในฟังก์ชั่น
buildContentของ MessageHelpers.js ดูตัวอย่างอินพุตเพิ่มเติม

ข้อความ API ช่วยให้เราสามารถเพิ่มบริบทหรือคำแนะนำในโมเดลผ่านระบบพรอมต์ระบบ (ระบบ)
โดยการใช้พรอมต์ระบบเราสามารถกำหนดบทบาทเฉพาะของ FM หรือให้คำแนะนำก่อนหน้านี้ก่อนที่จะให้อาหารอินพุต ในการเปิดใช้งาน FM ในหลายบทบาทเราได้สร้างส่วนประกอบ React ที่ช่วยให้คุณสร้างพรอมต์ระบบจัดเก็บไว้ในตาราง Amazon DynamoDB จากนั้นเลือกเมื่อคุณต้องการกำหนดบทบาทนั้นให้กับ FM
การดำเนินการ API ทั้งหมดสำหรับการจัดการพรอมต์ได้รับการจัดการโดยจุดสิ้นสุด AWS AppSync GraphQL API AWS AppSync ช่วยให้คุณสร้างและจัดการ GRAPHQL APIs ซึ่งให้วิธีที่ยืดหยุ่นและมีประสิทธิภาพในการดึงข้อมูลและจัดการข้อมูลจากหลายแหล่งผ่านปลายทางเดียว (AWS AppSync Tutorial: DynamoDB Resolvers)

ลองตรวจสอบตัวอย่างของพรอมต์ที่เราบอก FM ว่าเขาเป็นผู้เชี่ยวชาญใน JavaScript:

ใน GIF ต่อไปนี้โมเดลให้รหัสและคำอธิบายโดยละเอียดเช่นผู้เชี่ยวชาญ

ในการสาธิตนี้คุณจะถามคำถามเกี่ยวกับฐานความรู้สำหรับอเมซอนเพราะการใช้ประโยชน์จาก Generation Augmented Retrieval (RAG) คุณต้องมีฐานความรู้อย่างน้อยหนึ่งฐานที่สร้างขึ้นโดยทำตามสร้างคู่มือฐานความรู้
คำถามเกี่ยวกับฐานความรู้สำหรับอเมซอนพื้นหินจะถูกถามในสองวิธี:

- Amazon Bedrock Retrieve => LLM:

แสดงรายการฐานความรู้ด้วย ListknowledgeBaseScommand ดังนี้:
import { ListKnowledgeBasesCommand } from "@aws-sdk/client-bedrock-agent"
export const getBedrockKnowledgeBases = async ( ) => {
const session = await fetchAuthSession ( )
let region = session . identityId . split ( ":" ) [ 0 ]
const client = new BedrockAgentClient ( { region : region , credentials : session . credentials } )
const command = new ListKnowledgeBasesCommand ( { } )
const response = await client . send ( command )
return response . knowledgeBaseSummaries
}คลาส AmazonknowledgeBaseretriever Langchain สร้างรีทรีฟเวอร์ซึ่งเป็นวัตถุที่สามารถดึงเอกสารคล้ายกับการสืบค้นจากฐานความรู้ (ในกรณีนี้เป็นฐานความรู้จากข้อเท็จจริง)
import { AmazonKnowledgeBaseRetriever } from "@langchain/community/retrievers/amazon_knowledge_base" ;
export const getBedrockKnowledgeBaseRetriever = async ( knowledgeBaseId ) => {
const session = await fetchAuthSession ( ) ;
let region = session . identityId . split ( ":" ) [ 0 ]
const retriever = new AmazonKnowledgeBaseRetriever ( {
topK : 10 , // return top 10 documents
knowledgeBaseId : knowledgeBaseId ,
region : region ,
clientOptions : { credentials : session . credentials }
} )
return retriever
}ConversationalRetrievalqachain นั้นมีการสร้างอินสแตนซ์ด้วย Retriever และหน่วยความจำ มันดูแลหน่วยความจำสอบถามรีทรีฟเวอร์และกำหนดคำตอบ (พร้อมเอกสาร) โดยใช้อินสแตนซ์ LLM
import { ConversationalRetrievalQAChain } from "langchain/chains" ;
export const getConversationalRetrievalQAChain = async ( llm , retriever , memory ) => {
const chain = ConversationalRetrievalQAChain . fromLLM (
llm , retriever = retriever )
chain . memory = memory
//Here you modify the default prompt to add the Human prefix and Assistant suffix needed by Claude.
//otherwise you get an exception
//this is the prompt that uses chat history and last question to formulate a complete standalone question
chain . questionGeneratorChain . prompt . template = "Human: " + chain . questionGeneratorChain . prompt . template + "nAssistant:"
// Here you finally answer the question using the retrieved documents.
chain . combineDocumentsChain . llmChain . prompt . template = `Human: Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.
{context}
Question: {question}
Helpful Answer:
Assistant:`
return chain
} 
รหัส bedrockkbretrieve.jsx
- Amazon Bedrock Retrieve & สร้าง:
ที่นี่คุณจะใช้บริการ RAG ที่มีการจัดการ AWS ที่สมบูรณ์ ไม่จำเป็นต้องมีแพ็คเกจเพิ่มเติม (Langchain) หรือเพิ่มความซับซ้อนด้วยพรอมต์ คุณจะใช้การโทร API เพียงครั้งเดียวไปยัง BedrockagentRuntimeclient นอกจากนี้หน่วยความจำได้รับการจัดการโดยบริการโดยใช้ SessionID

Bedrock เริ่มต้นด้วย bedrockagentruntimeclient และด้วยการดึงข้อมูลและการสอบถามข้อมูลฐานความรู้และแบบจำลองพื้นฐานสร้างการตอบสนองตามผลลัพธ์ที่ดึงมา ในการสาธิต Langchain นี้ไม่จำเป็น
import { BedrockAgentRuntimeClient , RetrieveAndGenerateCommand } from "@aws-sdk/client-bedrock-agent-runtime"
export const ragBedrockKnowledgeBase = async ( sessionId , knowledgeBaseId , query , modelId = "anthropic.claude-instant-v1" ) => {
const session = await fetchAuthSession ( )
let region = session . identityId . split ( ":" ) [ 0 ]
const client = new BedrockAgentRuntimeClient ( { region : region , credentials : session . credentials } ) ;
const input = {
input : { text : query } , // user question
retrieveAndGenerateConfiguration : {
type : "KNOWLEDGE_BASE" ,
knowledgeBaseConfiguration : {
knowledgeBaseId : knowledgeBaseId ,
//your existing KnowledgeBase in the same region/ account
// Arn of a Bedrock model, in this case we jump to claude 2.1, the latest. Feel free to use another
modelArn : `arn:aws:bedrock: ${ region } ::foundation-model/ ${ modelId } ` , // Arn of a Bedrock model
} ,
}
}
if ( sessionId ) {
// you can pass the sessionId to continue a dialog.
input . sessionId = sessionId
}
const command = new RetrieveAndGenerateCommand ( input ) ;
const response = await client . send ( command )
return response
} 
รหัส bedrockkbandgenerate.jsx
ตัวแทนของ Amazon Bedrock เป็นส่วนประกอบซอฟต์แวร์ที่ใช้โมเดล AI ที่จัดทำโดย Amazon Bedrock Service เพื่อส่งมอบฟังก์ชันการใช้งานผู้ใช้เช่น chatbots ผู้ช่วยเสมือนหรือเครื่องมือสร้างข้อความ ตัวแทนเหล่านี้สามารถปรับแต่งและปรับให้เข้ากับความต้องการเฉพาะของแต่ละแอปพลิเคชันโดยให้ส่วนต่อประสานผู้ใช้สำหรับผู้ใช้ปลายทางเพื่อโต้ตอบกับความสามารถ AI พื้นฐาน ตัวแทนของข้อเท็จจริงจัดการกับการรวมเข้ากับแบบจำลองภาษาประมวลผลอินพุตผู้ใช้การสร้างการตอบสนองและการกระทำอื่น ๆ ที่อาจเกิดขึ้นจากผลลัพธ์ของโมเดล AI
หากต้องการรวมตัวแทนของอเมซอนเข้ากับแอปพลิเคชันนี้คุณต้องสร้างให้ทำตามขั้นตอนสร้างตัวแทนในอเมซอน
ใน Amazon Bedrock คุณสามารถสร้างตัวแทนเวอร์ชันใหม่ของคุณได้โดยการสร้างนามแฝงที่ชี้ไปที่เวอร์ชันใหม่โดยค่าเริ่มต้นนามแฝงจะอยู่ในรายการด้วย listagentaliasescommand (llmlib.js):
import { BedrockAgentClient , ListAgentAliasesCommand } from "@aws-sdk/client-bedrock-agent" ;
const client = new BedrockAgentRuntimeClient ( { region : region , credentials : session . credentials } )
export const getBedrockAgentAliases = async ( client , agent ) => {
const agentCommand = new ListAgentAliasesCommand ( { agentId : agent . agentId } )
const response = await client . send ( agentCommand )
return response . agentAliasSummaries
}เพื่อส่งพรอมต์ให้ตัวแทนดำเนินการและตอบสนองการใช้ indinkeagentCommand
import { BedrockAgentRuntimeClient , InvokeAgentCommand } from "@aws-sdk/client-bedrock-agent-runtime" ;
export const invokeBedrockAgent = async ( sessionId , agentId , agentAlias , query ) => {
const session = await fetchAuthSession ( )
let region = session . identityId . split ( ":" ) [ 0 ]
const client = new BedrockAgentRuntimeClient ( { region : region , credentials : session . credentials } )
const input = {
sessionId : sessionId ,
agentId : agentId ,
agentAliasId : agentAlias ,
inputText : query
}
console . log ( input )
const command = new InvokeAgentCommand ( input )
const response = await client . send ( command , )
console . log ( "response:" , response )
let completion = ""
let decoder = new TextDecoder ( "utf-8" )
for await ( const chunk of response . completion ) {
console . log ( "chunk:" , chunk )
const text = decoder . decode ( chunk . chunk . bytes )
completion += text
console . log ( text )
}
return completion
}ในตัวแทนของ GIF แรกนี้สร้างตั๋วสำหรับการสนับสนุนทางเทคนิค:

ใน GIF ที่สองผู้ใช้จะถามตัวแทนเกี่ยวกับสถานะของตั๋ว:

แอปพลิเคชันถูกสร้างขึ้นด้วย AWS Amplify เพื่อปรับใช้ในบัญชีของคุณ:
https://github.com/build-on-aws/building-reactjs-gen-ai-apps-with-amazon-bedrock-javascript-sdk/forks
สร้างสาขาใหม่: dev-branch
จากนั้นทำตามขั้นตอนในการเริ่มต้นด้วยคู่มือรหัสที่มีอยู่
ใน ขั้นตอนที่ 1 เพิ่มสาขาที่เก็บ เลือกสาขาหลักและ เชื่อมต่อ monorepo? เลือกโฟลเดอร์ และป้อน reactjs-gen-ai-apps เป็นไดเรกทอรีราก

building-a-gen-ai-gen-ai-personal-assistant-reactjs-apps(this app) เป็นชื่อแอพในสภาพแวดล้อมเลือก สร้าง envitoment ใหม่ และเขียน dev 
หากไม่มีบทบาทที่มีอยู่ให้สร้างใหม่เพื่อให้บริการขยาย
ปรับใช้แอพของคุณ
เมื่อแอปพลิเคชันถูกปรับใช้ให้ไปที่ลิงค์ในแอปพลิเคชันซึ่งอยู่ใต้กล่องสีขาว

เมื่อคุณป้อนลิงก์ Sing In Window จะปรากฏขึ้นดังนั้นคุณต้องสร้างผู้ใช้ผู้ใช้ Amazon Cognito ผู้ใช้

ในแอพไปที่ สภาพแวดล้อมแบ็กเอนด์ และคลิกที่การตรวจสอบสิทธิ์

จากนั้นภายใต้การรับรองความถูกต้องให้คลิก ดูใน Cognito :

ใน กลุ่มผู้ใช้ คลิกชื่อกลุ่มผู้ใช้ของคุณและ สร้างผู้ใช้
สร้างผู้ใช้ของคุณแล้วร้องเพลง
หมายเหตุ: คุณสามารถสร้างผู้ใช้โดยตรงจากแอปพลิเคชันโดยการเปลี่ยน False
hideSignUp: falseใน App.jsx แต่สิ่งนี้สามารถแนะนำข้อบกพร่องด้านความปลอดภัยโดยให้ทุกคนเข้าถึงได้
ก่อนที่คุณจะสามารถใช้โมเดลพื้นฐานในอเมซอนได้คุณต้องขอการเข้าถึง ทำตามขั้นตอนในคู่มือการเข้าถึงโมเดล
ไปที่ลิงค์แอปพลิเคชันและลงชื่อเข้าใช้กับผู้ใช้ที่คุณสร้างขึ้น
ในโพสต์นี้เราแสดงให้เห็นว่าคุณสามารถสร้างแอปพลิเคชั่นเว็บปฏิกิริยาที่เข้าถึง API ของ Amazon Bedrock ได้โดยตรงโดยใช้ Amazon Cognito เพื่อการตรวจสอบความปลอดภัย ด้วยการใช้ประโยชน์จากบริการที่ได้รับการจัดการ AWS เช่น Cognito และ IAM คุณสามารถรวมความสามารถ AI ที่ทรงพลังในการกำเนิดเข้ากับแอปพลิเคชัน JavaScript ของคุณโดยไม่จำเป็นต้องใช้รหัสแบ็กเอนด์
วิธีการนี้ช่วยให้นักพัฒนามุ่งเน้นไปที่การสร้างประสบการณ์การสนทนาที่น่าสนใจในขณะที่ใช้ประโยชน์จากบริการความรู้ที่ได้รับการจัดการของ Amazon Bedrock การตอบสนองการสตรีมช่วยเพิ่มประสบการณ์ผู้ใช้โดยลดเวลารอและช่วยให้การโต้ตอบที่เป็นธรรมชาติมากขึ้นกับ AI การสนทนา
นอกจากนี้เรายังแสดงให้เห็นว่าคุณสามารถกำหนดหลายบทบาทให้กับโมเดลรากฐานโดยใช้ระบบแจ้งเตือนระบบที่เก็บไว้ในตาราง Amazon DynamoDB พื้นที่เก็บข้อมูลส่วนกลางนี้ให้ความยืดหยุ่นและความสามารถรอบตัวช่วยให้คุณสามารถดึงและกำหนดบทบาทที่แตกต่างให้กับโมเดลได้อย่างมีประสิทธิภาพตามกรณีการใช้งานเฉพาะของคุณ
โดยทำตามขั้นตอนที่ระบุไว้ในโพสต์นี้คุณสามารถปลดล็อกศักยภาพของ Generative AI ในแอปพลิเคชัน React ของคุณ ไม่ว่าคุณจะกำลังสร้างแอพใหม่ตั้งแต่เริ่มต้นหรือเพิ่มแอพที่มีอยู่แล้ว Amazon Bedrock และ AWS JavaScript SDK ทำให้ง่ายขึ้นกว่าเดิมในการรวมความสามารถของ AI ที่ทันสมัย
เราขอแนะนำให้คุณสำรวจตัวอย่างรหัสและทรัพยากรที่มีให้เพื่อเริ่มสร้างแอปพลิเคชัน AI ของคุณเอง หากคุณมีคำถามหรือข้อเสนอแนะใด ๆ โปรดแสดงความคิดเห็นด้านล่าง การเข้ารหัสมีความสุข!
ดูข้อมูลเพิ่มเติม
ห้องสมุดนี้ได้รับใบอนุญาตภายใต้ใบอนุญาต MIT-0 ดูไฟล์ใบอนุญาต