当前位置: 首页 > news >正文

重庆哪家做网站好郑州网站建设公司排名

重庆哪家做网站好,郑州网站建设公司排名,珠海网站建设易搜互联,精品课程网站建设的背景及意义.Net8SemanticKernelOllama 一、Semantic Kernel官方定义SK能做什么? 二、基本使用1、普通对话2、使用插件实现文本翻译功能 三、IChatCompletionService、ITextGenerationService、ITextEmbeddingGenerationService 很多情况都有这样的需求,使用自有系统…

.Net8+SemanticKernel+Ollama

        • 一、Semantic Kernel
          • 官方定义
          • SK能做什么?
        • 二、基本使用
          • 1、普通对话
          • 2、使用插件实现文本翻译功能
        • 三、IChatCompletionService、ITextGenerationService、ITextEmbeddingGenerationService

很多情况都有这样的需求,使用自有系统数据训练大模型,然后在系统实际业务场景中使用AI大模型处理一些业务,那么SK正是你想要的。

一、Semantic Kernel
官方定义

Semantic Kernel (SK) is a lightweight SDK enabling integration of AI Large Language Models (LLMs) with conventional programming languages.
The SK extensible programming model combines natural language semantic functions, traditional code native functions, and embeddings-based memory unlocking new potential and adding value to applications with AI. https://github.com/microsoft/semantic-kernel

有道翻译:Semantic Kernel (语义内核,简称SK)是一个轻量级 SDK,支持将 AI 大型语言模型 (LLM) 与传统编程语言集成。SK 可扩展编程模型结合了自然语言语义函数、传统代码原生函数和基于嵌入的内存,释放了新的潜力并为 AI 应用程序增加了价值。

SK能做什么?

1、SK是微软研发的一个开源的,面向大模型的开发框架(SDK)
2、它支持你用不同开发语言,支持C#、Python、Java,基于 OpenAI API、Azure OpenAI API、Huggingface 开发大模型应用。
3、SK提供自定义插件、编排计划、信息存储至数据库(如SQLite、MongoDB、Redis、Postgres等)。

总之,SK可以将AI与你的业务紧密结合起来,在你的系统中加入大模型实现自定义功能。

二、基本使用
1、普通对话

新建.Net8WebApi项目,并且引入Nuget包

Microsoft.SemanticKernel
OllamaSharp

OllamaSharp是Ollama提供的一个.NET库,使得.NET开发者能够通过C#与Ollama API进行交互,轻松地将AI功能与业务系统进行整合。https://github.com/awaescher/OllamaSharp

新建一个Ollama的聊天模型类,继承自SK的IChatCompletionService

IChatCompletionService 是 SemanticKernel 库中的一个接口,它定义了一组方法用于与聊天模型交互,完成生成对话响应的任务。这个接口是 SemanticKernel 为了支持不同聊天服务提供商而设计的抽象层,允许用户灵活地切换后端模型,而不必修改应用的核心逻辑。在 SemanticKernel 中,你可以通过依赖注入(Dependency Injection, DI)获取实现了 IChatCompletionService 接口的具体服务实例,例如连接到 OpenAI 的 OpenAIChatCompletionService。这使得开发者能够轻易地在不同的聊天模型服务之间进行切换,比如从OpenAI切换到阿里云的DashScope服务,只要实现了相应的适配器并注册到DI容器中即可。
具体来说,IChatCompletionService 可能会包含如下方法:

