Подскажите ии под кодинг

temniy
На сайте с 15.03.2008
Offline
262
#101
Sly32 #:

Не пользуйтесь китайскими поделками😷

У Sora таких проблем нет

У QWEN тоже такой проблемы нет.
⭐ Лучший хостинг от 4 евро, VPS от 6 евро - разные локации - любые карты - скидки до 20% - https://fornex.com/c/ffi2e3/ru/services/
EE
На сайте с 02.01.2021
Offline
168
#102
SimpleHosting #:

Нужен не лучший, а тот, кто способен загрузить все файлы.

Если прям бесплатно (только электричество) и бесконечно, то Qwen3 Coder 30b + VS Code - и сколько душе угодно, пользуйтесь. Из бесплатного и без ограничений это наверное, самое лучшее сейчас. Правда, если у вас ПК не ниже: RX 6600 XT/RTX 3060 + i5 11600/Ryzen 5 5600 + 32 ГБ ОЗУ.

SimpleHosting
На сайте с 22.08.2017
Offline
46
#103
Sly32 #:
Угу...  Claude тебе не помог, а  Claude Desktop поможет? а в чем разница, не расскажешь?

И что ж такого сложного в MCP? Устанавливается проще некуда. И он не панацея. Все равно остается ограничение от AI: 200,000 токенов ≈ 150,000 слов ≈ 600-800 КБ текста. Вы можете без загадок говорить?

npx --version
node --version
npm install -g @modelcontextprotocol/server-filesystem
{
  "mcpServers": {
    "filesystem": {
      "command": "mcp-server-filesystem",
      "args": [
        "D:\\путь\\путь\\путь\\путь\\путь\\путь\\путь"
      ]
    }
  }
}
И так сойдет: 9³+10³=12.002314368427684396585596422710246253412175797832289423185279779³
SimpleHosting
На сайте с 22.08.2017
Offline
46
#104
EdwardEdit #:
если
Опять нюанс.
SimpleHosting
На сайте с 22.08.2017
Offline
46
#105
Sly32 #:
но все это может работать и на бесплатных ЛЛМ

Вы об этом? Это самый бюджетный вариант?

AI Описание
grok.com Для него, это много файлов
chatgpt.com Для него, это много файлов
gemini.google.com Вы можете добавлять одновременно не более 10 файлов
chat.qwen.ai В одном раунде диалога разрешено загружать не более 5 документов.
claude.ai Для него, это много файлов
perplexity.ai Вы достигли ежедневного лимита загрузок для вашего плана.


НазваниеОписание
viaSocketСлетают фильтры
Claude DesktopMCP работает, но лимиты быстро заканчиваются. 200,000 токенов ≈ 150,000 слов ≈ 600-800 КБ текста.
vs Code + ContinueНе получилось увидеть файлы.


import os
import sys

# --- ПОДАВЛЕНИЕ WARNING от gRPC/Google (делаем ДО импорта genai!) ---
os.environ["GRPC_VERBOSITY"] = "ERROR"
os.environ["GLOG_minloglevel"] = "3"  # 3 = только FATAL, 2 = ERROR и выше

# Теперь можно импортировать Google AI
import google.generativeai as genai
import threading
import time
import itertools
import re

# --- НАСТРОЙКА ---
GOOGLE_API_KEY = 'ВАШ_API_КЛЮЧ_GEMINI'
PROJECT_PATH = "D:/путь/путь/путь/путь/путь/путь/путь"
TARGET_EXTENSIONS = ['.tx1', '.tx2', '.tx3', '.tx4', '.scc']

# --- ФУНКЦИЯ: получение списка файлов (и запоминание путей) ---
def get_file_paths(project_path):
    file_paths = []
    for root, _, files in os.walk(project_path):
        for file in files:
            if any(file.endswith(ext) for ext in TARGET_EXTENSIONS):
                full_path = os.path.join(root, file)
                rel_path = os.path.relpath(full_path, project_path)
                file_paths.append((full_path, rel_path))
    return sorted(file_paths, key=lambda x: x[1])

# --- ФУНКЦИЯ: загрузка контекста из уже известных путей ---
def load_full_context_from_paths(file_paths):
    print("... Загружаю полный код проекта в контекст ...")
    full_context = ""
    for full_path, rel_path in file_paths:
        full_context += f"--- ФАЙЛ: {rel_path} ---\n\n"
        try:
            with open(full_path, 'r', encoding='cp1251', errors='ignore') as f:
                full_context += f.read()
        except Exception as e:
            full_context += f"*** ОШИБКА ЧТЕНИЯ: {e} ***"
        full_context += "\n\n"
    print(f"--- Контекст загружен ({len(full_context)} символов) ---")
    return full_context

# --- АНИМАЦИЯ ---
def animate(stop_event):
    for c in itertools.cycle(['|', '/', '-', '\\']):
        if stop_event.is_set():
            break
        sys.stdout.write(f'\rAI: ...думаю... {c}')
        sys.stdout.flush()
        time.sleep(0.1)
    sys.stdout.write('\r' + ' ' * 40 + '\r')
    sys.stdout.flush()

# --- ПРОВЕРКА ЗАПРОСА О ФАЙЛАХ ---
def is_file_list_request(query: str) -> bool:
    patterns = [
        r"список файлов", r"какие файлы", r"покажи файлы", r"структура проекта",
        r"что видишь", r"файлы.*mcp", r"mcp.*файлы", r"перечисли файлы", r"есть ли файлы"
    ]
    return any(re.search(p, query.lower()) for p in patterns)

# --- ОСНОВНАЯ ПРОГРАММА ---
def main():
    global full_context
    full_context = None

    # Инициализация модели
    try:
        genai.configure(api_key=GOOGLE_API_KEY)
        model = genai.GenerativeModel('models/gemini-2.0-flash')
    except Exception as e:
        print(f"[ОШИБКА] Ошибка инициализации модели: {e}")
        return

    # Сканируем директорию ОДИН РАЗ
    print("... Анализирую структуру проекта ...")
    file_paths = get_file_paths(PROJECT_PATH)
    file_list = [rel for _, rel in file_paths]
    files_summary = "\n".join(f"* `{f}`" for f in file_list)
    print(f"--- Найдено файлов: {len(file_list)} ---")

    print("\n--- Готов к работе! Введите 'выход', чтобы завершить. ---")
    print("[ПОДСКАЗКА] Спросите «Какие файлы в проекте?» — ответ без токенов!\n")

    while True:
        user_input = input("Вы: ").strip()
        if not user_input:
            continue
        if user_input.lower() == 'выход':
            print("Программа завершена.")
            break

        # Быстрый ответ — без AI
        if is_file_list_request(user_input):
            print(f"AI: Я вижу следующие файлы в проекте:\n\n{files_summary}\n")
            print("[ЭКОНОМИЯ] Этот ответ сгенерирован локально — без расхода токенов.")
            continue

        # Загружаем контекст ОДИН РАЗ, используя уже известные пути
        if full_context is None:
            full_context = load_full_context_from_paths(file_paths)

        system_prompt = (
            "Ты — опытный программист, специализирующийся на ... "
            "Тебе предоставлен полный код проекта. Отвечай точно, ссылаясь на имена файлов при необходимости.\n\n"
            "Код проекта:\n\n" + full_context
        )

        chat_session = model.start_chat(history=[
            {'role': 'user', 'parts': [system_prompt]},
            {'role': 'model', 'parts': ["Контекст загружен. Готов отвечать на вопросы по коду."]}
        ])

        # Вызов модели
        response_container = {}
        stop_animation = threading.Event()

        def get_response():
            try:
                response = chat_session.send_message(user_input)
                response_container['text'] = response.text
            except Exception as e:
                response_container['error'] = str(e)

        api_thread = threading.Thread(target=get_response)
        animation_thread = threading.Thread(target=animate, args=(stop_animation,))
        api_thread.start()
        animation_thread.start()
        api_thread.join()
        stop_animation.set()
        animation_thread.join()

        # Вывод
        if 'text' in response_container:
            print(f"AI: {response_container['text']}")
        elif 'error' in response_container:
            print(f"[ОШИБКА] Ошибка API: {response_container['error']}")
        else:
            print("[ОШИБКА] Неизвестная ошибка при получении ответа.")

