แพ็คเกจ SPEZI LLM Swift มีโมดูลที่มีประโยชน์ในการรวมฟังก์ชันการทำงานที่เกี่ยวข้องกับ LLM ในแอปพลิเคชันของคุณ แพ็คเกจนี้มีเครื่องมือที่จำเป็นทั้งหมดสำหรับการดำเนินการ LLM ในท้องถิ่นการใช้ LLM ที่ใช้ OpenAI ระยะไกลรวมถึง LLM ที่ทำงานบนทรัพยากรโหนดหมอกภายในเครือข่ายท้องถิ่น
![]() | ![]() | ![]() |
---|---|---|
OpenAI LLM Chat View | Language Model Download | Local LLM Chat View |
คุณต้องเพิ่มแพ็คเกจ Spezillm Swift ลงในแอพของคุณในแพ็คเกจ XCode หรือ Swift
สำคัญ
หากแอปพลิเคชันของคุณยังไม่ได้รับการกำหนดค่าให้ใช้ SPEZI ให้ทำตามบทความ SPEZI SETUP เพื่อตั้งค่าโครงสร้างพื้นฐาน Core Spezi
เนื่องจาก Spezi LLM มีเป้าหมายที่แตกต่างกันหลากหลายสำหรับฟังก์ชัน LLM เฉพาะโปรดติดตามคู่มือการตั้งค่าเพิ่มเติมในส่วนเป้าหมายที่เกี่ยวข้องของ readMe นี้
Spezi LLM จัดเตรียมเป้าหมายจำนวนหนึ่งเพื่อช่วยให้นักพัฒนารวม LLMs ในแอปพลิเคชันที่ใช้ Spezi:
ส่วนด้านล่างเน้นการตั้งค่าและการใช้ขั้นพื้นฐานของเป้าหมาย spezillmlocal, spezillmopenai และ spezillmfog เพื่อรวมโมเดลภาษาในแอปพลิเคชันที่ใช้ Spezi
บันทึก
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการใช้งานของแต่ละเป้าหมายโปรดดูเอกสาร DOCC ของแพ็คเกจ
เป้าหมายช่วยให้นักพัฒนาสามารถดำเนินการแบบจำลองภาษาขนาดกลาง (LLMS) ได้อย่างง่ายดาย โมดูลช่วยให้คุณสามารถโต้ตอบกับ LLM ที่ใช้งานได้ในท้องถิ่นผ่าน APIs ที่ใช้ Swift อย่างหมดจดไม่จำเป็นต้องมีการโต้ตอบกับรหัสระดับต่ำโดยการสร้างบนโครงสร้างพื้นฐานของเป้าหมาย Spezillm
สำคัญ
Spezi LLM Local ไม่สามารถใช้งานได้กับเครื่องจำลอง mlx-swift
พื้นฐานต้องใช้ mtlgpufamily โลหะที่ทันสมัยและตัวจำลองไม่ได้ให้สิ่งนั้น
สำคัญ
สิ่งสำคัญ: ในการใช้เป้าหมาย LLM Local LLM บางตัวจำเป็นต้องเพิ่มการเพิ่มสิทธิ์การใช้งานหน่วยความจำที่เพิ่มขึ้นในโครงการ
คุณสามารถกำหนดค่าการดำเนินการ LLM ในพื้นที่ของ Spezi ได้ภายใน SpeziAppDelegate
ทั่วไป ในตัวอย่างด้านล่าง LLMRunner
จากเป้าหมาย Spezillm ซึ่งรับผิดชอบในการให้ฟังก์ชันการทำงานของ LLM ภายในระบบนิเวศ Spezi ได้รับการกำหนดค่าด้วย LLMLocalPlatform
จากเป้าหมาย spezillmlocal สิ่งนี้เตรียม LLMRunner
เพื่อดำเนินการแบบจำลองภาษาในท้องถิ่น
class TestAppDelegate : SpeziAppDelegate {
override var configuration : Configuration {
Configuration {
LLMRunner {
LLMLocalPlatform ( )
}
}
}
}
ตัวอย่างรหัสด้านล่างแสดงการโต้ตอบกับ LLM ในท้องถิ่นผ่านทาง Spezillm LLMRunner
ซึ่งถูกฉีดเข้าไปใน Environment
Swiftui ผ่าน Configuration
ที่แสดงด้านบน
LLMLocalSchema
กำหนดประเภทและการกำหนดค่าของ LLMLocalSession
ที่ถูก execute การแปลงนี้ทำผ่าน LLMRunner
ที่ใช้ LLMLocalPlatform
การอนุมานผ่าน LLMLocalSession/generate()
ส่งคืน AsyncThrowingStream
ที่ให้ผล String
สร้างทั้งหมด
struct LLMLocalDemoView : View {
@ Environment ( LLMRunner . self ) var runner
@ State var responseText = " "
var body : some View {
Text ( responseText )
. task {
// Instantiate the `LLMLocalSchema` to an `LLMLocalSession` via the `LLMRunner`.
let llmSession : LLMLocalSession = runner (
with : LLMLocalSchema (
model : . llama3_8B_4bit ,
formatChat : LLMLocalSchema . PromptFormattingDefaults . llama3
)
)
do {
for try await token in try await llmSession . generate ( ) {
responseText . append ( token )
}
} catch {
// Handle errors here. E.g., you can use `ViewState` and `viewStateAlert` from SpeziViews.
}
}
}
}
บันทึก
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการใช้ spezillmlocal โปรดดูเอกสาร DOCC
โมดูลที่ช่วยให้คุณสามารถโต้ตอบกับโมเดลภาษาขนาดใหญ่ที่ใช้ GPT (LLMs) จาก OpenAI ภายในแอปพลิเคชัน SPEZI ของคุณ SpeziLLMOpenAI
จัดหา API ที่ใช้ Swift ที่บริสุทธิ์สำหรับการโต้ตอบกับ Openai GPT API ซึ่งสร้างอยู่ด้านบนของโครงสร้างพื้นฐานของเป้าหมาย Spezillm นอกจากนี้ SpeziLLMOpenAI
ยังให้ภาษาเฉพาะของโดเมนที่ประกาศใช้เพื่อใช้กลไกการเรียกใช้ฟังก์ชัน OpenAI สิ่งนี้ช่วยให้การสื่อสารที่มีโครงสร้างแบบสองทิศทางและที่เชื่อถือได้ระหว่าง OpenAI LLMs และเครื่องมือภายนอกเช่นระบบนิเวศ Spezi
เพื่อที่จะใช้ OpenAI LLMs ภายในระบบนิเวศ Spezi, spezillm LLMRunner
จำเป็นต้องเริ่มต้นใน Configuration
spezi ด้วย LLMOpenAIPlatform
หลังจาก LLMRunner
สามารถใช้สำหรับการอนุมานของ OpenAI LLMS ดูเอกสาร SPEZILLM สำหรับรายละเอียดเพิ่มเติม
import Spezi
import SpeziLLM
import SpeziLLMOpenAI
class LLMOpenAIAppDelegate : SpeziAppDelegate {
override var configuration : Configuration {
Configuration {
LLMRunner {
LLMOpenAIPlatform ( )
}
}
}
}
สำคัญ
หากใช้ SpeziLLMOpenAI
บน macOS ให้แน่ใจว่าได้เพิ่ม Keychain Access Groups
ให้กับโครงการ XCode Enclosing ผ่าน Project_name> การลงนามและความสามารถ> + ความสามารถ อาเรย์ของกลุ่มพวงกุญแจสามารถปล่อยว่างไว้ได้เฉพาะการให้สิทธิ์พื้นฐานเท่านั้น
ตัวอย่างโค้ดด้านล่างแสดงการโต้ตอบกับ OpenAI LLM ผ่าน SPEZillm LLMRunner
ซึ่งถูกฉีดเข้าไปใน Environment
Swiftui ผ่าน Configuration
ที่แสดงด้านบน
LLMOpenAISchema
กำหนดประเภทและการกำหนดค่าของ LLMOpenAISession
TO-BE การแปลงนี้ทำผ่าน LLMRunner
ที่ใช้ LLMOpenAIPlatform
การอนุมานผ่าน LLMOpenAISession/generate()
ส่งคืน AsyncThrowingStream
ที่ให้ผลที่สร้างทั้งหมดของ String
ที่สร้างขึ้นทั้งหมด
import SpeziLLM
import SpeziLLMOpenAI
import SwiftUI
struct LLMOpenAIDemoView : View {
@ Environment ( LLMRunner . self ) var runner
@ State var responseText = " "
var body : some View {
Text ( responseText )
. task {
// Instantiate the `LLMOpenAISchema` to an `LLMOpenAISession` via the `LLMRunner`.
let llmSession : LLMOpenAISession = runner (
with : LLMOpenAISchema (
parameters : . init (
modelType : . gpt3_5Turbo ,
systemPrompt : " You're a helpful assistant that answers questions from users. " ,
overwritingToken : " abc123 "
)
)
)
do {
for try await token in try await llmSession . generate ( ) {
responseText . append ( token )
}
} catch {
// Handle errors here. E.g., you can use `ViewState` and `viewStateAlert` from SpeziViews.
}
}
}
}
บันทึก
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการใช้ Spezillmopenai โปรดดูเอกสาร DOCC
เป้าหมาย SpeziLLMFog
ช่วยให้คุณใช้ LLMs ที่ทำงานบนทรัพยากรการคำนวณโหนดหมอกภายในเครือข่ายท้องถิ่น โหนดหมอกโฆษณาบริการของพวกเขาผ่าน MDNS ทำให้ลูกค้าสามารถค้นพบโหนดหมอกทั้งหมดที่ให้บริการโฮสต์เฉพาะภายในเครือข่ายท้องถิ่น จากนั้น SpeziLLMFog
จะส่งงานการอนุมาน LLM แบบไดนามิกไปยังโหนดหมอกแบบสุ่มภายในเครือข่ายท้องถิ่นและสตรีมการตอบสนองต่อพื้นผิวให้กับผู้ใช้
สำคัญ
SpeziLLMFog
ต้องการ SpeziLLMFogNode
ภายในเครือข่ายท้องถิ่นที่โฮสต์บนทรัพยากรการคำนวณบางอย่างที่ดำเนินการตามคำขอการอนุมาน SpeziLLMFog
จัดเตรียมแพ็คเกจที่ใช้ SpeziLLMFogNode
Docker ซึ่งช่วยให้สามารถติดตั้งโหนดหมอกเหล่านี้ได้ง่าย ดูไดเรกทอรี FogNode
ในระดับรากของแพ็คเกจ SPM รวมถึง README.md
ที่เกี่ยวข้องสำหรับรายละเอียดเพิ่มเติม
เพื่อที่จะใช้หมอก LLMs ภายในระบบนิเวศ Spezi, spezillm LLMRunner
จำเป็นต้องเริ่มต้นใน Configuration
spezi ด้วย LLMFogPlatform
หลังจาก LLMRunner
สามารถใช้สำหรับการอนุมานกับ FOG LLMS ดูเอกสาร SPEZILLM สำหรับรายละเอียดเพิ่มเติม LLMFogPlatform
จะต้องเริ่มต้นด้วยใบรับรองรูท CA ที่กำหนดเองที่ใช้เพื่อลงนามใบรับรองบริการเว็บ Fog Node (ดูเอกสาร FogNode/README.md
สำหรับข้อมูลเพิ่มเติม) คัดลอกใบรับรองรูท CA จากโหนดหมอกเป็นทรัพยากรไปยังแอปพลิเคชันโดยใช้ SpeziLLMFog
และใช้เพื่อเริ่มต้น LLMFogPlatform
ภายใน Configuration
SPEZI
class LLMFogAppDelegate : SpeziAppDelegate {
private nonisolated static var caCertificateUrl : URL {
// Return local file URL of root CA certificate in the `.crt` format
}
override var configuration : Configuration {
Configuration {
LLMRunner {
// Set up the Fog platform with the custom CA certificate
LLMRunner {
LLMFogPlatform ( configuration : . init ( caCertificate : Self . caCertificateUrl ) )
}
}
}
}
}
ตัวอย่างโค้ดด้านล่างแสดงการโต้ตอบกับหมอก LLM ผ่าน spezillm LLMRunner
ซึ่งถูกฉีดเข้าไปใน Environment
Swiftui ผ่าน Configuration
ที่แสดงด้านบน
LLMFogSchema
กำหนดประเภทและการกำหนดค่าของ LLMFogSession
การแปลงนี้ทำผ่าน LLMRunner
ที่ใช้ LLMFogPlatform
การอนุมานผ่าน LLMFogSession/generate()
ส่งคืน AsyncThrowingStream
ที่ให้ชิ้น String
ที่สร้างขึ้นทั้งหมด LLMFogSession
จะค้นพบโหนดหมอก LLM ทั้งหมดที่มีอยู่ทั้งหมดภายในเครือข่ายท้องถิ่นเมื่อตั้งค่าและจัดส่งงานการอนุมาน LLM ไปยังทรัพยากรการคำนวณหมอก
สำคัญ
LLMFogSchema
ยอมรับการปิดที่ส่งคืนโทเค็นการอนุญาตที่ผ่านการร้องขอทุกครั้งไปยังโหนดหมอกในฟิลด์ Bearer
HTTP ผ่านทาง LLMFogParameters/init(modelType:systemPrompt:authToken:)
โทเค็นถูกสร้างขึ้นผ่านการปิดการร้องขอการอนุมาน LLM ทุกครั้งเนื่องจาก LLMFogSession
อาจยาวนานและโทเค็นอาจหมดอายุ ตรวจสอบให้แน่ใจว่าการปิดโทเค็นอย่างเหมาะสมเพื่อป้องกันไม่ให้โทเค็นรีเฟรชไปกลับไปยังระบบภายนอก
struct LLMFogDemoView : View {
@ Environment ( LLMRunner . self ) var runner
@ State var responseText = " "
var body : some View {
Text ( responseText )
. task {
// Instantiate the `LLMFogSchema` to an `LLMFogSession` via the `LLMRunner`.
let llmSession : LLMFogSession = runner (
with : LLMFogSchema (
parameters : . init (
modelType : . llama7B ,
systemPrompt : " You're a helpful assistant that answers questions from users. " ,
authToken : {
// Return authorization token as `String` or `nil` if no token is required by the Fog node.
}
)
)
)
do {
for try await token in try await llmSession . generate ( ) {
responseText . append ( token )
}
} catch {
// Handle errors here. E.g., you can use `ViewState` and `viewStateAlert` from SpeziViews.
}
}
}
}
บันทึก
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการใช้ spezillmfog โปรดดูเอกสาร DOCC
ยินดีต้อนรับการมีส่วนร่วมในโครงการนี้ โปรดตรวจสอบให้แน่ใจว่าได้อ่านแนวทางการบริจาคและจรรยาบรรณของผู้มีส่วนร่วมก่อน
โครงการนี้ได้รับใบอนุญาตภายใต้ใบอนุญาต MIT ดูใบอนุญาตสำหรับข้อมูลเพิ่มเติม