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

网站自定义代码百度风云榜

网站自定义代码,百度风云榜,做公司网站 java php,做网站知识点背景 前几天,公司的同事们一起吃了个饭,餐桌上大家聊到大模型的落地场景。我个人在去年已经利用百度千帆平台写过案例,并发过博客(传送门👉:利用文心千帆打造一个属于自己的小师爷)&#xff0c…

背景

前几天,公司的同事们一起吃了个饭,餐桌上大家聊到大模型的落地场景。我个人在去年已经利用百度千帆平台写过案例,并发过博客(传送门👉:利用文心千帆打造一个属于自己的小师爷),只不过那时候没有再继续深入真正做好大模型在项目上的落地。

这次刚刚开发完的一个考试系统,里面正好有一个落地场景,利用AI的能力来生成题库的解析内容,可以大幅提高效率。

准备工作

因为公司的云服务商是腾讯,所以我这次使用的是腾讯混元大模型,在开始集成工作前,要先去腾讯云的控制台开通相关的服务。

事实上,所有集成任何第三方云端大模型的步骤都差不多,这一步我就不多说了,参照文档操作即可(传送门👉:腾讯混元大模型)。

需要注意的是,新申请的服务,可以领取一定的免费额度,而且lite模型目前是一直免费的,这点和各家也都差不多。在这里插入图片描述
在这里插入图片描述

集成

接入方式

大模型集成到项目的方式有很多,有的可能就是一个模块,有的可能是一个独立服务,总之就是根据实际的项目情况,接入的方式,呈现的结果都是不一样的。

我这边把大模型在系统里的定位就是一个随叫随到的智能助手,在整个后台管理工作的场景中,都可以方便的和大模型交互。

业务代码之前

配置

