Pull to refresh

Comments 9

А имя бот "забыл" (Максим вместо Андрея) или это скриншот из другой сессии?

Там Максим это имя владельца бота, а Андрей имя пользователя который с ботов говорит

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

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

В первой версии функции памяти мы так и делали - отдельным запросом анализировали что нужно изменить в данных постоянной памяти.

В версии которая описывается в данной статье есть два существенных момента для стабилизации работы:

  1. ИИ может менять значения только определенного ключа в памяти - это существенно снижает риск того, что какие-то данные из памяти будут потеряны.

  2. Решение о сохранении чего-то в постоянной памяти принимается за счет использования встроенного и хорошо отлаженного (по крайней мере в моделях OpenAI) механизма вызова функций. Тем самым экономия в два раза токенов в отличии от первой версии функции памяти.

Получилось запустить функцию на джемини. Оказалось это совсем просто. При создании объекта в него передается список функций, их описание и параметры он сам смотрит (питон такое позволяет), и сам же их вызывает когда думает что это поможет ответить.

Таким образом завести вторую, третью итп память не составит никакого труда.

import google.generativeai as genai

import cfg
import my_google


genai.configure(api_key=cfg.gemini_keys[0])


def func1(location: str) -> str:
    '''Return weather forecast for location'''
    return f"The weather is good in {location}."


def search_google(query: str) -> str:
    '''Search Google for query, return texts of found web pages.'''
    return my_google.search_v3(query, max_search=3, download_only=True)[:30000]



model = genai.GenerativeModel('gemini-1.5-flash', tools=[func1,search_google])


chat = model.start_chat(history=[], enable_automatic_function_calling = True)


while 1:
    q = input('> ')
    r = chat.send_message(q).text.strip()
    print(r)

Как человек, который пытался пользоваться этой функцией в ChatGPT, могу сказать что на данный момент это не работает. Намного лучше работать над размером контекста.

Например, может отказаться записывать что либо в список покупок, а потом почему-то записать в память, что я однажды попросил нарисовать мем на армянском языке (потом оооочень долго не мог понять, почему на всех картинках надписи по-армянски)

Попробовал чат с функциями на джемини. Получилось вообще не очень. Функции он исправно дергает, параметры вроде верные передает, но это не сильно помогает. С постоянной памятью работает тоже как то хреново, иногда отвечает сразу и правильно, иногда упирается никак из него не вытащишь даже имя, в отладчике видно что всё ему в память правильно попадает. Похоже что быстрой дешевой модельке мозгов не хватает.

соберите в ProTalk бота с памятью из статьи - интересно ваше мнение

Кстати а функций то может быть несколько и он их сам дергает когда надо и сколько надо раз. Добавил функцию калькулятор - он теперь большие числа правильно считает Ж) Еще погоду и валюты смотрит на сайте а не выдумывает как обычно.

Причем калькулятор сделан через eval(), бот по сути сам пишет программы на питоне и выполняет их на интерпретаторе питона.

Sign up to leave a comment.

Articles