国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Semantic Kernel 入門系列:? Planner 計劃管理

這篇具有很好參考價值的文章主要介紹了Semantic Kernel 入門系列:? Planner 計劃管理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Semantic Kernel 入門系列:? Planner 計劃管理

Semantic Kernel 的一個核心能力就是實現(xiàn)“目標導(dǎo)向”的AI應(yīng)用。

目標導(dǎo)向

“目標導(dǎo)向”聽起來是一個比較高大的詞,但是卻是實際生活中我們處理問題的基本方法和原則。

顧名思義,這種方法的核心就是先確定目標,然后再尋找實現(xiàn)目標的方法和步驟。這對于人來說的是很自然的事情,但是對于機器則不然。一大堆的指令和控制邏輯其實都是在完成另外一種產(chǎn)出導(dǎo)向的結(jié)果。所有的流程和過程都需要提前預(yù)定義好,然后期待一個結(jié)果的產(chǎn)出。

如今,借助 LLM AI 的力量,我們可以輕松的實現(xiàn)目標導(dǎo)向的過程。

在 Semantic Kernel中,Planner就用于這項工作。

我們可以提前準備好所需的Skill,根據(jù)設(shè)定好的最終目標,通過Planner,可以將目標分解為需要執(zhí)行的任務(wù)列表,并且可以指定好對應(yīng)的參數(shù)傳遞,然后逐個任務(wù)執(zhí)行,從而實現(xiàn)最終目標。

做好技能準備

為了讓LLM AI更好的理解我們所提供的技能,需要明確地配置好每個技能本身的描述和參數(shù)描述。

對于的Semantic Function來說,可以在config.json中配置。以下是一個Translate的配置。

需要注意的就是 descriptioninput 參數(shù),最終會成為的LLM是否選擇使用的判斷標準。而這一切都是基于語義化的理解。

{
    "schema": 1,
    "type": "completion",
    "description": "Translate the input into the specified language",
    "completion": {
        "max_tokens": 1024,
        "temperature": 0.0,
        "top_p": 0.9,
        "presence_penalty": 0.0,
        "frequency_penalty": 0.0
    },
    "input": {
        "parameters": [
        {
            "name": "input",
            "description": "input text",
            "defaultValue": ""
        },
        {
            "name":"language",
            "description":"the specified language",
            "defaultValue":"English"
        }
        ]
    }
}

對于Native Function ,可以使用特性進行聲明,其實 SKFunction 中用于添加Function的描述, SKFunctionContextParameter 用于添加參數(shù)的說明。

public class EmailSKill {
	[SKFunction("Send email conten to receiver")]
	[SKFunctionContextParameter(Name ="content", Description = "email content")]
	[SKFunctionContextParameter(Name ="receiver", Description = "the email address of receiver")]
	public void SendTo(SKContext context){
		var email = context["content"];
		var receiver = context["receiver"];
		Console.WriteLine(
$"""
mail to: {receiver} 
{email}
""");
	}
}

準備好技能之后,就可以將這些技能導(dǎo)入到Kernel中,等待后續(xù)使用。

作為示例,這里導(dǎo)入了三個功能:

  1. MySkill.WriteText : 文案寫作
  2. MySkill.Translate :文本翻譯
  3. email.SendTo : 郵件發(fā)送

使用Planner

然后我們就可以開始使用 Planner了。

0.13之前版本 Planner本身也是 Semantic Kernel中的一個Skill,融合了Semantic Function 和 Native Function。

和通常的Skill一樣,導(dǎo)入 PlannerSkill 后即可使用。

var planner = kernel.ImportSkill(new PlannerSkill(kernel),"plan");

Planner作為一個核心組件,在0.13版本之后從Skill中提升了出來,目前(0.13版本)使用了獨立的SequentialPlanner,直接創(chuàng)建即可使用。

var planner = new SequentialPlanner(kernel);

指定好任務(wù)目標。

var goal = "The PowerBlog is about to release a new product, please write a chinese press release about the new product and send it to mail@example.com";
0.13之前版本 然后就可以執(zhí)行 `CreatePlan` 創(chuàng)建一個Plan。
var plan = await kernel.RunAsync(goal,planner["CreatePlan"]);

此時可以使用Plan.PathString查看當(dāng)前的任務(wù)編排。

Plan所有狀態(tài)的結(jié)果都會保存在Context中,所以可以通過 context.Variables.ToPlan() 方法獲取Plan對象。

plan.Variables.ToPlan().PlanString.Dump("Create Plan");
/*
<goal>
The PowerBlog is about to release a new product, please write a chinese press release about the new product and send it to mail@example.com
</goal>
<plan>
  <function.MySkill.WriteText input="The PowerBlog is about to release a new product" setContextVariable="PRESS_RELEASE"/>
  <function.MySkill.Translate input="$PRESS_RELEASE" language="Chinese" setContextVariable="TRANSLATED_PRESS_RELEASE"/>
  <function.email.SendTo content="$TRANSLATED_PRESS_RELEASE" receiver="mail@example.com"/>
</plan>
*/

然后就可以直接使用 SequentialPlanner 創(chuàng)建一個Plan了。

var plan = await planner.CreatePlanAsync(goal);

此時可以使用plan.ToJson(),查看任務(wù)編排的情況。

plan.ToJson().Dump("Create Plan");
0.13之前版本

創(chuàng)建好了 Plan 就可以使用 ExecutePlan 執(zhí)行了。

由于每次只能執(zhí)行一個Function,所以我們需要通過循環(huán)來執(zhí)行所有Function。
同時根據(jù)Plan的狀態(tài),判斷是否執(zhí)行成功,是否執(zhí)行完成。

Plan 有兩種狀態(tài),一種是 IsSuccessful ,表示當(dāng)前的Plan是否執(zhí)行成功。

另一個是 IsComplete,表示整個Plan是否執(zhí)行完成。

async Task<SKContext> ExecutePlanAsync(IKernel kernel, SKContext plan)
{
	var executionResults = plan;
	while (!executionResults.Variables.ToPlan().IsComplete)
	{
		var result = await kernel.RunAsync(executionResults.Variables, planner["ExecutePlan"]);
		var planResult = result.Variables.ToPlan();
		if (planResult.IsSuccessful)
		{
			if (planResult.IsComplete)
			{
				break;
			}
		}
		else
		{
			break;
		}
		executionResults = result;
	}
	return executionResults;
}

var result = await ExecutePlanAsync(kernel,plan);
// output:
/*
mail to: mail@example.com

介紹PowerBlog——專為企業(yè)和企業(yè)家設(shè)計的終極博客平臺。我們的新產(chǎn)品旨在幫助您輕松創(chuàng)建、管理和優(yōu)化博客內(nèi)容。

PowerBlog是為想要創(chuàng)建與競爭對手不同的專業(yè)博客的企業(yè)和企業(yè)家完美的解決方案。通過我們的直觀用戶界面,您可以快速創(chuàng)建和管理博客文章,優(yōu)化SEO內(nèi)容,并跟蹤博客的性能。

我們的新產(chǎn)品還包括強大的功能,如自動內(nèi)容策劃、社交媒體整合和分析工具。通過這些功能,您可以輕松監(jiān)控博客的性能,并就內(nèi)容策略做出明智的決定。

PowerBlog是為想要創(chuàng)建與競爭對手不同的專業(yè)博客的企業(yè)和企業(yè)家完美的解決方案。通過我們的直觀用戶界面,您可以快速創(chuàng)建和管理博客文章,優(yōu)化SEO內(nèi)容,并跟蹤博客的性能。

我們很高興向客戶提供這款新產(chǎn)品,期待幫助您創(chuàng)建一個成功的博客。今天就注冊,開始創(chuàng)建與競爭對手不同的內(nèi)容吧。
*/

最后根據(jù)狀態(tài)判斷Plan最后執(zhí)行是否成功,并從plan.Result 中獲取最后的輸出結(jié)果。

if(!result.Variables.ToPlan().IsSuccessful) {
	result.Variables.ToPlan().Result.Dump("Complete!");
}else {
	result.Variables.ToPlan().Result.Dump("Error");
}
/*
:Complete!:

介紹PowerBlog——專為企業(yè)和企業(yè)家設(shè)計的終極博客平臺。我們的新產(chǎn)品旨在幫助您輕松創(chuàng)建、管理和優(yōu)化博客內(nèi)容。

PowerBlog是為想要創(chuàng)建與競爭對手不同的專業(yè)博客的企業(yè)和企業(yè)家完美的解決方案。通過我們的直觀用戶界面,您可以快速創(chuàng)建和管理博客文章,優(yōu)化SEO內(nèi)容,并跟蹤博客的性能。

我們的新產(chǎn)品還包括強大的功能,如自動內(nèi)容策劃、社交媒體整合和分析工具。通過這些功能,您可以輕松監(jiān)控博客的性能,并就內(nèi)容策略做出明智的決定。

PowerBlog是為想要創(chuàng)建與競爭對手不同的專業(yè)博客的企業(yè)和企業(yè)家完美的解決方案。通過我們的直觀用戶界面,您可以快速創(chuàng)建和管理博客文章,優(yōu)化SEO內(nèi)容,并跟蹤博客的性能。

我們很高興向客戶提供這款新產(chǎn)品,期待幫助您創(chuàng)建一個成功的博客。今天就注冊,開始創(chuàng)建與競爭對手不同的內(nèi)容吧。
*/

0.13 版本之后,任務(wù)執(zhí)行方法更加簡單。
由于Plan本身就是一組 ISKFunction,所以可以直接使用 Kernel.RunAsync執(zhí)行

var result = await kernel.RunAsync(plan);

和通常的Skill執(zhí)行一樣,查看result.Result即可得到結(jié)果。

result.Result.Dump("RESULT");

如果需要逐步執(zhí)行查看結(jié)果,或者進行干預(yù)的話,也可以手動的調(diào)用執(zhí)行過程。執(zhí)行的狀態(tài)都由Plan本身來維護,使用 HasNextStep可以查看當(dāng)前所有任務(wù)是否執(zhí)行完成,可以使用Plan 的 InvokeNextStepAsync 來執(zhí)行下一步,也可以使用Kernel的StepAsync逐步執(zhí)行。

async Task<Plan> ExecutePlanAsync(IKernel kernel, Plan plan,string input = "")
{
	while(plan.HasNextStep){
	   if(string.IsNullOrWhiteSpace(input)){
	   	await kernel.StepAsync(plan);
	   }else {
	   	await kernel.StepAsync(input,plan);
	   }
	   plan.State.Dump();
	   if(!plan.HasNextStep){
	   		break;
	   }
	}
	return plan;
}
await ExecutePlanAsync(kernel,plan);

Plan執(zhí)行完成的結(jié)果,可以直接使用Plan.State.ToString() 獲取。

plan.State.ToString().Dump("RESULT");
// output
/*
PowerBlog很高興地宣布即將推出我們的最新產(chǎn)品,這將徹底改變?nèi)藗兩畹姆绞?。我們一直在不懈努力地開發(fā)一款產(chǎn)品,它將對我們的客戶生活產(chǎn)生重大影響,我們相信我們已經(jīng)做到了這一點。

我們的新產(chǎn)品旨在成為一款改變游戲規(guī)則的產(chǎn)品,為用戶提供獨特的體驗,增強他們的日常生活。我們相信,這款產(chǎn)品將成為任何想要提高生產(chǎn)力、效率和整體生活質(zhì)量的人必備的產(chǎn)品。

我們知道人們總是在尋找簡化生活的方法,而這正是我們的新產(chǎn)品的目的。它將幫助用戶更好地管理時間,保持組織,更有效地實現(xiàn)他們的目標。

我們很高興能夠向我們的客戶提供這款產(chǎn)品,我們迫不及待地想看到它對他們生活的積極影響。請繼續(xù)關(guān)注我們最新產(chǎn)品的發(fā)布,準備體驗一種新的生活方式。
*/

至此,我們就掌握了Semantic Kernel 當(dāng)前所有的核心概念和基本使用方法。

TIPS: 由于模型的能力問題,目前推薦使用GPT4模型執(zhí)行以上操作。


參考資料:文章來源地址http://www.zghlxwxcb.cn/news/detail-415608.html

  1. Planner in Semantic Kernel | Microsoft Learn
  2. semantic-kernel/05-using-the-planner.ipynb at main · microsoft/semantic-kernel · GitHub
  3. What is Semantic Kernel? | Microsoft Learn
  4. kernel-syntax-examples/Example12_Planning

