Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

AIDotNet/AutoGpt

Repository files navigation

AutoGpt

AutoGpt 智能推理SDK,利用AI本身的能力进行多次对话推理,回复效果更加理想,更智能。


Changelog · Report Bug · Request Feature

入门教程

创建项目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微信社区群:

About

AutoGpt 智能推理SDK,利用AI本身的能力进行多次对话推理,回复效果更加理想,更智能。

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /