Создание безопасного и запоминающего шифрового рабочего процесса для ИИ-агентов с динамическим выбором LLM и интеграцией API
В быстро меняющемся мире искусственного интеллекта ключевым аспектом является безопасность и эффективность работы с данными. Использование шифровых рабочих процессов, обеспечивающих защиту конфиденциальной информации при взаимодействии с AI-агентами, становится все более актуальным. Данная статья посвящена созданию безопасного и запоминающего шифрового рабочего процесса с динамическим выбором LLM и интеграцией API.
Шаг 1: Защита ввода API ключа
Первый шаг в построении надежной архитектуры — это надежная защита API ключа. Мы можем использовать модуль getpass
для ввода ключа в UI Colab, чтобы он оставался скрытым от посторонних глаз:
import os, getpass
os.environ["GEMINI_API_KEY"] = getpass.getpass("Введите ваш API ключ Gemini: ").strip()
Шаг 2: Динамический выбор LLM
Функция choose_llm
позволяет автоматически выбирать поставщика LLM в зависимости от доступных API ключей:
def choose_llm():
if os.getenv("OPENAI_API_KEY"):
return "openai", "gpt-4o-mini", "OPENAI_API_KEY"
if os.getenv("GEMINI_API_KEY"):
return "gemini", "gemini-2.5-flash", "GEMINI_API_KEY"
if os.getenv("ANTHROPIC_API_KEY"):
return "anthropic", "claude-3-5-haiku-20241022", "ANTHROPIC_API_KEY"
raise RuntimeError("Установите один из API ключей перед запуском.")
Шаг 3: Функция для выполнения команд
Функция run
обеспечивает выполнение команд в оболочке с возможностью отображения информации об ошибках:
def run(cmd, check=True, env=None):
print("▸", cmd)
p = subprocess.run(cmd, shell=True, text=True, capture_output=True, env=env)
if p.stdout: print(p.stdout)
if p.stderr: print(p.stderr)
if check and p.returncode != 0:
raise RuntimeError(f"Команда не выполнена: {cmd}")
return p
Шаг 4: Установка окружения
Функция ensure_node_and_cipher
отвечает за установку необходимых компонентов, таких как Node.js и Cipher CLI:
def ensure_node_and_cipher():
run("sudo apt-get update -y && sudo apt-get install -y nodejs npm", check=False)
run("npm install -g @byterover/cipher")
Шаг 5: Генерация файла конфигурации
Создание файла cipher.yml
для агента памяти обеспечивает долгосрочное хранение принятых решений:
def write_cipher_yml(workdir, provider, model, key_env):
cfg = """
llm:
provider: {provider}
model: {model}
apiKey: ${key_env}
systemPrompt:
enabled: true
content: |
Вы — ИИ-помощник по программированию с долговременной памятью о предыдущих решениях.
embedding:
disabled: true
mcpServers:
filesystem:
type: stdio
command: npx
args: ['-y','@modelcontextprotocol/server-filesystem','.']
""".format(provider=provider, model=model, key_env=key_env)
(workdir / "memAgent").mkdir(parents=True, exist_ok=True)
(workdir / "memAgent" / "cipher.yml").write_text(cfg.strip() + "\n")
Шаг 6: Выполнение команд Cipher
Функция cipher_once
позволяет запускать команды Cipher CLI:
def cipher_once(text, env=None, cwd=None):
cmd = f'cipher {shlex.quote(text)}'
p = subprocess.run(cmd, shell=True, text=True, capture_output=True, env=env, cwd=cwd)
print("Cipher говорит:\n", p.stdout or p.stderr)
return p.stdout.strip() or p.stderr.strip()
Шаг 7: Запуск API сервера
Функция start_api
инициализирует режим API для Cipher:
def start_api(env, cwd):
proc = subprocess.Popen("cipher --mode api", shell=True, env=env, cwd=cwd,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True)
for _ in range(30):
try:
r = requests.get("http://127.0.0.1:3000/health", timeout=2)
if r.ok:
print("API /health:", r.text)
break
except: pass
time.sleep(1)
return proc
Шаг 8: Основная функция выполнения
Основная функция объединяет все компоненты в одно целое:
def main():
provider, model, key_env = choose_llm()
ensure_node_and_cipher()
workdir = pathlib.Path(tempfile.mkdtemp(prefix="cipher_demo_"))
write_cipher_yml(workdir, provider, model, key_env)
env = os.environ.copy()
cipher_once("Запомнить решение: использовать pydantic для проверки конфигурации; pytest fixtures для тестирования.", env, str(workdir))
cipher_once("Запомнить: следовать условным коммитам; обеспечить black + isort в CI.", env, str(workdir))
cipher_once("Что мы стандартизировали для проверки конфигурации и форматирования Python?", env, str(workdir))
api_proc = start_api(env, str(workdir))
time.sleep(3)
api_proc.terminate()
if __name__ == "__main__":
main()
Заключение
Этот рабочий процесс создает функционирующую среду Cipher, которая безопасно управляет API ключами, автоматически выбирает подходящего поставщика LLM и настраивает агента с возможностями памяти с помощью автоматизации на Python. Он охватывает ведение журнала решений, извлечение памяти и работу с активной точкой API, благодаря чему становится идеальным для AI-поддерживаемых процессов разработки.
Для получения дополнительных ресурсов, пожалуйста, посетите нашу страницу на GitHub для учебников, кода и ноутбуков. Вы также можете следить за нами в Twitter и присоединиться к нашему ML SubReddit для обсуждений, ориентированных на сообщество.