if __name__ == "__main__":
    main()
S3
На сайте с 29.03.2012
Online
362
#106
SimpleHosting #:
Вы об этом? Это самый бюджетный вариант?
Ты же писал, что разобрался! Как этот код решает проблему ограничения по токенам? Ты хоть понимаешь что он делает? Если ты полез в пайтон, хоть немного разберись. В данном случае MCP и не пахнет. Тут просто весь контекст грузится в промпт. Даже чанков нет. А MCP для тго и предназначен - индексирует проект, строит структуру как отдельное хранилище и при анализе забирает только то, что нужно в данные момент. 
Садись, два 😎
SimpleHosting
На сайте с 22.08.2017
Offline
46
#107
Sly32 #:
Ты же писал, что разобрался!

Вы же молчите. А как понять, что у вас на уме. Расскажите, что именно вы делаете?

Sly32 #:
Ты хоть понимаешь что он делает?

Ну я же его писал.

Sly32 #:
Как этот код решает проблему ограничения по токенам?

Вначале я перепробовал, то, что показал в таблицах, потом перешел на Python, директорию я увидел, но это было долго, потом загнал в память содержимое директории, чтоб быстрее было.

Sly32 #:
В данном случае MCP и не пахнет.

Значит AI меня обманул, буду дальше копать.

Sly32 #:
Тут просто весь контекст грузится в промпт.

Да, допилил, для экономии токенов.

Sly32 #:
Даже чанков нет.

Опять незнакомое слово.

S3
На сайте с 29.03.2012
Online
362
#108
SimpleHosting #:
Ну я же его писал.
Ты его не писал, не сочиняй, это ответ тебе ИИ сгенерировал. Обьясни, для чего тебе там анимация, да и еще в потоках? Ресурс отжирать? при работе с локальными моделями - непростительня роскошь.
SimpleHosting #:
Да, допилил, для экономии токенов.

Как, показывай.

SimpleHosting #:
Опять незнакомое слово.

ОМГ... Работать с ИИ и не знать что такое чанки и зачем они... 

SimpleHosting
На сайте с 22.08.2017
Offline
46
#109
Sly32 #:
Обьясни, для чего тебе там анимация
Было медленно, AI и говорит, а давай анимацию сделаем. Я и согласился.
Sly32 #:
Как, показывай.

Вначале я анимацию сделал, а потом как и говорил содержимое директории загнал в память.

Sly32 #:
ОМГ

Что такое ОМГ, я тоже не знаю.

Вы расскажите, что именно вы делаете? Или мне и дальше угадывать, какой самый бюджетный вариант?

S3
На сайте с 29.03.2012
Online
362
#110
SimpleHosting #:
Было медленно, AI и говорит, а давай анимацию сделаем. Я и согласился.
Прелестно... Было медленно, давай сделаем еще медленнее)))
SimpleHosting #:
потом как и говорил содержимое директории загнал в память.
И какую ты проблему этим решил?
SimpleHosting #:
Что такое ОМГ, я тоже не знаю.

это аналог 🤪

SimpleHosting #:
Вы расскажите, что именно вы делаете?

Нет, зачем? Разберись с базой сначала. Я могу помочь научиться, писать за тебя код не буду. 
Локально наверное удобнее всего работать с Ollama.
Твоя задача - не грузить весь проект в память а создать индекс проекта, который поможет его анализировать и добавлять в промпт только то, что нужно. Как это делать - решать тебе. Можно, например создать векторный индекс. Я Использую FAISS, но ты можешь взять что тебе больше нравится. Тогда при поиске по проекту он не будет каждый раз грузить весь, а будет исакть только то, что нужно для задачи. MCP умеет по построенным индексам ходить по проекту и забирать в промпт только нужные файлы. Это резко сокращает использование токенов.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий