python实现类似codex cli的ai智能终端助手代码

代码语言:python

所属分类:其他

代码描述:python实现类似codex cli的ai智能终端助手代码

代码标签: python 类似 codex cli ai 智能 终端 助手 代码

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

import os
import sys
import json
import argparse
import subprocess
import re
from openai import OpenAI
from rich.console import Console
from rich.markdown import Markdown
from rich.panel import Panel
from rich.syntax import Syntax
from rich.table import Table

# 尝试导入 readline 以支持方向键历史记录
try:
    import readline
except ImportError:
    try:
        import pyreadline3 as readline
    except ImportError:
        readline = None

class CodexPro:
    def __init__(self, api_key, base_url, model, max_tokens):
        self.client = OpenAI(api_key=api_key, base_url=base_url)
        self.model = model
        self.max_tokens = max_tokens
        self.console = Console()
        
        self.mode = "plan"
        self.skills_dir = ".codex_skills"
        self.manifest_path = os.path.join(self.skills_dir, "manifest.json")
        os.makedirs(self.skills_dir, exist_ok=True)
        
        # 危险系统命令正则
        self.dangerous_patterns = [
            r"rm\s+-rf\s+/", r"mkfs\.", r"shutdown", r"reboot", 
            r":\(\)\{\s*:\|:\s*&\s*\};:", r"dd\s+.*of=/dev/sd", r">\s*/dev/sda"
        ]
        # 会劫持终端 UI 或清屏的命令黑名单
        self.tty_hijack_cmds = ['clear', 'vim', 'vi', 'nano', 'emacs', 'top', 'htop', 'tmux', 'screen', 'less', 'more', 'man']
        self.ansi_escape = re.compile(r'\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])')
        
        self._init_system_prompt()
        self._init_tools()
        self._new_session()

    def _init_system_prompt(self):
        self.system_prompt = f"""
你是一个 Codex 级别的终端 AI 助手。当前工作模式为: {{MODE}}。

模式规则:
1. **Plan 模式**: 你只能分析问题、查阅资料、制定详细的实施步骤。不要调用会修改系统的工具(`execute_command`, `run_skill`)。可以调用 `read_file`, `list_files`, `create_skill`。
2. **Build 模式**: 自动驾驶模式。自主调用工具执行任务,遇到错误自主排查并重试。无需请求用户确认。

重要安全规则:
- 禁止尝试执行清屏命令或交互式全屏程序(如 clear, vim, top, less),这会破坏终端界面。如需查看文件,请使用 `read_file` 工具。

上下文说明:
- 用户可能会在输入中使用 `@文件名` 语法,系统会自动将对应文件的内容附加在用户输入末尾,请注意查收并参考。

Skill (技能) 机制说明:
技能分为三种类型:`python`, `bash`, `prompt`。创建时必须提供 `description` 说明用途。

当前操作系统: {os.name}
当前工作目录: {os.getcwd()}
请始终保持专业、简洁。
"""

    def _init_tools(self):
        self.tools = [
            {
                "type": "function",
                "function": {
                    "name": "execute_command",
                    "description": "在用户的终端中执行一个安全的、非交互式的 shell 命令。仅在 Build 模式下可用。",
                    "parameters": {
                        "type": "object",
                        "properties": {"command": {"type": "string", "description": "要执行的完整 shell 命令"}},
                        "required": ["command"]
                    }
                }
            },
            {
                "type": "function",
                "function": {
                    ".........完整代码请登录后点击上方下载按钮下载查看

网友评论0