
PentAGI 接入 Ollama 本地模型从环境变量配置到源码级实现解析【免费下载链接】pentagiFully autonomous AI Agents system capable of performing complex penetration testing tasks项目地址: https://gitcode.com/GitHub_Trending/pe/pentagiPentAGI 是支持全自主渗透测试任务的 AI Agent 系统而 Ollama Provider 是其接入本地大模型的官方通道——通过它你可以让 PentAGI 全部 Agent 角色规划、编码、渗透、搜索等跑在本机或内网自建的模型服务上无需任何 API Key 与联网计费。读完本文你将掌握 Ollama 的安装接入、环境变量与 YAML 自定义配置、模型自动拉取/发现机制的调优方法并透过 ollama.go 的源码理解这些开关背后真实的调用链。一、Ollama Provider 是什么Ollama Provider 使 PentAGI 能够通过 Ollama 中Ollama 被注册为一种独立的 Provider 类型ProviderOllama ollama与 OpenAI、Anthropic、Gemini、Bedrock 等云端厂商并列属于自托管/本地阵营。其核心价值在于本地推理模型权重保存在你自己的服务器上数据不出内网零定价不产生按 token 计费的成本没有 API 限额动态模型发现可自动探测服务器上已安装的模型并纳入可选列表。在 registry.go 中Ollama Provider 的启用条件是OLLAMA_SERVER_URL环境变量非空也就是说只要设置了服务器地址PentAGI 就会把它作为一个可用 Provider 注册进系统。二、安装与启动 Ollama 服务器按照 官方安装指南 在你的系统上安装 Ollama 服务器启动 Ollama 服务默认监听在http://localhost:11434拉取所需模型例如ollama pull gemma3:1b。安装完成后可用ollama list查看本机已有哪些模型用ollama pull model-name下载新模型。PentAGI 侧并不要求提前下载全部模型——如果启用了自动拉取功能见下文它会在启动时替你补齐。三、环境变量配置Ollama 相关配置项统一定义在 config.go全部通过环境变量注入。必选变量# Ollama 服务器地址默认http://localhost:11434 OLLAMA_SERVER_URLhttp://localhost:11434这是唯一必须设置的变量也是 Provider 注册的开关。源码中newOllamaClient会对其执行url.Parse解析因此地址格式必须合法例如http://localhost:11434。可选变量# 推理默认模型可选默认llama3.1:8b-instruct-q8_0 OLLAMA_SERVER_MODELllama3.1:8b-instruct-q8_0 # 自定义配置文件路径可选YAML/JSON 均可 OLLAMA_SERVER_CONFIG_PATH/path/to/ollama_config.yml # 模型管理设置可选 OLLAMA_SERVER_PULL_MODELS_TIMEOUT600 # 模型下载超时秒默认 600 OLLAMA_SERVER_PULL_MODELS_ENABLEDfalse # 启动时自动下载模型默认 false OLLAMA_SERVER_LOAD_MODELS_ENABLEDfalse # 启动时从服务器加载模型列表默认 false # 需要代理时设置 PROXY_URLhttp://proxy:8080 # Ollama Cloud 订阅场景下的 API Key可选 OLLAMA_SERVER_API_KEYollama-xxx几点说明OLLAMA_SERVER_MODEL在源码中作为baseModel不仅用于默认推理还参与自动拉取的模型清单构建getConfigModelsList会把它作为清单第一项。OLLAMA_SERVER_PULL_MODELS_TIMEOUT的类型是 int、单位为秒New()中若该值 0会回退到内置默认值defaultPullTimeout 10 * time.Minute见 ollama.go。OLLAMA_SERVER_API_KEY是给 Ollama Cloud 用的源码中只要该变量非空就会通过ollama.WithAPIKey(...)注入认证信息见 ollama.go让 PentAGI 既能连本地免费实例也能连 Ollama 的云端订阅服务。PROXY_URL会经由system.GetHTTPClient(cfg)构造带代理的 HTTP 客户端同时用于拉模型 API 与推理调用对应测试用例 TestOllamaProviderWithProxy。四、高级配置模型管理开关PentAGI 通过三个开关控制与 Ollama 服务器的交互方式自动拉取模型OLLAMA_SERVER_PULL_MODELS_ENABLEDtrue启动时自动下载配置文件中指定的模型。源码路径为New()中ensureModelsAvailable(ctx, apiClient, configModels)——它会并发地对模型清单逐个检查先用client.Show()探测模型是否已存在于本地快速路径存在则跳过下载不存在才发起client.Pull()拉取见 ollama.go。拉取超时OLLAMA_SERVER_PULL_MODELS_TIMEOUT等待模型下载的最长时间默认 600 秒。加载模型列表OLLAMA_SERVER_LOAD_MODELS_ENABLEDtrue通过 API 向 Ollama 服务器查询可用模型。源码中对应loadAvailableModelsFromServer()调用client.List(ctx)并逐条转换为pconfig.ModelConfig注意其Price字段被显式置为 nil见 ollama.go这正是本地推理无计费在数据模型层面的体现。性能提示启用OLLAMA_SERVER_LOAD_MODELS_ENABLED会在启动时增加延迟因为 PentAGI 需要查询 Ollama API。每次 API 查询本身受defaultAPICallTimeout 10 * time.Second约束如果你只使用配置文件里指定的模型建议关闭它以获得最快启动。推荐配置组合# 快速启动静态配置启动快、不依赖服务器状态 OLLAMA_SERVER_MODELllama3.1:8b-instruct-q8_0 OLLAMA_SERVER_PULL_MODELS_ENABLEDfalse OLLAMA_SERVER_LOAD_MODELS_ENABLEDfalse # 自动发现动态配置适合经常增删模型的环境 OLLAMA_SERVER_PULL_MODELS_ENABLEDtrue OLLAMA_SERVER_PULL_MODELS_TIMEOUT900 OLLAMA_SERVER_LOAD_MODELS_ENABLEDtrue前者的思路是只用配置里写死的模型不做任何 API 探测即文档所述的模型缓存模式后者的思路是启动时自动补齐模型 动态发现全部可用模型代价是首次启动更慢。五、支持的模型Provider 会动态加载你本地 Ollama 服务器上的模型可用模型完全取决于你本机安装了什么。常见模型家族包括Gemma 系列gemma3:1b、gemma3:2b、gemma3:7b、gemma3:27bLlama 系列llama3.1:7b、llama3.1:8b、llama3.1:8b-instruct-q8_0、llama3.1:8b-instruct-fp16、llama3.1:70b、llama3.2:1b、llama3.2:3b、llama3.2:90bQwen 系列qwen2.5:1.5b、qwen2.5:3b、qwen2.5:7b、qwen2.5:14b、qwen2.5:32b、qwen2.5:72bDeepSeek 系列deepseek-r1:1.5b、deepseek-r1:7b、deepseek-r1:8b、deepseek-r1:14b、deepseek-r1:32bEmbedding 模型nomic-embed-text在服务器上查看可用模型ollama list下载新模型ollama pull model-name。从源码看动态发现链路是OLLAMA_SERVER_LOAD_MODELS_ENABLEDtrue→loadAvailableModelsFromServer()→client.List()→pconfig.ModelsConfig→ 通过GetModels()暴露给上层供模型选择界面使用未启用时可用模型列表只包含OLLAMA_SERVER_MODEL指定的基础模型见 ollama.go。六、功能特性一览动态模型发现启用后自动检测 Ollama 服务器上已安装的模型模型缓存关闭加载时只使用已配置的模型不产生额外 API 调用本地推理无需 API Key模型完全在本地运行自动模型拉取启用后按需自动下载模型Agent 专业化为不同 Agent 类型assistant、coder、pentester 等提供差异化参数配置工具调用支持兼容支持 function calling 的模型CallWithTools通过llms.WithTools注入工具定义见 ollama.go流式输出实时响应流CallEx/CallWithTools均通过llms.WithStreamingFunc挂接流回调自定义配置用 YAML 配置文件覆盖默认参数零计费本地模型无使用成本。另外值得注意的一个实现细节ModelWithPrefix()对 Ollama 直接透传模型名而不加前缀见 ollama.go这与 LiteLLM 网关类 Provider 的行为不同说明 PentAGI 将 Ollama 视为直连原生后端。同时在 provider.go 的推理能力映射中Ollama 被标记为reasoning.ProviderUnknown——即不为其假设任何厂商特有的推理开关协议。七、Agent 类型与默认参数Provider 支持 PentAGI 的全部 Agent 类型并可为每种类型提供差异化配置。文档中给出的定位参考如下simple通用对话assistantAI 助手类任务coder代码生成pentester安全测试渗透主角色generator内容生成如攻击计划初稿refiner内容精炼searcher信息检索以及simple_json、primary_agent、adviser、reflector、enricher、installer等更多类型这些 Agent 类型与pconfig.ProviderOptionsType常量一一对应见 config.go总计 13 种。注意仓库内置的 config.yml 中各 Agent 的实际默认值为temperature: 1.0、top_p: 0.9~0.95、n: 1max_tokens从 4096simple_json/reflector/enricher到 20480generator/coder不等文档中列举的 0.1~0.4 温度与 3000/6000/8000 上限属于参考性建议值实际生效值以内置配置或你自定义的配置为准。若未对某类型单独配置GetOptionsForType会回退到BuildProviderConfig中构造的默认选项n1、max_tokens32768、modelOLLAMA_SERVER_MODEL见 ollama.go。八、自定义配置YAML 覆盖默认参数当内置默认参数不满足需求时可以创建自定义配置文件覆盖任意 Agent 的参数simple: model: llama3.1:8b-instruct-q8_0 temperature: 0.2 top_p: 0.3 n: 1 max_tokens: 4000 coder: model: deepseek-r1:8b temperature: 0.1 top_p: 0.2 n: 1 max_tokens: 8000然后通过OLLAMA_SERVER_CONFIG_PATH指向该文件即可。源码侧的加载逻辑DefaultProviderConfig为若OLLAMA_SERVER_CONFIG_PATH为空则读取go:embed进二进制的内置 config.yml否则读取外部文件读不到时回退内置配置见 ollama.go对应测试 TestOllamaProviderWithCustomConfig。配置解析由pconfig.LoadConfigData完成同时支持 YAML 与 JSON 两种格式并兼容旧版agent:字段自动映射为primary_agent。AgentConfig支持的可调字段见 config.go包括model、max_tokens、temperature、top_k、top_p、min_p、n、min_length、max_length、repetition_penalty、frequency_penalty、presence_penalty、json、response_mime_type、reasoning、extra_body、price。其中值得注意的约束Validate()temperature范围 [0, 2]top_p范围 [0, 1]repetition_penalty范围 [0, 2]frequency_penalty/presence_penalty范围 [-2, 2]reasoning.max_tokens上限 32768配置了json: true会追加llms.WithJSONMode()要求模型输出 JSON。仓库还提供了一份完整的Ollama Cloud订阅配置样例 ollama-cloud.provider.yml展示了为 13 个 Agent 角色逐一挑选模型如 pentester 用deepseek-v4-pro、coder 用kimi-k2.7-code的做法并解释了为何刻意排除 Google/OpenAI 系模型安全对齐导致的误拒问题——对自建模型选型有直接参考价值。该文件还明确指出对原生 Ollama Providerreasoning:字段是无效配置langchaingo 的 llms/ollama 客户端不读取 reasoning 参数仅被动解析响应文本中的thinking标签因此文件整体省略了该字段。九、定价Ollama 提供免费的本地推理——无使用成本、无 API 限额。这一点在数据层有明确体现loadAvailableModelsFromServer将模型Price置为 nilGetPriceInfo对 Ollama 返回空价格信息对应测试 TestOllamaProviderPricing因此 PentAGI 的计费统计对 Ollama 场景显示为零成本。十、示例启动 PentAGI 使用 Ollama# 设置环境变量 export OLLAMA_SERVER_URLhttp://localhost:11434 # 启动 PentAGIOllama Provider 自动注册 ./pentagi更完整的实战组合本地推理 自动补齐模型export OLLAMA_SERVER_URLhttp://localhost:11434 export OLLAMA_SERVER_MODELllama3.1:8b-instruct-q8_0 export OLLAMA_SERVER_PULL_MODELS_ENABLEDtrue export OLLAMA_SERVER_PULL_MODELS_TIMEOUT900 export OLLAMA_SERVER_LOAD_MODELS_ENABLEDtrue ./pentagi启动过程可用 ollama_test.go 中的TestNew作为行为参照默认配置必须成功构建出全部 Agent 类型的参数选项、Provider 类型必须为ollama、Model()必须能返回非空模型名且GetUsage能从PromptTokens/CompletionTokens字段正确统计输入输出 tokenconfig.go。十一、故障排查连接错误确保 Ollama 服务器已启动且地址可达默认http://localhost:11434。注意New()会先创建 API 客户端再创建 LLM 客户端任何一步失败都会导致 Provider 初始化失败。模型未找到先执行ollama pull model-name拉取模型或启用OLLAMA_SERVER_PULL_MODELS_ENABLEDtrue让 PentAGI 自动补齐。注意自动拉取使用client.Show()快速路径判断模型是否已存在探测本身也有 10 秒超时约束。性能问题使用更小的模型以获得更快的推理速度或升级硬件。内存问题运行大模型时密切监控系统内存占用。十二、小结Ollama Provider 是 PentAGI 中部署成本最低、接入最简单的推理通道一个OLLAMA_SERVER_URL即可完成注册配合OLLAMA_SERVER_PULL_MODELS_ENABLED与OLLAMA_SERVER_LOAD_MODELS_ENABLED两个开关即可在快速静态配置与动态自动发现两种模式间切换再通过OLLAMA_SERVER_CONFIG_PATH指向 YAML 文件即可对 13 种 Agent 角色做精细化参数调优。无论你是想在渗透测试流程里跑通端到端实验还是为内网环境构建完全离线的 Agent 系统本文涉及的配置项与源码调用链都能帮你快速定位到正确的组合方式。相关参考文件Provider 实现backend/pkg/providers/ollama/ollama.go内置默认配置backend/pkg/providers/ollama/config.yml单元测试backend/pkg/providers/ollama/ollama_test.go环境变量定义backend/pkg/config/config.go通用配置解析与校验backend/pkg/providers/pconfig/config.goProvider 注册表backend/pkg/providers/registry.goOllama Cloud 配置样例examples/configs/ollama-cloud.provider.yml【免费下载链接】pentagiFully autonomous AI Agents system capable of performing complex penetration testing tasks项目地址: https://gitcode.com/GitHub_Trending/pe/pentagi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考