到了這里,關(guān)于Semantic Kernel 入門系列:? Planner 計劃管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Semantic Kernel 入門系列:?LLM的魔法

    Semantic Kernel 入門系列:?LLM的魔法

    ChatGPT 只是LLM 的小試牛刀,讓人類能夠看到的是機器智能對于語言系統(tǒng)的理解和掌握。 如果只是用來閑聊,而且只不過是將OpenAI的接口封裝一下,那么市面上所有的ChatGPT的換皮應(yīng)用都差不多。這就像是買了個徠卡鏡頭的手機,卻只用來掃二維碼一樣。 由于微軟的財大氣粗,

    2023年04月09日
    瀏覽(23)
  • Semantic Kernel 入門系列:?Native Function

    Semantic Kernel 入門系列:?Native Function

    語義的歸語義,語法的歸語法。 最基本的Native Function定義只需要在方法上添加 SKFunction 的特性即可。 默認情況下只需要傳遞一個string 參數(shù)就行,如果需要多個參數(shù)的話,和Semantic Function一樣,也是使用Context,不過這里傳進去是 SKContext 。在方法上使用 SKFunctionContextParameter 聲

    2023年04月11日
    瀏覽(16)
  • Semantic Kernel 入門系列:?LLM降臨的時代

    Semantic Kernel 入門系列:?LLM降臨的時代

    不論你是否關(guān)心,不可否認,AGI的時代即將到來了。 在這個突如其來的時代中,OpenAI的ChatGPT無疑處于浪潮之巔。而在ChatGPT背后,我們不能忽視的是LLM(Large Language Model)大型語言模型。 一夜之間所有的大廠商都在搞LLM,雖然很難有誰能和OpenAI相匹敵,但是隨著AI領(lǐng)域的新摩

    2023年04月08日
    瀏覽(20)
  • Semantic Kernel 入門系列:?Connector連接器

    Semantic Kernel 入門系列:?Connector連接器

    當(dāng)我們使用Native Function的時候,除了處理一些基本的邏輯操作之外,更多的還是需要進行外部數(shù)據(jù)源和服務(wù)的對接,要么是獲取相關(guān)的數(shù)據(jù),要么是保存輸出結(jié)果。這一過程在Semantic Kernel中可以被歸類為Connector。 Connector更像是一種設(shè)計模式,并不像Function和Memory 一樣有強制和

    2023年04月15日
    瀏覽(26)
  • Semantic Kernel 入門系列:?突破提示詞的限制

    Semantic Kernel 入門系列:?突破提示詞的限制

    LLM對自然語言的理解和掌握在知識內(nèi)容的解讀和總結(jié)方面提供了強大的能力。 但是由于訓(xùn)練數(shù)據(jù)本身來自于公共領(lǐng)域,也就注定了無法在一些小眾或者私有的領(lǐng)域能夠足夠的好的應(yīng)答。 因此如何給LLM 提供足夠多的信息上下文,就是如今的LLM AI應(yīng)用可以充分發(fā)揮能力的地方了

    2023年04月13日
    瀏覽(19)
  • LangChain vs Semantic Kernel

    LangChain vs Semantic Kernel

    每當(dāng)向他人介紹 Semantic Kernel, 會得到的第一個問題就是 Semantic Kernel 類似于LangChain嗎,或者是c# 版本的LangChain嗎? 為了全面而不想重復(fù)的回答這個問題,因此我寫下這篇文章。 在 ChatGPT 之前,構(gòu)建 集成AI的應(yīng)用程序的主要分為兩個步驟: 機器學(xué)習(xí)工程師/數(shù)據(jù)科學(xué)家創(chuàng)建模

    2023年04月20日
    瀏覽(29)
  • 體驗Semantic Kernel圖片內(nèi)容識別

    體驗Semantic Kernel圖片內(nèi)容識別

    ????前幾日在瀏覽devblogs.microsoft.com的時候,看到了一篇名為Image to Text with Semantic Kernel and HuggingFace的文章。這篇文章大致的內(nèi)容講的是,使用 Semantic Kernel 結(jié)合 HuggingFace 來實現(xiàn)圖片內(nèi)容識別。注意,這里說的是圖片內(nèi)容識別,并非是 OCR ,而是它可以大致的描述圖片里的主要

    2024年04月08日
    瀏覽(23)
  • 使用 Semantic Kernel 實現(xiàn)  Microsoft 365 Copilot 架構(gòu)

    使用 Semantic Kernel 實現(xiàn) Microsoft 365 Copilot 架構(gòu)

    3月16日,微軟發(fā)布了微軟365 Copilot[1]。 Microsoft 365 Copilot 將您現(xiàn)有的 Word、Excel、PowerPoint、Outlook 和 Teams 與大型語言模型 (LLM) 的強大功能以及來自 Microsoft Graph 和 Microsoft 365 應(yīng)用的數(shù)據(jù)相結(jié)合,以創(chuàng)建前所未有的體驗。正如您在官方視頻中看到的那樣,Microsoft 365 Copilot的核心

    2024年02月02日
    瀏覽(23)
  • 旁門左道:借助 HttpClientHandler 攔截請求,體驗 Semantic Kernel 插件

    前天嘗試通過 one-api + dashscope(阿里云靈積) + qwen(通義千問) 運行 Semantic Kernel 插件(Plugin) ,結(jié)果嘗試失敗,詳見前天的博文。 今天換一種方式嘗試,選擇了一個旁門左道走走看,看能不能在不使用大模型的情況下讓 Semantic Kernel 插件運行起來,這個旁門左道就是從 Stephen T

    2024年02月19日
    瀏覽(21)
  • 實現(xiàn)阿里云模型服務(wù)靈積  DashScope 的  Semantic Kernel Connector

    實現(xiàn)阿里云模型服務(wù)靈積 DashScope 的 Semantic Kernel Connector

    Semantic Kernel 內(nèi)置的 IChatCompletionService 實現(xiàn)只支持 OpenAI 與 Azure OpenAI,而我卻打算結(jié)合 DashScope(阿里云模型服務(wù)靈積) 學(xué)習(xí) Semantic Kernel。 于是決定自己動手實現(xiàn)一個支持 DashScope 的 Semantic Kernel Connector —— DashScopeChatCompletionService,實現(xiàn)的過程也是學(xué)習(xí) Semantic Kernel 源碼的過程,

    2024年02月19日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包