写点什么

Jarvis Agent 高级主题

作者:SkyFire
  • 2025-07-28
    中国香港
  • 本文字数:5208 字

    阅读完需:约 17 分钟

Jarvis Agent高级主题

项目地址:https://github.com/skyfireitdiy/Jarvis

6. 高级主题

本章面向希望深度定制和挖掘 Jarvis 潜力的用户,将介绍一些高级配置和功能。

6.1 模型组配置

在不同的任务场景下,您可能希望使用不同的 AI 模型组合。例如,使用一个强大的模型进行复杂的代码生成(“思考”模型),同时使用一个快速、经济的模型处理常规对话(“普通”模型)。模型组功能就是为此设计的。

配置方法

在您的全局配置文件 ~/.jarvis/config.yaml 中,您可以定义 JARVIS_MODEL_GROUPS 列表,并用 JARVIS_MODEL_GROUP 来选择当前激活的组。


# 1. 定义可用的模型组JARVIS_MODEL_GROUPS:  # 模型组一:使用强大的模型组合  - power_group:      JARVIS_PLATFORM: "kimi"      JARVIS_MODEL: "moonshot-v1-128k"      JARVIS_THINKING_PLATFORM: "deepseek"      JARVIS_THINKING_MODEL: "deepseek-coder"      JARVIS_MAX_TOKEN_COUNT: 128000
# 模型组二:使用快速经济的模型组合 - speed_group: JARVIS_PLATFORM: "ollama" JARVIS_MODEL: "llama3" # 如果不指定思考模型, 将自动使用常规模型
# 2. 选择要激活的模型组JARVIS_MODEL_GROUP: power_group
复制代码

配置优先级

Jarvis 按以下顺序(从高到低)应用配置:


  1. 独立环境变量: 直接设置的 JARVIS_PLATFORM, JARVIS_MODEL 等,会覆盖所有其他设置。

  2. 模型组配置: 由 JARVIS_MODEL_GROUP 选中的配置。

  3. 代码默认值: 如果以上均未配置,则使用系统内置的默认模型。


6.2 快捷指令

为了提升交互效率,Jarvis 支持两种快捷指令机制:元命令输入替换映射。它们都在输入被发送给 AI 模型之前由 input_handler 处理。

元命令 (Meta-Commands)

元命令是硬编码在 builtin_input_handler 中的特殊指令,用于执行系统级操作,通常会中断正常的 AI 交互流程。


使用格式: 在交互界面输入 '<命令名>',例如 '<Clear>'



输入替换映射 (Replace Map)

这种机制允许您定义一些短标签,当输入这些标签时,系统会自动将其替换为更长的、预设好的模板字符串,然后再交给 AI 处理。这非常适合固化一些常用的高频指令。


使用格式: 在交互界面输入 '<标签名>',例如 '<Web>'

内置替换指令


自定义替换指令

您可以在配置文件 ~/.jarvis/config.yaml 中通过 JARVIS_REPLACE_MAP 定义自己的快捷指令。


# ~/.jarvis/config.yamlJARVIS_REPLACE_MAP:  my_check: # 定义一个名为 'my_check' 的快捷指令    template: "请使用pylint对src目录下的所有python文件进行代码质量检查,并报告问题"    description: "运行自定义的pylint检查"    append: false # false表示替换用户输入, true表示追加到用户输入
复制代码


配置后,当您在 jvs 中输入 '<my_check>' 时,它会被自动替换为 template 中的长指令。



6.3 自定义代理 (jarvis-agent / ja)

虽然 jvs (Jarvis) 和 jca (Code Agent) 等预置代理能满足大部分需求,但有时您可能需要一个具有特定“人设”、特定工具集和特定行为模式的代理。jarvis-agent (ja) 就是用于创建和运行这种高度自定义代理的工具。

代理定义文件

自定义代理的核心是一个 YAML 格式的定义文件。


# my_db_admin_agent.yaml
# 代理的名称name: "数据库管理员"
# 系统提示词,定义了代理的身份和行为准则system_prompt: | 你是一个专业的数据库管理员(DBA)。 你的职责是帮助用户管理数据库。 你只能使用提供的 `sql_query` 和 `db_schema` 工具。 在执行任何写操作(INSERT, UPDATE, DELETE)之前,必须向用户请求确认。
# 限定此代理可用的工具列表 (可选)# 如果不指定, 代理将可以使用所有已加载的工具use_tools: - "sql_query" - "db_schema"
# 任务结束后是否需要生成总结need_summary: true
复制代码

使用方法

您可以使用 -c--agent_definition 参数来加载您的代理定义文件。


# 使用自定义的DBA代理,并分配一个初始任务ja -c my_db_admin_agent.yaml -t "查询 users 表中有多少条记录"
复制代码


通过这种方式,您可以创建出各种各样专注于特定领域的专家代理,如“文档撰写专家”、“k8s 运维专家”或“安全分析专家”,极大地扩展了 Jarvis 的应用场景。



6.4 多代理协作系统 (jma)

除了单个的自定义代理,Jarvis 还提供了一个更强大的范式:多代理协作系统。您可以定义一个由多个具有不同角色和能力的 Agent 组成的团队,让它们通过对话和协作来共同完成一个复杂的任务。

核心机制

  • 团队定义: 您在一个 YAML 文件中定义整个团队,包括每个代理的角色、能力(可使用的工具)和系统提示。

  • 主代理 (Entry Point): 您需要指定一个“主代理”(通常是项目经理或协调者角色),它将首先接收用户的初始任务。

  • 基于消息的通信: 代理之间不直接调用彼此。它们通过生成一个特殊的 <SEND_MESSAGE> 输出来进行通信。

  • 协调器: 一个名为 MultiAgent 的隐形协调器负责拦截这些消息,并将其路由给目标代理,从而驱动整个团队的协作流程。

定义多代理系统 (YAML 文件)

多代理系统的核心是一个定义文件,它包含两个顶级键:main_agentagents 列表。


下面是一个“软件开发团队”的示例 dev_team.yaml


# dev_team.yaml
# 1. 指定团队的入口 Agentmain_agent: "项目经理"
# 2. 定义团队中的所有 Agentagents: - name: "项目经理" system_prompt: | 你是一个项目经理,负责理解和拆解用户需求。 你的任务是: 1. 将用户需求分解为程序员和测试工程师可以执行的具体任务。 2. 将任务分配给“程序员”。 3. 接收程序员的完成报告,并将其转交给“测试工程师”进行测试。 4. 收集测试结果,并向用户报告最终结果。 你不能编写或测试代码,只能与其他代理沟通。 use_tools: [] # 项目经理通常不需要直接使用工具
- name: "程序员" system_prompt: | 你是一名程序员。你会接收来自“项目经理”的任务。 你的任务是: 1. 根据任务需求编写代码。 2. 使用你可用的工具(如 write_file, execute_script)来完成编码。 3. 完成后,向“项目经理”报告你已完成任务,并提供代码路径或相关产出。 你只与“项目经理”沟通。 use_tools: - "write_file" - "execute_script" - "read_code"
- name: "测试工程师" system_prompt: | 你是一名测试工程师。你会接收来自“项目经理”的测试任务。 你的任务是: 1. 根据任务和代码,编写测试脚本。 2. 执行测试并记录结果。 3. 向“项目经理”报告详细的测试结果(成功或失败,以及失败原因)。 你只与“项目经理”沟通。 use_tools: - "execute_script" - "read_code"
复制代码

使用方法

使用 jma (Jarvis Multi-Agent) 命令和 -c 参数来启动您的多代理团队。


# 启动 "dev_team" 并给出一个初始任务jma -c dev_team.yaml -i "请用python写一个快速排序算法,并进行测试"
复制代码


当命令执行后:


  1. 用户输入 "请用 python 写一个快速排序算法..." 会首先被发送给 项目经理

  2. 项目经理 会分析需求,然后向 程序员 发送一条消息,如:“请编写一个快速排序的 Python 实现”。

  3. 程序员 接收到消息,编写代码,然后向 项目经理 回复:“代码已完成,位于 quick_sort.py”。

  4. 项目经理 接收到回复,再向 测试工程师 发送消息:“请测试 quick_sort.py 的功能和正确性”。

  5. 测试工程师 执行测试,并将结果(如 “测试通过”)报告给 项目经理

  6. 最后,项目经理 总结所有工作,并向用户报告最终结果。


通过这种方式,您可以构建出高度结构化和专业化的自动化工作流,以解决远超单个 Agent 能力范围的复杂问题。



6.5 聊天角色预设 (jpm role)

ja (自定义代理) 和 jma (多代理系统) 专注于执行复杂任务不同,有时您可能只是想快速与一个具有特定“人设”和知识领域的 AI 进行纯粹的对话。jpm role 功能就是为此设计的。


它允许您预先定义一组“聊天角色”,每个角色绑定了特定的模型和系统提示词,从而可以一键“扮演”不同领域的专家进行对话。

角色定义文件 (roles.yaml)

您需要在 ~/.jarvis/ 目录下创建一个 roles.yaml 文件(或通过 jpm role -c 指定其他路径),并在其中定义您的角色列表。


文件结构如下:


# ~/.jarvis/roles.yaml
roles: - name: "Python 资深开发者" description: "专注于Python编程、代码优化和架构设计的专家。" platform: "deepseek" model: "deepseek-coder" system_prompt: | 你是一位拥有20年经验的Python资深开发者和架构师。 你能解答关于Python的任何问题,从基础语法到高级并发编程、异步IO、元类以及性能调优。 你的回答应该精准、深入,并附带高质量的代码示例。
- name: "英语翻译与润色专家" description: "精通中英互译,擅长提供地道、专业的翻译和润色建议。" platform: "kimi" model: "moonshot-v1-128k" system_prompt: | You are a professional English-Chinese translator and editor. Your task is to provide accurate, natural, and context-aware translations. When asked to polish text, you should explain your changes and offer alternative phrasings.
- name: "Golang 并发编程大师" description: "深入理解Go语言的并发模型和底层原理。" platform: "ollama" model: "gemma2" system_prompt: | 你是一位Golang并发编程大师。你对goroutine、channel、select以及sync包了如指掌。 你的任务是帮助用户理解和解决复杂的Go并发问题,并提供健壮、高效的并发代码范例。
复制代码

使用方法

  1. 启动角色选择: 直接运行 jpm role 命令。

  2. 选择角色: 程序会列出 roles.yaml 中定义的所有角色,您可以输入编号进行选择。

  3. 开始对话: 选择后,Jarvis 会加载该角色的模型和系统提示词,然后您就可以直接开始与这位“专家”对话了。


jpm role 是一个轻量级但非常实用的功能,它让您无需每次都手动设置系统提示和模型,就能在不同的专家角色之间轻松切换。



6.6 方法论共享与扩展

除了即时定义的任务和代理,Jarvis 还支持一个更高级的概念:**方法论 (Methodology)**。方法论是一种可复用的、结构化的高级问题解决方案,它可以被沉淀下来、共享给团队,并在合适的场景下被 AI 自动调用,从而极大地提升了解决特定类型问题的效率和质量。

什么是方法论?

简单来说,方法论是一个针对特定“问题类型”的“操作手册”或“最佳实践指南”。当用户输入的需求与某个方法论的“问题类型”匹配时,AI 就会优先参考这个指南来规划其行动步骤。

方法论的格式

方法论以简单的 JSON 文件形式存在,每个文件定义一个方法论。


核心字段:


  • problem_type: (字符串) 对该方法论所解决的问题类型的简明描述。这是 AI 用来匹配用户需求的关键。

  • content: (字符串) 方法论的具体内容,即详细的步骤、原则和建议。


示例: code_review_methodology.json


{  "problem_type": "代码审查与重构",  "content": "在进行代码审查或重构时,请遵循以下步骤:\n1. **理解业务背景**: 首先,使用 read_code 和与用户的对话来充分理解相关代码的业务逻辑和目标。\n2. **静态分析**: 运行静态代码分析工具(如 pylint, go vet)来发现潜在的低级错误和不规范的写法。\n3. **可读性优先**: 检查代码的可读性,包括命名是否清晰、注释是否充分、函数和类的职责是否单一。\n4. **识别坏味道**: 寻找常见的代码坏味道,例如超长函数、重复代码、过深的嵌套等。\n5. **提出具体建议**: 不要只说“代码需要优化”,而是要提出具体的、可执行的修改建议,并解释为什么这样修改会更好。\n6. **小步提交**: 如果进行重构,建议将大的改动分解为一系列小步的、独立的修改,并为每一步生成清晰的提交信息。"}
复制代码

加载与共享

Jarvis 会从以下位置自动加载所有 .json 格式的方法论文件:


  1. 用户方法论目录: ~/.jarvis/methodologies/ (推荐存放您个人方法论的地方)

  2. 外部方法论目录: 由 JARVIS_METHODOLOGY_DIRS 环境变量指定的目录列表。


通过 Git 共享方法论:


JARVIS_METHODOLOGY_DIRS 的设计初衷就是为了方便团队协作和知识共享。您可以:


  1. 创建一个 Git 仓库,专门用于存放团队的最佳实践和方法论 (.json 文件)。

  2. 团队成员将此仓库克隆到本地。

  3. 设置环境变量 JARVIS_METHODOLOGY_DIRS 指向该仓库的本地路径。


# 例如,将团队的方法论仓库克隆到 ~/git/team-methodologiesgit clone https://github.com/your-org/team-methodologies.git ~/git/team-methodologies
# 在 ~/.bashrc 或 ~/.zshrc 中设置环境变量export JARVIS_METHODOLOGY_DIRS="~/git/team-methodologies"
复制代码


配置完成后,Jarvis 启动时会自动从该 Git 仓库加载所有方法论。更棒的是,Jarvis 内置了每日自动更新机制,会自动拉取最新的方法论,确保整个团队的知识库保持同步。


通过这种方式,您可以将团队的智慧结晶沉淀为可执行的“数字资产”,让 AI 助手能够持续学习和成长,成为团队中越来越得力的专家。


发布于: 刚刚阅读数: 3
用户头像

SkyFire

关注

这个cpper很懒,什么都没留下 2018-10-13 加入

会一点点cpp的苦逼码农

评论

发布
暂无评论
Jarvis Agent高级主题_agent_SkyFire_InfoQ写作社区