jarvis-ai-assistant


Namejarvis-ai-assistant JSON
Version 0.1.217 PyPI version JSON
download
home_pagehttps://github.com/skyfireitdiy/Jarvis
SummaryJarvis: An AI assistant that uses tools to interact with the system
upload_time2025-07-09 13:59:46
maintainerNone
docs_urlNone
authorskyfire
requires_python>=3.8
licenseMIT License Copyright (c) 2025 skyfire Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords jarvis ai assistant tools automation
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 🤖 Jarvis AI 助手
<p align="center">
  <img src="docs/images/jarvis-logo.png" alt="Jarvis Logo" width="200"/>
</p>
<div align="center">

[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

*您的智能开发和系统交互助手*

[快速开始](#quick-start) • [核心功能](#core-features) • [配置说明](#configuration) • [工具说明](#tools) • [扩展开发](#extensions) • [贡献指南](#contributing) • [许可证](#license) • [Wiki文档](https://deepwiki.com/skyfireitdiy/Jarvis)
</div>

---

## 🚀 快速开始 <a id="quick-start"></a>

### 系统要求
- 目前只能在Linux系统下使用(很多工具依赖Linux系统)
- Windows没有测试过,但Windows 10以上的用户可以在WSL上使用此工具

### 安装
```bash
# 从源码安装(推荐)
git clone https://github.com/skyfireitdiy/Jarvis
cd Jarvis
pip3 install -e .

# 或者从PyPI安装(可能更新不及时)
pip3 install jarvis-ai-assistant
```

### 基本使用
| 命令 | 快捷方式 | 功能描述 |
|------|----------|----------|
| `jarvis` | - | 使用通用代理 |
| `jarvis-code-agent` | `jca` | 使用代码代理 |
| `jarvis-smart-shell` | `jss` | 使用智能shell功能 |
| `jarvis-platform-manager` | `jpm` | 使用平台管理功能 |
| `jarvis-code-review` | - | 使用代码审查功能 |
| `jarvis-git-commit` | `jgc` | 使用自动化git commit功能 |
| `jarvis-git-squash` | - | 使用git squash功能 |
| `jarvis-multi-agent` | - | 使用多代理功能 |
| `jarvis-agent` | - | 使用agent功能 |
| `jarvis-tool` | - | 使用工具功能 |
| `jarvis-git-details` | - | 使用git details功能 |
| `jarvis-methodology` | - | 使用方法论功能 |

### Jarvis功能 (jarvis)

`jarvis` 是Jarvis的通用代理工具,提供开箱即用的AI助手功能。

#### 1. 核心功能
- 任务分析与规划
- 代码分析与修改
- 系统交互与操作
- 方法论应用与优化
- 多代理协作

#### 2. 使用方式
```bash
# 基本用法
jarvis

# 带参数使用
jarvis -p <平台> -m <模型> -t "初始任务"
```

#### 3. 命令行参数
| 参数 | 描述 |
|------|------|
| `-p/--platform` | 指定AI平台 (yuanbao/kimi/tongyi/openai) |
| `-m/--model` | 指定模型名称 |
| `-t/--task` | 指定初始任务 |

#### 4. 工作流程
1. 初始化环境
2. 加载默认配置
3. 创建代理实例
4. 执行初始任务(如果指定)
5. 进入交互式模式(如果没有初始任务)
6. 根据用户输入执行任务

#### 5. 任务执行特点
- 自动应用最佳方法论
- 智能任务分解
- 多工具协同工作
- 实时进度反馈
- 自动生成任务总结

#### 6. 示例
```bash
# 基本使用
jarvis

# 指定平台和模型
jarvis -p yuanbao -m deep_seek_v3

# 直接执行任务
jarvis -t "分析项目结构并生成架构图"

# 组合使用
jarvis -p kimi -m k1 -t "优化项目性能"
```

### 代码代理功能 (jarvis-code-agent)

`jarvis-code-agent` 是Jarvis的代码分析与修改工具,专注于代码工程任务。

#### 1. 核心功能
- 代码分析与修改
- 代码审查与优化
- 自动化git操作
- 代码问题诊断与修复

#### 2. 使用方式
```bash
# 基本用法
jarvis-code-agent

# 或使用快捷命令
jca

# 带参数使用
jarvis-code-agent -p <平台> -m <模型> -r "需求描述"
```

#### 3. 命令行参数
| 参数 | 描述 |
|------|------|
| `-p/--platform` | 指定AI平台 (yuanbao/kimi/tongyi/openai) |
| `-m/--model` | 指定模型名称 |
| `-r/--requirement` | 直接指定需求描述 |

#### 4. 工作流程
1. 初始化环境(查找git根目录,检查未提交修改)
2. 分析用户需求
3. 执行代码修改
4. 自动处理git提交
5. 显示修改结果

#### 5. 示例
```bash
# 使用默认平台分析代码
jca

# 指定平台和模型
jca -p yuanbao -m deep_seek_v3

# 直接处理需求
jca -r "修复src/example.py中的内存泄漏问题"
```

### Git提交功能 (jarvis-git-commit)

`jarvis-git-commit` 是Jarvis的自动化git提交工具,能够智能分析代码变更并生成规范的提交信息。

#### 1. 核心功能
- 自动分析git变更
- 智能生成符合规范的提交信息
- 支持自定义提交信息前缀和后缀
- 自动处理大文件差异
- 支持多行提交信息

#### 2. 使用方式
```bash
# 基本用法
jarvis-git-commit

# 或使用快捷命令
jgc

# 带参数使用
jarvis-git-commit --root-dir <目录> --prefix "前缀" --suffix "后缀"
```

#### 3. 命令行参数
| 参数 | 描述 |
|------|------|
| `--root-dir` | Git仓库的根目录路径(默认为当前目录) |
| `--prefix` | 提交信息前缀(可选) |
| `--suffix` | 提交信息后缀(可选) |

#### 4. 提交信息格式
提交信息遵循以下格式:
```
<类型>(<范围>): <主题>

[可选] 详细描述变更内容和原因
```

类型说明:
- `fix`: 修复bug
- `feat`: 新功能
- `docs`: 文档更新
- `style`: 代码格式修改
- `refactor`: 代码重构
- `test`: 测试相关
- `chore`: 其他修改

默认格式规则(可配置):
1. 类型必须使用上述预定义类型
2. 范围表示变更的模块或组件(例如:auth, database, ui)
3. 主题行不超过72个字符,不以句号结尾,使用祈使语气
4. 详细描述部分应解释"是什么"和"为什么",而非"如何"

#### 5. 工作流程
1. 检查git环境并确认有未提交的更改
2. 自动暂存所有更改
3. 分析代码差异
4. 智能生成提交信息
5. 执行git提交
6. 显示提交结果

#### 6. 示例
```bash
# 基本提交
jgc

# 指定仓库目录
jgc --root-dir /path/to/repo

# 添加提交信息前缀
jgc --prefix "[紧急修复]"

# 添加提交信息后缀
jgc --suffix "相关issue: #123"
```

### 自定义代理功能 (jarvis-agent)

`jarvis-agent` 是Jarvis的核心代理工具,提供通用的AI助手功能,支持自定义配置和任务执行。

#### 1. 核心功能
- 通用任务处理
- 自定义代理配置
- 多步骤任务规划
- 子代理任务拆分
- 交互式任务执行

#### 2. 使用方式
```bash
# 基本用法
jarvis-agent

# 带参数使用
jarvis-agent -f <配置文件> -c <代理定义文件> -t "初始任务"
```

#### 3. 命令行参数
| 参数 | 描述 |
|------|------|
| `-f/--config` | 指定配置文件路径(可选) |
| `-c/--agent_definition` | 指定代理定义文件路径(可选) |
| `-t/--task` | 指定初始任务(可选) |

#### 4. 配置文件格式
代理定义文件使用YAML格式:
```yaml
# 代理配置示例
name: "自定义代理名称"
system_prompt: "系统提示词"
auto_complete: false
need_summary: true
```

#### 5. 工作流程
1. 初始化环境
2. 加载配置文件(如果指定)
3. 创建代理实例
4. 执行初始任务(如果指定)
5. 进入交互式模式(如果没有初始任务)
6. 根据用户输入执行任务

#### 6. 任务执行特点
- 支持多行输入
- 自动任务规划
- 复杂任务自动拆分子代理
- 交互式执行过程
- 任务执行状态反馈

#### 7. 示例
```bash
# 基本使用
jarvis-agent

# 使用配置文件
jarvis-agent -f ~/.jarvis/config.yaml

# 使用代理定义文件
jarvis-agent -c custom_agent.yaml

# 直接执行任务
jarvis-agent -t "分析项目代码结构并生成文档"

# 组合使用
jarvis-agent -f config.yaml -c agent.yaml -t "优化项目性能"
```

### 平台管理功能 (jarvis-platform-manager)

`jarvis-platform-manager` 是Jarvis的平台管理工具,用于管理AI平台、模型和提供API服务。

#### 1. 核心功能
- 查看支持的平台和模型
- 与指定平台和模型进行交互式对话
- 启动OpenAI兼容的API服务
- 加载预定义角色进行对话

#### 2. 子命令说明

##### 2.1 查看平台信息
```bash
# 显示所有支持的平台和模型
jarvis-platform-manager info
```

##### 2.2 交互式对话
```bash
# 与指定平台和模型对话
jarvis-platform-manager chat -p <平台名称> -m <模型名称>
```

可用命令:
- `/bye` - 退出聊天
- `/clear` - 清除当前会话
- `/upload <文件路径>` - 上传文件到当前会话
- `/shell <命令>` - 执行shell命令
- `/save <文件名>` - 保存最后一条消息
- `/saveall <文件名>` - 保存完整对话历史

##### 2.3 启动API服务
```bash
# 启动OpenAI兼容的API服务
jarvis-platform-manager service --host <IP地址> --port <端口号> -p <平台名称> -m <模型名称>
```

参数说明:
- `--host`: 服务主机地址(默认:127.0.0.1)
- `--port`: 服务端口(默认:8000)
- `-p/--platform`: 指定默认平台
- `-m/--model`: 指定默认模型

##### 2.4 角色对话
```bash
# 加载角色配置文件并开始对话
jarvis-platform-manager role -c <配置文件路径>
```

角色配置文件格式(YAML):
```yaml
roles:
  - name: "代码助手"
    description: "专注于代码分析和生成的AI助手"
    platform: "yuanbao"
    model: "deep_seek_v3"
    system_prompt: "你是一个专业的代码助手,专注于分析和生成高质量的代码"
  - name: "文档撰写"
    description: "帮助撰写技术文档的AI助手"
    platform: "kimi"
    model: "k1"
    system_prompt: "你是一个技术文档撰写专家,擅长将复杂技术概念转化为清晰易懂的文字"
```

#### 3. 示例
```bash
# 查看支持的平台和模型
jarvis-platform-manager info

# 与元宝平台的deep_seek_v3模型对话
jarvis-platform-manager chat -p yuanbao -m deep_seek_v3

# 启动API服务
jarvis-platform-manager service --host 0.0.0.0 --port 8080 -p yuanbao -m deep_seek_v3

# 使用角色配置文件
jarvis-platform-manager role -c ~/.jarvis/roles.yaml
```

## 🌟 核心功能 <a id="core-features"></a>

### 1. 主要特性
- 🆓 零成本接入:无缝集成腾讯元宝(推荐首选)、Kimi等优质模型,无需支付API费用
- 🛠️ 工具驱动:内置丰富工具集,涵盖脚本执行、代码开发、网页搜索、终端操作等核心功能
- 👥 人机协作:支持实时交互,用户可随时介入指导,确保AI行为符合预期
- 🔌 高度可扩展:支持自定义工具和平台,轻松集成MCP协议
- 📈 智能进化:内置方法论系统,持续学习优化,越用越智能

### 2. 视频介绍
[![视频介绍](docs/images/intro.png)](https://player.bilibili.com/player.html?isOutside=true&aid=114306578382907&bvid=BV1x2dAYeEpM&cid=29314583629&p=1)

### 3. 预定义任务
您可以创建预定义任务文件来快速执行常用命令:

1. 在`~/.jarvis/pre-command`或当前目录的`.jarvis/pre-command`文件中定义任务
2. 使用YAML格式定义任务,例如:
```yaml
build: "构建项目并运行测试"
deploy: "部署应用到生产环境"
```
3. 运行`jarvis`命令时会自动加载这些任务并提示选择执行

## ⚙️ 配置说明 <a id="configuration"></a>

### 1. 平台配置

#### 腾讯元宝 (推荐首选)
```yaml
JARVIS_PLATFORM: yuanbao
JARVIS_MODEL: deep_seek_v3
JARVIS_THINKING_PLATFORM: yuanbao
JARVIS_THINKING_MODEL: deep_seek
ENV:
  YUANBAO_COOKIES: <元宝cookies>
```

#### Kimi
```yaml
JARVIS_PLATFORM: kimi
JARVIS_MODEL: kimi
JARVIS_THINKING_PLATFORM: kimi
JARVIS_THINKING_MODEL: k1
ENV:
  KIMI_API_KEY: <Kimi API KEY>
```

#### 通义千问
```yaml
JARVIS_PLATFORM: tongyi
JARVIS_MODEL: Normal
JARVIS_THINKING_PLATFORM: tongyi
JARVIS_THINKING_MODEL: Thinking
ENV:
  TONGYI_COOKIES: <通义千问cookies>
```

#### OpenAI
```yaml
JARVIS_PLATFORM: openai
JARVIS_MODEL: gpt-4o
JARVIS_THINKING_PLATFORM: openai
JARVIS_THINKING_MODEL: gpt-4o
OPENAI_API_KEY: <OpenAI API Key>
OPENAI_API_BASE: https://api.openai.com/v1
```

### 2. 配置项说明
| 变量名称 | 默认值 | 说明 |
|----------|--------|------|
| `ENV` | {} | 环境变量配置 |
| `JARVIS_MAX_TOKEN_COUNT` | 960000 | 上下文窗口的最大token数量 |
| `JARVIS_MAX_INPUT_TOKEN_COUNT` | 32000 | 输入的最大token数量 |
| `JARVIS_PLATFORM` | yuanbao | 默认AI平台 |
| `JARVIS_MODEL` | deep_seek_v3 | 默认模型 |
| `JARVIS_THINKING_PLATFORM` | JARVIS_PLATFORM | 推理任务使用的平台 |
| `JARVIS_THINKING_MODEL` | JARVIS_MODEL | 推理任务使用的模型 |
| `JARVIS_EXECUTE_TOOL_CONFIRM` | false | 执行工具前是否需要确认 |
| `JARVIS_CONFIRM_BEFORE_APPLY_PATCH` | false | 应用补丁前是否需要确认 |
| `JARVIS_MAX_BIG_CONTENT_SIZE` | 160000 | 最大大内容大小 |
| `JARVIS_PRETTY_OUTPUT` | false | 是否启用PrettyOutput |
| `JARVIS_GIT_COMMIT_PROMPT` | "" | 自定义git提交信息生成提示模板 |
| `JARVIS_PRINT_PROMPT` | false | 是否打印提示 |
| `JARVIS_USE_METHODOLOGY` | true | 是否启用方法论功能 |
| `JARVIS_USE_ANALYSIS` | true | 是否启用任务分析功能 |
| `JARVIS_DATA_PATH` | ~/.jarvis | Jarvis数据存储目录路径 |

## 🛠️ 工具说明 <a id="tools"></a>

### 1. 内置工具
| 工具名称 | 描述 |
|----------|------|
| ask_user | 交互式用户输入收集 |
| rewrite_file | 文件重写工具 |
| edit_file | 代码编辑工具 |
| execute_script | 执行脚本并返回结果 |
| file_analyzer | 分析文件内容并提取关键信息 |
| methodology | 方法论管理工具 |
| read_code | 代码阅读与分析工具 |
| read_webpage | 读取网页内容并分析 |
| search_web | 使用互联网搜索 |
| virtual_tty | 控制虚拟终端执行操作 |

### 2. 命令替换功能
支持使用特殊标记`'<tag>'`触发命令替换功能:

| 标记 | 功能 |
|------|------|
| `'Summary'` | 总结当前会话并清空历史记录 |
| `'Clear'` | 清空当前会话 |
| `'ToolUsage'` | 显示可用工具列表及使用方法 |
| `'ReloadConfig'` | 重新加载配置文件 |
| `'Web'` | 网页搜索,支持多种提问格式 |
| `'FindRelatedFiles'` | 查找与功能相关的文件 |
| `'Fix'` | 修复问题 |
| `'Check'` | 执行静态代码检查,包括错误和风格问题 |
| `'SaveSession'` | 保存当前会话并退出 |

### 3. 自定义替换配置
在`~/.jarvis/config.yaml`中添加:
```yaml
JARVIS_REPLACE_MAP:
  tag_name:
    template: "替换后的内容"
    description: "标记描述"
    append: false
```

## 🛠️ 扩展开发 <a id="extensions"></a>

### 1. 添加新工具
在 `~/.jarvis/tools/` 中创建新的 Python 文件:
```python
from typing import Dict, Any
from jarvis.utils import OutputType, PrettyOutput

class CustomTool:
    name = "工具名称"
    description = "工具描述"
    parameters = {
        "type": "object",
        "properties": {
            "param1": {
                "type": "string",
                "description": "参数描述"
            }
        },
        "required": ["param1"]
    }
    
    def execute(self, args: Dict[str, Any]) -> Dict[str, Any]:
        try:
            # 实现工具逻辑
            result = "工具执行结果"
            return {
                "success": True,
                "stdout": result,
                "stderr": ""
            }
        except Exception as e:
            return {
                "success": False,
                "stdout": "",
                "stderr": str(e)
            }
```

### 2. 添加MCP
在`~/.jarvis/config.yaml`中添加:
```yaml
JARVIS_MCP:
  - type: stdio  # 或 sse/streamable
    name: MCP名称
    command: 可执行命令
    base_url: http://example.com/api
    args: [参数列表]
    env:
      KEY: VALUE
    enable: true
```

### 3. 添加新大模型平台
在 `~/.jarvis/platforms/` 中创建新的 Python 文件:
```python
from jarvis.jarvis_platform.base import BasePlatform

class CustomPlatform(BasePlatform):
    def __init__(self):
        pass

    def __del__(self):
        pass

    def chat(self, message: str) -> str:
        pass

    def upload_files(self, file_list: List[str]) -> bool:
        pass

    def delete_chat(self):
        pass

    def set_model_name(self, model_name: str):
        pass

    def set_system_prompt(self, message: str):
        pass

    def get_model_list(self) -> List[Tuple[str, str]]:
        pass

    def name(self) -> str:
        pass
```

## 🤝 贡献指南 <a id="contributing"></a>
1. Fork 仓库
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m '添加某个很棒的特性'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 开启 Pull Request

## 📄 许可证 <a id="license"></a>
本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件。

---
<div align="center">
由 Jarvis 团队用 ❤️ 制作
</div>

![Jarvis技术支持群](docs/images/wechat.png)

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/skyfireitdiy/Jarvis",
    "name": "jarvis-ai-assistant",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "jarvis, ai, assistant, tools, automation",
    "author": "skyfire",
    "author_email": "skyfire <skyfireitdiy@hotmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/43/58/63f20f4bade4135cb90f132ba557529426d4a7dd1d42564db164042a3817/jarvis_ai_assistant-0.1.217.tar.gz",
    "platform": null,
    "description": "# \ud83e\udd16 Jarvis AI \u52a9\u624b\n<p align=\"center\">\n  <img src=\"docs/images/jarvis-logo.png\" alt=\"Jarvis Logo\" width=\"200\"/>\n</p>\n<div align=\"center\">\n\n[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n*\u60a8\u7684\u667a\u80fd\u5f00\u53d1\u548c\u7cfb\u7edf\u4ea4\u4e92\u52a9\u624b*\n\n[\u5feb\u901f\u5f00\u59cb](#quick-start) \u2022 [\u6838\u5fc3\u529f\u80fd](#core-features) \u2022 [\u914d\u7f6e\u8bf4\u660e](#configuration) \u2022 [\u5de5\u5177\u8bf4\u660e](#tools) \u2022 [\u6269\u5c55\u5f00\u53d1](#extensions) \u2022 [\u8d21\u732e\u6307\u5357](#contributing) \u2022 [\u8bb8\u53ef\u8bc1](#license) \u2022 [Wiki\u6587\u6863](https://deepwiki.com/skyfireitdiy/Jarvis)\n</div>\n\n---\n\n## \ud83d\ude80 \u5feb\u901f\u5f00\u59cb <a id=\"quick-start\"></a>\n\n### \u7cfb\u7edf\u8981\u6c42\n- \u76ee\u524d\u53ea\u80fd\u5728Linux\u7cfb\u7edf\u4e0b\u4f7f\u7528\uff08\u5f88\u591a\u5de5\u5177\u4f9d\u8d56Linux\u7cfb\u7edf\uff09\n- Windows\u6ca1\u6709\u6d4b\u8bd5\u8fc7\uff0c\u4f46Windows 10\u4ee5\u4e0a\u7684\u7528\u6237\u53ef\u4ee5\u5728WSL\u4e0a\u4f7f\u7528\u6b64\u5de5\u5177\n\n### \u5b89\u88c5\n```bash\n# \u4ece\u6e90\u7801\u5b89\u88c5\uff08\u63a8\u8350\uff09\ngit clone https://github.com/skyfireitdiy/Jarvis\ncd Jarvis\npip3 install -e .\n\n# \u6216\u8005\u4ecePyPI\u5b89\u88c5\uff08\u53ef\u80fd\u66f4\u65b0\u4e0d\u53ca\u65f6\uff09\npip3 install jarvis-ai-assistant\n```\n\n### \u57fa\u672c\u4f7f\u7528\n| \u547d\u4ee4 | \u5feb\u6377\u65b9\u5f0f | \u529f\u80fd\u63cf\u8ff0 |\n|------|----------|----------|\n| `jarvis` | - | \u4f7f\u7528\u901a\u7528\u4ee3\u7406 |\n| `jarvis-code-agent` | `jca` | \u4f7f\u7528\u4ee3\u7801\u4ee3\u7406 |\n| `jarvis-smart-shell` | `jss` | \u4f7f\u7528\u667a\u80fdshell\u529f\u80fd |\n| `jarvis-platform-manager` | `jpm` | \u4f7f\u7528\u5e73\u53f0\u7ba1\u7406\u529f\u80fd |\n| `jarvis-code-review` | - | \u4f7f\u7528\u4ee3\u7801\u5ba1\u67e5\u529f\u80fd |\n| `jarvis-git-commit` | `jgc` | \u4f7f\u7528\u81ea\u52a8\u5316git commit\u529f\u80fd |\n| `jarvis-git-squash` | - | \u4f7f\u7528git squash\u529f\u80fd |\n| `jarvis-multi-agent` | - | \u4f7f\u7528\u591a\u4ee3\u7406\u529f\u80fd |\n| `jarvis-agent` | - | \u4f7f\u7528agent\u529f\u80fd |\n| `jarvis-tool` | - | \u4f7f\u7528\u5de5\u5177\u529f\u80fd |\n| `jarvis-git-details` | - | \u4f7f\u7528git details\u529f\u80fd |\n| `jarvis-methodology` | - | \u4f7f\u7528\u65b9\u6cd5\u8bba\u529f\u80fd |\n\n### Jarvis\u529f\u80fd (jarvis)\n\n`jarvis` \u662fJarvis\u7684\u901a\u7528\u4ee3\u7406\u5de5\u5177\uff0c\u63d0\u4f9b\u5f00\u7bb1\u5373\u7528\u7684AI\u52a9\u624b\u529f\u80fd\u3002\n\n#### 1. \u6838\u5fc3\u529f\u80fd\n- \u4efb\u52a1\u5206\u6790\u4e0e\u89c4\u5212\n- \u4ee3\u7801\u5206\u6790\u4e0e\u4fee\u6539\n- \u7cfb\u7edf\u4ea4\u4e92\u4e0e\u64cd\u4f5c\n- \u65b9\u6cd5\u8bba\u5e94\u7528\u4e0e\u4f18\u5316\n- \u591a\u4ee3\u7406\u534f\u4f5c\n\n#### 2. \u4f7f\u7528\u65b9\u5f0f\n```bash\n# \u57fa\u672c\u7528\u6cd5\njarvis\n\n# \u5e26\u53c2\u6570\u4f7f\u7528\njarvis -p <\u5e73\u53f0> -m <\u6a21\u578b> -t \"\u521d\u59cb\u4efb\u52a1\"\n```\n\n#### 3. \u547d\u4ee4\u884c\u53c2\u6570\n| \u53c2\u6570 | \u63cf\u8ff0 |\n|------|------|\n| `-p/--platform` | \u6307\u5b9aAI\u5e73\u53f0 (yuanbao/kimi/tongyi/openai) |\n| `-m/--model` | \u6307\u5b9a\u6a21\u578b\u540d\u79f0 |\n| `-t/--task` | \u6307\u5b9a\u521d\u59cb\u4efb\u52a1 |\n\n#### 4. \u5de5\u4f5c\u6d41\u7a0b\n1. \u521d\u59cb\u5316\u73af\u5883\n2. \u52a0\u8f7d\u9ed8\u8ba4\u914d\u7f6e\n3. \u521b\u5efa\u4ee3\u7406\u5b9e\u4f8b\n4. \u6267\u884c\u521d\u59cb\u4efb\u52a1\uff08\u5982\u679c\u6307\u5b9a\uff09\n5. \u8fdb\u5165\u4ea4\u4e92\u5f0f\u6a21\u5f0f\uff08\u5982\u679c\u6ca1\u6709\u521d\u59cb\u4efb\u52a1\uff09\n6. \u6839\u636e\u7528\u6237\u8f93\u5165\u6267\u884c\u4efb\u52a1\n\n#### 5. \u4efb\u52a1\u6267\u884c\u7279\u70b9\n- \u81ea\u52a8\u5e94\u7528\u6700\u4f73\u65b9\u6cd5\u8bba\n- \u667a\u80fd\u4efb\u52a1\u5206\u89e3\n- \u591a\u5de5\u5177\u534f\u540c\u5de5\u4f5c\n- \u5b9e\u65f6\u8fdb\u5ea6\u53cd\u9988\n- \u81ea\u52a8\u751f\u6210\u4efb\u52a1\u603b\u7ed3\n\n#### 6. \u793a\u4f8b\n```bash\n# \u57fa\u672c\u4f7f\u7528\njarvis\n\n# \u6307\u5b9a\u5e73\u53f0\u548c\u6a21\u578b\njarvis -p yuanbao -m deep_seek_v3\n\n# \u76f4\u63a5\u6267\u884c\u4efb\u52a1\njarvis -t \"\u5206\u6790\u9879\u76ee\u7ed3\u6784\u5e76\u751f\u6210\u67b6\u6784\u56fe\"\n\n# \u7ec4\u5408\u4f7f\u7528\njarvis -p kimi -m k1 -t \"\u4f18\u5316\u9879\u76ee\u6027\u80fd\"\n```\n\n### \u4ee3\u7801\u4ee3\u7406\u529f\u80fd (jarvis-code-agent)\n\n`jarvis-code-agent` \u662fJarvis\u7684\u4ee3\u7801\u5206\u6790\u4e0e\u4fee\u6539\u5de5\u5177\uff0c\u4e13\u6ce8\u4e8e\u4ee3\u7801\u5de5\u7a0b\u4efb\u52a1\u3002\n\n#### 1. \u6838\u5fc3\u529f\u80fd\n- \u4ee3\u7801\u5206\u6790\u4e0e\u4fee\u6539\n- \u4ee3\u7801\u5ba1\u67e5\u4e0e\u4f18\u5316\n- \u81ea\u52a8\u5316git\u64cd\u4f5c\n- \u4ee3\u7801\u95ee\u9898\u8bca\u65ad\u4e0e\u4fee\u590d\n\n#### 2. \u4f7f\u7528\u65b9\u5f0f\n```bash\n# \u57fa\u672c\u7528\u6cd5\njarvis-code-agent\n\n# \u6216\u4f7f\u7528\u5feb\u6377\u547d\u4ee4\njca\n\n# \u5e26\u53c2\u6570\u4f7f\u7528\njarvis-code-agent -p <\u5e73\u53f0> -m <\u6a21\u578b> -r \"\u9700\u6c42\u63cf\u8ff0\"\n```\n\n#### 3. \u547d\u4ee4\u884c\u53c2\u6570\n| \u53c2\u6570 | \u63cf\u8ff0 |\n|------|------|\n| `-p/--platform` | \u6307\u5b9aAI\u5e73\u53f0 (yuanbao/kimi/tongyi/openai) |\n| `-m/--model` | \u6307\u5b9a\u6a21\u578b\u540d\u79f0 |\n| `-r/--requirement` | \u76f4\u63a5\u6307\u5b9a\u9700\u6c42\u63cf\u8ff0 |\n\n#### 4. \u5de5\u4f5c\u6d41\u7a0b\n1. \u521d\u59cb\u5316\u73af\u5883\uff08\u67e5\u627egit\u6839\u76ee\u5f55\uff0c\u68c0\u67e5\u672a\u63d0\u4ea4\u4fee\u6539\uff09\n2. \u5206\u6790\u7528\u6237\u9700\u6c42\n3. \u6267\u884c\u4ee3\u7801\u4fee\u6539\n4. \u81ea\u52a8\u5904\u7406git\u63d0\u4ea4\n5. \u663e\u793a\u4fee\u6539\u7ed3\u679c\n\n#### 5. \u793a\u4f8b\n```bash\n# \u4f7f\u7528\u9ed8\u8ba4\u5e73\u53f0\u5206\u6790\u4ee3\u7801\njca\n\n# \u6307\u5b9a\u5e73\u53f0\u548c\u6a21\u578b\njca -p yuanbao -m deep_seek_v3\n\n# \u76f4\u63a5\u5904\u7406\u9700\u6c42\njca -r \"\u4fee\u590dsrc/example.py\u4e2d\u7684\u5185\u5b58\u6cc4\u6f0f\u95ee\u9898\"\n```\n\n### Git\u63d0\u4ea4\u529f\u80fd (jarvis-git-commit)\n\n`jarvis-git-commit` \u662fJarvis\u7684\u81ea\u52a8\u5316git\u63d0\u4ea4\u5de5\u5177\uff0c\u80fd\u591f\u667a\u80fd\u5206\u6790\u4ee3\u7801\u53d8\u66f4\u5e76\u751f\u6210\u89c4\u8303\u7684\u63d0\u4ea4\u4fe1\u606f\u3002\n\n#### 1. \u6838\u5fc3\u529f\u80fd\n- \u81ea\u52a8\u5206\u6790git\u53d8\u66f4\n- \u667a\u80fd\u751f\u6210\u7b26\u5408\u89c4\u8303\u7684\u63d0\u4ea4\u4fe1\u606f\n- \u652f\u6301\u81ea\u5b9a\u4e49\u63d0\u4ea4\u4fe1\u606f\u524d\u7f00\u548c\u540e\u7f00\n- \u81ea\u52a8\u5904\u7406\u5927\u6587\u4ef6\u5dee\u5f02\n- \u652f\u6301\u591a\u884c\u63d0\u4ea4\u4fe1\u606f\n\n#### 2. \u4f7f\u7528\u65b9\u5f0f\n```bash\n# \u57fa\u672c\u7528\u6cd5\njarvis-git-commit\n\n# \u6216\u4f7f\u7528\u5feb\u6377\u547d\u4ee4\njgc\n\n# \u5e26\u53c2\u6570\u4f7f\u7528\njarvis-git-commit --root-dir <\u76ee\u5f55> --prefix \"\u524d\u7f00\" --suffix \"\u540e\u7f00\"\n```\n\n#### 3. \u547d\u4ee4\u884c\u53c2\u6570\n| \u53c2\u6570 | \u63cf\u8ff0 |\n|------|------|\n| `--root-dir` | Git\u4ed3\u5e93\u7684\u6839\u76ee\u5f55\u8def\u5f84\uff08\u9ed8\u8ba4\u4e3a\u5f53\u524d\u76ee\u5f55\uff09 |\n| `--prefix` | \u63d0\u4ea4\u4fe1\u606f\u524d\u7f00\uff08\u53ef\u9009\uff09 |\n| `--suffix` | \u63d0\u4ea4\u4fe1\u606f\u540e\u7f00\uff08\u53ef\u9009\uff09 |\n\n#### 4. \u63d0\u4ea4\u4fe1\u606f\u683c\u5f0f\n\u63d0\u4ea4\u4fe1\u606f\u9075\u5faa\u4ee5\u4e0b\u683c\u5f0f\uff1a\n```\n<\u7c7b\u578b>(<\u8303\u56f4>): <\u4e3b\u9898>\n\n[\u53ef\u9009] \u8be6\u7ec6\u63cf\u8ff0\u53d8\u66f4\u5185\u5bb9\u548c\u539f\u56e0\n```\n\n\u7c7b\u578b\u8bf4\u660e\uff1a\n- `fix`: \u4fee\u590dbug\n- `feat`: \u65b0\u529f\u80fd\n- `docs`: \u6587\u6863\u66f4\u65b0\n- `style`: \u4ee3\u7801\u683c\u5f0f\u4fee\u6539\n- `refactor`: \u4ee3\u7801\u91cd\u6784\n- `test`: \u6d4b\u8bd5\u76f8\u5173\n- `chore`: \u5176\u4ed6\u4fee\u6539\n\n\u9ed8\u8ba4\u683c\u5f0f\u89c4\u5219\uff08\u53ef\u914d\u7f6e\uff09\uff1a\n1. \u7c7b\u578b\u5fc5\u987b\u4f7f\u7528\u4e0a\u8ff0\u9884\u5b9a\u4e49\u7c7b\u578b\n2. \u8303\u56f4\u8868\u793a\u53d8\u66f4\u7684\u6a21\u5757\u6216\u7ec4\u4ef6\uff08\u4f8b\u5982\uff1aauth, database, ui\uff09\n3. \u4e3b\u9898\u884c\u4e0d\u8d85\u8fc772\u4e2a\u5b57\u7b26\uff0c\u4e0d\u4ee5\u53e5\u53f7\u7ed3\u5c3e\uff0c\u4f7f\u7528\u7948\u4f7f\u8bed\u6c14\n4. \u8be6\u7ec6\u63cf\u8ff0\u90e8\u5206\u5e94\u89e3\u91ca\"\u662f\u4ec0\u4e48\"\u548c\"\u4e3a\u4ec0\u4e48\"\uff0c\u800c\u975e\"\u5982\u4f55\"\n\n#### 5. \u5de5\u4f5c\u6d41\u7a0b\n1. \u68c0\u67e5git\u73af\u5883\u5e76\u786e\u8ba4\u6709\u672a\u63d0\u4ea4\u7684\u66f4\u6539\n2. \u81ea\u52a8\u6682\u5b58\u6240\u6709\u66f4\u6539\n3. \u5206\u6790\u4ee3\u7801\u5dee\u5f02\n4. \u667a\u80fd\u751f\u6210\u63d0\u4ea4\u4fe1\u606f\n5. \u6267\u884cgit\u63d0\u4ea4\n6. \u663e\u793a\u63d0\u4ea4\u7ed3\u679c\n\n#### 6. \u793a\u4f8b\n```bash\n# \u57fa\u672c\u63d0\u4ea4\njgc\n\n# \u6307\u5b9a\u4ed3\u5e93\u76ee\u5f55\njgc --root-dir /path/to/repo\n\n# \u6dfb\u52a0\u63d0\u4ea4\u4fe1\u606f\u524d\u7f00\njgc --prefix \"[\u7d27\u6025\u4fee\u590d]\"\n\n# \u6dfb\u52a0\u63d0\u4ea4\u4fe1\u606f\u540e\u7f00\njgc --suffix \"\u76f8\u5173issue: #123\"\n```\n\n### \u81ea\u5b9a\u4e49\u4ee3\u7406\u529f\u80fd (jarvis-agent)\n\n`jarvis-agent` \u662fJarvis\u7684\u6838\u5fc3\u4ee3\u7406\u5de5\u5177\uff0c\u63d0\u4f9b\u901a\u7528\u7684AI\u52a9\u624b\u529f\u80fd\uff0c\u652f\u6301\u81ea\u5b9a\u4e49\u914d\u7f6e\u548c\u4efb\u52a1\u6267\u884c\u3002\n\n#### 1. \u6838\u5fc3\u529f\u80fd\n- \u901a\u7528\u4efb\u52a1\u5904\u7406\n- \u81ea\u5b9a\u4e49\u4ee3\u7406\u914d\u7f6e\n- \u591a\u6b65\u9aa4\u4efb\u52a1\u89c4\u5212\n- \u5b50\u4ee3\u7406\u4efb\u52a1\u62c6\u5206\n- \u4ea4\u4e92\u5f0f\u4efb\u52a1\u6267\u884c\n\n#### 2. \u4f7f\u7528\u65b9\u5f0f\n```bash\n# \u57fa\u672c\u7528\u6cd5\njarvis-agent\n\n# \u5e26\u53c2\u6570\u4f7f\u7528\njarvis-agent -f <\u914d\u7f6e\u6587\u4ef6> -c <\u4ee3\u7406\u5b9a\u4e49\u6587\u4ef6> -t \"\u521d\u59cb\u4efb\u52a1\"\n```\n\n#### 3. \u547d\u4ee4\u884c\u53c2\u6570\n| \u53c2\u6570 | \u63cf\u8ff0 |\n|------|------|\n| `-f/--config` | \u6307\u5b9a\u914d\u7f6e\u6587\u4ef6\u8def\u5f84\uff08\u53ef\u9009\uff09 |\n| `-c/--agent_definition` | \u6307\u5b9a\u4ee3\u7406\u5b9a\u4e49\u6587\u4ef6\u8def\u5f84\uff08\u53ef\u9009\uff09 |\n| `-t/--task` | \u6307\u5b9a\u521d\u59cb\u4efb\u52a1\uff08\u53ef\u9009\uff09 |\n\n#### 4. \u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\n\u4ee3\u7406\u5b9a\u4e49\u6587\u4ef6\u4f7f\u7528YAML\u683c\u5f0f\uff1a\n```yaml\n# \u4ee3\u7406\u914d\u7f6e\u793a\u4f8b\nname: \"\u81ea\u5b9a\u4e49\u4ee3\u7406\u540d\u79f0\"\nsystem_prompt: \"\u7cfb\u7edf\u63d0\u793a\u8bcd\"\nauto_complete: false\nneed_summary: true\n```\n\n#### 5. \u5de5\u4f5c\u6d41\u7a0b\n1. \u521d\u59cb\u5316\u73af\u5883\n2. \u52a0\u8f7d\u914d\u7f6e\u6587\u4ef6\uff08\u5982\u679c\u6307\u5b9a\uff09\n3. \u521b\u5efa\u4ee3\u7406\u5b9e\u4f8b\n4. \u6267\u884c\u521d\u59cb\u4efb\u52a1\uff08\u5982\u679c\u6307\u5b9a\uff09\n5. \u8fdb\u5165\u4ea4\u4e92\u5f0f\u6a21\u5f0f\uff08\u5982\u679c\u6ca1\u6709\u521d\u59cb\u4efb\u52a1\uff09\n6. \u6839\u636e\u7528\u6237\u8f93\u5165\u6267\u884c\u4efb\u52a1\n\n#### 6. \u4efb\u52a1\u6267\u884c\u7279\u70b9\n- \u652f\u6301\u591a\u884c\u8f93\u5165\n- \u81ea\u52a8\u4efb\u52a1\u89c4\u5212\n- \u590d\u6742\u4efb\u52a1\u81ea\u52a8\u62c6\u5206\u5b50\u4ee3\u7406\n- \u4ea4\u4e92\u5f0f\u6267\u884c\u8fc7\u7a0b\n- \u4efb\u52a1\u6267\u884c\u72b6\u6001\u53cd\u9988\n\n#### 7. \u793a\u4f8b\n```bash\n# \u57fa\u672c\u4f7f\u7528\njarvis-agent\n\n# \u4f7f\u7528\u914d\u7f6e\u6587\u4ef6\njarvis-agent -f ~/.jarvis/config.yaml\n\n# \u4f7f\u7528\u4ee3\u7406\u5b9a\u4e49\u6587\u4ef6\njarvis-agent -c custom_agent.yaml\n\n# \u76f4\u63a5\u6267\u884c\u4efb\u52a1\njarvis-agent -t \"\u5206\u6790\u9879\u76ee\u4ee3\u7801\u7ed3\u6784\u5e76\u751f\u6210\u6587\u6863\"\n\n# \u7ec4\u5408\u4f7f\u7528\njarvis-agent -f config.yaml -c agent.yaml -t \"\u4f18\u5316\u9879\u76ee\u6027\u80fd\"\n```\n\n### \u5e73\u53f0\u7ba1\u7406\u529f\u80fd (jarvis-platform-manager)\n\n`jarvis-platform-manager` \u662fJarvis\u7684\u5e73\u53f0\u7ba1\u7406\u5de5\u5177\uff0c\u7528\u4e8e\u7ba1\u7406AI\u5e73\u53f0\u3001\u6a21\u578b\u548c\u63d0\u4f9bAPI\u670d\u52a1\u3002\n\n#### 1. \u6838\u5fc3\u529f\u80fd\n- \u67e5\u770b\u652f\u6301\u7684\u5e73\u53f0\u548c\u6a21\u578b\n- \u4e0e\u6307\u5b9a\u5e73\u53f0\u548c\u6a21\u578b\u8fdb\u884c\u4ea4\u4e92\u5f0f\u5bf9\u8bdd\n- \u542f\u52a8OpenAI\u517c\u5bb9\u7684API\u670d\u52a1\n- \u52a0\u8f7d\u9884\u5b9a\u4e49\u89d2\u8272\u8fdb\u884c\u5bf9\u8bdd\n\n#### 2. \u5b50\u547d\u4ee4\u8bf4\u660e\n\n##### 2.1 \u67e5\u770b\u5e73\u53f0\u4fe1\u606f\n```bash\n# \u663e\u793a\u6240\u6709\u652f\u6301\u7684\u5e73\u53f0\u548c\u6a21\u578b\njarvis-platform-manager info\n```\n\n##### 2.2 \u4ea4\u4e92\u5f0f\u5bf9\u8bdd\n```bash\n# \u4e0e\u6307\u5b9a\u5e73\u53f0\u548c\u6a21\u578b\u5bf9\u8bdd\njarvis-platform-manager chat -p <\u5e73\u53f0\u540d\u79f0> -m <\u6a21\u578b\u540d\u79f0>\n```\n\n\u53ef\u7528\u547d\u4ee4\uff1a\n- `/bye` - \u9000\u51fa\u804a\u5929\n- `/clear` - \u6e05\u9664\u5f53\u524d\u4f1a\u8bdd\n- `/upload <\u6587\u4ef6\u8def\u5f84>` - \u4e0a\u4f20\u6587\u4ef6\u5230\u5f53\u524d\u4f1a\u8bdd\n- `/shell <\u547d\u4ee4>` - \u6267\u884cshell\u547d\u4ee4\n- `/save <\u6587\u4ef6\u540d>` - \u4fdd\u5b58\u6700\u540e\u4e00\u6761\u6d88\u606f\n- `/saveall <\u6587\u4ef6\u540d>` - \u4fdd\u5b58\u5b8c\u6574\u5bf9\u8bdd\u5386\u53f2\n\n##### 2.3 \u542f\u52a8API\u670d\u52a1\n```bash\n# \u542f\u52a8OpenAI\u517c\u5bb9\u7684API\u670d\u52a1\njarvis-platform-manager service --host <IP\u5730\u5740> --port <\u7aef\u53e3\u53f7> -p <\u5e73\u53f0\u540d\u79f0> -m <\u6a21\u578b\u540d\u79f0>\n```\n\n\u53c2\u6570\u8bf4\u660e\uff1a\n- `--host`: \u670d\u52a1\u4e3b\u673a\u5730\u5740\uff08\u9ed8\u8ba4\uff1a127.0.0.1\uff09\n- `--port`: \u670d\u52a1\u7aef\u53e3\uff08\u9ed8\u8ba4\uff1a8000\uff09\n- `-p/--platform`: \u6307\u5b9a\u9ed8\u8ba4\u5e73\u53f0\n- `-m/--model`: \u6307\u5b9a\u9ed8\u8ba4\u6a21\u578b\n\n##### 2.4 \u89d2\u8272\u5bf9\u8bdd\n```bash\n# \u52a0\u8f7d\u89d2\u8272\u914d\u7f6e\u6587\u4ef6\u5e76\u5f00\u59cb\u5bf9\u8bdd\njarvis-platform-manager role -c <\u914d\u7f6e\u6587\u4ef6\u8def\u5f84>\n```\n\n\u89d2\u8272\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\uff08YAML\uff09\uff1a\n```yaml\nroles:\n  - name: \"\u4ee3\u7801\u52a9\u624b\"\n    description: \"\u4e13\u6ce8\u4e8e\u4ee3\u7801\u5206\u6790\u548c\u751f\u6210\u7684AI\u52a9\u624b\"\n    platform: \"yuanbao\"\n    model: \"deep_seek_v3\"\n    system_prompt: \"\u4f60\u662f\u4e00\u4e2a\u4e13\u4e1a\u7684\u4ee3\u7801\u52a9\u624b\uff0c\u4e13\u6ce8\u4e8e\u5206\u6790\u548c\u751f\u6210\u9ad8\u8d28\u91cf\u7684\u4ee3\u7801\"\n  - name: \"\u6587\u6863\u64b0\u5199\"\n    description: \"\u5e2e\u52a9\u64b0\u5199\u6280\u672f\u6587\u6863\u7684AI\u52a9\u624b\"\n    platform: \"kimi\"\n    model: \"k1\"\n    system_prompt: \"\u4f60\u662f\u4e00\u4e2a\u6280\u672f\u6587\u6863\u64b0\u5199\u4e13\u5bb6\uff0c\u64c5\u957f\u5c06\u590d\u6742\u6280\u672f\u6982\u5ff5\u8f6c\u5316\u4e3a\u6e05\u6670\u6613\u61c2\u7684\u6587\u5b57\"\n```\n\n#### 3. \u793a\u4f8b\n```bash\n# \u67e5\u770b\u652f\u6301\u7684\u5e73\u53f0\u548c\u6a21\u578b\njarvis-platform-manager info\n\n# \u4e0e\u5143\u5b9d\u5e73\u53f0\u7684deep_seek_v3\u6a21\u578b\u5bf9\u8bdd\njarvis-platform-manager chat -p yuanbao -m deep_seek_v3\n\n# \u542f\u52a8API\u670d\u52a1\njarvis-platform-manager service --host 0.0.0.0 --port 8080 -p yuanbao -m deep_seek_v3\n\n# \u4f7f\u7528\u89d2\u8272\u914d\u7f6e\u6587\u4ef6\njarvis-platform-manager role -c ~/.jarvis/roles.yaml\n```\n\n## \ud83c\udf1f \u6838\u5fc3\u529f\u80fd <a id=\"core-features\"></a>\n\n### 1. \u4e3b\u8981\u7279\u6027\n- \ud83c\udd93 \u96f6\u6210\u672c\u63a5\u5165\uff1a\u65e0\u7f1d\u96c6\u6210\u817e\u8baf\u5143\u5b9d(\u63a8\u8350\u9996\u9009)\u3001Kimi\u7b49\u4f18\u8d28\u6a21\u578b\uff0c\u65e0\u9700\u652f\u4ed8API\u8d39\u7528\n- \ud83d\udee0\ufe0f \u5de5\u5177\u9a71\u52a8\uff1a\u5185\u7f6e\u4e30\u5bcc\u5de5\u5177\u96c6\uff0c\u6db5\u76d6\u811a\u672c\u6267\u884c\u3001\u4ee3\u7801\u5f00\u53d1\u3001\u7f51\u9875\u641c\u7d22\u3001\u7ec8\u7aef\u64cd\u4f5c\u7b49\u6838\u5fc3\u529f\u80fd\n- \ud83d\udc65 \u4eba\u673a\u534f\u4f5c\uff1a\u652f\u6301\u5b9e\u65f6\u4ea4\u4e92\uff0c\u7528\u6237\u53ef\u968f\u65f6\u4ecb\u5165\u6307\u5bfc\uff0c\u786e\u4fddAI\u884c\u4e3a\u7b26\u5408\u9884\u671f\n- \ud83d\udd0c \u9ad8\u5ea6\u53ef\u6269\u5c55\uff1a\u652f\u6301\u81ea\u5b9a\u4e49\u5de5\u5177\u548c\u5e73\u53f0\uff0c\u8f7b\u677e\u96c6\u6210MCP\u534f\u8bae\n- \ud83d\udcc8 \u667a\u80fd\u8fdb\u5316\uff1a\u5185\u7f6e\u65b9\u6cd5\u8bba\u7cfb\u7edf\uff0c\u6301\u7eed\u5b66\u4e60\u4f18\u5316\uff0c\u8d8a\u7528\u8d8a\u667a\u80fd\n\n### 2. \u89c6\u9891\u4ecb\u7ecd\n[![\u89c6\u9891\u4ecb\u7ecd](docs/images/intro.png)](https://player.bilibili.com/player.html?isOutside=true&aid=114306578382907&bvid=BV1x2dAYeEpM&cid=29314583629&p=1)\n\n### 3. \u9884\u5b9a\u4e49\u4efb\u52a1\n\u60a8\u53ef\u4ee5\u521b\u5efa\u9884\u5b9a\u4e49\u4efb\u52a1\u6587\u4ef6\u6765\u5feb\u901f\u6267\u884c\u5e38\u7528\u547d\u4ee4\uff1a\n\n1. \u5728`~/.jarvis/pre-command`\u6216\u5f53\u524d\u76ee\u5f55\u7684`.jarvis/pre-command`\u6587\u4ef6\u4e2d\u5b9a\u4e49\u4efb\u52a1\n2. \u4f7f\u7528YAML\u683c\u5f0f\u5b9a\u4e49\u4efb\u52a1\uff0c\u4f8b\u5982\uff1a\n```yaml\nbuild: \"\u6784\u5efa\u9879\u76ee\u5e76\u8fd0\u884c\u6d4b\u8bd5\"\ndeploy: \"\u90e8\u7f72\u5e94\u7528\u5230\u751f\u4ea7\u73af\u5883\"\n```\n3. \u8fd0\u884c`jarvis`\u547d\u4ee4\u65f6\u4f1a\u81ea\u52a8\u52a0\u8f7d\u8fd9\u4e9b\u4efb\u52a1\u5e76\u63d0\u793a\u9009\u62e9\u6267\u884c\n\n## \u2699\ufe0f \u914d\u7f6e\u8bf4\u660e <a id=\"configuration\"></a>\n\n### 1. \u5e73\u53f0\u914d\u7f6e\n\n#### \u817e\u8baf\u5143\u5b9d (\u63a8\u8350\u9996\u9009)\n```yaml\nJARVIS_PLATFORM: yuanbao\nJARVIS_MODEL: deep_seek_v3\nJARVIS_THINKING_PLATFORM: yuanbao\nJARVIS_THINKING_MODEL: deep_seek\nENV:\n  YUANBAO_COOKIES: <\u5143\u5b9dcookies>\n```\n\n#### Kimi\n```yaml\nJARVIS_PLATFORM: kimi\nJARVIS_MODEL: kimi\nJARVIS_THINKING_PLATFORM: kimi\nJARVIS_THINKING_MODEL: k1\nENV:\n  KIMI_API_KEY: <Kimi API KEY>\n```\n\n#### \u901a\u4e49\u5343\u95ee\n```yaml\nJARVIS_PLATFORM: tongyi\nJARVIS_MODEL: Normal\nJARVIS_THINKING_PLATFORM: tongyi\nJARVIS_THINKING_MODEL: Thinking\nENV:\n  TONGYI_COOKIES: <\u901a\u4e49\u5343\u95eecookies>\n```\n\n#### OpenAI\n```yaml\nJARVIS_PLATFORM: openai\nJARVIS_MODEL: gpt-4o\nJARVIS_THINKING_PLATFORM: openai\nJARVIS_THINKING_MODEL: gpt-4o\nOPENAI_API_KEY: <OpenAI API Key>\nOPENAI_API_BASE: https://api.openai.com/v1\n```\n\n### 2. \u914d\u7f6e\u9879\u8bf4\u660e\n| \u53d8\u91cf\u540d\u79f0 | \u9ed8\u8ba4\u503c | \u8bf4\u660e |\n|----------|--------|------|\n| `ENV` | {} | \u73af\u5883\u53d8\u91cf\u914d\u7f6e |\n| `JARVIS_MAX_TOKEN_COUNT` | 960000 | \u4e0a\u4e0b\u6587\u7a97\u53e3\u7684\u6700\u5927token\u6570\u91cf |\n| `JARVIS_MAX_INPUT_TOKEN_COUNT` | 32000 | \u8f93\u5165\u7684\u6700\u5927token\u6570\u91cf |\n| `JARVIS_PLATFORM` | yuanbao | \u9ed8\u8ba4AI\u5e73\u53f0 |\n| `JARVIS_MODEL` | deep_seek_v3 | \u9ed8\u8ba4\u6a21\u578b |\n| `JARVIS_THINKING_PLATFORM` | JARVIS_PLATFORM | \u63a8\u7406\u4efb\u52a1\u4f7f\u7528\u7684\u5e73\u53f0 |\n| `JARVIS_THINKING_MODEL` | JARVIS_MODEL | \u63a8\u7406\u4efb\u52a1\u4f7f\u7528\u7684\u6a21\u578b |\n| `JARVIS_EXECUTE_TOOL_CONFIRM` | false | \u6267\u884c\u5de5\u5177\u524d\u662f\u5426\u9700\u8981\u786e\u8ba4 |\n| `JARVIS_CONFIRM_BEFORE_APPLY_PATCH` | false | \u5e94\u7528\u8865\u4e01\u524d\u662f\u5426\u9700\u8981\u786e\u8ba4 |\n| `JARVIS_MAX_BIG_CONTENT_SIZE` | 160000 | \u6700\u5927\u5927\u5185\u5bb9\u5927\u5c0f |\n| `JARVIS_PRETTY_OUTPUT` | false | \u662f\u5426\u542f\u7528PrettyOutput |\n| `JARVIS_GIT_COMMIT_PROMPT` | \"\" | \u81ea\u5b9a\u4e49git\u63d0\u4ea4\u4fe1\u606f\u751f\u6210\u63d0\u793a\u6a21\u677f |\n| `JARVIS_PRINT_PROMPT` | false | \u662f\u5426\u6253\u5370\u63d0\u793a |\n| `JARVIS_USE_METHODOLOGY` | true | \u662f\u5426\u542f\u7528\u65b9\u6cd5\u8bba\u529f\u80fd |\n| `JARVIS_USE_ANALYSIS` | true | \u662f\u5426\u542f\u7528\u4efb\u52a1\u5206\u6790\u529f\u80fd |\n| `JARVIS_DATA_PATH` | ~/.jarvis | Jarvis\u6570\u636e\u5b58\u50a8\u76ee\u5f55\u8def\u5f84 |\n\n## \ud83d\udee0\ufe0f \u5de5\u5177\u8bf4\u660e <a id=\"tools\"></a>\n\n### 1. \u5185\u7f6e\u5de5\u5177\n| \u5de5\u5177\u540d\u79f0 | \u63cf\u8ff0 |\n|----------|------|\n| ask_user | \u4ea4\u4e92\u5f0f\u7528\u6237\u8f93\u5165\u6536\u96c6 |\n| rewrite_file | \u6587\u4ef6\u91cd\u5199\u5de5\u5177 |\n| edit_file | \u4ee3\u7801\u7f16\u8f91\u5de5\u5177 |\n| execute_script | \u6267\u884c\u811a\u672c\u5e76\u8fd4\u56de\u7ed3\u679c |\n| file_analyzer | \u5206\u6790\u6587\u4ef6\u5185\u5bb9\u5e76\u63d0\u53d6\u5173\u952e\u4fe1\u606f |\n| methodology | \u65b9\u6cd5\u8bba\u7ba1\u7406\u5de5\u5177 |\n| read_code | \u4ee3\u7801\u9605\u8bfb\u4e0e\u5206\u6790\u5de5\u5177 |\n| read_webpage | \u8bfb\u53d6\u7f51\u9875\u5185\u5bb9\u5e76\u5206\u6790 |\n| search_web | \u4f7f\u7528\u4e92\u8054\u7f51\u641c\u7d22 |\n| virtual_tty | \u63a7\u5236\u865a\u62df\u7ec8\u7aef\u6267\u884c\u64cd\u4f5c |\n\n### 2. \u547d\u4ee4\u66ff\u6362\u529f\u80fd\n\u652f\u6301\u4f7f\u7528\u7279\u6b8a\u6807\u8bb0`'<tag>'`\u89e6\u53d1\u547d\u4ee4\u66ff\u6362\u529f\u80fd\uff1a\n\n| \u6807\u8bb0 | \u529f\u80fd |\n|------|------|\n| `'Summary'` | \u603b\u7ed3\u5f53\u524d\u4f1a\u8bdd\u5e76\u6e05\u7a7a\u5386\u53f2\u8bb0\u5f55 |\n| `'Clear'` | \u6e05\u7a7a\u5f53\u524d\u4f1a\u8bdd |\n| `'ToolUsage'` | \u663e\u793a\u53ef\u7528\u5de5\u5177\u5217\u8868\u53ca\u4f7f\u7528\u65b9\u6cd5 |\n| `'ReloadConfig'` | \u91cd\u65b0\u52a0\u8f7d\u914d\u7f6e\u6587\u4ef6 |\n| `'Web'` | \u7f51\u9875\u641c\u7d22\uff0c\u652f\u6301\u591a\u79cd\u63d0\u95ee\u683c\u5f0f |\n| `'FindRelatedFiles'` | \u67e5\u627e\u4e0e\u529f\u80fd\u76f8\u5173\u7684\u6587\u4ef6 |\n| `'Fix'` | \u4fee\u590d\u95ee\u9898 |\n| `'Check'` | \u6267\u884c\u9759\u6001\u4ee3\u7801\u68c0\u67e5\uff0c\u5305\u62ec\u9519\u8bef\u548c\u98ce\u683c\u95ee\u9898 |\n| `'SaveSession'` | \u4fdd\u5b58\u5f53\u524d\u4f1a\u8bdd\u5e76\u9000\u51fa |\n\n### 3. \u81ea\u5b9a\u4e49\u66ff\u6362\u914d\u7f6e\n\u5728`~/.jarvis/config.yaml`\u4e2d\u6dfb\u52a0\uff1a\n```yaml\nJARVIS_REPLACE_MAP:\n  tag_name:\n    template: \"\u66ff\u6362\u540e\u7684\u5185\u5bb9\"\n    description: \"\u6807\u8bb0\u63cf\u8ff0\"\n    append: false\n```\n\n## \ud83d\udee0\ufe0f \u6269\u5c55\u5f00\u53d1 <a id=\"extensions\"></a>\n\n### 1. \u6dfb\u52a0\u65b0\u5de5\u5177\n\u5728 `~/.jarvis/tools/` \u4e2d\u521b\u5efa\u65b0\u7684 Python \u6587\u4ef6\uff1a\n```python\nfrom typing import Dict, Any\nfrom jarvis.utils import OutputType, PrettyOutput\n\nclass CustomTool:\n    name = \"\u5de5\u5177\u540d\u79f0\"\n    description = \"\u5de5\u5177\u63cf\u8ff0\"\n    parameters = {\n        \"type\": \"object\",\n        \"properties\": {\n            \"param1\": {\n                \"type\": \"string\",\n                \"description\": \"\u53c2\u6570\u63cf\u8ff0\"\n            }\n        },\n        \"required\": [\"param1\"]\n    }\n    \n    def execute(self, args: Dict[str, Any]) -> Dict[str, Any]:\n        try:\n            # \u5b9e\u73b0\u5de5\u5177\u903b\u8f91\n            result = \"\u5de5\u5177\u6267\u884c\u7ed3\u679c\"\n            return {\n                \"success\": True,\n                \"stdout\": result,\n                \"stderr\": \"\"\n            }\n        except Exception as e:\n            return {\n                \"success\": False,\n                \"stdout\": \"\",\n                \"stderr\": str(e)\n            }\n```\n\n### 2. \u6dfb\u52a0MCP\n\u5728`~/.jarvis/config.yaml`\u4e2d\u6dfb\u52a0\uff1a\n```yaml\nJARVIS_MCP:\n  - type: stdio  # \u6216 sse/streamable\n    name: MCP\u540d\u79f0\n    command: \u53ef\u6267\u884c\u547d\u4ee4\n    base_url: http://example.com/api\n    args: [\u53c2\u6570\u5217\u8868]\n    env:\n      KEY: VALUE\n    enable: true\n```\n\n### 3. \u6dfb\u52a0\u65b0\u5927\u6a21\u578b\u5e73\u53f0\n\u5728 `~/.jarvis/platforms/` \u4e2d\u521b\u5efa\u65b0\u7684 Python \u6587\u4ef6\uff1a\n```python\nfrom jarvis.jarvis_platform.base import BasePlatform\n\nclass CustomPlatform(BasePlatform):\n    def __init__(self):\n        pass\n\n    def __del__(self):\n        pass\n\n    def chat(self, message: str) -> str:\n        pass\n\n    def upload_files(self, file_list: List[str]) -> bool:\n        pass\n\n    def delete_chat(self):\n        pass\n\n    def set_model_name(self, model_name: str):\n        pass\n\n    def set_system_prompt(self, message: str):\n        pass\n\n    def get_model_list(self) -> List[Tuple[str, str]]:\n        pass\n\n    def name(self) -> str:\n        pass\n```\n\n## \ud83e\udd1d \u8d21\u732e\u6307\u5357 <a id=\"contributing\"></a>\n1. Fork \u4ed3\u5e93\n2. \u521b\u5efa\u7279\u6027\u5206\u652f (`git checkout -b feature/AmazingFeature`)\n3. \u63d0\u4ea4\u66f4\u6539 (`git commit -m '\u6dfb\u52a0\u67d0\u4e2a\u5f88\u68d2\u7684\u7279\u6027'`)\n4. \u63a8\u9001\u5230\u5206\u652f (`git push origin feature/AmazingFeature`)\n5. \u5f00\u542f Pull Request\n\n## \ud83d\udcc4 \u8bb8\u53ef\u8bc1 <a id=\"license\"></a>\n\u672c\u9879\u76ee\u91c7\u7528 MIT \u8bb8\u53ef\u8bc1 - \u8be6\u89c1 [LICENSE](LICENSE) \u6587\u4ef6\u3002\n\n---\n<div align=\"center\">\n\u7531 Jarvis \u56e2\u961f\u7528 \u2764\ufe0f \u5236\u4f5c\n</div>\n\n![Jarvis\u6280\u672f\u652f\u6301\u7fa4](docs/images/wechat.png)\n",
    "bugtrack_url": null,
    "license": "MIT License\n        \n        Copyright (c) 2025 skyfire\n        \n        Permission is hereby granted, free of charge, to any person obtaining a copy\n        of this software and associated documentation files (the \"Software\"), to deal\n        in the Software without restriction, including without limitation the rights\n        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n        copies of the Software, and to permit persons to whom the Software is\n        furnished to do so, subject to the following conditions:\n        \n        The above copyright notice and this permission notice shall be included in all\n        copies or substantial portions of the Software.\n        \n        THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n        SOFTWARE.",
    "summary": "Jarvis: An AI assistant that uses tools to interact with the system",
    "version": "0.1.217",
    "project_urls": {
        "Homepage": "https://github.com/skyfireitdiy/Jarvis"
    },
    "split_keywords": [
        "jarvis",
        " ai",
        " assistant",
        " tools",
        " automation"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "78111d0800755782aea5b0b8b39c3dd814550523bcc0277c7ca2964f9a08b123",
                "md5": "6df50391d2f3930fbd158b3eecc585d3",
                "sha256": "4448da5616a94320d504f9a1fe8ccc5d4adcaeeff39a7293715b0092e0955e9c"
            },
            "downloads": -1,
            "filename": "jarvis_ai_assistant-0.1.217-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "6df50391d2f3930fbd158b3eecc585d3",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 987990,
            "upload_time": "2025-07-09T13:59:44",
            "upload_time_iso_8601": "2025-07-09T13:59:44.490127Z",
            "url": "https://files.pythonhosted.org/packages/78/11/1d0800755782aea5b0b8b39c3dd814550523bcc0277c7ca2964f9a08b123/jarvis_ai_assistant-0.1.217-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "435863f20f4bade4135cb90f132ba557529426d4a7dd1d42564db164042a3817",
                "md5": "d83832131839c53d366ba66ea806c0cc",
                "sha256": "99a60a4a873b6da9ddb0ab8a87d98c91d49e42696c08962c40827a2d1920abb1"
            },
            "downloads": -1,
            "filename": "jarvis_ai_assistant-0.1.217.tar.gz",
            "has_sig": false,
            "md5_digest": "d83832131839c53d366ba66ea806c0cc",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 939781,
            "upload_time": "2025-07-09T13:59:46",
            "upload_time_iso_8601": "2025-07-09T13:59:46.200826Z",
            "url": "https://files.pythonhosted.org/packages/43/58/63f20f4bade4135cb90f132ba557529426d4a7dd1d42564db164042a3817/jarvis_ai_assistant-0.1.217.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-09 13:59:46",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "skyfireitdiy",
    "github_project": "Jarvis",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "jarvis-ai-assistant"
}
        
Elapsed time: 0.43236s