AppFunctions ช่วยให้แอป Android แชร์ฟังก์ชันการทำงานที่เฉพาะเจาะจง ซึ่งระบบ รวมถึงเอเจนต์และผู้ช่วย AI ต่างๆ สามารถค้นหาและเรียกใช้ได้ การกำหนดฟังก์ชันเหล่านี้จะช่วยให้แอปของคุณให้บริการ ข้อมูล และ การดำเนินการแก่ระบบปฏิบัติการ Android ซึ่งช่วยให้ผู้ใช้ทำงานให้เสร็จสมบูรณ์ผ่านเอเจนต์ AI และการโต้ตอบระดับระบบได้
AppFunctions ทำหน้าที่เป็นเครื่องมือเทียบเท่าบนอุปกรณ์เคลื่อนที่ภายในModel Context Protocol (MCP) แม้ว่าโดยปกติแล้ว MCP จะกำหนดมาตรฐานวิธีที่เอเจนต์
เชื่อมต่อกับเครื่องมือฝั่งเซิร์ฟเวอร์ แต่ AppFunctions ก็มีกลไกเดียวกันสำหรับ
แอป Android ซึ่งจะช่วยให้คุณแสดงความสามารถของแอปเป็น "เครื่องมือ" ที่จัดระเบียบได้ ซึ่งแอปที่ได้รับอนุญาต (ผู้โทร) จะค้นพบและ
เรียกใช้เพื่อตอบสนองความตั้งใจของผู้ใช้ได้ ผู้โทรต้องมีสิทธิ์ EXECUTE_APP_FUNCTIONS ในการค้นหาและเรียกใช้ AppFunctions
และสามารถรวมเอเจนต์ แอป และผู้ช่วย AI เช่น Gemini
AppFunctions ทำงานได้กับอุปกรณ์ที่ใช้ Android 16 ขึ้นไป
ตัวอย่าง Use Case
AppFunctions เป็นกลไกที่มีประสิทธิภาพในการทำให้งานเป็นอัตโนมัติและปรับปรุงการโต้ตอบของผู้ใช้ การแสดงความสามารถของแอปจะช่วยให้ผู้ใช้ บรรลุเป้าหมายที่ซับซ้อนได้โดยใช้ภาษาธรรมชาติ ซึ่งมักจะช่วยลดความจำเป็นในการ นำทางด้วยตนเองแบบทีละขั้นตอนด้วย UI ของคุณ
สถานการณ์ต่อไปนี้แสดงให้เห็นวิธีใช้ AppFunctions เพื่อขับเคลื่อน ประสบการณ์ภายในหมวดหมู่แอปต่างๆ
- การจัดการงานและประสิทธิภาพการทำงาน
- คำขอของผู้ใช้: "เตือนให้ฉันไปรับพัสดุที่ทำงานวันนี้ตอน 5 โมงเย็น"
- การดำเนินการ AppFunction: ผู้เรียกจะระบุแอปการจัดการงานที่เกี่ยวข้อง และเรียกใช้ฟังก์ชันเพื่อสร้างงาน โดยจะป้อนข้อมูลในช่องชื่อ เวลา และสถานที่โดยอัตโนมัติ ตามพรอมต์ของผู้ใช้
- สื่อและความบันเทิง
- คำขอของผู้ใช้: "สร้างเพลย์ลิสต์ใหม่ที่มีอัลบั้มแจ๊สยอดนิยมจากปีนี้"
- การดำเนินการ AppFunction: ผู้เรียกใช้จะเรียกใช้ฟังก์ชันการสร้างเพลย์ลิสต์ ภายในแอปเพลง โดยส่งบริบท เช่น "อัลบั้มแจ๊สยอดนิยมสำหรับปี 2026" เป็น คำค้นหาเพื่อสร้างและเปิดเนื้อหาทันที
- เวิร์กโฟลว์ข้ามแอป
- คำขอของผู้ใช้: "ค้นหาสูตรบะหมี่จากอีเมลของ Lisa แล้วเพิ่ม ส่วนผสมลงในรายการช็อปปิ้งของฉัน"
- การดำเนินการ AppFunction: คำขอนี้ใช้ฟังก์ชันจากหลายแอป โดยก่อนอื่น ผู้โทรจะใช้ฟังก์ชันค้นหาของแอปอีเมลเพื่อดึงเนื้อหา จากนั้นจะดึงส่วนผสมที่เกี่ยวข้องและเรียกใช้ฟังก์ชันของแอปรายการช็อปปิ้ง เพื่อเพิ่มรายการของผู้ใช้
- ปฏิทินและการกำหนดเวลา
- คำขอของผู้ใช้: "เพิ่มปาร์ตี้วันเกิดของแม่ลงในปฏิทินของฉันในวันจันทร์หน้า เวลา 18:00 น."
- การดำเนินการ AppFunction: แอปที่มีความสามารถซึ่งได้รับอนุมัติจะเรียกใช้ฟังก์ชัน "สร้างกิจกรรม" ของแอปปฏิทิน โดยแยกวิเคราะห์บริบทที่เกี่ยวข้อง เช่น "วันจันทร์หน้า" และ "18:00 น." เพื่อสร้างรายการโดยที่ผู้ใช้ไม่ต้องเปิดปฏิทินด้วยตนเอง
วิธีการทำงานของ AppFunctions
AppFunctions เป็นฟีเจอร์แพลตฟอร์ม Android 16 และไลบรารี Jetpack ที่มาพร้อมกัน ซึ่งช่วยให้แอปแสดงฟังก์ชันที่เฉพาะเจาะจงสำหรับผู้โทร เช่น แอปตัวแทน เพื่อเข้าถึงและเรียกใช้ในอุปกรณ์
แผนภาพต่อไปนี้แสดงขั้นตอนทั่วไปของวิธีที่แอปแชร์ AppFunction กับเอเจนต์และวิธีที่เอเจนต์ดำเนินการ AppFunction ตัวแทนมีแนวโน้มที่จะพิจารณาทั้งเครื่องมือ MCP ระยะไกลฝั่งเซิร์ฟเวอร์และ AppFunctions ในเครื่องร่วมกันเมื่อ จัดการคำขอของผู้ใช้ ขั้นตอนโดยละเอียดสำหรับการใช้ AppFunctions ในเครื่องมีดังนี้
- การประกาศ AppFunction: แอป Android สร้างขึ้นเพื่อแสดง AppFunction เช่น "สร้างโน้ต" หรือ "ส่งข้อความ"
- การสร้างสคีมา: ไลบรารี AppFunctions Jetpack จะสร้างไฟล์สคีมา XML ที่แสดงรายการ AppFunctions ทั้งหมดที่ประกาศไว้ในแอป โดยระบบปฏิบัติการ Android จะใช้ไฟล์นี้ เพื่อจัดทำดัชนี AppFunctions ที่พร้อมใช้งาน
- การดึงข้อมูลเมตา: ตัวแทนสามารถดึงข้อมูลเมตา AppFunction ได้โดย การค้นหา
- การเลือกและการเรียกใช้ AppFunction: เอเจนต์จะเลือกและเรียกใช้ AppFunction ที่เหมาะสมพร้อมพารามิเตอร์ที่เหมาะสมตามพรอมต์ของผู้ใช้
ไลบรารี AppFunctions Jetpack ช่วยให้การเปิดเผยฟังก์ชันการทำงานของแอปง่ายขึ้น
โปรเซสเซอร์คำอธิบายประกอบช่วยให้นักพัฒนาแอปใส่คำอธิบายประกอบในฟังก์ชันที่ต้องการ
แสดง จากนั้นผู้โทรจะค้นพบและเรียกใช้ฟังก์ชันที่จัดทำดัชนีเหล่านี้ได้โดยใช้
AppFunctionManager
แอปของคุณไม่จำเป็นต้องยืนยันว่าฟีเจอร์ AppFunction รองรับหรือไม่ เนื่องจากระบบจะจัดการโดยอัตโนมัติภายในไลบรารี Jetpack เช่น AppFunctionManager สามารถตรวจสอบได้ว่าฟีเจอร์นี้รองรับหรือไม่
ต่อไปนี้คือตัวอย่าง AppFunctions สำหรับแอปจดบันทึกที่มีความสามารถในการสร้าง แก้ไข และแสดงรายการโน้ต
class NoteFunctions(
private val noteRepository: NoteRepository
) {
/**
* A note.
*
* @param id The note's ID.
* @param title The note's title.
* @param content The note's content.
*/
@AppFunctionSerializable(isDescribedByKDoc = true)
data class Note(val id: Int, val title: String, val content: String)
/**
* Lists all available notes.
*
* @param appFunctionContext The context in which the AppFunction is executed.
*/
@AppFunction(isDescribedByKDoc = true)
suspend fun listNotes(appFunctionContext: AppFunctionContext): List<Note>? {
return if (noteRepository.appNotes.isEmpty()) null else viewModel.appNotes
}
/**
* Adds a new note to the app.
*
* @param appFunctionContext The context in which the AppFunction is executed.
* @param title The title of the note.
* @param content The note's content.
*/
@AppFunction(isDescribedByKDoc = true)
suspend fun createNote(
appFunctionContext: AppFunctionContext,
title: String,
content: String
): Note {
return noteRepository.createNote(title, content)
}
/**
* Edits a single note.
*
* @param appFunctionContext The context in which the AppFunction is executed.
* @param noteId The target note's ID.
* @param title The new title if it should be updated.
* @param content The new content if it should be updated.
*/
@AppFunction(isDescribedByKDoc = true)
suspend fun editNote(
appFunctionContext: AppFunctionContext,
noteId: String,
title: String?,
content: String,
): Note? {
return noteRepository.updateNote(noteId, title, content)
}
}