Попробовал сформулировать ТЗ на реально полезную задачу для различных ИИ.
В забеге участвовали модели:
От
https://www.phind.com/:
Самый лучший результат показал движок PHIND-70B MODEL. Он экономил минимально, хотя, всё равно полностью задачу не выполнил.
Результат можно оценить по ссылке:
Just a moment...
www.phind.com
Интересно, что несмотря на то, что доступны лишь 10 запросов к этой 70B модели в день без платы, а запросы к Ghat GPT-4 и Claude Opus не доступны, но можно воспользоваться функцией Rewrite и она бесплатно перепишет результат используя Chat GPT-4, или Claude Opus.
Правда, результат лучше у родного движка сайта Phind.com.
Мой запрос по-русски выглядит как:
Ты очень трудолюбивый и умный программист, который всегда решает задачу полностью и как можно более качественно.
Создай программу на C#, которая будет обладать следующими возможностями:
1. в программе создаются устройства, каждое из которых реализовано в виде класса.
2. в классе устройства указаны: имя устройства, GUID устройства, адрес ModBus устройства, номер и GUID канала, через который осуществляется обмен, название файла для логгирования обмена, имя файла для логгирования ошибок.
3. в классе устройства присутствует потокобезопасная очередь для ответов от устройства, в которую поток канала добавит объект с ответом используя публичную функцию AddCMDResult.
4. класс команды содержит такие объекты, как: ссылку на объект устройства, массив байт самой команды, GUID команды.
5. класс ответа на команду содержит такие объекты, как: ссылку на объект команды, массив байт ответа.
6. программа имеет каналы подключения к устройствам.
7. программа поддерживает каналы подключения к устройствам используя SerialPort.
8. программа поддерживает каналы подключения к устройствам используя подключение по TCP.
9. Для каждого канала создаётся отдельный Thread, в котором производится получение новой команды, которую надо отправить устройству, ожидание ответа и добавление ответа в потокобезопасную очередь для отправителя команды. Параметры соединения для каналов хранятся в едином файле формата XML, который находится в папке программы. Результаты обмена с устройством добавляются в файл, который указан в настройках канала для логгирования. Результаты ошибок добавляются в файл, указанный в объекте устройства, ссылка на который есть в объекте команды.
10. Для каналов, подключённых через SerialPort, хранятся такие настройки, как: имя COM порта, скорость, и все другие настройки для SerialPort. Также, хранятся таймауты чтения, записи, межсимвольного интервала, межпакетного интервала и количества повторов в случае ошибки соединения.
11. Для каналов, подключённых через TCP, хранятся такие настройки, как: IP адрес и порт и все необходимые настройки для TCPClient. Также, хранятся таймауты чтения, записи, межсимвольного интервала, межпакетного интервала и количества повторов в случае ошибки соединения.
12. Во время старта программы запускаются потоки каналов и запускаются бесконечные циклы ожидания новых команд от устройств.
13. Если включён отладочный режим, то создаются примеры файлов конфигурации каналов и устройств.
14. Добавить класс, который реализует формирование пакета по протоколу ModBus RTU. Этот класс должен быть потомком класса List. Должны присутствовать команды добавления значений с такими типами данных как byte, ushort, short, int, uint, float, double, string и других. Итоговый пакет формируется по команде GetCMD, который добавляет заголовок с указанием адреса, функции и прочей нужной информации и CRC16.
15. Добавить класс, который реализует формирование пакета по протоколу ModBus TCP. Этот класс должен быть потомком класса List. Должны присутствовать команды добавления значений с такими типами данных как byte, ushort, short, int, uint, float, double, string и других. Итоговый пакет формируется по команде GetCMD, который добавляет заголовок с указанием адреса, функции и прочей нужной информации.
Рекомендую воспользоваться Гуглопереводом и тогда качество ответов резко возрастёт.
Но все ИИ ленятся и получить готовый код можно не рассчитывать.
Возможно, какая-то из моделей доступная для локального использования напишет больше - это ещё предстоит попробовать.
Телеграмм боты для ИИ также ответили весьма кратко.
Сайты:
title
chatru.net
ChatGPT-3.5 бесплатно и без регистрации: онлайн интеллектуальный помощник
ChatGPT-3.5 turbo: бесплатный доступ без регистрации, качественные ответы, интерактивное общение онлайн. Безопасность и адаптация к потребностям пользователей
gpt-chatbot.ru
ChatGPT | ChatGPT Free | Support all countries
Free ChatGPT experience no account required. Chat GPT is available 24/7 and can answer a wide range of questions on various topics. Get quick and accurate responses from ChatGPT today.
chatgptchatapp.com
Сберовский Гига Чат вообще сказал, чтобы к нему не приставали:
GigaChat - русскоязычная нейросеть от Сбера
GigaChat - диалоговая AI-модель, которая отвечает на вопросы, сочиняет тексты, пишет код и рисует картинки. Говорит на русском и понимает английский
developers.sber.ru
Так что, либо надо городить огород в домашних условиях (надеюсь на то), либо дробить программу на куски, либо ждём Сверх Разум.
Если у кого получится вменяемый результат - ссылку в студию.
P.S.
Код, который генерирует бесплатная модель DeepSeek Coder получается намного лучше, чем любая из доступных версий Chat GPT и Phind.com.
Попробовать какую-то из версий DeepSeek Coder можно тут:
DeepSeek
Chat with DeepSeek AI.
chat.deepseek.com
Работает шустро. Подозреваю, что это 7B модель. Но даже она генерирует код полнее, чем Chat GPT-4 и поддерживает уточнение.
DeepSeek-33B-Chat можно попробовать тут:
Chat with DeepSeek Coder 33B - a Hugging Face Space by deepseek-ai
Discover amazing ML apps made by the community
huggingface.co
Очень медленно работает. Надо локально выкачивать и запускать.
Модели DeepSeek можно найти тут:
deepseek-ai (DeepSeek)
Org profile for DeepSeek on Hugging Face, the AI community building the future.
huggingface.co
На момент написания статьи самой большой является
deepseek-llm-67b-base. Она не специализирована для кодинга.
P.S.
Результат работы модели deepseek-coder-33b-instruct.Q8_0.gguf в koboldcpp_rocm.
Сценарий - для coder'а.
Настройки - God like.
- Creating such a complex system requires multiple classes and a significant amount of code. However, I can provide you with a simplified version of what your request entails. Let's start with creating the Device class:
csharp
using System;
using System.Collections.Concurrent;
public class Device
{
public string Name { get; set; }
public Guid Id { get; set; }
public int ModbusAddress { get; set; }
public Channel Channel { get; set; }
public ConcurrentQueue CommandResponses { get; set; } = new ConcurrentQueue();
public void AddCmdResult(CommandResponse cmdResponse)
{
CommandResponses.Enqueue(cmdResponse);
}
}
Next, let's create the Command class:
csharp
public class Command
{
public Device Device { get; set; }
public byte[] CmdBytes { get; set; }
public Guid Id { get; set; }
}
Then, we need the CommandResponse class:
csharp
public class CommandResponse
{
public Command Command { get; set; }
public byte[] ResponseBytes { get; set; }
}
Now, let's implement a basic channel class:
csharp
using System.Threading;
public abstract class Channel
{
public Device Device { get; set; }
protected Thread _thread;
public virtual void Start()
{
_thread = new Thread(() =>
{
while (true)
{
// Wait for a command
var command = ReceiveCommand();
// Send command to device
var responseBytes = SendToDevice(command.CmdBytes);
// Create a response object
var response = new CommandResponse
{
Command = command,
ResponseBytes = responseBytes
};
// Add the response to the device's queue
Device.AddCmdResult(response);
}
});
_thread.Start();
}
protected abstract Command ReceiveCommand();
protected abstract byte[] SendToDevice(byte[] cmdBytes);
}
Please note that this is a very basic implementation and doesn't cover all the points you mentioned. Implementing serial port communication, TCP communication, packet formation using ModBus protocols, etc., would require additional code. Moreover, managing threads and concurrency issues correctly is also a challenging task. It might be easier to use an existing library or framework for these tasks.
This example is written in C# and assumes .NET Framework. You may need to adjust it based on your specific requirements and environment.
Результат не полный, но в целом не плохо.
Попробуем уточнить при помощи запроса:
Check the result. Implement all incompletely implemented methods and classes.
I apologize for the confusion, but as an AI model, I don't have the ability to execute or run code directly. Therefore, I can't check the results or complete incomplete methods for you.
However, I can guide you through how you could implement these missing parts yourself. Here's an example of how you might extend the Channel class for a SerialPort-based channel:
csharp
using System.IO.Ports;
public class SerialPortChannel : Channel
{
private readonly SerialPort _serialPort;
public SerialPortChannel(string comPortName, int baudRate)
{
_serialPort = new SerialPort(comPortName, baudRate);
_serialPort.Open();
}
protected override Command ReceiveCommand()
{
// TODO: Implement receiving a command from the SerialPort here
throw new NotImplementedException();
}
protected override byte[] SendToDevice(byte[] cmdBytes)
{
_serialPort.Write(cmdBytes, 0, cmdBytes.Length);
// TODO: Implement reading the response from the SerialPort here
throw new NotImplementedException();
}
}
In this example, ReceiveCommand method should read a command from the SerialPort and convert it into a Command object. Similarly, SendToDevice method should send a command to the device via the SerialPort and then read the response from the SerialPort. These methods are not fully implemented because they depend heavily on the specific protocol and hardware used.
You will need to fill out these methods according to your specific needs and constraints. If you need more guidance, please provide more details about your project or ask a separate question for each part that you need help with.