AgenticSeek:完全本地的AI助手,保护隐私的智能代理

49 阅读4分钟

AgenticSeek:完全本地的AI助手

项目概述

AgenticSeek是一个100%本地运行的AI助手,作为Manus AI的完全替代品。这个支持语音的AI助手能够自主浏览网页、编写代码、规划任务,同时将所有数据保留在您的设备上。专为本地推理模型设计,完全在您的硬件上运行,确保隐私无忧,无需云端依赖。

功能特性

  • 🔒 完全本地 & 私有 - 所有内容都在您的电脑上运行,无云端、无数据共享。您的文件、对话和搜索都保持私密。

  • 🌐 智能网页浏览 - AgenticSeek可自主浏览互联网:搜索、阅读、提取信息、填写网页表单,全程免手动。

  • 💻 自动化编程助手 - 支持编写、调试并运行Python、C、Go、Java等程序,无需监督。

  • 🧠 智能代理选择 - 自动判断最合适的代理来完成任务,就像拥有专家团队随时待命。

  • 📋 规划并执行复杂任务 - 从旅行规划到复杂项目,可将大任务拆分为步骤,调用多个AI代理协作完成。

  • 🎙️ 语音支持 - 提供干净、快速、未来感的语音与语音转文本功能(开发中)。

安装指南

前置要求

  • Git: 用于克隆仓库
  • Python 3.10.x: 强烈推荐使用Python 3.10.x版本

安装步骤

  1. 克隆项目
git clone https://github.com/Fosowl/agenticSeek.git
cd agenticSeek
  1. 运行自动安装脚本
./install.sh

该脚本会自动检测操作系统(Linux或macOS)并运行相应的安装脚本。

  1. 手动安装依赖
pip3 install --upgrade packaging
pip3 install --upgrade pip setuptools
curl -fsSL https://ollama.com/install.sh | sh
pip3 install -r requirements.txt
  1. 配置环境 复制并配置环境文件:
cp .env.example .env
# 编辑.env文件设置您的配置

使用说明

启动服务

基础模式(仅前端和搜索服务):

./start_services.sh

完整模式(包含后端所有服务):

./start_services.sh full

基本使用

启动后,您可以通过以下方式与AgenticSeek交互:

  1. 语音交互:启用语音功能后,直接与助手对话
  2. 文本输入:通过界面输入您的问题或指令
  3. 任务委托:让助手执行复杂任务,如网页搜索、代码编写等

API使用示例

from sources.llm_provider import Provider
from sources.interaction import Interaction

# 初始化提供者
provider = Provider(provider_name="ollama", model="your-model")

# 创建交互实例
interaction = Interaction(agents=[...], tts_enabled=True, stt_enabled=True)

# 处理用户查询
response = await interaction.process("搜索最新的AI技术发展")

核心代码

主要代理系统

class Agent():
    """所有代理的抽象基类"""
    def __init__(self, name, prompt_path, provider, verbose=False, browser=None):
        self.agent_name = name
        self.browser = browser
        self.role = None
        self.type = None
        self.llm = provider
        self.memory = None
        self.tools = {}
        self.blocks_result = []
        self.success = True
        
    async def process(self, prompt, speech_module) -> str:
        """处理用户提示的核心方法"""
        self.memory.push('user', prompt)
        answer, reasoning = await self.llm_request()
        return answer, reasoning

代码执行代理

class CoderAgent(Agent):
    """代码编写和执行代理"""
    def __init__(self, name, prompt_path, provider, verbose=False):
        super().__init__(name, prompt_path, provider, verbose, None)
        self.tools = {
            "bash": BashInterpreter(),
            "python": PyInterpreter(),
            "c": CInterpreter(),
            "go": GoInterpreter(),
            "java": JavaInterpreter(),
            "file_finder": FileFinder()
        }
        self.role = "code"
        self.type = "code_agent"
        
    async def process(self, prompt, speech_module) -> str:
        """处理编程任务"""
        prompt = self.add_sys_info_prompt(prompt)
        self.memory.push('user', prompt)
        
        answer, reasoning = await self.llm_request()
        # 执行检测到的代码块
        exec_success, feedback = self.execute_modules(answer)
        return self.remove_blocks(answer), reasoning

网页浏览代理

class BrowserAgent(Agent):
    """自主网页浏览代理"""
    def __init__(self, name, prompt_path, provider, verbose=False, browser=None):
        super().__init__(name, prompt_path, provider, verbose, browser)
        self.tools = {
            "web_search": searxSearch(),
        }
        self.role = "web"
        self.type = "browser_agent"
        self.browser = browser
        self.current_page = ""
        self.search_history = []
        
    def extract_links(self, search_result: str) -> List[str]:
        """从搜索结果中提取链接"""
        pattern = r'(https?://\S+|www\.\S+)'
        matches = re.findall(pattern, search_result)
        return [link.rstrip('.,!?;:)') for link in matches]

任务规划代理

class PlannerAgent(Agent):
    """复杂任务规划代理"""
    def __init__(self, name, prompt_path, provider, verbose=False, browser=None):
        super().__init__(name, prompt_path, provider, verbose, None)
        self.tools = {
            "json": Tools()
        }
        self.agents = {
            "coder": CoderAgent(name, "prompts/base/coder_agent.txt", provider),
            "file": FileAgent(name, "prompts/base/file_agent.txt", provider),
            "web": BrowserAgent(name, "prompts/base/browser_agent.txt", provider, browser=browser),
            "casual": CasualAgent(name, "prompts/base/casual_agent.txt", provider)
        }
        self.role = "planification"
        self.type = "planner_agent"
        
    def get_task_names(self, text: str) -> List[str]:
        """从文本中提取任务名称"""
        lines = text.strip().split('\n')
        return [line.strip('- ').strip() for line in lines if line.strip()]

语言工具类

class LanguageUtility:
    """多语言支持和翻译工具"""
    def __init__(self, supported_language: List[str] = ["en", "fr", "zh"]):
        self.translators_tokenizer = None 
        self.translators_model = None
        self.supported_language = supported_language
        self.load_model()
    
    def detect_language(self, text: str) -> str:
        """检测文本语言"""
        langid.set_languages(self.supported_language)
        lang, score = langid.classify(text)
        return lang

    def translate(self, text: str, origin_lang: str) -> str:
        """翻译文本到英语"""
        if origin_lang == "en":
            return text
        tokenizer = self.translators_tokenizer[origin_lang]
        inputs = tokenizer(text, return_tensors="pt", padding=True)
        model = self.translators_model[origin_lang]
        translation = model.generate(**inputs)
        return tokenizer.decode(translation[0], skip_special_tokens=True)

AgenticSeek通过模块化的代理系统,为各种任务提供专业的AI助手服务,同时确保所有处理都在本地完成,保护用户隐私。