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

探索 LLamaWorker:基于LLamaSharp的.NET本地大模型服务

LLamaWorker 是一个基于 LLamaSharp 项目开发的 HTTP API 服务器。它提供与 OpenAI 兼容的 API,使得开发者可以轻松地将大型语言模型(LLM)集成到自己的应用程序中。

1. 背景

在人工智能领域,大型语言模型(LLM)正在以其强大的自然语言处理能力改变游戏规则。随着技术的进步,越来越多的开发者希望将这些模型集成到自己的应用程序中。为了满足这一需求,我开发了 LLamaWorker,一个基于 LLamaSharp 项目的 ASP.NET Web API 服务。LLamaWorker 提供了与 OpenAI 兼容的 API,可以方便地接入其他应用程序,例如 Semantic Kernel 等相关框架或是禅道AI助手等需要接入AI服务的应用。

LLamaWorker 项目地址:https://github.com/sangyuxiaowu/LLamaWorker?wt.mc_id=DT-MVP-5005195

2. LLamaWorker 的特色

LLamaWorker 的设计初衷是为了使开发者能够轻松、高效地将大型语言模型集成到各种应用中。以下是它的一些核心特性:

  • 兼容 OpenAI API:LLamaWorker 提供了与 OpenAI 类似的 API,使得从 OpenAI 平台迁移至使用自己托管的模型变得无缝且便捷。
  • 多模型支持:无论您的需求是文本生成、对话系统还是文本嵌入,LLamaWorker 都能够支持配置和切换不同的模型,满足您的不同场景需求。
  • 流式响应:对于大型响应内容,LLamaWorker 支持流式响应,极大提高了处理效率和用户体验。
  • 嵌入支持:除了文本生成和处理,LLamaWorker 还提供了文本嵌入功能,支持开启模型的嵌入生成,同时也支持转发嵌入请求到其他模型服务。
  • 对话模版:为了帮助开发者更快地实现应用,LLamaWorker 还提供了一些常见的对话模版。
  • 自动释放: 支持自动释放已加载模型。
  • API Key 认证: 支持 API Key 认证。
  • Gradio UI Demo: 提供了一个基于 Gradio.NET 的 UI 演示。

3. 快速开始

LLamaWorker 主要面向 .NET 开发者,要开始使用 LLamaWorker,您只需要几个简单的步骤:

  1. 克隆仓库到本地
git clone https://github.com/sangyuxiaowu/LLamaWorker.git
  1. 进入项目目录
cd LLamaWorker
  1. 根据您的需求选择项目文件。项目提供了三个版本的项目文件:
  • LLamaWorker:适用于 CPU 环境。
  • LLamaWorker_Cuad11:适用于搭载 CUDA 11 的 GPU 环境。
  • LLamaWorker_Cuad12:适用于搭载 CUDA 12 的 GPU 环境。

选择适合您环境的项目文件进行下一步。

  1. 安装依赖项
dotnet restore LLamaWorker\LLamaWorker.csproj

如果您使用的是 CUDA 版本,请替换项目文件名。

  1. 修改配置文件 appsettings.json。默认配置已包含一些常见的开源模型配置,您只需按需修改模型文件路径(ModelPath)即可。

  2. 启动服务器

dotnet run --project LLamaWorker\LLamaWorker.csproj

如果您使用的是 CUDA 版本,请替换项目文件名。

如果你以调试模式启动,即可在浏览器中打开 swagger 页面查看 API 文档。

请添加图片描述

4. 配件文件介绍

LLamaWorker 配置文件内容如下:

{"AutoReleaseTime": 0,"ApiKey":"","LLmModelSettings": [],"EmbedingForward": "http://127.0.0.1:5000/embeddings"
}
  • AutoReleaseTime:自动释放时间,分钟。0 表示不自动释放。
  • ApiKey :API 密钥,默认为空,即不需要 API 密钥。
  • LLmModelSettings:模型配置。
  • EmbedingForward:嵌入转发地址。

在 LLamaWorker 项目的 appsettings.json 已经提供了一些常见的开源模型配置文件,您可以根据自己的需求选择合适的模型,以下是 Qwen2 的配置示例:

{"Name": "qwen2_7b","Description": "通义千问 v2 7b instruct q5_k_m","Version": "2","WebSite": "https://github.com/QwenLM/Qwen2",// 系统角色提示词,未指定时使用默认配置,可配置为空,则不自动添加"SystemPrompt": "You are a helpful assistant",// LLm ModelParams, LLamaSharp 的模型参数"ModelParams": {"ModelPath": "H:\\workspace\\gpt\\models\\qwen2-7b-instruct-q5_k_m.gguf","ContextSize": 32768,"Seed": 1337,"GpuLayerCount": 50,"FlashAttention": true, // 是否启用闪存注意力,注意 qwen2 模型需要启用"Embeddings": true // 是否启用嵌入},"AntiPrompts": [ "<|im_start|>", "<|im_end|>" ],"WithTransform": { // 对话模版选择类"HistoryTransform": "LLamaWorker.Transform.BaseHistoryTransform","OutputTransform": "LLamaWorker.Transform.BaseTextStreamTransform"}
}

