利用AutoGpt将任何模型支持o1模型的推理实现

相信大家都对于OpenAI最新出的o1模型都非常关注,它已经能通过推理让回复的效果更加理想,

但是目前o1的限制太大,而且使用o1至少也是需要购买OpenAI官方的会员价格也在20美刀(好贵!!),于是乎社区出现非常多相似的实现,通过更低成本得到更好的效果,然后我们的AutoGpt借鉴了https://github.com/bklieger-groq/g1python的代码实现,实现了一个.NET AutoGpt自动推理SDK,你可以利用AIDotNet.AutoGpt也能将普通模型支持推理实现,下面我们展示一下AIDotNet.AutoGpt的入门教程

入门AIDotNet.AutoGpt

创建项目AutoGpt.Tests控制台程序

然后安装NuGet包

dotnet add package AIDotNet.AutoGpt

安装完成以后打开我们的AI平台http://api.token-ai.cn/注册一个账号,然后登录到控制台,打开AI服务/令牌,然后点击复制Key

using System.Diagnostics;

using AutoGpt;

var service = new ServiceCollection()
.AddAutoGpt((options =>
{
options.Endpoint = "https://api.token-ai.cn/";
options.NumOutputs = 5;
})); var serviceProvider = service.BuildServiceProvider(); var autoGptClient = serviceProvider.GetRequiredService<AutoGptClient>(); var sw = Stopwatch.StartNew();
await foreach (var (title, content, totalThinkingTime) in autoGptClient.GenerateResponseAsync(
"c#使用Redis+RabbitMQ实现多级缓存", "sk-", "gpt-4o-mini-2024-07-18", 2000))
{
if (title.StartsWith("Final Answer"))
{
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(content); Console.ResetColor();
}
else
{
Console.WriteLine(title);
Console.WriteLine(content);
}
} Console.WriteLine(); sw.Stop(); Console.WriteLine("生成总耗时:" + sw.ElapsedMilliseconds + "ms");

Options中的Endpoint是访问的AI API端点,然后NumOutputs则是推理最大次数。

然后拿到我们的autoGptClient调用GenerateResponseAsync方法,传递promptc#使用Redis+RabbitMQ实现多级缓存,然后把sk-替换成我们刚刚在平台复制的Key,然后模型可以自己选择,默认使用gpt-4o-mini成本会更低,2000则是响应的最token数量。

然后如果title 前缀是Final Answer那么数据分析完成,得到content则是实际对话响应内容。

尝试推理对话效果。

实现一个基于Redis和RabbitMQ的多级缓存系统,可以有效提高数据访问速度和系统的可扩展性。以下是详细的步骤和示例代码,帮助你在C#中实现这个系统。

### 1. 环境准备