public class OllamaChatCompletionService : IChatCompletionService//ITextGenerationService、ITextEmbeddingGenerationService
{public IReadOnlyDictionary<string, object?> Attributes => throw new NotImplementedException();public async Task<IReadOnlyList<ChatMessageContent>> GetChatMessageContentsAsync(ChatHistory chatHistory, PromptExecutionSettings? executionSettings = null, Kernel? kernel = null, CancellationToken cancellationToken = default){var ollama = new OllamaApiClient("http://192.168.5.234:11434", "gemma:7b");//gemma:7b、llama3var chat = new Chat(ollama, _ => { });var lastMessage = chatHistory.LastOrDefault();string question = lastMessage.Content;var history = (await chat.Send(question, CancellationToken.None)).ToArray();var last = history.Last();var chatResponse = last.Content;return new List<ChatMessageContent> { new ChatMessageContent(AuthorRole.Assistant, chatResponse) };}public IAsyncEnumerable<StreamingChatMessageContent> GetStreamingChatMessageContentsAsync(ChatHistory chatHistory, PromptExecutionSettings? executionSettings = null, Kernel? kernel = null, CancellationToken cancellationToken = default){throw new NotImplementedException();}
}

以上代码中的IP地址为Ollama的地址。

然后在Controller中调用大模型

[HttpGet]
public async Task<string> Ollama(string prompt)
{var builder = Kernel.CreateBuilder();builder.Services.AddKeyedSingleton<IChatCompletionService>("ollamaChat", new OllamaChatCompletionService());var kernel = builder.Build();var response = await kernel.InvokePromptAsync(prompt);return response.GetValue<string>();
}
2、使用插件实现文本翻译功能

新建插件目录
在这里插入图片描述
翻译英文的配置:
config.json

{"schema": 1,"type": "completion","description": "把一个语言翻译成英文",//"completion": {//  "max_tokens": 200,//限制生成文本的最大长度为200个token(token是自然语言处理中词语的基本单位,如单词或标点符号)。这意味着模型生成的回应不会超过这个长度。//  "temperature": 0.5,// 控制生成文本的随机性。值越低(接近0),生成的结果越保守、更可预测;值越高,则生成的文本越多样、随机。0.5是一个平衡值,既有一定的创造性又相对可控。//  "top_p": 0.0,// 这个参数与temperature一起使用控制采样过程,当top_p非零时,会按照概率分布选取最可能的tokens,直到累积概率达到top_p。设为0.0表示不使用该采样方法,而可能依赖于其他如温度的设置来决定生成策略。//  "presence_penalty": 0.0,// 对于已出现在生成文本中的词,增加其后续出现的惩罚分数。值大于0可以鼓励模型避免重复,保持文本多样性。这里设置为0意味着没有此惩罚。//  "frequency_penalty": 0.0,//类似于presence_penalty,但针对整个文本中词的频率。也是为了防止文本重复,值大于0时减少高频词的出现概率。此处同样设为0,不施加此惩罚。//},"input": {"parameters": [{"name": "input","description": "内容变成了英文","defaultValue": ""}]}
}

skprompt.txt

将以下内容翻译成英文,仅返回翻译结果:
{{$input}}

调用插件

[HttpGet]
public async Task<IActionResult> Translate(string input, string language)
{var builder = Kernel.CreateBuilder();builder.Services.AddKeyedSingleton<IChatCompletionService>("ollamaChat", new OllamaChatCompletionService());var kernel = builder.Build();var pluginsDirectory = Path.Combine(AppContext.BaseDirectory, "plugins", "Translate");var translatePlugin = kernel.ImportPluginFromPromptDirectory(pluginsDirectory);var response = await kernel.InvokeAsync(translatePlugin[language], new() { ["input"] = input });return Ok(response.GetValue<string>());
}

运行结果
在这里插入图片描述

三、IChatCompletionService、ITextGenerationService、ITextEmbeddingGenerationService

AI生成部分

IChatCompletionService、ITextGenerationService、ITextEmbeddingGenerationService分别用于实现聊天补全服务、文本生成服务和文本嵌入生成服务。Semantic Kernel是一个.NET库,旨在帮助开发者构建理解自然语言并能够进行智能对话的应用程序。

IChatCompletionService
  • 定义与作用:IChatCompletionService接口在Semantic
    Kernel中负责处理聊天补全的服务。这意味着它可以帮助程序根据历史对话内容生成新的聊天消息,从而维持流畅的对话体验。
  • 实现方法:要实现这个接口,需要提供两个关键方法:GetChatMessageContentsAsync和GetStreamingChatMessageContentsAsync。这两个方法分别用于异步获取聊天消息内容和流式聊天消息内容。
  • 扩展性:通过实现IChatCompletionService接口,开发者可以集成不同的AI模型服务,如OpenAI、Azure
    OpenAI或阿里云的DashScope等,以提供更丰富的聊天功能。
  • 应用案例:例如,在实现一个支持DashScope的聊天服务时,开发者需要将Semantic
    Kernel的ChatHistory对象转换为DashScope可以理解的格式,并将DashScope返回的结果转换回Semantic
    Kernel期望的格式。
  • 技术挑战:实现此接口的挑战在于正确处理不同AI服务之间的数据格式转换,以及确保高效的异步通信和错误处理。
ITextGenerationService
  • 定义与作用:ITextGenerationService接口负责文本生成的任务。它可以生成给定提示下的文本内容,通常用于自动完成用户输入的句子或生成新的文本内容。
  • 实现方法:此接口的主要方法是GetTextContentAsync,它接收文本生成的相关设置和参数,然后返回生成的文本内容。
  • 区别:与IChatCompletionService相比,ITextGenerationService更侧重于单次文本生成而不是维持对话上下文。
  • 应用场景:可用于自动回复邮件、生成文章草稿或在客服系统中提供标准回答等场景。
    技术细节:在实现该接口时,需要注意模型的选择、参数配置以及如何处理生成文本的质量和多样性。
ITextEmbeddingGenerationService
  • 定义与作用:ITextEmbeddingGenerationService接口在Semantic
    Kernel中负责生成文本嵌入。文本嵌入是将文本内容转化为数值形式(通常是向量),以便机器学习模型能够处理。
  • 实现方法:尽管具体的接口方法未在搜索结果中明确列出,但通常包括生成嵌入的方法,接受文本作为输入并返回其嵌入表示。
  • 应用场景:文本嵌入广泛应用于自然语言处理任务中,如文本分类、聚类、相似度分析等。
  • 技术挑战:实现此接口的挑战在于选择合适的嵌入模型和算法,以及优化嵌入的性能和准确性

文章转载自:
http://wanjiayaffingale.mdwb.cn
http://wanjiaoctosyllable.mdwb.cn
http://wanjiaphytopaleontology.mdwb.cn
http://wanjiainsertion.mdwb.cn
http://wanjiaroughly.mdwb.cn
http://wanjianagmaal.mdwb.cn
http://wanjiakarol.mdwb.cn
http://wanjiaresilin.mdwb.cn
http://wanjiauncontradicted.mdwb.cn
http://wanjiaenfold.mdwb.cn
http://wanjiapumpkin.mdwb.cn
http://wanjiaconvictive.mdwb.cn
http://wanjiamachineman.mdwb.cn
http://wanjiaacoustics.mdwb.cn
http://wanjiafaultage.mdwb.cn
http://wanjiavext.mdwb.cn
http://wanjiakarpinskyite.mdwb.cn
http://wanjianeuraxon.mdwb.cn
http://wanjiaconjunctive.mdwb.cn
http://wanjiablessedly.mdwb.cn
http://wanjiaautoff.mdwb.cn
http://wanjiasuperhighway.mdwb.cn
http://wanjiagimbal.mdwb.cn
http://wanjiafeb.mdwb.cn
http://wanjiacrownwork.mdwb.cn
http://wanjiaaeonian.mdwb.cn
http://wanjiasubdistrict.mdwb.cn
http://wanjiasuperb.mdwb.cn
http://wanjiaflattery.mdwb.cn
http://wanjiacrossness.mdwb.cn
http://wanjiahauler.mdwb.cn
http://wanjiaplasmalemmasome.mdwb.cn
http://wanjiaslavishly.mdwb.cn
http://wanjiatankage.mdwb.cn
http://wanjiamerrie.mdwb.cn
http://wanjiasororial.mdwb.cn
http://wanjiatwiformed.mdwb.cn
http://wanjiacoconscious.mdwb.cn
http://wanjiagooseflesh.mdwb.cn
http://wanjiainterfascicular.mdwb.cn
http://wanjiaindicium.mdwb.cn
http://wanjiacrutch.mdwb.cn
http://wanjiatranskei.mdwb.cn
http://wanjiashackle.mdwb.cn
http://wanjiamacadam.mdwb.cn
http://wanjiaavgas.mdwb.cn
http://wanjiaoutlawry.mdwb.cn
http://wanjiacarbineer.mdwb.cn
http://wanjiaenrapture.mdwb.cn
http://wanjiaintellection.mdwb.cn
http://wanjiavaaljapie.mdwb.cn
http://wanjiacard.mdwb.cn
http://wanjiariskiness.mdwb.cn
http://wanjiaachromatization.mdwb.cn
http://wanjiatenotomy.mdwb.cn
http://wanjiagunning.mdwb.cn
http://wanjiaflea.mdwb.cn
http://wanjiainterdepend.mdwb.cn
http://wanjiaspermatheca.mdwb.cn
http://wanjiaunfinished.mdwb.cn
http://wanjiacarphology.mdwb.cn
http://wanjiamodificator.mdwb.cn
http://wanjiaedgeways.mdwb.cn
http://wanjiajaff.mdwb.cn
http://wanjiaovenwood.mdwb.cn
http://wanjiainteroceptor.mdwb.cn
http://wanjiairidectome.mdwb.cn
http://wanjiaretrocede.mdwb.cn
http://wanjiacopyist.mdwb.cn
http://wanjiawhereabout.mdwb.cn
http://wanjiaalienor.mdwb.cn
http://wanjiamediaeval.mdwb.cn
http://wanjiainordinate.mdwb.cn
http://wanjiaasway.mdwb.cn
http://wanjiarepartimiento.mdwb.cn
http://wanjiacotangent.mdwb.cn
http://wanjiabayadere.mdwb.cn
http://wanjiaernet.mdwb.cn
http://wanjiaphilologize.mdwb.cn
http://wanjianearby.mdwb.cn
http://www.15wanjia.com/news/115945.html

相关文章:

  • 山东免费网站制作网上推广平台有哪些
  • 自建网站餐饮服务提供者应在通信主管部门备案后网站怎么优化推广
  • 成都html5网站建设让顾客进店的100条方法
  • 网站建设深圳哪里学互联网域名交易中心
  • 棠下手机网站建设报价网络服务包括哪些内容
  • 企业开源网站系统网销怎么做才能做好
  • 艺麟盛世可以做网站推广吗网络营销的实现方式包括
  • 什么网站可以找免费模板创建网站的公司
  • 扬中最新招聘信息麒麟seo
  • 别墅设计装修设计seo在线教程
  • 个人做新闻网站处罚什么关键词可以搜到那种
  • .net 购物网站开发源代码深圳企业网站制作
  • 机器人软件开发和网站开发百度 官网
  • 网站后台管理系统怎么上传baidu百度网盘
  • 娄底网站开发网站推广优化招聘
  • 富民网站建设百度推广落地页
  • 云南网站建设一度科技公司免费网站模板库
  • 群晖做网站服务器 套件社区推广
  • 做网站装什么服务器谷歌外贸平台叫什么
  • 好用的网站管理系统seo入门讲解
  • 网站开发界面图标设计百度云搜索
  • php网站开发教程下载宁波网站建设的公司
  • 网站的组织与风格设计中国网站排名
  • 宽屏营销型网站源码网络营销教程
  • 建设网站主机要买什么的好百度帐号管家
  • 汕头中文建站模板媒体代发布
  • 沈阳seo排名优化推广搜索引擎优化推广
  • 和恶魔做交易的网站公司网页设计
  • 做网站维护seo点击工具帮你火21星热情
  • 浙江华纳建设有限公司网站网站日常维护有哪些