Без лишних предисловий - давайте сделаем два абсолютно одинаковых запроса для создания приложения на SwiftUI и сравним, какая модель лучше справится с этими задачами.
Я решила дать два задания. Начнём с первого: нужно написать игру "Змейка", вот мой промпт:
Напиши полностью с нуля приложение на SwiftUI. В приложении должен быть один экран. Сделай простейший вариант игры змейка. Изначально зеленая змея из 3-х кваратиков, по мере съедания квадратика она увеличивается на 1 квадрат (квадратики которые она съедает - разных цветов)
Если лень читать - в конце ссылка на короткое видео сравнения (в телеграм канале).
Посмотрим, что нам выдал ChatGPT:
Ответ ChatGPT
Вот готовый код для простейшей игры «Змейка» на SwiftUI. Змея стартует с длиной в 3 квадрата и растёт при поедании еды разного цвета. Управление происходит свайпами.
import SwiftUI
struct SnakeGameView: View {
@State private var snake: [CGPoint] = [CGPoint(x: 100, y: 100), CGPoint(x: 80, y: 100), CGPoint(x: 60, y: 100)]
@State private var food: CGPoint = CGPoint(x: 200, y: 200)
@State private var direction: CGPoint = CGPoint(x: 20, y: 0)
@State private var timer = Timer.publish(every: 0.2, on: .main, in: .common).autoconnect()
let gridSize: CGFloat = 20
let colors: [Color] = [.red, .blue, .yellow, .purple, .orange]
var body: some View {
ZStack {
Color.black.ignoresSafeArea()
ForEach(snake.indices, id: \..self) { index in
Rectangle()
.fill(Color.green)
.frame(width: gridSize, height: gridSize)
.position(snake[index])
}
Rectangle()
.fill(colors.randomElement()!)
.frame(width: gridSize, height: gridSize)
.position(food)
}
.gesture(DragGesture()
.onEnded { gesture in
let xMove = gesture.translation.width
let yMove = gesture.translation.height
if abs(xMove) > abs(yMove) {
direction = xMove > 0 ? CGPoint(x: gridSize, y: 0) : CGPoint(x: -gridSize, y: 0)
} else {
direction = yMove > 0 ? CGPoint(x: 0, y: gridSize) : CGPoint(x: 0, y: -gridSize)
}
}
)
.onReceive(timer) { _ in
moveSnake()
}
}
private func moveSnake() {
var newHead = snake.first!
newHead.x += direction.x
newHead.y += direction.y
if newHead == food {
snake.insert(newHead, at: 0)
food = generateNewFood()
} else {
snake.insert(newHead, at: 0)
snake.removeLast()
}
}
private func generateNewFood() -> CGPoint {
let x = CGFloat(Int.random(in: 0..<Int(UIScreen.main.bounds.width / gridSize))) * gridSize
let y = CGFloat(Int.random(in: 0..<Int(UIScreen.main.bounds.height / gridSize))) * gridSize
return CGPoint(x: x, y: y)
}
}
struct ContentView: View {
var body: some View {
SnakeGameView()
}
}
@main
struct SnakeGameApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
Этот код создаёт простейшую змейку, которая управляется свайпами. Когда змея съедает еду, она увеличивается в длине, а еда появляется в новом случайном месте и меняет цвет. Игра бесконечна, но можно добавить столкновение с границами или самой собой для усложнения. ?
И вот что мы получили:

В целом, всё максимально соответствует описанию, код работает с первого раза. Есть недочеты, что змейка может уйти за пределы экрана, например. Но для базы сойдёт.
Дальше такой же промпт вставляем в DeepSeek, вот что получаем:
Ответ DeepSeek
Создадим простейшую версию игры "Змейка" на SwiftUI. В этом приложении будет один экран, на котором змейка будет двигаться по экрану и "съедать" квадратики, увеличиваясь в длину.
Шаги для создания приложения:
Создадим структуру для змейки и еды.
Реализуем логику движения змейки.
Добавим обработку касаний для управления змейкой.
Отрисуем змейку и еду на экране.
Полный код приложения:
import SwiftUI
struct ContentView: View {
@State private var snake: [CGPoint] = [
CGPoint(x: 100, y: 100),
CGPoint(x: 90, y: 100),
CGPoint(x: 80, y: 100)
]
@State private var food: CGPoint = CGPoint(x: 200, y: 200)
@State private var direction: CGPoint = CGPoint(x: 10, y: 0)
@State private var foodColor: Color = .red
@State private var score: Int = 0
let timer = Timer.publish(every: 0.1, on: .main, in: .common).autoconnect()
var body: some View {
ZStack {
Color.black.edgesIgnoringSafeArea(.all)
// Рисуем змейку
ForEach(snake, id: \.self) { segment in
Rectangle()
.fill(Color.green)
.frame(width: 10, height: 10)
.position(segment)
}
// Рисуем еду
Rectangle()
.fill(foodColor)
.frame(width: 10, height: 10)
.position(food)
// Отображаем счет
Text("Score: \(score)")
.foregroundColor(.white)
.font(.largeTitle)
.padding()
}
.onReceive(timer) { _ in
moveSnake()
}
.gesture(
DragGesture()
.onEnded { gesture in
let delta = gesture.translation
if abs(delta.width) > abs(delta.height) {
// Горизонтальный свайп
if delta.width > 0 {
direction = CGPoint(x: 10, y: 0) // Вправо
} else {
direction = CGPoint(x: -10, y: 0) // Влево
}
} else {
// Вертикальный свайп
if delta.height > 0 {
direction = CGPoint(x: 0, y: 10) // Вниз
} else {
direction = CGPoint(x: 0, y: -10) // Вверх
}
}
}
)
}
func moveSnake() {
var newSnake = snake
let head = newSnake[0]
// Новое положение головы
let newHead = CGPoint(x: head.x + direction.x, y: head.y + direction.y)
// Проверяем, съела ли змейка еду
if abs(newHead.x - food.x) < 10 && abs(newHead.y - food.y) < 10 {
score += 1
generateFood()
} else {
newSnake.removeLast()
}
newSnake.insert(newHead, at: 0)
snake = newSnake
}
func generateFood() {
let maxX = UIScreen.main.bounds.width - 10
let maxY = UIScreen.main.bounds.height - 10
food = CGPoint(
x: CGFloat.random(in: 0...maxX),
y: CGFloat.random(in: 0...maxY)
)
foodColor = Color(
red: Double.random(in: 0...1),
green: Double.random(in: 0...1),
blue: Double.random(in: 0...1)
)
}
}
@main
struct SnakeApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
Описание кода:
-
Змейка и еда:
Змейка представлена массивом
CGPoint
, где каждый элемент — это координата одного сегмента змейки.Еда — это случайная точка на экране, которая меняет цвет при каждом появлении.
-
Движение змейки:
Змейка движется с постоянной скоростью, обновляя свое положение каждые 0.1 секунды.
Если змейка "съедает" еду, ее длина увеличивается на один сегмент, и генерируется новая еда.
-
Управление:
Если пользователь свайпает вправо, змейка поворачивает вправо.
Если пользователь свайпает влево, змейка поворачивает влево.
Аналогично для свайпов вверх и вниз.
-
Отрисовка:
Змейка и еда отрисовываются с помощью
Rectangle
в SwiftUI.
Как запустить:
Создайте новый проект в Xcode с использованием SwiftUI.
Замените содержимое файла
ContentView.swift
на приведенный выше код.Запустите приложение на симуляторе или устройстве.
Теперь у вас есть простая версия игры "Змейка" на SwiftUI!