5. API 参考

LLamaWorker 除了提供OpenAI常用的chatcompletionsembeddings接口外,还提供了一些其他接口,例如:

  • /models/info: 返回模型的基本信息
  • /models/config: 返回已配置的模型信息
  • /models/{modelId}/switch: 切换到指定模型

6. ChatUI

LLamaWorker 提供了一个基于 Gradio.NET 的 ChatUI 项目。通过这个项目你可以方便的与大模型进行交互测试。

在启用 LLamaWorker 项目后,你也可以通过运行以下命令尝试 Gradio UI 演示:

dotnet restore ChatUI\ChatUI.csproj
dotnet run --project ChatUI\ChatUI.csproj

然后打开浏览器访问 Gradio UI 演示。

请添加图片描述

6. 结语

LLamaWorker 项目的目标是为开发者社区提供一个高性能、易于使用的工具,以便更好地利用大型语言模型的能力。无论您是在构建聊天机器人、内容生成工具还是任何需要自然语言处理能力的应用,LLamaWorker 都能为您提供强大的支持。

我非常期待看到社区成员如何使用 LLamaWorker 来实现他们的创意和项目。如果您对 LLamaWorker 有任何反馈或建议,欢迎通过 GitHub Issues 或 Pull Requests 与我交流。让我们一起推动开源社区的发展,解锁更多的可能性!

相关文章:

探索 LLamaWorker:基于LLamaSharp的.NET本地大模型服务

LLamaWorker 是一个基于 LLamaSharp 项目开发的 HTTP API 服务器。它提供与 OpenAI 兼容的 API&#xff0c;使得开发者可以轻松地将大型语言模型&#xff08;LLM&#xff09;集成到自己的应用程序中。 1. 背景 在人工智能领域&#xff0c;大型语言模型&#xff08;LLM&#xf…...

Qt开发 | Qt控件 | QTabWidget基本用法 | QListWidget应用详解 | QScrollArea应用详解

文章目录 一、QTabWidget基本用法二、QListWidget应用详解1.列表模式1.1 基本操作1.2 添加自定义item1.3 如何添加右键菜单1.4 QListWidget如何删除item 2.图标模式 三、QScrollArea应用详解 一、QTabWidget基本用法 QTabWidget 是 Qt 框架中的一个类&#xff0c;它提供了一个选…...

2023年 AI APT可持续攻击的调查研究报告

总览 随着网络技术的不断发展&#xff0c;网络安全威胁也日益严峻。高级持续性威胁&#xff08;APT&#xff09;攻击以其目标明确、手段多样、隐蔽性强等特点&#xff0c;成为网络安全领域的重要挑战。本文分析2023年当前 APT 攻击的主要特点、活跃组织、攻击趋势以及漏洞利用…...

Leetcode 102.目标和

给定一个正整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 ‘’ 或 ‘-’ &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式 &#xff1a; 例如&#xff0c;nums [2, 1] &#xff0c;可以在 2 之前添加 ‘’ &#xff0c;在 1 之前添加 ‘-’ &…...

LLM AI工具和Delphi名称的起源

LLM AI工具和Delphi名称的起源 使用ChatGPT&#xff0c;直接或通过微软工具&#xff0c;以及其他基于llm的引擎。我很欣赏他们提供好的总结和比较的能力&#xff0c;并且还编写了一些样板代码。与此同时&#xff0c;当你问一些重要的问题时&#xff0c;你会得到一些令人惊讶的好…...

打破数据分析壁垒:SPSS复习必备(十一)

一、方差分析 方差分析的应用条件如下&#xff1a; &#xff08;1&#xff09;独立&#xff0c;各组数据相互独立&#xff0c;互不相关&#xff1b; &#xff08;2&#xff09;正态&#xff1a;即各组数据符合正态分布&#xff1b; &#xff08;3&#xff09;方差齐性&…...

【十六】【QT开发应用】Menu菜单,contextMenuEvent,setContextMenuPolicy,addAction

在 Qt 框架中&#xff0c;QMenu 类用于创建和管理菜单。菜单是用户界面的一部分&#xff0c;可以包含多个选项或动作&#xff0c;用户可以选择这些选项来执行特定的功能。菜单通常显示在菜单栏、上下文菜单&#xff08;右键菜单&#xff09;或工具栏中。 基本用法 创建菜单对象…...

华为DCN技术:M-LAG

M-LAG&#xff08;Multichassis Link Aggregation Group&#xff09;即跨设备链路聚合组&#xff0c;是一种实现跨设备链路聚合的机制。M-LAG主要应用于普通以太网络、VXLAN和IP网络的双归接入&#xff0c;可以起到负载分担或备份保护的作用。相较于另一种常见的可靠性接入技术…...

k8s持久化之emptyDir使用

目录 概述实践代码 概述 理解emptyDir使用&#xff0c;是后续k8s持久化进阶&#xff0c;高阶使用的基础。 实践 代码 详细说明在代码中 # 缓存数据&#xff0c;可以让多个容器共享数据 # 删除 Pod 时&#xff0c;emptyDir 数据同步消失 # 定义 initContainer -> 下载数据…...

Java露营基地预约小程序预约下单系统源码

轻松开启户外探险之旅 &#x1f31f; 露营热潮来袭&#xff0c;你准备好了吗&#xff1f; 随着人们对户外生活的热爱日益增加&#xff0c;露营已成为许多人周末和假期的首选活动。但你是否曾因找不到合适的露营基地而烦恼&#xff1f;或是因为繁琐的预约流程而错失心仪的营地…...

七天速通javaSE:第四天 java方法

文章目录 前言一、什么是方法&#xff1f;二、方法的定义与调用1. 方法的定义2. 方法的调用3. 练习&#xff1a;定义比大小方法并调用 三、方法的重载四、递归五、可变参数拓展&#xff1a;命令行传递参数 前言 本章将学习java方法。 一、什么是方法&#xff1f; java方法是用…...

jupyter notebook的markdown语法不起作用

在这个界面编辑&#xff0c;发现markdown你编辑的是什么就是什么&#xff0c;不起作用&#xff0c;然而点一下&#xff1a; 右上角“Notebook转发”&#xff0c;就会单独跳出一个jupyter notebook的界面&#xff0c;此时就会奏效&#xff1a;...

Redis 学习笔记(2)

目录 1 Redis的持久化1.1 RDB持久化方案1.2 AOF持久化方案 2 Redis架构2.1 主从复制架构2.2 哨兵集群设计2.3 哨兵集群设计 3 Redis事务机制4 Redis过期策略与内存淘汰机制4.1 过期策略4.2 内存淘汰机制 5 Redis高频面试题4.1 缓存穿透4.2 缓存击穿4.3 缓存雪崩 1 Redis的持久化…...

快慢指针:删除有序数组中的重复项

题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 思路好想&#xff0c;代码实现不好想 class Solution {public int removeDuplicates(int[] nums) {int fast 1,slow 1;while(fast < nums.length){if(nums[fast] ! nums[fast-1]){nums[slow] nums[fast]…...

用户登录错误次数太多锁定账号

当用户登录验证码错误次数太多时&#xff0c;需要限制用户在10分钟之内不能再次登录。 限制方案&#xff1a; 1.通过Redis ZSet key可以设置为用户名&#xff0c;value可以设置为UUID&#xff0c;score设置为当前时间戳 每次用户登录时&#xff0c;通过 rangeByScore 查询对…...

tedsign vue3 web-端框架中封装一个验证码组件 以及对应node 接口逻辑说明

一个这样的组件 我直接上代码了 <template><t-loading size"small" :loading"loading" show-overlay><div class"container" click"refresh"><div v-if"svg" class"svg" v-html"svg&…...

探索Scala并发编程之巅:高效并行处理的艺术

标题&#xff1a;探索Scala并发编程之巅&#xff1a;高效并行处理的艺术 引言 在现代软件开发中&#xff0c;随着多核处理器的普及&#xff0c;编写能够充分利用硬件能力的并发程序变得至关重要。Scala&#xff0c;这门结合了面向对象和函数式编程特性的语言&#xff0c;提供…...

AudioLM: 音频生成的革命性模型

AudioLM: 音频生成的革命性模型 AudioLM是一种革命性的音频生成模型&#xff0c;它结合了深度学习和自然语言处理的先进技术&#xff0c;能够生成高质量、逼真的音频内容。本文将探讨AudioLM的基本原理、工作机制、应用场景以及对音频生成领域的影响和未来发展方向。 一、Aud…...

C++ Vector的模拟实现

vector的介绍 1. vector是表示可变大小数组的序列容器。 2. 就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是可以动态改变的&#xff0c;而…...

Kubernetes之Controller详解

本文尝试从Kubernetes Controller的种类、交互逻辑、最佳实践、伪代码示例及历史演进5个方面对其进行详细阐述&#xff0c;希望对您有所帮助&#xff01; 一、Kubernetes Controller种类 Kubernetes Controller Manager 是 Kubernetes 集群的核心组件之一&#xff0c;负责管理…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...