DotPrompt เป็นไลบรารีง่ายๆ ที่ช่วยให้คุณสามารถสร้างพรอมต์โดยใช้ไวยากรณ์ตามการกำหนดค่า โดยไม่จำเป็นต้องฝังลงในแอปพลิเคชันของคุณ รองรับการสร้างเทมเพลตสำหรับพร้อมต์ผ่านภาษาเทมเพลตของ Fluid ซึ่งช่วยให้คุณใช้พร้อมต์เดิมซ้ำและส่งผ่านค่าที่แตกต่างกันในขณะรันไทม์ได้
ไฟล์พร้อมท์คือไฟล์ใดๆ ที่ลงท้ายด้วยนามสกุล .prompt
ไฟล์จริงนั้นเป็นไฟล์กำหนดค่า YAML และส่วนขยายช่วยให้ไลบรารีสามารถระบุไฟล์ได้อย่างรวดเร็วตามวัตถุประสงค์ที่ต้องการ
มีปัญหาที่ทราบเกี่ยวกับไฟล์ .prompt
ซึ่งทำให้เกิดพฤติกรรมที่ผิดปกติในเครื่องมือ เช่น Rider และ IntelliJ คุณสามารถแก้ไขปัญหานี้ได้ด้วยการปิดใช้งานปลั๊กอิน Terminal หรือใช้ตัวแก้ไขอื่นเพื่อแก้ไขไฟล์
เนื้อหาของไฟล์พร้อมท์มีคุณสมบัติการระบุระดับบนสุด ตามด้วยข้อมูลการกำหนดค่า และสุดท้ายคือพร้อมท์
ไฟล์พร้อมท์ที่สมบูรณ์จะมีลักษณะเช่นนี้
ชื่อ: ตัวอย่างรุ่น: gpt-4oconfig: เอาต์พุตรูปแบบ: ข้อความ อุณหภูมิ: 0.9 โทเค็นสูงสุด: 500 อินพุต: พารามิเตอร์: หัวข้อ: สไตล์สตริง?: stringdefault: หัวข้อ: โซเชียลมีเดียพร้อมท์: ระบบ: | คุณเป็นผู้ช่วยวิจัยที่เป็นประโยชน์ซึ่งจะให้คำตอบเชิงพรรณนาสำหรับหัวข้อที่กำหนดและผลกระทบต่อสังคมของผู้ใช้: | อธิบายผลกระทบของ {{ topic }} ต่อวิธีที่เรามีส่วนร่วมกับเทคโนโลยีในสังคม {% if style -%} คุณช่วยตอบในรูปแบบของ {{ style }} {% endif -%}fewShots: - ผู้ใช้: การตอบสนองของบลูทูธคืออะไร: บลูทูธเป็นมาตรฐานเทคโนโลยีไร้สายระยะสั้นที่ใช้สำหรับการแลกเปลี่ยนข้อมูลระหว่างอุปกรณ์พื้นฐานและอุปกรณ์เคลื่อนที่ในระยะทางสั้นๆ และสร้างเครือข่ายส่วนบุคคล - ผู้ใช้: การเรียนรู้ของเครื่องแตกต่างจากการเขียนโปรแกรมแบบดั้งเดิมอย่างไร การตอบสนอง: การเรียนรู้ของเครื่องช่วยให้อัลกอริทึมเรียนรู้จากข้อมูลและปรับปรุงเมื่อเวลาผ่านไปโดยไม่ต้องตั้งโปรแกรมไว้อย่างชัดเจน - ผู้ใช้: คุณช่วยยกตัวอย่าง AI ในชีวิตประจำวันได้ไหม คำตอบ: AI ถูกใช้ในผู้ช่วยเสมือน เช่น Siri และ Alexa ซึ่งเข้าใจและตอบสนองต่อคำสั่งเสียง
name
นี้เป็นทางเลือกในการกำหนดค่า หากไม่ได้ระบุไว้ ชื่อจะถูกนำมาจากชื่อไฟล์ลบด้วยนามสกุล ดังนั้นไฟล์ที่เรียกว่า gen-lookup-code.prompt
จะได้รับชื่อ gen-lookup-code
สิ่งนี้ไม่มีบทบาทในการสร้างพร้อมท์ด้วยตนเอง (แม้ว่าการอัปเดตในอนาคตอาจเกิดขึ้น) แต่ช่วยให้คุณระบุแหล่งที่มาของพร้อมท์เมื่อทำการบันทึก และเลือกพร้อมท์จากตัวจัดการพร้อมท์
หากคุณใช้คุณสมบัตินี้ เมื่อโหลดไฟล์แล้ว ชื่อจะถูกแปลงเป็นตัวพิมพ์เล็กและช่องว่างจะถูกแทนที่ด้วยเครื่องหมายยัติภังค์ ดังนั้นชื่อของ My cool Prompt
ก็จะกลายเป็น my-cool-prompt
การทำเช่นนี้เพื่อให้แน่ใจว่าชื่อจะเข้าถึงได้ง่ายจากโค้ด
นี่เป็นอีกหนึ่งรายการทางเลือกในการกำหนดค่า แต่จะให้ข้อมูลแก่ผู้ใช้ไฟล์พร้อมท์ว่าควรใช้โมเดลใด (หรือการปรับใช้สำหรับ Azure Open AI) เนื่องจากอาจเป็นค่าว่างได้หากไม่ได้ระบุไว้ ผู้บริโภคควรตรวจสอบก่อนใช้งาน ตัวอย่างเช่น:
var model = promptFile.Model ?? "ค่าเริ่มต้นของฉัน";
การใช้ตัวเลือกนี้ช่วยให้วิศวกรพร้อมท์ระบุได้อย่างชัดเจนว่าตั้งใจจะใช้โมเดลใดเพื่อให้ได้ผลลัพธ์ที่ดีที่สุด
ส่วน config
มีรายการระดับบนสุดที่จัดเตรียมไว้เพื่อให้ไคลเอนต์ใช้ในการเรียก LLM เพื่อตั้งค่าตัวเลือกในการโทรแต่ละครั้ง คุณสมบัติ outputFormat
รับค่าของ text
หรือ json
ขึ้นอยู่กับว่า LLM มีวัตถุประสงค์เพื่อตอบสนองต่อคำขออย่างไร หากระบุ json
LLM บางตัวจำเป็นต้องมีระบบหรือผู้ใช้แจ้งว่าเอาต์พุตที่คาดหวังคือ JSON เช่นกัน หากไลบรารีตรวจไม่พบคำว่า JSON
ในพรอมต์ ไลบรารีจะเพิ่มคำสั่งขนาดเล็กต่อท้ายพรอมต์ของระบบเพื่อขอให้การตอบกลับอยู่ในรูปแบบ JSON
ส่วน input
ประกอบด้วยรายละเอียดเกี่ยวกับพารามิเตอร์ที่ระบุให้กับพร้อมต์ สิ่งเหล่านี้ไม่จำเป็น และคุณสามารถสร้างพร้อมท์ที่ไม่มีการส่งค่าใดๆ ได้เลย แต่ถ้าคุณทำสิ่งเหล่านี้คือสิ่งที่คุณต้องการ
ใต้ input
คือส่วน parameters
ซึ่งประกอบด้วยรายการคู่คีย์-ค่า โดยคีย์คือชื่อของพารามิเตอร์ และค่าคือประเภท หากคุณต่อท้ายชื่อพารามิเตอร์ด้วยเครื่องหมายคำถาม (เช่น style?
) จะถือว่าเป็นพารามิเตอร์ทางเลือก และจะไม่เกิดข้อผิดพลาดหากคุณไม่ได้ระบุค่าไว้
ประเภทที่รองรับคือ:
ประเภทพารามิเตอร์ | ประเภทดอทเน็ต | เทียบเท่ากับ C# |
---|---|---|
เชือก | System.String | เชือก |
บูล | System.Boolean | บูล |
วันที่และเวลา | ระบบDateTimeOffset | ระบบDateTimeOffset |
ตัวเลข | ระบบไบต์ ระบบ.SByte ระบบ UInt16 ระบบInt16 ระบบ UInt32 System.Int32 ระบบ UInt64 System.Int64 ระบบ.เดี่ยว ระบบ.ดับเบิ้ล ระบบทศนิยม | ไบต์ สไบต์ ushort สั้น ไม่ได้ ภายใน อู่หลง ยาว ลอย สองเท่า ทศนิยม |
วัตถุ | System.Object | วัตถุ |
4อันแรกใช้ตามที่จัดไว้ให้ วัตถุที่ถูกส่งผ่านไปยังพรอมต์จะมีวิธี ToString
ที่ถูกเรียกให้ใช้ในพรอมต์
ประเภท datetime
สามารถแสดงโดยใช้การแสดง ToString
เริ่มต้น หรือคุณสามารถใช้ตัวกรองของ Fluid เพื่อระบุรูปแบบ เปลี่ยนเขตเวลา และอื่นๆ ได้
หากคุณระบุค่าสำหรับพารามิเตอร์ที่ไม่สอดคล้องกับประเภทที่ระบุ ข้อผิดพลาดจะเกิดขึ้น
นอกจากนี้ใน input
ยังเป็นส่วน default
ส่วนนี้ช่วยให้คุณสามารถระบุค่าเริ่มต้นสำหรับพารามิเตอร์ใดๆ ได้ ดังนั้นหากไม่มีการระบุพารามิเตอร์ในแอปพลิเคชันของคุณ ระบบจะใช้ค่าเริ่มต้นแทน
ส่วน prompts
ประกอบด้วยเทมเพลตสำหรับระบบและพร้อมท์ผู้ใช้ แม้ว่าจำเป็นต้องมีพร้อมท์ผู้ใช้ คุณไม่จำเป็นต้องระบุพร้อมท์ของระบบ
ทั้งพรอมต์ของ system
และ user
เป็นค่าสตริงและสามารถกำหนดในลักษณะใดก็ได้ที่ YAML รองรับ ตัวอย่างด้านบนคือการใช้สตริงหลายบรรทัดโดยที่การขึ้นบรรทัดใหม่จะถูกรักษาไว้
YAML รองรับค่าสตริงหลายบรรทัดผ่าน Block Scalars ได้เป็นอย่างดี ด้วยสิ่งเหล่านี้ จึงรองรับทั้งสตริง ตามตัวอักษร และ แบบพับ ด้วยสตริงตัวอักษร อักขระบรรทัดใหม่ในสตริงอินพุตจะถูกคงไว้ และสตริงยังคงเหมือนเดิมทุกประการ เมื่อพับแล้ว อักขระบรรทัดใหม่จะยุบและแทนที่ด้วยอักขระเว้นวรรค ช่วยให้คุณสามารถเขียนสตริงที่ยาวมากบนหลายบรรทัดได้ การใช้แบบพับ หากคุณใช้อักขระบรรทัดใหม่สองตัว ระบบจะเพิ่มบรรทัดใหม่ให้กับสตริง
# พับตัวอย่าง: > เรือที่แขวนอยู่บนท้องฟ้าในลักษณะเดียวกับที่อิฐไม่ได้แขวน# ผลิต:# เรือที่แขวนอยู่บนท้องฟ้าในลักษณะเดียวกับที่อิฐไม่ได้แขวน
# ตัวอย่างตามตัวอักษร: | เรือที่แขวนอยู่บนท้องฟ้าในลักษณะเดียวกับที่อิฐไม่ได้แขวน# ผลิต:# เรือที่แขวนอยู่ในท้องฟ้า# ในลักษณะเดียวกับที่อิฐไม่ได้แขวน
ไวยากรณ์ของข้อความแจ้งใช้ภาษาเทมเพลต Fluid ซึ่งอิงจาก Liquid ที่สร้างโดย Shopify ภาษาเทมเพลตนี้ช่วยให้เราสามารถกำหนดพร้อมท์ผู้ใช้ซึ่งสามารถเปลี่ยนแปลงได้ขึ้นอยู่กับค่าที่ส่งผ่านไปยังตัวแยกวิเคราะห์เทมเพลต
ในตัวอย่างด้านบน คุณจะเห็น {{ topic }}
ซึ่งเป็นตัวยึดตำแหน่งสำหรับค่าที่ถูกส่งเข้ามา และจะถูกแทนที่ลงในเทมเพลตโดยตรง นอกจากนี้ยังมีส่วน {% if style -%} ... {% endif -%}
ซึ่งบอกให้ parser รวมส่วนนี้เฉพาะในกรณีที่พารามิเตอร์ style
มีค่า -%}
ที่ส่วนท้ายของเครื่องหมายมีสัญลักษณ์ยัติภังค์ซึ่งบอกโปรแกรมแยกวิเคราะห์ว่าควรยุบบรรทัดว่าง
มีบทช่วยสอนดีๆ เกี่ยวกับการเขียนเทมเพลตด้วย Fluid ทางออนไลน์
เมื่อคุณสร้างพรอมต์ พรอมต์จะไม่แทนที่เทมเพลต แต่จะให้เอาต์พุตที่สร้างขึ้นแก่คุณเท่านั้น ซึ่งหมายความว่าคุณสามารถสร้างพรอมต์ได้บ่อยเท่าที่คุณต้องการด้วยค่าอินพุตที่แตกต่างกัน
fewShots
เป็นส่วนที่ช่วยให้ผู้เขียนพร้อมต์สามารถจัดเตรียมเทคนิคพร้อมต์แบบไม่กี่ช็อตในการแก้ปัญหา เมื่อสร้างพร้อมท์ คุณจะต้องรวมสิ่งเหล่านี้ พร้อมด้วยพร้อมท์ของระบบ และจากนั้นพร้อมท์ผู้ใช้ นี่เป็นตัวอย่างว่า LLM ควรตอบสนองต่อพร้อมท์ผู้ใช้อย่างไร หากคุณใช้ OpenAI หรือ Azure OpenAI คุณสามารถใช้วิธีการขยาย (ดูภายหลัง) ซึ่งจะสร้างข้อความทั้งหมดให้กับคุณ
ไฟล์พร้อมท์สามารถเข้าถึงได้โดยตรง หากคุณมีไฟล์เพียงไม่กี่ไฟล์หรือต้องการทดสอบอย่างรวดเร็ว นี่เป็นวิธีที่ค่อนข้างง่ายในการดำเนินการดังกล่าว
ใช้ DotPrompt;var promptFile = PromptFile.FromFile("path/to/prompt-file.prompt");var systemPrompt = promptFile.GetSystemPrompt(null);var userPrompt = promptFile.GetUserPrompt(พจนานุกรมใหม่<string, object>{{ " หัวข้อ", "บลูทูธ" },{ "สไตล์", "พนักงานขายรถยนต์มือสอง" }});
หากไฟล์พร้อมท์มีตัวอย่างข้างต้น มันจะสร้างสิ่งต่อไปนี้
System Prompt:
You are a helpful research assistant who will provide descriptive responses for a given topic and how it impacts society
User Prompt:
Explain the impact of bluetooth on how we engage with technology as a society
Can you answer in the style of a used car salesman
ซึ่งอาจส่งผลให้ได้รับคำตอบจาก LLM ซึ่งมีลักษณะเช่นนี้ (ขออภัย)
ท่านสุภาพสตรีและสุภาพบุรุษ มารวมตัวกันและให้ฉันเล่าให้คุณฟังเกี่ยวกับปาฏิหาริย์ของเทคโนโลยีสมัยใหม่ที่ปฏิวัติวิธีการเชื่อมต่อกับอุปกรณ์ของเรา ฉันกำลังพูดถึง Bluetooth! บลูทูธคือฮีโร่ที่ไม่ได้ร้อง ความลับที่ทำให้ชีวิตของเราสะดวกสบายมากขึ้น เชื่อมต่อมากขึ้น และมีเทคโนโลยีขั้นสูงมากขึ้นอย่างแน่นอน ลองนึกภาพสิ่งนี้: การสื่อสารที่ราบรื่นและไร้สายระหว่างอุปกรณ์โปรดของคุณ ไม่ต้องมีสายพันกันอีกต่อไป ไม่ต้องวุ่นวายอีกต่อไป เหมือนได้บัตร VIP สู่แถวหน้าแห่งอนาคต!
-
ตัวจัดการพรอมต์เป็นวิธีที่แนะนำในการจัดการไฟล์พรอมต์ของคุณ ช่วยให้คุณสามารถโหลดได้จากสถานที่ เข้าถึงโดยใช้ชื่อ จากนั้นใช้ในแอปพลิเคชันของคุณ
ค่าเริ่มต้นสำหรับตัวจัดการพรอมต์คือการเข้าถึงไฟล์ในโฟลเดอร์ prompts
ในเครื่อง แม้ว่าคุณจะสามารถระบุพาธอื่นได้หากต้องการ
// โหลดจากตำแหน่งเริ่มต้นของไดเร็กทอรี `prompts`var promptManager = new PromptManager();var promptFile = promptManager.GetPromptFile("example");// ใช้โฟลเดอร์อื่นvar promptManager = new PromptManager("another-location"); var promptFile = promptManager.GetPromptFile("example");// แสดงรายการพร้อมท์ทั้งหมดที่โหลด var promptNames = promptManager.ListPromptFileNames();
ตัวจัดการพรอมต์ใช้อินเทอร์เฟซ IPromptManager
ดังนั้นหากคุณต้องการใช้สิ่งนี้ผ่านคอนเทนเนอร์ DI หรือรูปแบบ IoC คุณสามารถจัดเตรียมเวอร์ชันจำลองสำหรับการทดสอบได้อย่างง่ายดาย
ตัวจัดการพร้อมต์ยังสามารถใช้อินสแตนซ์ IPromptStore
ซึ่งช่วยให้คุณสร้างร้านค้าแบบกำหนดเองซึ่งอาจไม่อิงตามไฟล์ (โปรดดูที่ การสร้างที่เก็บพร้อมต์แบบกำหนดเอง) นอกจากนี้ยังอนุญาตให้จัดเตรียมอินเทอร์เฟซจำลองเพื่อให้คุณสามารถเขียนการทดสอบหน่วยซึ่งไม่ขึ้นอยู่กับกลไกการจัดเก็บข้อมูล
การใช้ตัวจัดการพร้อมท์เพื่ออ่านพร้อมท์แล้วใช้ในการโทรไปยังตำแหน่งข้อมูล Azure OpenAI
หมายเหตุ ตัวอย่างนี้ถือว่ามีไดเร็กทอรี prompts
พร้อมด้วยไฟล์ prompt ที่พร้อมใช้งาน
การใช้ System.ClientModel; การใช้ Azure.AI.OpenAI; การใช้ DotPrompt; var openAiClient = ใหม่ (Uri ใหม่ ("https://endpoint"), ApiKeyCredential ใหม่ ("abc123")); var promptManager = ใหม่ PromptManager (); var promptFile = promptManager.GetPromptFile("example");// พรอมต์ของระบบและวิธีการแจ้งผู้ใช้จะใช้พจนานุกรมที่มีค่าที่จำเป็นสำหรับ// เทมเพลต หากไม่มีความจำเป็นคุณสามารถส่งผ่าน null.var systemPrompt = promptFile.GetSystemPrompt(null);var userPrompt = promptFile.GetUserPrompt(new Dictionary<string, object>{{ "topic", "bluetooth" },{ "style" , "พนักงานขายรถยนต์มือสอง" }});var client = openAiClient.GetChatClient(promptFile.Model ?? "default-model");var เสร็จสิ้น = กำลังรอ client.CompleteChatAsync([SystemChatMessage ใหม่ (systemPrompt), UserChatMessage ใหม่ (userPrompt)], ChatCompletionOptions ใหม่ (ResponseFormat = promptFile.OutputFormat == OutputFormat.Json ? ChatResponseFormat.JsonObject : ChatResponseFormat.Text,Temperature = promptFile.Config.Temperature,MaxTokens = promptFile.Config.MaxTokens));
หรือใช้วิธีการขยายของ OpenAI ที่ให้มา
ใช้ System.ClientModel; การใช้ Azure.AI.OpenAI; การใช้ DotPrompt; การใช้ DotPrompt.Extensions.OpenAi; var openAiClient = ใหม่ (Uri ใหม่ ("https://endpoint"), ApiKeyCredential ใหม่ ("abc123")); var promptManager = new PromptManager();var promptFile = promptManager.GetPromptFile("example");var promptValues = พจนานุกรมใหม่<string, object>{{ "topic", "bluetooth" },{ "style", "พนักงานขายรถยนต์มือสอง" }};var client = openAiClient.GetChatClient(promptFile.Model ?? "default-model");var เสร็จสิ้น = กำลังรอ client.CompleteChatAsync (promptFile.ToOpenAiChatMessages (promptValues), promptFile.ToOpenAiChatCompletionOptions ()); var response = allowance.Value; Console.WriteLine (response.Content [0]. Text);
และตอนนี้ หากเราต้องแก้ไข prompt เราก็สามารถเปลี่ยนไฟล์ prompt และปล่อยโค้ดของเราไว้เฉยๆ (สมมติว่าพารามิเตอร์ไม่เปลี่ยนแปลง)
ด้านบนแสดงวิธีที่คุณสามารถใช้ DotPrompt เพื่ออ่านไฟล์พร้อมท์จากดิสก์ แต่จะเป็นอย่างไรหากคุณมีสถานการณ์ที่คุณต้องการให้การแจ้งเตือนอยู่ในจุดศูนย์กลางมากกว่า เช่น บริการจัดเก็บข้อมูลบนคลาวด์ หรือฐานข้อมูล ตัวจัดการพรอมต์สามารถใช้อินสแตนซ์ IPromptStore
เป็นอาร์กิวเมนต์ได้ ในตัวอย่างทั้งหมดข้างต้นใช้ FilePromptStore
ซึ่งรวมอยู่ด้วย แต่คุณสามารถสร้างของคุณเองได้ เพียงแค่ต้องใช้อินเทอร์เฟซและคุณทำเสร็จแล้ว
เพื่อเป็นตัวอย่าง ต่อไปนี้เป็นการใช้งานแบบง่ายๆ ซึ่งใช้ Azure Storage Table Store เพื่อเก็บรายละเอียดพร้อมท์
/// <summary>/// การใช้งาน IPromptStore สำหรับ Azure Storage Tables/// </summary>คลาสสาธารณะ AzureTablePromptStore : IPromptStore{/// <summary>/// โหลดพรอมต์จากร้านค้าตาราง/// < /สรุป>สาธารณะ IEnumerable<PromptFile> Load(){var tableClient = GetTableClient();var promptEntities = tableClient.Query<PromptEntity>(e => e.PartitionKey == "DotPromptTest");var promptFiles = promptEntities.Select(pe => pe.ToPromptFile()).ToList();return promptFiles;}/// <summary>/// รับไคลเอนต์ตาราง /// </summary>Private Static TableClient GetTableClient(){// แทนที่รายการการกำหนดค่าที่นี่ด้วยค่าของคุณหรือเปลี่ยนไปใช้// การตรวจสอบสิทธิ์แบบอิง Entravar client = new TableServiceClient(Uri ใหม่($"https://{Configuration.StorageAccountName}.table.core.windows.net/"), TableSharedKeyCredential ใหม่ (Configuration.StorageAccountName, Configuration.StorageAccountKey)); var tableClient = client.GetTableClient("พร้อมท์ ");tableClient.CreateIfNotExists();return tableClient;}}/// <summary>/// แสดงถึง บันทึกที่เก็บไว้ในตารางการจัดเก็บ/// </summary>คลาสสาธารณะ PromptEntity : ITableEntity{/// <summary>/// ได้รับตั้งค่าคีย์พาร์ติชันสำหรับบันทึก/// </summary>สตริงสาธารณะ PartitionKey { รับ; ชุด; } = string.Empty;/// <summary>/// Gets ตั้งค่าคีย์แถวสำหรับบันทึก/// </summary>สตริงสาธารณะ RowKey { get; ชุด; } = string.Empty;/// <summary>/// Gets ตั้งค่าการประทับเวลาของรายการ/// </summary>public DateTimeOffset? การประทับเวลา { รับ; ชุด; }/// <summary>/// รับตั้งค่าบันทึก ETag ค่า/// </summary>สาธารณะ ETag ETag { รับ; ชุด; }/// <summary>/// ได้รับ ตั้งค่าโมเดลให้ใช้/// </summary>สตริงสาธารณะ? รุ่น { รับ; ชุด; }/// <summary>/// Gets ตั้งค่ารูปแบบเอาต์พุต/// </summary>สตริงสาธารณะ OutputFormat { get; ชุด; } = string.Empty;/// <summary>/// Gets ตั้งค่าจำนวนโทเค็นสูงสุด/// </summary>public int MaxTokens { get; ชุด; }/// <summary>/// Gets ตั้งค่าข้อมูลพารามิเตอร์ซึ่งถือเป็นค่าสตริง JSON/// </summary>พารามิเตอร์สตริงสาธารณะ { get; ชุด; } = string.Empty;/// <summary>/// Gets ตั้งค่าเริ่มต้นซึ่งถือเป็นค่าสตริง JSON/// </summary>สตริงสาธารณะ Default { get; ชุด; } = string.Empty;/// <summary>/// Gets ตั้งค่าเทมเพลตพร้อมท์ระบบ/// </summary>สตริงสาธารณะ SystemPrompt { get; ชุด; } = string.Empty;/// <summary>/// Gets ตั้งค่าเทมเพลตพร้อมท์ผู้ใช้/// </summary>สตริงสาธารณะ UserPrompt { get; ชุด; } = string.Empty;/// <summary>/// ส่งคืนบันทึกเอนทิตีพร้อมท์ไปยัง <see cref="PromptFile"/> instance/// </summary>/// <returns></returns>public PromptFile ToPromptFile(){var parameter = new Dictionary<string, string>();var defaults = new Dictionary<string, object>();// หากมีค่าพารามิเตอร์ ให้แปลงเป็นพจนานุกรมถ้า (!string.IsNullOrEmpty(Parameters)){var enterParameters = (JsonObject)JsonNode.Parse(Parameters)!;foreach (var (prop, propType) ใน enterParameters){parameters.Add(prop, propType?.AsValue().ToString () ?? string.Empty);}}// หากมีค่าเริ่มต้น ให้แปลงเป็นพจนานุกรมถ้า (!string.IsNullOrEmpty(Default)){var enterDefaults = (JsonObject)JsonNode.Parse(Default)!;foreach (var (prop, defaultValue) ในentityDefaults){defaults.Add(prop, defaultValue?.AsValue().GetValue <object>() ?? string.Empty);}}// สร้างไฟล์ prompt ใหม่ promptFile = new PromptFile{Name = RowKey,Model = Model,Config = new PromptConfig{OutputFormat = Enum.Parse<OutputFormat>(OutputFormat, true),MaxTokens = MaxTokens,Input = new InputSchema{Parameters = พารามิเตอร์,Default = defaults}},Prompts = Prompts ใหม่{ System = SystemPrompt, User = UserPrompt}}; return promptFile;}}
จากนั้นเพื่อใช้สิ่งนี้เราจะทำดังต่อไปนี้
var promptManager = ใหม่ PromptManager(ใหม่ AzureTablePromptStore());var promptFile = promptManager.GetPromptFile("ตัวอย่าง");
ยังมีขอบเขตสำหรับงานที่ต้องทำที่นี่ และบางรายการที่เรากำลังพิจารณารวมอยู่ด้วย
ตัวเลือกการกำหนดค่าเพิ่มเติม
เทคนิคการกระตุ้นเพิ่มเติม
เปิดรับข้อเสนอแนะ มีอะไรที่คุณอยากเห็นบ้างไหม? แจ้งให้เราทราบ