Что тут интересного: змейка по размерам сильно меньше, скорость чуть выше. При изначально одинаковом запросе, DeepSeek добавил от себя лейбл с подсчётом очков. Так же проблема с тем, что змейка уходит за рамки экрана и не возвращается.
И кстати, я нигде не указывала, каким должно быть управление и по умолчанию обе модели сделали управление по свайпу (это логично, но с другой стороны, вариантов много: стрелочки, гироскоп и пр.)
Считаю что с первым заданием обе модели справились. Счёт 1:1.
Далее в преддверии 14 февраля в голову ударили сердечки, поэтому попросила сделать обе модели простенькую анимацию. Вот такой был промпт:
Напиши полностью с нуля приложение на SwiftUI. В приложении должен быть один экран. На нём на тёмном фоне должна быть такая анимация:
Сердечки плавно падают сверху экрана, но при клике по экрану они разлетаются в стороны. Выглядит ярко и визуально привлекательно.
Сердечки должны быть разных оттенков розового и разного размера.
Начнём с ChatGPT. Вот результат:
Ответ ChatGPT
Вот полный код приложения на SwiftUI, которое реализует эффект падающих сердечек с разлетом при клике.
Что делает этот код?
• Сердечки падают сверху экрана с разной скоростью и размером.
• Клик по экрану заставляет сердечки разлететься в стороны.
• Разные оттенки розового и размеры сердечек делают анимацию визуально привлекательной.
import SwiftUI
struct Heart: Identifiable {
let id = UUID()
var position: CGPoint
var size: CGFloat
var color: Color
var velocity: CGFloat
}
struct ContentView: View {
@State private var hearts: [Heart] = []
@State private var explode = false
let screenWidth = UIScreen.main.bounds.width
let screenHeight = UIScreen.main.bounds.height
var body: some View {
ZStack {
Color.black.ignoresSafeArea()
ForEach(hearts) { heart in
HeartShape()
.fill(heart.color)
.frame(width: heart.size, height: heart.size)
.position(heart.position)
.opacity(explode ? 0.5 : 1)
.animation(.easeInOut(duration: 1.5), value: explode)
}
}
.onAppear {
startDroppingHearts()
}
.onTapGesture {
explodeHearts()
}
}
func startDroppingHearts() {
Timer.scheduledTimer(withTimeInterval: 0.3, repeats: true) { timer in
let newHeart = Heart(
position: CGPoint(x: CGFloat.random(in: 0...screenWidth), y: -50),
size: CGFloat.random(in: 20...50),
color: Color(red: Double.random(in: 0.8...1), green: Double.random(in: 0...0.3), blue: Double.random(in: 0.5...0.7)),
velocity: CGFloat.random(in: 2...5)
)
hearts.append(newHeart)
withAnimation(.linear(duration: 3)) {
for index in hearts.indices {
hearts[index].position.y += screenHeight + 50
}
}
hearts.removeAll { $0.position.y > screenHeight + 50 }
}
}
func explodeHearts() {
explode = true
withAnimation(.easeOut(duration: 0.5)) {
for index in hearts.indices {
hearts[index].position.x += CGFloat.random(in: -100...100)
hearts[index].position.y += CGFloat.random(in: -100...100)
}
}
DispatchQueue.main.asyncAfter(deadline: .now() + 0.7) {
explode = false
}
}
}
struct HeartShape: Shape {
func path(in rect: CGRect) -> Path {
var path = Path()
let width = rect.width
let height = rect.height
path.move(to: CGPoint(x: width / 2, y: height))
path.addCurve(to: CGPoint(x: 0, y: height / 3),
control1: CGPoint(x: width * 0.3, y: height * 1.1),
control2: CGPoint(x: 0, y: height * 0.6))
path.addArc(center: CGPoint(x: width * 0.25, y: height / 3),
radius: width * 0.25,
startAngle: .degrees(180),
endAngle: .degrees(0),
clockwise: false)
path.addArc(center: CGPoint(x: width * 0.75, y: height / 3),
radius: width * 0.25,
startAngle: .degrees(180),
endAngle: .degrees(0),
clockwise: false)
path.addCurve(to: CGPoint(x: width / 2, y: height),
control1: CGPoint(x: width, y: height * 0.6),
control2: CGPoint(x: width * 0.7, y: height * 1.1))
return path
}
}
@main
struct HeartsApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
Как это работает?
• Падающие сердечки создаются каждые 0.3 секунды и плавно движутся вниз.
• Сердечки разного размера и оттенка розового.
• При клике по экрану сердечки разлетаются в случайном направлении.
• Анимации делают разлет плавным и красивым.
Попробуй запустить этот код в Xcode, и ты увидишь магию ?✨!

Получилась какая-то хрень. Но я решила дать ему ещё один шанс и попросила исправить, чтобы сердечки падали на весь экран.
Со второго раза:

Нуууу, почти. Сердечки падают, они разного цвета и размера. При нажатии происходит "улёт" вниз и дальше опять глюк, что они только в первой четверти экрана появляются.
В целом ок, с учётом того, что код я не смотрела вообще.
Теперь посмотрим ответ от DeepSeek
Ответ DeepSeek
Создадим приложение на SwiftUI с анимацией падающих сердечек, которые разлетаются при нажатии на экран. Вот полный код:
import SwiftUI
struct Heart: Identifiable {
let id = UUID()
var position: CGPoint
var color: Color
var size: CGFloat
var isFlying: Bool = false
}
struct ContentView: View {
@State private var hearts: [Heart] = []
@State private var timer: Timer?
var body: some View {
ZStack {
Color.black
.edgesIgnoringSafeArea(.all)
ForEach(hearts) { heart in
Image(systemName: "heart.fill")
.font(.system(size: heart.size))
.foregroundColor(heart.color)
.position(heart.position)
.animation(.linear(duration: heart.isFlying ? 0.5 : 10), value: heart.position)
}
}
.onAppear {
startHeartsAnimation()
}
.onDisappear {
timer?.invalidate()
}
.onTapGesture {
explodeHearts()
}
}
private func startHeartsAnimation() {
timer = Timer.scheduledTimer(withTimeInterval: 0.5, repeats: true) { _ in
let size = CGFloat.random(in: 20...50)
let heart = Heart(
position: CGPoint(x: CGFloat.random(in: 0...UIScreen.main.bounds.width), y: -size),
color: Color(red: Double.random(in: 0.7...1), green: Double.random(in: 0.2...0.5), blue: Double.random(in: 0.4...0.7)),
size: size
)
hearts.append(heart)
DispatchQueue.main.asyncAfter(deadline: .now() + 10) {
if let index = hearts.firstIndex(where: { $0.id == heart.id }) {
hearts.remove(at: index)
}
}
withAnimation(.linear(duration: 10)) {
if let index = hearts.firstIndex(where: { $0.id == heart.id }) {
hearts[index].position.y = UIScreen.main.bounds.height + size
}
}
}
}
private func explodeHearts() {
for index in hearts.indices {
let angle = Double.random(in: 0..<2 * .pi)
let distance = CGFloat.random(in: 100...300)
let newX = hearts[index].position.x + cos(angle) * distance
let newY = hearts[index].position.y + sin(angle) * distance
withAnimation(.easeOut(duration: 0.5)) {
hearts[index].position = CGPoint(x: newX, y: newY)
hearts[index].isFlying = true
}
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
if let index = hearts.firstIndex(where: { $0.id == hearts[index].id }) {
hearts.remove(at: index)
}
}
}
}
}
@main
struct HeartAnimationApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}

DeepSeek с первого раза выдал довольно пристойную реализацию. Максимально соответствует запросу.
Единственный минус, что после того как я нажимаю на экран и сердечки разлетаются - превью крашится.
Я считаю, что во второй задаче победил DeepSeek. К моему удивлению, я была скептически настроена, но посмотрев и сравнив их на практике - кажется, что DeepSeek вообще ничем не уступает ChatGPT, по крайней мере в написании кода. И ещё надо учитывать то, что DeepSeek работает бесплатно и без ВПН и для регистрации мне не потребовалось ничего, кроме почты.
Кто ещё тестировал на других языках, пишите как вам?
Комментарии (46)
Alex-Freeman
30.01.2025 17:11Какой ChatGPT использовали? GPT-4o, о1 или o1 pro? А то, если сравнивать с GPT-4o то можно и не сравнивать, уровень совершенно разный
kosyakus Автор
30.01.2025 17:11Действительно, даже не подумала, что по-хорошему надо было написать это в статье. Чат GPT-4o и Deepseek-V3.
griha_shershen
30.01.2025 17:11жду сравнения o1 и r1, если к первому нет доступа, могу от своего имени закинуть
Ahulinet
30.01.2025 17:11Я сравнивал о1 и r1. Но не совсем в правильных условиях. Начал писать с о1 скрипт для экселя на vба который будет отрезать от модельки в SolidWorks по миллиметру и замерять оставшийся объём на каком-то этапе gpt не справился с запросами к API SolidWorks и Я обратился за исправление ошибок к модели r1 так вот она начала нести вообще лютейшую дичь в то время как gpt хотя бы что-то старался исправить в итоге после небольшого допиливания ручками кот от gpt прекрасно работает.
Ahulinet
30.01.2025 17:11Сейчас начал писать квиз по своей профессии на Java в ChatGPT. Код получается, но со скрипом: всё валится в один класс, данные не вынесены, всё загромождено в main. Приходится самому раскладывать структуру.
Переключился на DeepSeek — и сразу заметил разницу. Он сам предложил улучшения, грамотно разбил код на классы, вынес данные в JSON. Работа пошла заметно легче. Но в какой-то момент DeepSeek начал люто зависать, и пришлось снова вернуться к ChatGPT, несмотря на его склонность к менее структурированному коду.
В итоге DeepSeek по организации кода понравился больше, но из-за зависаний продолжить работу с ним не получилось.
Вот это сообщение например написано путём распознавания речи и оформления в приличный текст на чат gpt 4о))
kabashin
30.01.2025 17:11насколько я понял DeepSeek сейчас находится под постоянными хакерскими атаками
RocketRatchet
30.01.2025 17:11Или под наплывом пользователей, которые увидели громкие заголовки, бесплатность и отсутствие потребности в впн
kujoro
30.01.2025 17:11у меня наоборот получилось, пользоваться им невозможно, пишет вообще какую-то ерунду, ну только если супер простенькое что-то спрашивать
по-моему qwen сейчас даже лучше дипсика, и пользоваться тоже можно без впн, хотя тоже ерунду выдает, даже если с 4о сравнивать
мой вопрос
Мне нужна таблица с навигацией по ячейкам написанная на go, bubble tea и таблицей из пакета "github.com/evertras/bubble-table/table"
Killan50
30.01.2025 17:11Доступ к внешним ресурсам это сложная тема, и её выполняет не модель а фронтэнд, сама модель не имеет к этому никакого отношения. Если фронт не нашёл ничего по вашей ссылке и не передал в контекст, то эта часть строки будет только путать модель, прося делать непонятно что.
Для чистоты эксперимента скачайте все нужные файлы по ссылке вручную и положите в контекст модели.
rPman
30.01.2025 17:11Вы можете представить человека, который сможет по такому тз что то написать? да тут вопросов возникает тьма, не говоря про анализ, который нужно провести по коду по ссылке.
А вы хотите что то от ИИ, которому три года от роду и который хуже человека по всем параметрам кроме стоимости?
SinsI
30.01.2025 17:11с первым заданием обе модели справились.
ChatGPT провалил часть задания
квадратики которые она съедает - разных цветов
сделав вместо этого квадратики постоянно меняющегося цвета.
И если вы для проверки хотите задавать задачи с уже известными реализациями - то не стоит в промте упоминать устоявшееся название этой игры, ведь велика вероятность что модель просто скопипастит кусок имеющегося кода. Наоборот, желательно сделать какой-нибудь "финт ушами", вроде движения змейки под углом.
vanxant
30.01.2025 17:11не стоит в промте упоминать устоявшееся название этой игры
А кстати очень интересный кейс. Что будет, если заменить слово "змейка" ну допустим на "многоножку" и скормить тому же боту в другой сессии.
Sergeygs
30.01.2025 17:11Более полугода очень активно использую оба инструмента ежедневно в своей работе (DS с июня прошлого года). Стек в основном python, java, plsql, html, js, css.
По моим наблюдениям на текущий момент ни один из двух не заменяет программиста. На сколько-нибудь комплексной задаче ничего хорошего не будет. Более-менее сносные результаты получаешь на типовых запросах (миллионы реализаций той же змейки уже изучены ИИ - конечно он выдаст достойный вариант). На НЕ типовых задачах повышенной сложности в моем личном рейтинге DeepSeek значительно превосходит ChatGPT (ну или лучше меня понимает :))
Оба иногда утыкаются в тупики из которого их не вывести никакими уточнениями - переписываешь куски сам, скармливаешь рабочий вариант - едешь дальше.
Ну и, конечно же, чем популярнее кодовая база (больше было материалов для изучения), тем лучше ответы. По python и java - отлично. Простые sql напишет и тот и другой. Сложные запросы (на 100+строк с агрегациями, партицированиями и прочей ерундой) лучше даже не просить без четкого понимания что должно быть на выходе: очень часто выдается код, который вроде даже работает, но на самом деле работает некорректно. Требуется тщательная проверка и исправление.
Итого по моим наблюдениям. v3 однозначно выигрывает в моем личном рейтинге у 4о. о1 и r1 забавны (видно рассуждения и иногда видя что он там пропустил или какие сделал допущения можно скорректировать запрос дальше), но избыточны. Работают существенно дольше и помнят меньше контекста диалога. Китайская модель со временем выдает результаты лучше, а ChatGPT сильно деградирует: порой переключение на 3.5 позволяет получить значительно более корректный результат.
Прошу прощения за многобукв.
P.S. все вышенаписанное про веб и десктопную разработку. К мобильным приложениям касательств не имел никогда.
Filex
30.01.2025 17:11А как вы используете DS, через web-интерфейс?
Sergeygs
30.01.2025 17:11Да, через веб.
Я однозначно против подключения ассистентов в IDE хотя бы потому, что в коде в разработке могут быть чувствительные приватные данные. Я не хочу, что весь мой код улетал непонятно куда на анализ. Лучше я буду спрашивать интересующее меня давая только нужную информацию и пользоваться ответами.
develmax
30.01.2025 17:11В компании, в которой я работаю написал проксю, которая сначала вырезает все возможные персональные данные и только потом отправляет запрос во внешнюю нейросеть, получает ответ и подставляет их обратно.
gfiopl8
30.01.2025 17:11У них у всех пока серьезные проблемы с алгоритмами, с кодом который неочевидно как делать. Например надо нарезать аудиофайл на части до 60 секунд размером, по заранее полученным точкам в которых можно делать разрез(пауза в речи). То есть на входе список возможных точек и желаемый размер сегмента, на выходе новый список точек.
Кажется что несложно, но на самом деле когда начинаешь делать понимаешь что не всё так очевидно, и есть подводный камень - могут быть сегменты больше чем разрешено.
Ллм бегают по кругу, приходится их тащить за рога в нужном направлении.
gmtd
30.01.2025 17:11Вчера как раз написал тут релевантный пост - Полезные советы при разработке с AI IDE агентами
Задавать подобные промпты чатботам для поиска IDE AI помощника - бессмысленно. Они ничего полезного не меряют. Это как сравнивать двух бойцов на число отжиманий, хотя потом вы их будете использовать на полноценном поле боя.
Важен контекст кодовой базы, более грамотные промпты, определенный тип задач, тактика промптов, при выполнении определенных задач - и тогда AI может сделать жизнь сказкой. Какая именно AI - надо пробовать. Но не так, как в этой статье.
Indemsys
30.01.2025 17:11Довольно наивно выглядит вот этот совет писать понятные промпты или там уметь писать промпты. И вообще делать из промптов какую то науку. Типа только умные умеют писать промпты.
Нет, эти ИИ могут понять что спрашивают даже если делать ошибки в каждом слове.
Так при чем тут промпты?
Уточнение задачи в начальном промпте только снизит количество итераций вопросов. Но не факт. Я предпочитаю цепочку уточнений, чем сразу все писать в одном запросе.
В любом случае сессия вопросов-ответов с ИИ длится значительно короче последующей отладки. Поэтому запариваться над промптами нет никакой необходимости.
Ясно что ChatGPT и DeepSeek - в понимании текста одно и тоже. Но ChatGPT умеет читать с картинок. Это огромное преимущество. Он может переписать код выданный ему в виде скриншота. Или, например, сгенерить массив на C выданный ему в виде картинки таблицы.
И в этом ChatGPT гораздо сильнее DeepSeek .rPman
30.01.2025 17:11Нет, речь о полноте информации в промпте, а не ошибках.
Когда ты обращаешься к человеку-специалисту, большую часть необходимых знаний он додумывает за тебя,.. почти то же самое делает ИИ но он больше выдумывает чем догадывается (по уму это должны вытягивать рассуждающие модели, но там других проблем хватает).
Не забываем что речь идет о трансформере, это основа технологии gpt (general pretrained transformer), который не просто так назван, он лучше всего умеет преобразовывать из одного вида информацию в другой... из одного языка в другой, из текста ТЗ в программу... чем полнее и точнее ты опишешь задание, тем лучше.
А так как в обучающих данных полно другого бреда, который почти наверняка будет мешать в данном конкретном случае, используют лайфхаки, вида - придание эмоциональности запросу (повышает качество), просьбы по рассуждать или перепроверить себя (неуверенность в своих же ответах повышает качество) и главный лайфхак, про который все забывают - давайте сети примеры, multishot один из первых методов (и наверное самый лучший) для улучшения качества... но нет, все хотят коротки oneshot и ждут от неполноценных галлюцинирующих моделей шедевры.
все это должно быть в промпте.
И помним, современный ИИ еще далеко не AGI. Мы не умеем пока его адекватно тестировать, обычно тесты проверяют на знания (обладание информацией) но не на умение её использовать... точнее это умение у моделей есть, но очень очень слабое, из-за которого и создается впечатление что модель умна. А главная беда обучения нейронок - переобученность, они заучивают примеры,.. притом они вытаскивают не сам текст примера, а обучаются на его производных более глубокого уровня (трансформер многослоен, заучить может не входы всей сети, а входы какого-то внутреннего слоя), мало того, похоже это и есть то как оно вообще что-либо запоминает, т.е. невозможно это у сети отключить, ведь тогда ее и обучать будет проблематично.
Именно переобученность и пускает пыль в глаза тем кто с дуру тестирует сеть на банальностях. Придумывайте задания, которых в принципе не могло быть в обучающей выборке. Анализируйте ошибки ИИ, что бы понять, почему именно она не смогла... в этом на порядок больше информации о качестве ИИ чем в сухих циферках бенчмарков.
Indemsys
30.01.2025 17:11Да, да. Взорвите свой мозг чтобы создать промт и только потом спрашивайте у ИИ.
Нет, люди так не делают, кто хоть мало мальски имел дело с ИИ. Сам ИИ научит вас экономичности вопросов.
ChatGPT в одной сессии помнит весь контекст. Подозреваю что он вообще помнит весь контекст с одного аккаунта. Поэтому начинает очень быстро понимать с полуслова.
Знание на чем сделан ИИ ничем не помогут и нечего их притягивать. Все равно это комерческая тайна, а что там сплетничают о их архитектуре не надо принимать слишком серьезно. У этих парней с дезинформацией конкурентов все отлично налажено. И как пишется в этой статье https://situational-awareness.ai/ ИИ - это прежде всего оружие, а они пока хватают низковисящие плоды буквально каждый день. Т.е. трансформеры это не самое важное в их архитектуре.
Их бенчмарки это тоже способ всех запутать. Мне как юзеру не интересна их средняя температура по больнице. А вот как они генерят код змейки важно.
kosyakus Автор
30.01.2025 17:11Почитала комментарии, полностью согласна, теперь хочется сделать сравнение на более узких фичах, на каких-то конкретных рабочих задачах.
По поводу промптов - у меня по-разному выходит. Иногда мне нужно расписать на 40 предложений целое ТЗ, чтобы получить максимально релевантный результат. А иногда как верно заметил @indemsysбывают и абстрактные задачи чтобы просто задать вектор направления решения и далее уже конкретизировать запросы.
В статье получились как раз скорее абстрактные задачи, и мне было интересно посмотреть логику работы. А ещё проверить теорию заговора, что якобы DeepSeek - это просто "переадресация с ChatGPT" и миллион китайцев просто копипастят запрос оттуда в свою сеть)
almaz1c
30.01.2025 17:11Несколько нубских вопросов,- прошу не ругаться:
Подскажите плиз, - это локальная версия DeepSeek выдает такое волшебство или облачная?
На каких языках умеет писать программы DeepSeek?
Он понимает русский язык? Вроде заявлялась поддержка только английского и китайского?
Antas
30.01.2025 17:11-
Замечательно понимает русский и на нём же отвечает.
Заметил, что русского интерфейса в браузере нет, а вот в приложении русский интерфейс есть.
-
kosyakus Автор
30.01.2025 17:11Хорошие вопросы
1) Это облачная версию DeepSeek-V3
2) Насколько я понимаю, так как в распоряжении ии весь интернет - то практически на любом.
Но я уточнила у него же, вот ответ от самого DeepSeek:
"Я могу работать с любым языком программирования, который широко используется и документирован в интернете. Моя база знаний включает синтаксис, стандартные библиотеки, фреймворки и лучшие практики для большинства популярных языков. Однако есть некоторые нюансы
Ограничения:Экзотические или устаревшие языки: Если язык очень редкий или устаревший (например, COBOL или Fortran), моя помощь может быть ограничена из-за недостатка актуальной информации в моей базе данных.
Сверхновые технологии: Если язык или фреймворк появился совсем недавно (после октября 2023 года), я могу не знать о нём или знать недостаточно.
Контекст и специфика: Я могу писать код, но для его корректной работы в вашем проекте мне нужно понимать контекст (например, версии языка, используемые библиотеки, окружение).
"
3) Да, понимает, я все запросы делала на русском, ответы он тоже давал на русском.
kabashin
30.01.2025 17:11По первому вопросу, на этой неделе была статья на хабре - стоимость локальной машины для работы с DeepSeek - от 6.000 дол.
gfiopl8
30.01.2025 17:11Там в итоге получается скорость работы - пара токенов в секунду.
У меня 2 * Xeon Gold 5218.
Каждый из этих процессоров поддерживает 6 каналов памяти. Я поставил 12 * 64GB DDR4-2666. Получилось 768GB RAM.
Запустил DeepSeek V3 q4_K_M. Это 404GB модель + контекст.
Получил около 2 токенов в секунду:
- response_token/s: 1.9
- prompt_token/s: 3.8 - 5
Работает. Но с такой скоростью оно не надо.
У меня есть Nvidia RTX 3090. Я её добавил, на неё сгрузилось 2 слоя. Быстрее не стало. Всего в модели - 62 слоя.
almaz1c
30.01.2025 17:112 x NVIDIA A100 рекомендуется для шустрой работы, как я понял?
rPman
30.01.2025 17:11По чуть чуть не получится добавлять, прирост скорости от добавления очередной gpu будет на грани погрешности измерений
Смело умножайте количество a100 на 10.. суммарный объем vram должен вмещать и веса и kv-cache для контекстного окна (это еще десяток другой gb на каждый batching процессе). Каждая A100 это 'всего' 40gb, для 4бит квантизации с горем пополам хватит 12штук (скорее 16 нужно)
batching - это одновременный запуск нескольких запросов, увеличивает скорость исполнения на порядок или даже больше (на маленьких моделях можно 16-кратный прирост получить на десктопных видеокартах), т.е. время на каждый запрос не уменьшится, но суммарное количество обработанных и сгенерированных токенов увеличивается.
rocket
30.01.2025 17:11Подскажите, какие промпты нужно писать, чтобы создавать android-приложения?
rPman
30.01.2025 17:11<на правах шутки>
открываете какой-нибудь freelance.habr.com, на таких сайтах есть сразу много продвинутых нейронок, и пишете как заказчик ТЗ так, как его понимаете, выбираете исполнителя, в беседе, вам зададут необходимые вопросы... и оплата удобная
p.s. рановато для даже топовых ИИ давать сразу все задание... делите задачу на этапы, проектируйте, просите помощи, изучайте и анализируйте ответы. Это пока то знание, которое не передать курсами и учебниками, они устареют быстрее чем выйдут в печать.
Alexey2005
30.01.2025 17:11Мало того, это при сравнимом качестве кода может оказаться даже дешевле тех $200, которые вы потратите на ChatGPT Pro*
*если приложение нужно всего одно и не потребуется его поддерживать.
Wesha
30.01.2025 17:11какие промпты нужно писать, чтобы создавать android-приложения?
Зачем на такие мелочи размениваться? «Счастья, для всех, даром, и пусть никто не уйдёт обиженным!»
Alexey2005
30.01.2025 17:11Тут как бы не получилось так, что все заказчики, способные составить нормальное ТЗ, уйдут к нейронкам, а живым исполнителям останутся лишь техзадания вида "ну вот мне нужно сделать какую-то такую штуку... я вообще не знаю какую, но очень надо, так что давайте сделаем хоть что-нибудь, а дальше будет видно."
Wesha
30.01.2025 17:11что все заказчики, способные составить нормальное ТЗ, уйдут к нейронкам
Дык
техзадания вида "ну вот мне нужно сделать какую-то такую штуку... я вообще не знаю какую, но очень надо
Вы знакомы с моей женой?
mikeinside
30.01.2025 17:11Занятное сравнение конечно, но из таких сравнений нельзя делать выводы. Есть 2 задания. У вас выборка всего 2.
Может в сотне других задач окажется лучше одна или другая модель. Поэтому, первое на что стоит обращать внимание - это результаты бенчмарков. Тем более, в них есть раздел касательно программирования.
k1merpwnz
30.01.2025 17:11Просил оформить пару приколов для интерфейса на ts с интеграцией в lua, дс справился лучше, хотя и немного бесят его рассуждения, порой по паре минут пишет, больше, чем сам код
Viktor9354
Интересный результат. Пробовал такие тесты устраивать по вопросам Frontend разработки и хочу сказать, что в большинстве кейсов ChatGPT побеждает. В редких случаях, по отдельным темам наоборот, DeepSeek выдаёт более удовлетворительный ответ. Но и у вас и у меня всё-таки несистемный подход и по-хорошему необходимо тестировать на большем количестве запросов разных форматов. Чисто по ощущениям после недели пользования, DeepSeek по IQ больше походит на Gemini, нежели на ChatGPT.