AgenticSeek:完全本地的AI助手
项目概述
AgenticSeek是一个100%本地运行的AI助手,作为Manus AI的完全替代品。这个支持语音的AI助手能够自主浏览网页、编写代码、规划任务,同时将所有数据保留在您的设备上。专为本地推理模型设计,完全在您的硬件上运行,确保隐私无忧,无需云端依赖。
功能特性
-
:locked: 完全本地 & 私有 - 所有内容都在您的电脑上运行,无云端、无数据共享。您的文件、对话和搜索都保持私密。
-
🌐 智能网页浏览 - AgenticSeek可自主浏览互联网:搜索、阅读、提取信息、填写网页表单,全程免手动。
-
:laptop: 自动化编程助手 - 支持编写、调试并运行Python、C、Go、Java等程序,无需监督。
-
🧠 智能代理选择 - 自动判断最合适的代理来完成任务,就像拥有专家团队随时待命。
-
📋 规划并执行复杂任务 - 从旅行规划到复杂项目,可将大任务拆分为步骤,调用多个AI代理协作完成。
-
🎙️ 语音支持 - 提供干净、快速、未来感的语音与语音转文本功能(开发中)。
安装指南
前置要求
- Git: 用于克隆仓库
- Python 3.10.x: 强烈推荐使用Python 3.10.x版本
安装步骤
- 克隆项目
git clone https://github.com/Fosowl/agenticSeek.git
cd agenticSeek
- 运行自动安装脚本
./install.sh
该脚本会自动检测操作系统(Linux或macOS)并运行相应的安装脚本。
- 手动安装依赖
pip3 install --upgrade packaging
pip3 install --upgrade pip setuptools
curl -fsSL https://ollama.com/install.sh | sh
pip3 install -r requirements.txt
- 配置环境
复制并配置环境文件:
cp .env.example .env
# 编辑.env文件设置您的配置
使用说明
启动服务
基础模式(仅前端和搜索服务):
./start_services.sh
完整模式(包含后端所有服务):
./start_services.sh full
基本使用
启动后,您可以通过以下方式与AgenticSeek交互:
- 语音交互:启用语音功能后,直接与助手对话
- 文本输入:通过界面输入您的问题或指令
- 任务委托:让助手执行复杂任务,如网页搜索、代码编写等
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 = nameself.browser = browserself.role = Noneself.type = Noneself.llm = providerself.memory = Noneself.tools = {}self.blocks_result = []self.success = Trueasync 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 = browserself.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 = Noneself.supported_language = supported_languageself.load_model()def detect_language(self, text: str) -> str:"""检测文本语言"""langid.set_languages(self.supported_language)lang, score = langid.classify(text)return langdef translate(self, text: str, origin_lang: str) -> str:"""翻译文本到英语"""if origin_lang == "en":return texttokenizer = 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助手服务,同时确保所有处理都在本地完成,保护用户隐私。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
公众号二维码

公众号二维码