确保你已经安装了以下组件:
- **Redis**:可以在本地或使用云服务。
- **RabbitMQ**:同样可以在本地或使用云服务。
- **C#开发环境**:如Visual Studio。 ### 2. 安装必要的NuGet包 在你的C#项目中,安装以下NuGet包:
```bash
Install-Package StackExchange.Redis
Install-Package RabbitMQ.Client
``` ### 3. Redis缓存实现 首先,我们需要创建一个Redis缓存的管理类。 ```csharp
using StackExchange.Redis;
using System; public class RedisCache
{
private readonly IDatabase _database; public RedisCache(string connectionString)
{
var redis = ConnectionMultiplexer.Connect(connectionString);
_database = redis.GetDatabase();
} public void Set(string key, string value, TimeSpan? expiry = null)
{
_database.StringSet(key, value, expiry);
} public string Get(string key)
{
return _database.StringGet(key);
} public void Delete(string key)
{
_database.KeyDelete(key);
}
}
``` ### 4. RabbitMQ消息处理 接下来,我们需要创建一个RabbitMQ的管理类,用于发送和接收消息。 ```csharp
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Text; public class RabbitMqService
{
private readonly IConnection _connection;
private readonly IModel _channel; public RabbitMqService(string hostName)
{
var factory = new ConnectionFactory() { HostName = hostName };
_connection = factory.CreateConnection();
_channel = _connection.CreateModel();
_channel.QueueDeclare(queue: "cache_invalidation",
durable: false,
exclusive: false,
autoDelete: false,
arguments: null);
} public void SendMessage(string message)
{
var body = Encoding.UTF8.GetBytes(message);
_channel.BasicPublish(exchange: "",
routingKey: "cache_invalidation",
basicProperties: null,
body: body);
} public void StartListening(Action<string> onMessageReceived)
{
var consumer = new EventingBasicConsumer(_channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body.ToArray();
var message = Encoding.UTF8.GetString(body);
onMessageReceived(message);
};
_channel.BasicConsume(queue: "cache_invalidation",
autoAck: true,
consumer: consumer);
}
}
``` ### 5. 整合Redis和RabbitMQ 在你的应用程序中,整合Redis和RabbitMQ,处理数据的缓存和失效。 ```csharp
public class CacheService
{
private readonly RedisCache _redisCache;
private readonly RabbitMqService _rabbitMqService; public CacheService(string redisConnectionString, string rabbitMqHostName)
{
_redisCache = new RedisCache(redisConnectionString);
_rabbitMqService = new RabbitMqService(rabbitMqHostName); // 启动监听
_rabbitMqService.StartListening(OnCacheInvalidation);
} public string GetData(string key)
{
// 先从Redis获取数据
var cachedData = _redisCache.Get(key);
if (cachedData != null)
{
_rabbitMqService.SendMessage(key);
} private void OnCacheInvalidation(string key)
{
// 接收到失效消息后,删除Redis中的缓存
_redisCache.Delete(key);
} private string GetDataFromDatabase(string key)
{
// 模拟从数据库获取数据
return $"Data for {key}";
} private void UpdateDatabase(string key, string newValue)
{
// 模拟更新数据库
Console.WriteLine($"Database updated: {key} = {newValue}");
}
}
``` ### 6. 使用示例 最后,在你的主程序中使用这个缓存服务。 ```csharp
class Program
{
static void Main(string[] args)
{
var cacheService = new CacheService("localhost:6379", "localhost"); // 获取数据
var data = cacheService.GetData("key1");
Console.WriteLine(data); // 更新数据
cacheService.UpdateData("key1", "New Value"); // 再次获取数据
var updatedData = cacheService.GetData("key1");
Console.WriteLine(updatedData);
}
}
``` ### 7. 总结 以上代码展示了如何在C#中使用Redis和RabbitMQ实现一个简单的多级缓存系统。通过Redis来快速存取数据,并使用RabbitMQ来处理缓存失效的消息,从而保持数据的一致性。你可以根据具体需求扩展和优化这个系统,例如添加错误处理、日志记录等功能。

未使用推理对话效果

在C#中使用Redis和RabbitMQ实现多级缓存的架构可以提高应用的性能和响应速度。下面是一个简单的实现思路和代码示例:

### 1. 系统架构

- **Redis**: 用作快速缓存存储,适合存储频繁访问的数据。
- **RabbitMQ**: 用作消息队列,处理数据更新或缓存失效的通知。 ### 2. 安装依赖 确保你在项目中安装了以下NuGet包: ```bash
Install-Package StackExchange.Redis
Install-Package RabbitMQ.Client
``` ### 3. 实现逻辑 以下是一个简单的实现示例: ```csharp
using StackExchange.Redis;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Text; class Program
{
private static ConnectionMultiplexer redis;
private static IConnection rabbitConnection;
private static IModel rabbitChannel; static void Main(string[] args)
{
// 初始化Redis
redis = ConnectionMultiplexer.Connect("localhost"); // 初始化RabbitMQ
var factory = new ConnectionFactory() { HostName = "localhost" };
rabbitConnection = factory.CreateConnection();
rabbitChannel = rabbitConnection.CreateModel();
rabbitChannel.QueueDeclare(queue: "cache_updates", durable: false, exclusive: false, autoDelete: false, arguments: null); // 启动RabbitMQ消费者
var consumer = new EventingBasicConsumer(rabbitChannel);
consumer.Received += Consumer_Received;
rabbitChannel.BasicConsume(queue: "cache_updates", autoAck: true, consumer: consumer); // 示例数据操作
SetData("key1", "value1"); // 等待用户输入
Console.ReadLine();
} static void SetData(string key, string value)
{
var db = redis.GetDatabase();
db.StringSet(key, value); // 发送消息到RabbitMQ
var body = Encoding.UTF8.GetBytes(key);
rabbitChannel.BasicPublish(exchange: "", routingKey: "cache_updates", basicProperties: null, body: body);
} static void Consumer_Received(object sender, BasicDeliverEventArgs e)
{
var key = Encoding.UTF8.GetString(e.Body.ToArray());
var db = redis.GetDatabase(); // 从Redis删除缓存
db.KeyDelete(key);
Console.WriteLine($"Cache for {key} has been invalidated.");
}
}
``` ### 4. 代码说明 - **Redis连接**: 使用`StackExchange.Redis`库连接Redis。
- **RabbitMQ连接**: 使用`RabbitMQ.Client`库连接RabbitMQ,并创建一个消息队列`cache_updates`。
- **数据设置**: `SetData`方法将数据存入Redis,并发送消息到RabbitMQ。
- **消费者**: 在`Consumer_Received`中,接收来自RabbitMQ的消息并从Redis中删除相应的缓存。 ### 5. 运行示例 1. 确保Redis和RabbitMQ服务正在运行。
2. 编译并运行上述代码。
3. 通过调用`SetData`方法设置数据并触发缓存更新。 ### 6. 扩展 - **缓存读取**: 你可以扩展代码,加入从Redis读取数据的逻辑。
- **错误处理**: 增加异常处理和日志记录。
- **配置管理**: 将Redis和RabbitMQ的连接字符串放在配置文件中。 这个示例提供了一个基础的多级缓存实现,具体的应用场景和需求可以根据项目需要进行调整和优化。

AI评分

### 智能推理内容评分:8/10

**优点:**
1. **详细性**:提供了完整的代码示例和逐步的实现步骤,便于开发者理解和实践。
2. **结构清晰**:内容分为多个部分,易于导航,逻辑清晰。
3. **集成示例**:展示了如何将Redis和RabbitMQ结合使用,适合需要实现多级缓存的开发者。 **缺点:**
1. **复杂性**:对于初学者来说,Redis和RabbitMQ的概念可能会比较复杂,缺乏简单的解释。
2. **缺少错误处理示例**:虽然提到可以扩展,但没有具体的错误处理示例。 ### 普通内容评分:7/10 **优点:**
1. **简洁性**:代码相对简单,适合初学者理解基本概念。
2. **基础实现**:提供了一个简单的实现思路,适合快速入门。 **缺点:**
1. **缺乏深度**:没有详细的步骤说明,可能对初学者不够友好。
2. **功能有限**:示例代码功能较少,没有展示如何处理缓存失效的完整流程。 ### 总结 **哪个效果更好:** 智能内容效果更好。虽然普通内容更简洁,但智能内容提供了更全面的实现细节和背景信息,适合需要深入理解和实施的开发者。智能内容的结构和示例更有助于开发者在实际项目中应用。

结束

https://open666.cn/ 已经接入了自动推理功能

如果您想分享DotNet技术qq群:

AIDotNet微信社区群:

利用AutoGpt将任何模型支持o1模型的推理实现的更多相关文章

  1. Python 3 利用 Dlib 19.7 和 sklearn机器学习模型 实现人脸微笑检测

    0.引言  利用机器学习的方法训练微笑检测模型,给一张人脸照片,判断是否微笑:   使用的数据集中69张没笑脸,65张有笑脸,训练结果识别精度在95%附近: 效果: 图1 示例效果 工程利用pytho ...

  2. 利用 TFLearn 快速搭建经典深度学习模型

      利用 TFLearn 快速搭建经典深度学习模型 使用 TensorFlow 一个最大的好处是可以用各种运算符(Ops)灵活构建计算图,同时可以支持自定义运算符(见本公众号早期文章<Tenso ...

  3. 利用Runtime实现简单的字典转模型

    前言 我们都知道,开发中会有这么一个过程,就是将服务器返回的数据转换成我们自己定义的模型对象.当然服务器返回的数据结构有xml类型的,也有json类型的.本文只讨论json格式的. 大家在项目中一般是 ...

  4. Cesium 学习(二)所支持的模型数据类型,以及转换

    1.Cesium所支持的模型数据类型 目前所知的有glTF.glb.bgltf等格式的模型数据: 想要了解glTF等的知识可以看一下https://www.cnblogs.com/fuckgiser/ ...

  5. MindSpore图像分类模型支持(Lite)

    MindSpore图像分类模型支持(Lite) 图像分类介绍 图像分类模型可以预测图片中出现哪些物体,识别出图片中出现物体列表及其概率. 比如下图经过模型推理的分类结果为下表: 类别 概率 plant ...

  6. 软件测试模型汇总-V模型,W模型,X模型,H模型

    V模型 在软件测试方面,V模型是最广为人知的模型,尽管很多富有实际经验的测试人员还是不太熟悉V模型,或者其它的模型.V模型已存在了很长时间,和瀑布开发模型有着一些共同的特性,由此也和瀑布模型一样地受到 ...

  7. GPU的线程模型和内存模型

    遇见C++ AMP:在GPU上做并行计算 Written by Allen Lee I see all the young believers, your target audience. I see ...

  8. PLUTO平台是由美林数据技术股份有限公司下属西安交大美林数据挖掘研究中心自主研发的一款基于云计算技术架构的数据挖掘产品,产品设计严格遵循国际数据挖掘标准CRISP-DM(跨行业数据挖掘过程标准),具备完备的数据准备、模型构建、模型评估、模型管理、海量数据处理和高纬数据可视化分析能力。

    http://www.meritdata.com.cn/article/90 PLUTO平台是由美林数据技术股份有限公司下属西安交大美林数据挖掘研究中心自主研发的一款基于云计算技术架构的数据挖掘产品, ...

  9. DDD(三)DDD实战、贫血模型与充血模型

    DDD(三)DDD实战.贫血模型与充血模型 如果觉得样式不好:跳转即可 http://www.lifengying.site/(md文件复制过来有些样式会不一样) 贫血模型与充血模型 1.贫血模型:一 ...

  10. Paip.Php Java 异步编程。推模型与拉模型。响应式(Reactive)”编程FutureData总结... 1

    Paip.Php  Java 异步编程.推模型与拉模型.响应式(Reactive)"编程FutureData总结... 1.1.1       异步调用的实现以及角色(:调用者 提货单) F ...

随机推荐

  1. useHeadSafe:安全生成HTML头部元素

    title: useHeadSafe:安全生成HTML头部元素 date: 2024/7/17 updated: 2024/7/17 author: cmdragon excerpt: 摘要:&quo ...

  2. 学习笔记--Java中this关键字

    Java中this关键字 关于Java语言中的this关键字 this 是一个关键字,翻译为:这个 this 是一个引用,一个变量,this变量中保存的内存地址指向自身 每一个对象都有自己的this, ...

  3. 自制基于simplefoc大功率驱动板想法的由来,同时欢迎有相同兴趣的F友一起来玩。。。

    前一阵子,偶然在B站上看了一个simplefoc的介绍视频,代码简洁.算法精妙让人佩服,更让人佩服的是:开源!遂!搜索之!不搜不知道一搜吓一跳,发现太OUT了,原来玩这个算法的人这么多,让我这个整天沉 ...

  4. 【Tomcat】IDEA工程没有EE规范的jar包?

    发现了一个问题,我安装了2种版本的Tomcat 一个是8版本,另一个是10版本 我在已经使用8版本的工程中,更换成使用10版本,当然一开始部署运行正常 但是关闭了工程之后,再次打开就发现,这些EE规范 ...

  5. wandb原来是可以网络直连的,国内可以无障碍使用

    一直不是很常使用神经网络训练可视化的工具,包括:tensorboard,等等,wandb平时也是直接就忽略,不过最近无意间看了看这个效果,感觉还是不错的,于是尝试了一下. 网上很多人说这个工具服务器在 ...

  6. 【转载】 从零开始编写一个简单的Linux文件系统

    版权声明:本文为CSDN博主「shuxiaogd」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/shuxiao ...

  7. 神奇的发现——所有的aarch64架构的CPU平台下的深度学习框架均不原生支持CUDA

    一个记录: 神奇的发型--所有的aarch64架构的CPU平台下的深度学习框架均不原生支持CUDA 不论是mindspore.pytorch.TensorFlow框架只要是aarch64架构的CPU下 ...

  8. 记录一次实验室linux系统的GPU服务器死机排查过程——某显卡满负荷导致内核进程超时导致系统死机

    在自己没有管理多台高负荷的ubuntu显卡服务器之前,我是万万想不到linux服务器居然也是如此容易死机的. 什么每个版本的TensorFlow调用显卡驱动时和内核不兼容,什么系统自动升级导致的显卡驱 ...

  9. 白鲸开源CEO郭炜荣获「2024中国数智化转型升级先锋人物」称号

    2024年7月24日,由数据猿主办,IDC协办,新华社中国经济信息社.上海大数据联盟.上海市数商协会.上海超级计算中心作为支持单位,举办"数智新质·力拓未来 2024企业数智化转型升级发展论 ...

  10. Python 潮流周刊#64:Python 的函数调用还很慢么?(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...