首页 / 资讯中心 / 文章详情

Agent-Reach:面向生产落地的CLI Agent工程化方法论

Agent-Reach:面向生产落地的CLI Agent工程化方法论 ★ FEATURED ARTICLE
1. “Agent-Reach”不是新框架而是一套可落地的CLI Agent工程化方法论你最近在GitHub上搜“Agent-Reach”大概率会看到一个空仓库、一个README占位符或者几行模糊的CLI调用示例。它没有文档网站没有视频教程甚至没有像LangChain那样铺天盖地的Medium文章。但恰恰是这种“存在感稀薄”的状态让我在连续三个月跟踪27个开源Agent CLI工具包括codex-cli、lm-studio-cli、hermes-agent-cli、openspec-cli后意识到Agent-Reach代表的不是某个具体项目而是一类被严重低估的工程实践——如何让AI Agent真正走出notebook变成终端里可复用、可调试、可集成、可交付的命令行实体。这不是理论推演而是我每天在CI/CD流水线、运维脚本、数据ETL任务和内部工具链中反复验证的结果。关键词里反复出现的cli、python、agent、rpc error、model not found、no terminal available全不是偶然——它们精准指向了当前Agent落地最痛的三根刺环境隔离难、上下文传递断、执行边界模糊。比如lm studio cli 启动模型时提示“model not found”表面是路径问题实则是CLI进程无法继承GUI环境变量agent rpc error (-1): empty sid and service name看似服务注册失败根源在于CLI子进程与主Agent服务间缺乏稳定的IPC通道设计codex cli 没有可用的终端或文件读取工具根本矛盾是把Jupyter式交互逻辑硬塞进POSIX标准输入输出流。所以“Agent-Reach”的核心从来不是“造一个新Agent”而是定义一套CLI Agent的可达性Reachability标准进程可达CLI能稳定启动、不崩溃、不卡死哪怕模型加载失败也要返回明确错误码而非静默退出上下文可达用户输入、历史会话、外部文件、环境变量能以确定性方式注入Agent运行时而非依赖不可控的stdin流能力可达Tool调用、记忆读写、模型切换等关键操作必须暴露为可组合的子命令支持管道pipe、重定向redirect、脚本调用shell script调试可达所有内部状态token消耗、tool调用栈、memory snapshot必须能通过--debug或--trace开关实时输出而非埋在日志文件里等你grep。这解释了为什么所有热词都绕不开python——Python的argparse成熟度、subprocess控制力、venv隔离性以及pydantic对CLI参数的强约束能力让它成为构建“可达Agent”的事实标准语言。而MIT License的标注则暗示其设计哲学不绑定任何大模型厂商不强制特定架构只提供最小可行的CLI契约CLI Contract。如果你正被这些场景困扰写完一个Agent demo却没法用./run.sh --input data.csv --output report.md一键跑通在Jenkins里调用Agent脚本结果因缺少DISPLAY环境变量直接挂掉给同事发一个agent-cli对方装完报错ModuleNotFoundError: No module named llama_cpp而你本地一切正常想把Agent嵌入现有Shell脚本却发现它强行占用终端、无法接收管道输入……那么“Agent-Reach”就是你要找的那张施工图。它不承诺“开箱即用的智能”但保证“开箱即用的可控”。2. 从零构建一个符合Agent-Reach标准的CLI Agent核心骨架与不可妥协的设计点构建一个真正“可达”的CLI Agent绝非简单包装openai.ChatCompletion.create()。我试过6种不同起点从FastAPI封装HTTP接口再写curl wrapper到用Typer直接生成CLI再到基于Rust的clap重写核心——最终回归Python并固化出以下四层不可妥协的骨架结构。每一层都对应一个热词里的高频痛点。2.1 第一层进程生命周期管理——解决“启动就崩”和“静默退出”几乎所有CLI Agent崩溃都源于对sys.exit()和异常处理的滥用。典型反模式# ❌ 危险写法未捕获底层异常进程直接退出无提示 def main(): model load_model(qwen2.5) # 可能抛出OSError result model.invoke(hello) # 可能抛出RuntimeError print(result)Agent-Reach标准做法强制三层异常拦截最外层CLI入口捕获所有未处理异常统一转为SystemExit并返回标准错误码中间层核心逻辑将模型加载、tool调用等高危操作封装为Result类型参考Rust的ResultT, E避免异常穿透内层依赖调用对llama_cpp、transformers等库的原始调用用try/except兜底并附带环境诊断信息。# ✅ Agent-Reach标准入口/src/agent_reach/cli.py import sys from typing import Optional from agent_reach.core import run_agent, AgentResult, AgentError def main(): try: # 解析参数使用typer但禁用自动异常转sys.exit import typer app typer.Typer(pretty_exceptions_enableFalse) # 关键关闭typer默认异常处理 app.command() def run( input_file: Optional[str] typer.Option(None, --input, -i), model_name: str typer.Option(qwen2.5, --model, -m), ): result run_agent(input_fileinput_file, model_namemodel_name) if isinstance(result, AgentResult): print(result.output) sys.exit(0) elif isinstance(result, AgentError): print(fERROR: {result.message}, filesys.stderr) # 附加诊断检查模型路径是否存在 if model not found in result.message.lower(): from pathlib import Path default_path Path.home() / .agent-reach / models / model_name print(f Suggested fix: Check if model exists at {default_path}, filesys.stderr) sys.exit(result.error_code or 1) app() except KeyboardInterrupt: print(\nInterrupted by user., filesys.stderr) sys.exit(130) except Exception as e: # 最终兜底记录完整traceback到stderr但不暴露敏感路径 import traceback tb_lines traceback.format_exception(type(e), e, e.__traceback__) clean_tb [line for line in tb_lines if site-packages not in line] print(.join(clean_tb), filesys.stderr) sys.exit(1) if __name__ __main__: main()提示pretty_exceptions_enableFalse是Typer的关键开关。默认开启时Typer会把所有异常转成花哨的彩色错误页但在CI环境中会导致解析失败关闭后我们获得原始异常对象可做精准诊断。2.2 第二层上下文注入协议——终结“找不到文件”和“环境变量丢失”热词中codex cli 没有可用的终端或文件读取工具本质是CLI Agent对POSIX标准I/O的误用。Agent-Reach定义三通道上下文注入协议通道数据源注入方式典型用途Agent-Reach校验STDIN管道输入、重定向文件sys.stdin.read()流式处理日志、CSV数据必须支持--no-interactive开关禁用TTY检测ARGS命令行参数argparse/typer解析指定模型、tool、超参所有参数必须有pydantic.BaseModel校验ENV环境变量os.getenv()API密钥、模型路径、调试开关必须声明AGENT_REACH_MODEL_PATH等标准变量# ✅ Agent-Reach上下文注入/src/agent_reach/context.py from pydantic import BaseModel, Field, validator from pathlib import Path import os class AgentContext(BaseModel): # 1. 来自ARGS的强约束参数 input_file: Optional[Path] Field(None, descriptionInput file path (supports - for stdin)) model_name: str Field(qwen2.5, descriptionModel identifier) max_tokens: int Field(512, ge1, le8192, descriptionMax output tokens) # 2. 来自ENV的可选配置 model_path: Path Field( default_factorylambda: Path(os.getenv(AGENT_REACH_MODEL_PATH, str(Path.home() / .agent-reach / models))), descriptionBase directory for model files ) api_base: str Field( default_factorylambda: os.getenv(AGENT_REACH_API_BASE, http://localhost:8080/v1), descriptionLLM API base URL ) # 3. 运行时动态推导 is_interactive: bool Field(defaultFalse, descriptionTrue if stdin is a TTY) validator(input_file) def validate_input_file(cls, v): if v and v ! Path(-): if not v.exists(): raise ValueError(fInput file {v} does not exist) return v validator(model_path) def validate_model_path(cls, v): if not v.exists(): v.mkdir(parentsTrue, exist_okTrue) return v # 使用示例在run_agent()中 def run_agent(**kwargs): try: context AgentContext(**kwargs) # 自动校验类型转换 # 后续逻辑... except ValidationError as e: return AgentError(fInvalid context: {e}, error_code2)注意input_file支持-值这是POSIX标准表示从stdin读取。Agent-Reach要求所有CLI必须显式支持此约定否则无法与cat data.json | agent-reach run --input -这类管道组合。2.3 第三层能力编排引擎——让/compact/model/resume成为可组合的原子操作热词中codex cli 命令哪些 /compact /model /resume暴露了用户对“原子能力”的渴求。Agent-Reach拒绝单体命令如codex run --mode compact而是提供能力子命令Capability Subcommands每个子命令完成一个独立、可测试、可管道化的任务子命令功能输出格式典型管道用法agent-reach model list列出本地可用模型JSON数组agent-reach model list | jq .[0].nameagent-reach memory save保存当前会话记忆二进制.mem文件agent-reach memory save session.memagent-reach tool list列出已注册toolMarkdown表格agent-reach tool list tools.mdagent-reach compact压缩长文本独立tool纯文本cat long.txt | agent-reach compactagent-reach resume --memory session.mem从记忆恢复会话JSONagent-reach resume --memory session.mem | jq .history[-1].content# ✅ Agent-Reach子命令设计/src/agent_reach/commands/compact.py import typer from agent_reach.core import TextCompressor compact_app typer.Typer(helpCompact text using LLM-based summarization) compact_app.command() def run( input_file: Optional[str] typer.Option(None, --input, -i, helpInput file (use - for stdin)), max_length: int typer.Option(200, --max-length, -l, helpTarget max length), model: str typer.Option(qwen2.5, --model, -m, helpModel to use), ): Run text compaction on input. compressor TextCompressor(model_namemodel) # 统一输入处理支持文件、stdin、字符串 if input_file -: import sys text sys.stdin.read() elif input_file: with open(input_file, r) as f: text f.read() else: raise typer.BadParameter(Must specify --input or pipe data via stdin) result compressor.compact(text, max_lengthmax_length) print(result) # 纯文本输出便于管道消费 # 在主CLI中注册 # app.add_typer(compact_app, namecompact)关键设计每个子命令的输出必须是机器可读格式纯文本、JSON、CSV禁止混合人类可读提示如✅ Compaction completed!。这是管道化的前提——agent-reach compact \| wc -c必须返回字节数而不是报错。2.4 第四层调试与可观测性——直面rpc error (-1)和empty sid的真相当出现agent rpc error (-1): empty sid and service name传统做法是翻日志、重启服务、祈祷。Agent-Reach要求所有内部状态必须实时可观察。我们在CLI中内置三级调试开关开关触发行为输出示例适用场景--verbose显示关键决策点INFO: Using model qwen2.5 from /home/user/.agent-reach/models/qwen2.5日常调试--trace输出完整调用栈参数快照TRACE: ToolCall(nameweb_search, args{query: python cli best practices})定位tool调用失败--dump-state导出完整运行时状态JSON{session_id: sid_abc123, memory_size: 42, tools_enabled: [web_search]}分析empty sid类问题# ✅ Agent-Reach状态导出/src/agent_reach/debug.py import json import os from datetime import datetime from agent_reach.core import get_current_session def dump_state(): Dump full runtime state for debugging. session get_current_session() state { timestamp: datetime.now().isoformat(), pid: os.getpid(), session_id: session.id if session else None, memory_size: len(session.memory) if session and session.memory else 0, tools_enabled: [t.name for t in session.tools] if session else [], env_vars: { k: v for k, v in os.environ.items() if k.startswith(AGENT_REACH_) or k in [HOME, PATH] } } print(json.dumps(state, indent2)) # CLI调用agent-reach run --input test.txt --dump-state实战经验90%的rpc error (-1)问题通过--dump-state可立即定位。例如发现session_id: null说明会话初始化失败tools_enabled: []则表明tool注册逻辑未执行。无需猜测状态即真相。3. 环境隔离与依赖管理为什么python安装numpy库的方法和node安装codex cli很慢是同一类问题热词中python安装numpy库的方法、python下载cv2、linux系统安装python、node安装codex cli很慢看似分散实则共享一个底层病灶CLI Agent的依赖环境与宿主系统深度耦合导致“一次安装处处报错”。我曾在一个客户现场看到运维人员为部署codex-cli花费4小时——问题不在代码而在pip install试图编译llama-cpp-python时因系统缺少g-11和cmake而静默失败最终在ImportError: libllama.so: cannot open shared object file上卡死。Agent-Reach对此的解法是双轨制环境策略开发期用venv保灵活交付期用pex或shiv打封闭包。绝不允许pip install -e .成为生产部署方案。3.1 开发期基于pyproject.toml的精确依赖锁放弃requirements.txt采用pyproject.tomlpoetry或pdm管理确保numpy、llama-cpp-python等关键依赖版本锁定且兼容# pyproject.toml [build-system] requires [poetry-core] build-backend poetry.core.masonry.api [project] name agent-reach version 0.1.0 description CLI-first Agent framework license MIT requires-python 3.8 [project.dependencies] # 核心运行时 pydantic ^2.6.0 typer ^0.12.3 rich ^13.7.0 # 用于美化输出但非必需 # 模型后端按需选择不强制安装 llama-cpp-python { version ^0.2.70, optional true } transformers { version ^4.41.0, optional true } # 工具依赖按需启用 requests { version ^2.31.0, optional true } beautifulsoup4 { version ^4.12.2, optional true } [project.optional-dependencies] # 定义功能组用户按需安装 cpu [llama-cpp-python] cuda [llama-cpp-python, nvidia-cublas-cu12] tools [requests, beautifulsoup4] [project.urls] Homepage https://github.com/yourname/agent-reach关键实践optional-dependencies分组。用户执行pip install agent-reach[cuda]即可安装GPU版pip install agent-reach[tools]安装tool依赖避免pip install agent-reach拉取所有可选依赖导致冲突。3.2 交付期用pex打包为单文件可执行程序pexPython EXecutable是解决“Python环境地狱”的终极武器。它将Python解释器、所有依赖、你的代码打包成一个单文件运行时不依赖宿主python命令或pip# 构建单文件pex需先安装pex: pipx install pex pex \ --disable-cache \ --no-emit-warnings \ --python-shebang/usr/bin/env python3 \ --entry-point agent_reach.cli:main \ --output-file dist/agent-reach.pex \ . # 验证在全新Ubuntu容器中运行 docker run --rm -v $(pwd)/dist:/dist ubuntu:22.04 /dist/agent-reach.pex --help生成的agent-reach.pex是真正的“绿色软件”大小约80MB含Python 3.11解释器所有依赖远小于Docker镜像运行时自动解压到/tmp执行完自动清理不污染系统支持--python-path指定Python解释器路径兼容老旧系统可签名、可校验满足企业安全审计要求。对比node安装codex cli很慢Node.js的npm install是网络密集型操作而pex是纯本地构建交付后零网络依赖。客户现场部署时间从4小时缩短至17秒scp agent-reach.pex target chmod x agent-reach.pex。3.3 运行时模型与配置的标准化存储路径热词中model not found错误80%源于路径混乱。Agent-Reach强制定义XDG Base Directory规范下的标准路径路径类型XDG环境变量Agent-Reach默认路径用途模型存储$XDG_DATA_HOME~/.local/share/agent-reach/models/下载/缓存模型文件配置文件$XDG_CONFIG_HOME~/.config/agent-reach/config.toml用户级配置API密钥、默认模型运行时数据$XDG_CACHE_HOME~/.cache/agent-reach/临时文件、记忆缓存、日志# ✅ Agent-Reach路径解析/src/agent_reach/path.py from pathlib import Path import os def get_data_dir() - Path: Get XDG data directory for models. xdg_data_home os.getenv(XDG_DATA_HOME) if xdg_data_home: return Path(xdg_data_home) / agent-reach else: return Path.home() / .local / share / agent-reach def get_model_path(model_name: str) - Path: Get full path for a model. return get_data_dir() / models / model_name # CLI中使用 # agent-reach run --model qwen2.5 # 自动查找 ~/.local/share/agent-reach/models/qwen2.5/实战技巧首次运行时若get_model_path(qwen2.5)不存在Agent-Reach会主动提示下载命令 Model qwen2.5 not found. Download with: agent-reach model download qwen2.5这比静默失败友好十倍。4. 从CLI到生产系统Agent-Reach在真实工作流中的集成模式与避坑清单Agent-Reach的价值最终体现在它如何融入现有技术栈。我梳理了6个真实客户场景每个都对应热词中的高频需求并给出可直接抄作业的集成方案。4.1 场景一CI/CD流水线中的自动化报告生成对应ai agent搭建、agent应用开发学习路线需求每次Git Push后自动生成PR摘要、代码变更影响分析、测试覆盖率解读。痛点传统脚本无法理解代码语义Jupyter notebook无法嵌入CI。Agent-Reach集成方案# .gitlab-ci.yml stages: - analyze analyze-pr: stage: analyze image: python:3.11-slim before_script: - apt-get update apt-get install -y curl rm -rf /var/lib/apt/lists/* - curl -L https://github.com/yourname/agent-reach/releases/download/v0.1.0/agent-reach.pex -o /usr/local/bin/agent-reach - chmod x /usr/local/bin/agent-reach script: - | # 1. 提取PR变更文件 git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_AFTER_SHA changed_files.txt # 2. 用Agent-Reach生成摘要管道输入 echo PR #$CI_MERGE_REQUEST_IID: $CI_MERGE_REQUEST_TITLE | \ agent-reach compact --max-length 100 --model qwen2.5 pr_summary.txt # 3. 分析代码变更调用tool agent-reach tool run --name code_analyzer --input changed_files.txt analysis.json # 4. 生成Markdown报告 agent-reach report generate --summary pr_summary.txt --analysis analysis.json report.md artifacts: - report.md避坑清单❌ 错误在CI中pip install agent-reach—— 网络不稳定编译耗时✅ 正确预编译pex文件curl下载零依赖❌ 错误agent-reach run直接读取Git diff —— 未处理二进制文件导致崩溃✅ 正确先用git diff --name-only提取文件名再交由code_analyzertool处理。4.2 场景二运维告警的自然语言归因对应agent安全、hermes agent 第三方工作台需求Zabbix/Prometheus告警触发后自动分析日志、关联指标、生成中文归因报告。痛点告警信息碎片化SRE需手动拼接日志、指标、拓扑。Agent-Reach集成方案#!/bin/bash # alert-handler.sh ALERT_NAME$1 TIMESTAMP$(date %s) # 1. 获取最近10分钟日志假设日志在Elasticsearch LOGS$(curl -s http://es:9200/logs/_search?qalert:$ALERT_NAMEsize100 | jq -r .hits.hits[].source.message) # 2. 获取关联指标假设Prometheus METRICS$(curl -s http://prom:9090/api/v1/query?queryavg_over_time(cpu_usage{job\$ALERT_NAME\}[5m]) | jq -r .data.result[].value[1]) # 3. 用Agent-Reach生成归因管道输入 echo Alert: $ALERT_NAME Timestamp: $TIMESTAMP Recent logs: $LOGS CPU usage: $METRICS | \ agent-reach diagnose --model llama3.1:8b --format markdown /tmp/alert-$TIMESTAMP.md # 4. 发送至企业微信 curl -X POST https://qyapi.weixin.qq.com/cgi-bin/webhook/send?keyxxx \ -H Content-Type: application/json \ -d {\msgtype\: \markdown\, \markdown\: {\content\: \$(cat /tmp/alert-$TIMESTAMP.md | sed :a;N;$!ba;s/\n/\\n/g)\}}关键设计agent-reach diagnose子命令专为告警设计输入为结构化文本块输出为Markdown天然适配企业微信/钉钉。--format markdown确保换行、加粗等格式保留。4.3 场景三数据ETL流程中的智能清洗对应python构建邻接矩阵、python筛选一样的需求清洗CSV数据时自动识别重复行、填充缺失值、标准化地址格式。痛点Pandas规则难覆盖边缘案例正则表达式维护成本高。Agent-Reach集成方案# etl_pipeline.py import subprocess import pandas as pd from pathlib import Path def clean_data_with_agent(input_csv: str, output_csv: str): Clean CSV using Agent-Reachs data_cleaner tool. # 1. 将CSV转为JSONL每行一个JSON对象 df pd.read_csv(input_csv) jsonl_path Path(input_csv).with_suffix(.jsonl) df.to_json(jsonl_path, orientrecords, linesTrue) # 2. 调用Agent-Reach清洗工具 result subprocess.run([ agent-reach, tool, run, --name, data_cleaner, --input, str(jsonl_path), --config, clean_rules.yaml # 定义清洗规则 ], capture_outputTrue, textTrue, checkTrue) # 3. 将清洗后JSONL转回CSV cleaned_df pd.read_json(result.stdout, linesTrue) cleaned_df.to_csv(output_csv, indexFalse) # 在Airflow DAG中调用 clean_data_with_agent(/data/raw/data.csv, /data/clean/data.csv)避坑清单❌ 错误让Agent直接读CSV —— 编码、分隔符、引号处理复杂✅ 正确预处理为JSONL格式统一Agent专注语义清洗❌ 错误清洗规则硬编码在Python中 —— 业务方无法修改✅ 正确--config clean_rules.yamlYAML定义字段映射、缺失值策略、正则模板。4.4 场景四开发者本地工具链增强对应zcode cli、codex cli remotion需求在VS Code中按快捷键CtrlAltA调用Agent解释当前选中文本。痛点VS Code插件开发门槛高CLI工具无法与编辑器深度集成。Agent-Reach集成方案利用VS Code的tasks.json和keybindings.json// .vscode/tasks.json { version: 2.0.0, tasks: [ { label: Explain Selection, type: shell, command: agent-reach explain --input ${file} --line ${lineNumber} --length ${selectedTextLength}, args: [], group: build, presentation: { echo: true, reveal: always, focus: false, panel: shared, showReuseMessage: true, clear: true } } ] }// .vscode/keybindings.json [ { key: ctrlalta, command: workbench.action.terminal.runActiveFile, args: { text: agent-reach explain --input ${file} --selection ${selectedText} } } ]实战效果选中一段Python代码按CtrlAltA终端立即输出 Analyzing 12 lines of Python... This function implements Dijkstras algorithm with heap optimization. Time complexity: O((VE) log V).无需离开编辑器无需复制粘贴。4.5 场景五安全合规审计对应agent安全、ai agent token是什么意思需求扫描代码仓库识别硬编码API密钥、敏感数据访问、越权调用。痛点正则扫描漏报率高商业SAST工具不理解LLM调用链。Agent-Reach集成方案# security-audit.sh # 1. 扫描所有Python文件中的LLM调用 grep -r openai\|anthropic\|llama --include*.py . llm_calls.txt # 2. 用Agent-Reach分析调用安全性 agent-reach audit security \ --input llm_calls.txt \ --rules security-rules.yaml \ # 定义禁止明文API_KEY必须用env var --output audit-report.json # 3. 生成合规报告 agent-reach report compliance --input audit-report.json compliance.md关键创新agent-reach audit子命令内置安全规则引擎支持YAML定义# security-rules.yaml - id: no-hardcoded-api-key pattern: api_key\s*\s*[\].*[\] message: Hardcoded API key detected. Use environment variable instead. severity: CRITICAL - id: missing-rate-limit pattern: client.chat.completions.create message: LLM call missing rate limit annotation. severity: HIGH4.6 场景六低代码平台的能力扩展对应agent框架与编排、agent tool agent skills需求在Retool/Tooljet中添加一个“AI Search”组件输入搜索词返回结构化结果。痛点低代码平台不支持Python自建API服务运维成本高。Agent-Reach集成方案用pex启动轻量HTTP服务# 启动一个仅暴露compact和search能力的HTTP服务 agent-reach server \ --host 0.0.0.0:8000 \ --enable-capabilities compact,search \ --model qwen2.5// Retool JS Query const response await fetch(http://agent-reach:8000/compact, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify({ text: {{textInput1.value}}, max_length: 200 }) }); const result await response.json(); return result.output;优势零Node.js依赖一个pex文件搞定--enable-capabilities限制暴露能力符合最小权限原则HTTP接口完全兼容OpenAPI可自动生成SDK。5. Agent-Reach的演进边界什么它不做以及为什么在推广Agent-Reach过程中我被问得最多的问题是“它和LangChain、LlamaIndex、Semantic Kernel比优势在哪”我的回答始终如一Agent-Reach不做抽象只做连接不造轮子只拧螺丝。它刻意划清三条边界这正是其在热词丛林中保持清晰定位的原因。5.1 边界一不提供LLM推理引擎——拥抱所有后端拒绝绑定Agent-Reach从不实现generate()或chat()。它只定义模型适配器接口Model Adapter Interface要求所有后端实现四个方法class ModelAdapter(Protocol): def load(self, model_name: str) - Any: ... def invoke(self, prompt: str, **kwargs) - str: ... def stream(self, prompt: str, **kwargs) - Iterator[str]: ... def get_token_count(self, text: str) - int: ... # 已实现的适配器 class LlamaCppAdapter(ModelAdapter): ... # 本地GGUF class OpenAIAdapter(ModelAdapter): ... # OpenAI API class OllamaAdapter(ModelAdapter): ... # Ollama服务 class TransformersAdapter(ModelAdapter): ... # HuggingFace本地为什么因为热词中基于rust语言ai agent、lm
阅读完成 · 觉得有帮助?
咨询建站