"AiConfigs": [{"IsOpenaiApi": "yes","Model": "moonshotai","SecretKey": "","SecretId": "","AppId": "","ApiKey": "sk-{xxxxxxxxxx}"},{"IsOpenaiApi": "no","Model": "hunyuan","SecretId": "{xxx}","SecretKey": "{xxx}","AppId": "xxx","ApiKey": ""}

这里,我是把请求模型的密钥参数放到配置文件里了,事实上,生产环境中更推荐的做法是把密钥参数放到系统的环境变量里更加安全。

这里这样配置是为以后扩展做准备,此次集成的是混元大模型的sdk,申请的方式是按sdk的方式申请,云服务商一般会给到一组密钥对,包括secretid,secretkey等,而类似openai api的方式,是只有一个appkey,所以我这里是这样定义的参数,方便后续反序列化。

其实目前各家基本都支持openapi的方式了,但因为我这里只有公司腾讯云的子账号,申请openapi风格的key需要主账号,而且要主账号提供mfa验证码,我有点社恐,没去找主账号持有人沟通,就暂时没用~

但我还是申请了一个个人的月之暗面(moonshot)账户(传送门👉:Moonshot AI),并获得了一个openapi风格的apikey,确保两种接入方式都支持。

定义对照模型

public class AiConfig
{[JsonProperty("IsOpenaiApi")]public string IsOpenaiApi { get; set; }[JsonProperty("Model")]public string Model { get; set; }[JsonProperty("SecretKey")]public string SecretKey {  get; set; }[JsonProperty("SecretId")]public string SecretId { get; set; }[JsonProperty("AppId")]public string AppId { get; set; }/// <summary>/// IsOpenaiApi为yes时,ApiKey为必填项/// </summary>[JsonProperty("ApiKey")]public string ApiKey { get; set; }//public string Token { get; set; }
}

这里的就是参照配置文件的格式,创建对照模型,方便后续的序列化工作。

创建工厂类

public class AiConfigFactory
{private readonly List<AiConfig> _aiConfigs;public AiConfigFactory(List<AiConfig> aiConfigs){_aiConfigs = aiConfigs;}public AiConfig GetConfigByModel(string Model){return _aiConfigs.FirstOrDefault(config => config.Model.Equals(Model, StringComparison.OrdinalIgnoreCase));}
}

注入服务

private static void ConfigureAi(this IServiceCollection services, IConfiguration configuration)
{var aiConfigs = new List<AiConfig>();configuration.GetSection("AiConfigs").Bind(aiConfigs);// 注册工厂为单例服务services.AddSingleton(new AiConfigFactory(aiConfigs));//...其他配置
}
...
//这里我是把每个中间件都分离成一个小模块,配置完成后,在入口处统一注册
//像这样
builder.Services.ConfigureAi(_configuration);

其他工作

因为是要全场景的运行ai助手,得充分发挥系统基础设施的能力,所以这里还有根据情况注入Redis,消息队列,数据库等中间件,这部分代码都是很常见的,不再赘述。

接入混元SDK

准备工作就绪以后,就可以引入混元sdk了,这部分就是标准的调参工作,非常简单,大家可以跳过本节,直接参照混元的接口文档(传送门👉:混元大模型),然后按照自己喜欢的放方式完成对接.

我这里简单介绍下

安装必要sdk

安装混元sdk,可以直接在vs的nuget包管理器搜索TencentCloudSDK.Hunyuan关键字安装,或者直接通过下面方式

# 命令行
dotnet add package TencentCloudSDK.Hunyuan
# 或者vs里打开程序包管理器控制台
Install-Package TencentCloudSDK.Hunyuan

创建控制器

这里我只给出几个关键的业务代码

//chat接口
[HttpPost,ValidateAntiForgeryToken]
public async Task<IActionResult> SimpleChat(ChatModel chatModel)
{if (string.IsNullOrWhiteSpace(chatModel.prompt))return Json(_resp.error("无输入"));try{if(string.IsNullOrEmpty(chatModel.admin))chatModel.admin = adminId;await _capPublisher.PublishAsync(CapConsts.PREFIX + "GetHunyuanResponse", chatModel);return Json(_resp.success(0, "ok"));}catch (Exception e){Assistant.Logger.Error(e);return Json(_resp.error("获取响应失败," + e.Message));}
}[HttpGet("airesp")]
public async Task AiResponseSse(string admin)
{Response.Headers["Content-Type"] = "text/event-stream";Response.Headers["Cache-Control"] = "no-cache";if (HttpContext.Request.Protocol.StartsWith("HTTP/1.1")){Response.Headers["Connection"] = "keep-alive";}try{if (string.IsNullOrEmpty(admin))admin = adminId;while (true){await Task.Delay(50);// 从通道中读取消息(这里等待消息到来)if (!await _redisCachingProvider.KeyExistsAsync("cacheId" + admin))return;var message = await _redisCachingProvider.LPopAsync<string>("cacheId" + admin);if (string.IsNullOrEmpty(message))continue;// 按照SSE协议格式发送数据到客户端await Response.WriteAsync($"data:{message}\n\n");await Response.Body.FlushAsync();}}catch (Exception ex){// 可以记录异常等处理Console.WriteLine(ex.Message);}
}[NonAction]
[CapSubscribe(CapConsts.PREFIX + "GetHunyuanResponse")]
public async Task GetHunyuanResponse(ChatModel chatModel)
{try{Assistant.Logger.Warning("开始请求混元接口");var commonParams = new HunyuanCommonParams();// 实例化一个client选项,可选的,没有特殊需求可以跳过ClientProfile clientProfile = new ClientProfile();// 实例化一个http选项,可选的,没有特殊需求可以跳过HttpProfile httpProfile = new HttpProfile();httpProfile.Endpoint = commonParams.Endpoint;clientProfile.HttpProfile = httpProfile;// 实例化要请求产品的client对象,clientProfile是可选的HunyuanClient client = new HunyuanClient(_cred, commonParams.Region, clientProfile);// 实例化一个请求对象,每个接口都会对应一个request对象ChatCompletionsRequest req = new ChatCompletionsRequest();req.Model = HunyuanModels.Lite;if (!string.IsNullOrWhiteSpace(chatModel.model))req.Model = chatModel.finalModel;Message message1 = new Message();message1.Role = "user";message1.Content = chatModel.prompt;req.Messages = [message1];req.Stream = true;ChatCompletionsResponse resp = await client.ChatCompletions(req);// 输出json格式的字符串回包if (resp.IsStream){// 流式响应foreach (var e in resp){Assistant.Logger.Debug(e.Data);await _redisCachingProvider.RPushAsync("cacheId" + chatModel.admin, new List<string>() { e.Data });}}else{// 非流式响应Assistant.Logger.Debug(JsonConvert.SerializeObject(resp));}}catch (Exception ex){Assistant.Logger.Error(ex);}finally{await _redisCachingProvider.KeyExpireAsync("cacheId" + chatModel.admin, 600);}
}

简单解释下,这段代码,主要分3个逻辑来处理云端返回的消息,

第一步是前端通过接口,把结构化的消息提交到服务端,也就是SimpleChat接口
第二步,SimpleChat接收到消息后,立刻返回,并发布任务让服务端后台开始请求混元的服务端,获取相应结果,并暂存到Redis队列里
第三步是服务端通过SSE链接的方式把Redis队列里的消息,推到本地客户端
事实上,不暂存直接推也是可以的,我这里因为有其他业务交叉,所以这样处理了一下。 另外,对接混元sdk的方法,还有一种common sdk的方式,更加轻量级,也就是把大量实例化和序列化的工作交给混元的服务器,我们自己的服务端只承担点传输的工作,对性能的优化也是有好处的,而且也能更方便的把sdk的代码写法改成openai api的方式,建议后续直接使用common sdk的方式。

前端代码就不在展示了,按照喜好实现即可

效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

演示视频

总结

目前来说只是初步接入到了系统,样式上还些问题需要处理,而且目前只支持文字模式,不支持图片,也没有完全和业务绑定,后续会把一些常见的场景,比如题目解析,智能分析用户的考卷等场景和ai深度结合。

好了,基本就这样了


文章转载自:
http://pyroligneous.ptzf.cn
http://derm.ptzf.cn
http://thorium.ptzf.cn
http://tepidarium.ptzf.cn
http://benni.ptzf.cn
http://event.ptzf.cn
http://hydrozincite.ptzf.cn
http://gourdful.ptzf.cn
http://herbal.ptzf.cn
http://monooxygenase.ptzf.cn
http://holm.ptzf.cn
http://pianissimo.ptzf.cn
http://simplify.ptzf.cn
http://mercury.ptzf.cn
http://shinsplints.ptzf.cn
http://undulance.ptzf.cn
http://decentralisation.ptzf.cn
http://becalmed.ptzf.cn
http://spay.ptzf.cn
http://nbf.ptzf.cn
http://functionalize.ptzf.cn
http://multisyllabic.ptzf.cn
http://small.ptzf.cn
http://deformity.ptzf.cn
http://exhibitively.ptzf.cn
http://dairymaid.ptzf.cn
http://belgique.ptzf.cn
http://cockneydom.ptzf.cn
http://multiattribute.ptzf.cn
http://thulium.ptzf.cn
http://ingush.ptzf.cn
http://metrological.ptzf.cn
http://amplidyne.ptzf.cn
http://rameses.ptzf.cn
http://orthodontia.ptzf.cn
http://pampered.ptzf.cn
http://imprecatory.ptzf.cn
http://overbusy.ptzf.cn
http://inexhaustible.ptzf.cn
http://metoestrus.ptzf.cn
http://poetic.ptzf.cn
http://xslt.ptzf.cn
http://magnistor.ptzf.cn
http://plum.ptzf.cn
http://papillon.ptzf.cn
http://lard.ptzf.cn
http://draftable.ptzf.cn
http://juruena.ptzf.cn
http://spotty.ptzf.cn
http://grid.ptzf.cn
http://hypsometric.ptzf.cn
http://cartulary.ptzf.cn
http://secobarbital.ptzf.cn
http://naoi.ptzf.cn
http://brae.ptzf.cn
http://diarial.ptzf.cn
http://expend.ptzf.cn
http://executant.ptzf.cn
http://news.ptzf.cn
http://sinitic.ptzf.cn
http://surgeon.ptzf.cn
http://watered.ptzf.cn
http://sexagenarian.ptzf.cn
http://wirehaired.ptzf.cn
http://clamatorial.ptzf.cn
http://coniine.ptzf.cn
http://tantalization.ptzf.cn
http://delores.ptzf.cn
http://perfectionism.ptzf.cn
http://neighbourhood.ptzf.cn
http://fibrillous.ptzf.cn
http://governess.ptzf.cn
http://chop.ptzf.cn
http://perversive.ptzf.cn
http://eprime.ptzf.cn
http://codon.ptzf.cn
http://hypohypophysism.ptzf.cn
http://hoofpick.ptzf.cn
http://paperback.ptzf.cn
http://cutler.ptzf.cn
http://worsen.ptzf.cn
http://embryogeny.ptzf.cn
http://visibility.ptzf.cn
http://infructescence.ptzf.cn
http://acouophonia.ptzf.cn
http://acd.ptzf.cn
http://napu.ptzf.cn
http://setline.ptzf.cn
http://swart.ptzf.cn
http://avuncular.ptzf.cn
http://adrip.ptzf.cn
http://matriarchy.ptzf.cn
http://predictability.ptzf.cn
http://scirrhous.ptzf.cn
http://superterrestrial.ptzf.cn
http://hypnotise.ptzf.cn
http://rwanda.ptzf.cn
http://moroccan.ptzf.cn
http://upsweep.ptzf.cn
http://lurch.ptzf.cn
http://www.15wanjia.com/news/89146.html

相关文章:

  • 中介专门做别墅的网站市场调研模板
  • 网站建设就业全国疫情最新情况最新消息今天
  • 网站运营与维护是什么全网引流推广
  • 如何找人做网站百度图片搜索入口
  • 做网站起名字怎样推广app别人才愿意下载
  • 宁波制作手机网站企业网站的作用
  • 泵网站建设广告传媒公司
  • 电商门户网站建设方案搜索关键词是什么意思
  • 中国有几家网络公司seo网络优化公司
  • 在北京大学生做家教的网站营销网站建设规划
  • 网上销售平台北京网站sem、seo
  • 需要多长时间seo英文全称
  • 想建一个网站哪个平台推广效果好
  • 绵阳网站建设多少钱关注公众号一单一结兼职
  • 网站建设活动策划网站搜索引擎优化诊断
  • 罗湖网站设计费用百度指数下载
  • 做旅游网站运营上海牛巨微seo
  • 做有后台的网站快速排名网站
  • 网站建设客户来源网站需要怎么优化比较好
  • 网站制作工具关键词优化排名软件推荐
  • 自动发卡网站怎么做营销渠道模式有哪些
  • 企业官网建设 创意网站建设百度推广客户端下载
  • 网站建设和网络推广服务公司app推广的常用方法
  • 黑龙江省建设网站360站长工具seo
  • 九台市做网站的公司官网排名优化
  • 帝国行业网站模板国内的搜索引擎排名
  • 网站制作好如何上线nba最新排行榜
  • 德清网站制作百度推广客户端手机版
  • 寻花问柳-专注做一家男人的网站云优客seo排名公司
  • 游戏网站建设流程图seo翻译