All streams
Search
Write a publication
Pull to refresh
6
-5.5
Калимулин Михаил Игоревич @exwill

AI developer

Send message

А зачем делать бота с доступом? Чтобы что?

Вам просто другой формат занятий подошел бы. Его пока нет, но скоро будет

Если бы вы были внимательным исследователем, то вы бы сначала выписали счет. И тогда бы вы поняли, что в приведенном вами сообщении бота выдумано все от начала и до конца.

Как сказали спартанцы Филиппу Македонскому: если )))

Получить неправильный счет у вас не получится. Как я писал в предыдущей статье, там обычный алгоритм. Бот самостоятельно доходит до того места, где понимает, что у него просят счет и передает управление.

Расчет цен, резервирование это все достаточно очевидные вещи. Не понимаю, как тут можно сделать что-то неправильно.

Но в любом случае, спасибо за демонстрацию!

Что такое онтологический взлом? Кто-то узнает внутренние инструкции? Но вообще-то я их и пишу для того, чтобы о них узнало как можно больше людей. Это же продающий бот

Спасибо! Было увлекательно

Нет, нельзя. Он же продающий бот, а не покупающий

import pandas as pd
from pathlib import Path
from collections import defaultdict, deque

def read_csv_smart(path):
    for enc in ["utf-8", "utf-8-sig", "cp1251", "latin1"]:
        try:
            return pd.read_csv(path, encoding=enc)
        except Exception:
            continue
    # fallback
    return pd.read_csv(path, encoding="latin1", errors="ignore")

# Load
purchases = read_csv_smart("/mnt/data/file-7hqUPaq8LxdUaPjygcVFrh-purchases.csv")
sales = read_csv_smart("/mnt/data/file-Q1Zn1817nakCUSQTtTxs25-sales.csv")

# Normalize column names
purchases.columns = [c.strip().lower() for c in purchases.columns]
sales.columns = [c.strip().lower() for c in sales.columns]

# Map Russian columns
# дата, товар, количество, сумма
req_cols = ["дата", "товар", "количество", "сумма"]
for df_name, df in [("Закупки", purchases), ("Продажи", sales)]:
    missing = [c for c in req_cols if c not in df.columns]
    if missing:
        raise ValueError(f"{df_name}: отсутствуют столбцы {missing}. Найдены: {list(df.columns)}")

# Prepare dataframes
p_df = purchases[["дата", "товар", "количество", "сумма"]].copy()
s_df = sales[["дата", "товар", "количество", "сумма"]].copy()

# Parse dates (dd.mm.yy)
for df in (p_df, s_df):
    df["дата"] = pd.to_datetime(df["дата"], format="%d.%m.%y", errors="coerce")
    df["количество"] = pd.to_numeric(df["количество"], errors="coerce")
    df["сумма"] = pd.to_numeric(df["сумма"], errors="coerce")

# Drop bad rows
p_df = p_df.dropna(subset=["дата", "товар", "количество", "сумма"])
s_df = s_df.dropna(subset=["дата", "товар", "количество", "сумма"])

# Compute unit cost for purchases
p_df = p_df[p_df["количество"] > 0]
p_df["unit_cost"] = p_df["сумма"] / p_df["количество"]

# For sales, revenue is given as total "сумма"
s_df = s_df[s_df["количество"] > 0]
s_df["revenue"] = s_df["сумма"]

# Sort
p_df = p_df.sort_values(["товар", "дата"]).reset_index(drop=True)
s_df = s_df.sort_values(["товар", "дата"]).reset_index(drop=True)

# Build FIFO queues per product
purchase_queues = defaultdict(deque)
for prod, grp in p_df.groupby("товар", sort=False):
    for _, r in grp.iterrows():
        purchase_queues[prod].append([float(r["количество"]), float(r["unit_cost"]), r["дата"]])

# Process sales
rows = []
shortages = defaultdict(float)

for prod, grp in s_df.groupby("товар", sort=False):
    for _, r in grp.iterrows():
        qty = float(r["количество"])
        revenue = float(r["revenue"])
        remaining = qty
        cogs = 0.0
        pq = purchase_queues[prod]
        while remaining > 0 and pq:
            lot_qty, lot_cost, lot_date = pq[0]
            use = min(remaining, lot_qty)
            cogs += use * lot_cost
            lot_qty -= use
            remaining -= use
            if lot_qty == 0:
                pq.popleft()
            else:
                pq[0][0] = lot_qty
        if remaining > 0:
            shortages[prod] += remaining
        rows.append({
            "date": r["дата"],
            "product": prod,
            "qty_sold": qty,
            "revenue": revenue,
            "cogs_fifo_known": cogs,
            "gross_profit_known": revenue - cogs,
            "uncosted_qty_due_to_shortage": max(0.0, remaining)
        })

res_df = pd.DataFrame(rows)

# Aggregate per product
agg = res_df.groupby("product", as_index=False).agg(
    revenue=("revenue", "sum"),
    cogs_fifo_known=("cogs_fifo_known", "sum"),
    gross_profit=("gross_profit_known", "sum"),
    qty_sold=("qty_sold", "sum"),
    uncosted_qty=("uncosted_qty_due_to_shortage", "sum")
).sort_values("gross_profit", ascending=False)

# Display results
display(agg)

# Totals
totals = pd.DataFrame({
    "product": ["ИТОГО"],
    "revenue": [agg["revenue"].sum()],
    "cogs_fifo_known": [agg["cogs_fifo_known"].sum()],
    "gross_profit": [agg["gross_profit"].sum()],
    "qty_sold": [agg["qty_sold"].sum()],
    "uncosted_qty": [agg["uncosted_qty"].sum()],
})
display(totals)

# If shortages, show brief note
if (agg["uncosted_qty"] > 0).any():
    display({"Примечание": "Обнаружены продажи без достаточного запаса на момент продажи. COGS рассчитан только для доступной части. Проверьте последовательность дат закупок/продаж."})

У гигачат нет code interpreter

Кока-кола продает сладкую водичку

Откуда возьмется это самое "усложнение запросов"? Я "вяжу веники" и корпорация "вяжет веники". Запросы одинаково простые. Репутационные издержки также можно уравнять. Да у корпорации теоретически может возникнуть больше недовольных клиентов, но для меня и ценность клиентов выше. Мне и одного потерять жаль, а корпорация потеряет тысячу-другую и не заметит

В правильном направление мыслите. Но ваша проблема в том, что вы мыслите, а я знаю, как оно на самом деле. Не будет этого. Не будет ИИ продавать внедорожник за доллар. Это практика. Легко проверяемая. Попробуйте купить у моего бота что-нибудь за доллар (рубль, копейку)

Крупные и мелкие тут ничем друг от друга не отличаются. И там, и там в отделах продаж работают примерно одинаковые люди. И занимаются эти люди примерно одинаковым. ИИ выдает вам "на руки" что-то типа усредненного, среднестатистического работника отдела продаж, который делает свою работу. А денег не простит. Вот в этом последнем предложении и заключается вся суть обсуждаемого нами.

Это почему это я не могу сравнить с сотрудниками и без? Очень даже могу сравнить. Один сотрудник стоит определенную сумму в месяц. Сколько было бы нужно сотрудников тоже могу прикинуть. Одно на другое умножаем и "сравниваем". Тут все довольно просто. И, как сказал поэт, "весомо, грубо, зримо". Фонд оплаты труда он либо есть, либо его нет. И это и есть разница. А вы пытаетесь увести вопрос в сторону гипотетического

Да и глава мелкомягких совсем не то говорил, что подается в статье

1
23 ...

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity