
在本地部署大模型进行工具调用时你是否遇到过这样的困境模型有时会“胡言乱语”生成不合规的JSON格式导致工具调用失败或者它自作主张地调用了不该调用的工具带来潜在的安全风险尤其是在离线环境下无法依赖云端API的校验和护栏这些问题变得更加棘手。今天要介绍的Forge正是为解决这些痛点而生。它是一个开源的“可靠性层”Reliability Layer专门为本地部署的大语言模型LLM提供稳定、安全的工具调用能力。简单来说Forge 就像给本地模型穿上了一件“防护服”确保它在使用工具如搜索、计算、操作文件等时行为可控、输出规范、过程可靠。本文将带你从零开始全面解析 Forge 的核心原理、部署方法、实战应用以及最佳实践。无论你是想在自己的项目中集成本地模型的工具调用能力还是希望提升现有Agent系统的稳定性这篇文章都能提供一套完整的闭环解决方案。我们将涵盖环境搭建、核心配置、代码示例、常见问题排查以及生产环境建议确保你能跟着步骤一步步实现。1. Forge 是什么为什么需要它在深入代码之前我们有必要厘清几个核心概念理解 Forge 解决的到底是什么问题。1.1 工具调用Tool Calling与本地模型的挑战工具调用是指大语言模型根据用户指令选择并调用外部工具如API、函数、数据库查询来完成特定任务的能力。例如用户问“北京今天天气如何”模型可以调用一个天气查询的API来获取答案。对于 OpenAI 的 GPT 系列等云端模型工具调用功能是内置的模型会输出结构化的 JSON 数据来指定要调用的工具和参数。然而当我们使用本地部署的开源模型如 Llama 3、Qwen、DeepSeek 等时情况就复杂了输出格式不稳定本地模型可能无法严格遵循工具调用的 JSON Schema输出格式错误、字段缺失或包含多余文本导致后续解析失败。工具选择不可控模型可能误解指令调用错误的工具或者在不需要时强行调用工具。缺乏安全护栏没有机制来验证工具调用的参数是否安全、合规例如防止执行危险的系统命令或访问敏感文件。错误处理机制薄弱当工具调用失败时缺乏标准的重试、回退或向用户反馈的流程。1.2 Forge 的核心价值可靠性层Forge 将自己定位为一个可靠性层。它不替代你的本地模型也不替代你的工具集而是在它们之间插入一个智能的中间件。这个中间件负责输出标准化引导并强制模型输出符合工具调用规范的 JSON。工具路由与验证根据模型输出的意图准确路由到对应的工具函数并预先验证参数的有效性。错误恢复与重试当调用失败时可以自动重试或采用备用方案。执行流程编排管理复杂的、多步骤的工具调用序列。你可以把 Forge 想象成一个经验丰富的“调度员”和“质检员”。模型工人提出“我想用扳手工具拧这个螺丝参数”Forge 会检查扳手是否合适、螺丝型号是否正确然后才把工具递过去并监督整个操作过程。1.3 与 LangChain/LLamaIndex 的区别你可能会问这和 LangChain 或 LLamaIndex 提供的工具调用功能有什么区别LangChain/LLamaIndex是功能强大的AI 应用开发框架。它们提供了构建 Agent、链Chain、工具集成的一整套高级抽象。工具调用是其中的一个组件但其设计更偏向于灵活性和功能性在针对“强制本地模型输出合规 JSON”这一特定问题的健壮性上可能需要开发者自己投入更多精力去构建提示词Prompt和解析逻辑。Forge是一个更专注、更底层的可靠性中间件。它的目标非常明确确保从模型到工具这个环节的输入输出是稳定可靠的。它更轻量可以直接与 LangChain 等框架结合使用作为其底层工具调用执行器的一个增强组件。简单说LangChain 帮你盖房子构建应用而 Forge 专门确保房子里的水管工具调用流程绝不漏水。2. 环境准备与安装接下来我们开始动手搭建 Forge 的环境。本文将以一个 Python 项目为例进行演示。2.1 基础环境要求操作系统Linux (Ubuntu 20.04)、macOS 或 Windows (WSL2 推荐)。Python版本 3.8 及以上。这是运行 Forge 和大多数本地模型客户端的必要条件。包管理工具pip或poetry。本文使用pip。本地模型服务你需要一个正在运行的本地大模型服务。常见选择有Ollama最流行的本地模型运行工具简单易用。LM Studio提供图形界面方便模型管理和对话。vLLM/TGI专注于高性能推理的服务端。其他兼容 OpenAI API 格式的本地服务。本文后续示例将基于 Ollama 进行因为它部署最简单且与 Forge 的兼容性良好。2.2 安装 Ollama 并运行模型首先安装并启动一个本地模型。安装 Ollama 访问 Ollama 官网 下载对应系统的安装包或使用命令行安装Linux/macOS。拉取并运行一个模型 我们选择一个在工具调用方面表现较好的中小型模型例如llama3.1:8b或qwen2.5:7b。# 拉取模型首次运行需要下载耗时较长 ollama pull llama3.1:8b # 在后台运行模型服务并指定其API端口默认11434 ollama run llama3.1:8b # 或者以后台服务方式运行具体可参考Ollama文档此时Ollama 会在http://localhost:11434提供一个兼容 OpenAI API 的端点。验证模型服务 你可以使用curl快速测试服务是否正常。curl http://localhost:11434/api/generate -d { model: llama3.1:8b, prompt: Hello, how are you?, stream: false }如果看到返回的 JSON 中包含模型生成的文本说明服务正常。2.3 安装 ForgeForge 通常通过 PyPI 安装。创建一个新的虚拟环境是良好的实践。# 创建并激活虚拟环境以 venv 为例 python -m venv forge-env source forge-env/bin/activate # Linux/macOS # forge-env\Scripts\activate # Windows # 安装 Forge pip install agent-forge # 注意包名可能是 agent-forge 或 forge-sdk请以官方文档为准 # 同时安装常用的客户端库 pip install openai httpx pydantic重要Forge 的 PyPI 包名可能需要根据其官方 GitHub 仓库确认。如果agent-forge不可用你可能需要直接从 GitHub 安装pip install githttps://github.com/username/forge-repo.git # 替换为实际的仓库地址安装完成后可以通过pip list | grep forge或python -c “import forge; print(forge.__version__)”来验证是否安装成功前提是模块名正确。3. Forge 核心概念与配置拆解Forge 围绕几个核心概念构建理解它们对后续使用至关重要。3.1 核心组件Agent代理代表一个能够执行任务调用工具的实体。在 Forge 中你通常需要定义一个 Agent并为其配置模型和工具。Model模型指背后的大语言模型。Forge 通过配置模型连接信息如基础URL、API Key来与你的本地模型服务通信。Tool工具一个可被调用的函数。每个工具需要明确定义其名称、描述、参数 Schema使用 JSON Schema 或 Pydantic 模型。这是 Forge 进行验证和路由的依据。Reliability Layer可靠性层这是 Forge 的核心逻辑它封装了与模型交互、解析输出、验证工具、执行调用、处理错误的整个流程。你通常通过配置Agent来启用和定制这一层的行为。3.2 配置文件与初始化Forge 的配置可以通过代码硬编码也可以使用配置文件如 YAML。我们推荐使用 YAML 文件进行配置便于管理和版本控制。创建一个名为forge_config.yaml的文件# forge_config.yaml agent: name: “local_agent” model: provider: “openai” # 使用 OpenAI 兼容的 API base_url: “http://localhost:11434/v1” # Ollama 的 OpenAI 兼容端点 model: “llama3.1:8b” # 指定 Ollama 中运行的模型名称 api_key: “ollama” # Ollama 不需要真正的 key但某些客户端要求非空填 “ollama” 即可 tools: - name: “get_weather” description: “Get the current weather for a given city.” # 参数 schema 将在代码中通过 Pydantic 定义这里可以留空或写引用 - name: “calculator” description: “Perform a basic arithmetic calculation.” reliability: max_retries: 2 # 工具调用失败最大重试次数 strict_validation: true # 是否严格验证模型输出格式 default_fallback: “Sorry, I couldn‘t complete that request with the available tools.” # 降级响应这个配置文件定义了一个名为local_agent的代理它连接本地 Ollama 服务并声明了两个工具具体实现稍后添加。3.3 工具定义详解工具是 Forge 工作的关键。每个工具必须精确定义。以下是使用 Pydantic 定义上述两个工具的示例代码# tools.py from pydantic import BaseModel, Field from typing import Optional import requests import math # 1. 定义工具的参数 Schema class GetWeatherInput(BaseModel): city: str Field(description“The name of the city to get weather for.”) country_code: Optional[str] Field(default“CN”, description“The country code (e.g., US, CN).”) class CalculatorInput(BaseModel): expression: str Field(description“A mathematical expression, e.g., ‘3 5 * 2‘.”) # 2. 实现工具函数本身 def get_weather(city: str, country_code: str “CN”) - str: “”“模拟获取天气真实场景应调用如 OpenWeatherMap 的 API。”“” # 警告此处为模拟。实际应用请使用真正的API并处理错误。 print(f“[Tool Call] Getting weather for {city}, {country_code}”) # 模拟 API 调用延迟和响应 weather_map { (“beijing”, “CN”): “Sunny, 25°C”, (“shanghai”, “CN”): “Cloudy, 22°C”, (“new york”, “US”): “Rainy, 18°C”, } key (city.lower(), country_code.upper()) return weather_map.get(key, “Weather information currently unavailable.”) def calculator(expression: str) - str: “”“安全地计算数学表达式。”“” print(f“[Tool Call] Calculating: {expression}”) # 安全警告直接使用 eval 极其危险这里仅作演示。 # 生产环境必须使用安全的评估库如 asteval并严格限制可用操作。 try: # 这是一个极不安全的示例仅用于演示流程。 # 绝对不要在真实项目中这样使用 result eval(expression, {“__builtins__”: None}, {“math”: math}) return f“The result of {expression} is {result}.” except Exception as e: return f“Error calculating expression ‘{expression}‘: {e}” # 3. 创建 Forge 可识别的工具列表 # 注意Forge 的具体 API 可能要求将函数和 Schema 打包成特定格式。 # 以下是一种常见的封装方式假设 Forge 接受一个字典列表 weather_tool { “name”: “get_weather”, “description”: GetWeatherInput.__doc__, “parameters_schema”: GetWeatherInput.schema(), “function”: get_weather } calc_tool { “name”: “calculator”, “description”: CalculatorInput.__doc__, “parameters_schema”: CalculatorInput.schema(), “function”: calculator } TOOLS [weather_tool, calc_tool]安全提醒上面的calculator函数使用了极不安全的eval()这仅用于演示工具调用流程。在实际项目中你必须使用安全的数学表达式解析库如asteval、numexpr或完全避免执行用户提供的字符串以防止代码注入攻击。4. 完整实战构建一个带 Forge 的本地模型 Agent现在我们将把配置、工具和模型连接起来创建一个完整的、可运行的 Agent。4.1 项目结构创建一个简单的项目文件夹结构如下local_forge_agent/ ├── forge_config.yaml # 配置文件 ├── tools.py # 工具定义 ├── agent.py # 主 Agent 逻辑 └── requirements.txt # 依赖列表requirements.txt内容agent-forge0.1.0 # 假设版本 openai1.0.0 httpx pydantic2.0.0 pyyaml # 用于读取 YAML 配置4.2 编写 Agent 主逻辑在agent.py中我们将初始化 Forge Agent加载工具并处理用户查询。# agent.py import yaml import asyncio from typing import List, Dict, Any # 假设 Forge 提供类似以下的客户端类具体类名需查文档 # from forge import Agent, OpenAIModelAdapter, ToolRegistry # 由于 Forge API 可能变化以下代码为示意流程重点在于展示模式。 from tools import TOOLS class LocalForgeAgent: def __init__(self, config_path: str “forge_config.yaml”): with open(config_path, ‘r’) as f: self.config yaml.safe_load(f) # 1. 初始化模型适配器 (连接到 Ollama) # 这里需要根据 Forge 实际 SDK 调整 self.model_adapter self._create_model_adapter() # 2. 注册工具 self.tool_registry self._create_tool_registry(TOOLS) # 3. 创建 Agent 核心注入可靠性层配置 self.agent self._create_agent() def _create_model_adapter(self): “”“创建与本地模型服务的连接。”“” model_config self.config[‘agent’][‘model’] # 示例使用 OpenAI 兼容的客户端 from openai import OpenAI client OpenAI( base_urlmodel_config[‘base_url’], api_keymodel_config.get(‘api_key’, ‘dummy-key’), ) # 需要将 client 包装成 Forge 需要的适配器格式 # 假设 Forge 有一个 OpenAIModelAdapter 类 # return OpenAIModelAdapter(clientclient, model_namemodel_config[‘model’]) # 由于 Forge 具体实现未知此处返回 client 供后续模拟 return client def _create_tool_registry(self, tools: List[Dict[str, Any]]): “”“将工具函数和 schema 注册到 Forge 的工具中心。”“” # 假设 Forge 有 ToolRegistry # registry ToolRegistry() # for tool in tools: # registry.register( # nametool[‘name’], # functool[‘function’], # schematool[‘parameters_schema’] # ) # return registry # 此处简化直接返回工具列表 return {tool[‘name’]: tool for tool in tools} def _create_agent(self): “”“使用模型适配器和工具注册表创建 Agent 实例。”“” reliability_config self.config[‘agent’].get(‘reliability’, {}) # 假设 Agent 类的初始化方式 # return Agent( # model_adapterself.model_adapter, # tool_registryself.tool_registry, # max_retriesreliability_config.get(‘max_retries’, 1), # strict_modereliability_config.get(‘strict_validation’, True), # ) # 由于无法确定真实类我们创建一个模拟的代理对象来演示流程 class MockAgent: def __init__(self, model_client, tools, config): self.model_client model_client self.tools tools self.config config async def run(self, query: str) - str: # 这里是 Forge 可靠性层魔法发生的地方 # 1. Forge 会构造一个包含工具描述的增强 Prompt 发给模型 # 2. 模型返回期望是一个结构化的工具调用请求 # 3. Forge 解析、验证该请求 # 4. 如果验证通过执行对应的工具函数 # 5. 将工具结果返回给模型让其生成最终回答或继续调用工具 # 6. 返回最终结果给用户 print(f“[Agent] Processing query: ‘{query}‘”) # 模拟 Forge 与模型交互的核心步骤 tool_descriptions self._build_tool_descriptions() prompt self._build_prompt(query, tool_descriptions) # 调用本地模型 response self.model_client.chat.completions.create( modelself.config[‘agent’][‘model’][‘model’], messages[{“role”: “user”, “content”: prompt}], temperature0.1, # 低温度使输出更确定 # 关键要求模型以特定 JSON 格式回复这是 Forge 引导模型的核心 response_format{“type”: “json_object”}, # 如果模型支持 ) model_raw_output response.choices[0].message.content print(f“[Model Raw Output]: {model_raw_output}”) # 模拟 Forge 的解析和验证 tool_call self._parse_and_validate_output(model_raw_output) if tool_call: result self._execute_tool(tool_call) final_answer f“I used the ‘{tool_call[“name”]}’ tool. Result: {result}” else: final_answer self.config.get(‘default_fallback’, ‘I cannot help with that using my current tools.’) return final_answer def _build_tool_descriptions(self): desc [] for name, tool in self.tools.items(): desc.append(f“- {name}: {tool[‘description’]}. Parameters: {tool[‘parameters_schema’]}”) return “\n”.join(desc) def _build_prompt(self, query, tool_desc): # 这是一个简化的提示词模板。真实的 Forge 会有更复杂、优化的模板。 return f“““ You are a helpful assistant with access to the following tools: {tool_desc} When the user asks something that requires using a tool, you MUST respond with a JSON object in the following format: {{ “tool”: “tool_name”, “parameters”: {{ “param1”: “value1”, “param2”: “value2” }} }} If the user‘s request does not require a tool, or no suitable tool exists, respond with a JSON object: {{“tool”: null, “reason”: “...”}}. User Query: {query} “““ def _parse_and_validate_output(self, output: str): import json try: data json.loads(output) if data.get(“tool”) is None: return None tool_name data[“tool”] if tool_name not in self.tools: print(f“[Validation Error] Unknown tool: {tool_name}”) return None # 这里应使用 Pydantic 或 JSON Schema 严格验证 parameters # 简化处理 return {“name”: tool_name, “parameters”: data.get(“parameters”, {})} except json.JSONDecodeError as e: print(f“[Validation Error] Invalid JSON: {e}. Output was: {output}”) return None def _execute_tool(self, tool_call: dict): tool_name tool_call[“name”] params tool_call[“parameters”] tool_info self.tools[tool_name] func tool_info[‘function’] # 将参数字典解包传递给函数 return func(**params) return MockAgent(self.model_adapter, self.tool_registry, self.config) async def query(self, user_input: str) - str: “”“主查询接口。”“” return await self.agent.run(user_input) # 异步主函数 async def main(): agent LocalForgeAgent() test_queries [ “What‘s the weather like in Beijing?”, “Calculate 15 divided by 3 plus 7.”, “Tell me a joke.” # 这个请求应该不会触发工具调用 ] for q in test_queries: print(f“\n User: {q} ”) answer await agent.query(q) print(f“Agent: {answer}”) if __name__ “__main__”: asyncio.run(main())4.3 运行与验证确保 Ollama 服务正在运行ollama run llama3.1:8b。在项目目录下安装依赖pip install -r requirements.txt。运行 Agentpython agent.py。预期输出示例 User: What‘s the weather like in Beijing? [Agent] Processing query: ‘What‘s the weather like in Beijing?‘ [Model Raw Output]: {“tool”: “get_weather”, “parameters”: {“city”: “Beijing”}} [Tool Call] Getting weather for Beijing, CN Agent: I used the ‘get_weather’ tool. Result: Sunny, 25°C User: Calculate 15 divided by 3 plus 7. [Agent] Processing query: ‘Calculate 15 divided by 3 plus 7.‘ [Model Raw Output]: {“tool”: “calculator”, “parameters”: {“expression”: “15 / 3 7”}} [Tool Call] Calculating: 15 / 3 7 Agent: I used the ‘calculator’ tool. Result: The result of 15 / 3 7 is 12.0. User: Tell me a joke. [Agent] Processing query: ‘Tell me a joke.‘ [Model Raw Output]: {“tool”: null, “reason”: “This is a general conversation request, no tool needed.”} Agent: I cannot help with that using my current tools.这个示例展示了 Forge 的核心工作流程引导模型输出结构化 JSON、验证工具名称和参数、安全执行工具、并整合结果。虽然我们用了模拟的MockAgent但真实 Forge 库的内部逻辑与此高度相似只是更加健壮和完整。4.4 结果说明通过这个实战我们成功实现了一个基于本地模型Llama 3.1 via Ollama的 Agent并利用 Forge 的设计模式为其加上了“可靠性层”。你可以看到模型输出被规范化即使本地模型有时会输出不规则文本在强提示词和response_format的约束下它更倾向于输出我们想要的 JSON。工具路由准确Agent 能正确地将“北京天气”路由到get_weather工具将计算问题路由到calculator。安全性初步体现在工具执行前我们有机会对参数进行验证示例中简化了。对于calculator虽然示例用了危险的eval但在真实 Forge 应用中你可以在工具函数内部实现严格的安全检查。错误处理有框架当模型输出无法解析的 JSON或指定了不存在的工具时我们的代码有基本的错误处理逻辑可以防止崩溃并给出降级响应。5. 常见问题与排查思路在实际使用 Forge 或类似框架与本地模型集成时你可能会遇到以下问题。问题现象可能原因排查步骤与解决方案模型不输出 JSON而是输出自然语言1. 提示词Prompt不够强未明确要求 JSON 格式。2. 模型能力有限无法稳定遵循复杂指令。3. 未使用response_format参数如果模型支持。1.强化提示词在系统提示中明确要求 JSON 格式并给出多个清晰示例Few-shot。2.更换/微调模型选择在工具调用或 JSON 模式跟随上表现更好的模型如llama3.1、qwen2.5或专门微调的模型。3.启用response_format在调用 API 时设置response_format{“type”: “json_object”}。确保你的模型服务支持此参数。JSON 解析失败1. 模型输出包含 JSON 之外的额外文本如思考过程。2. JSON 格式错误缺少引号、括号。1.后处理清洗在解析前使用正则表达式如r‘\{.*\}’尝试从输出中提取可能的 JSON 对象。2.使用容错解析器例如json5库可以解析一些非严格 JSON。但最好从源头模型输出解决。3.降低温度temperature设置为 0 或接近 0 的值减少随机性。工具执行错误或参数错误1. 模型提供的参数值与工具 Schema 类型不匹配如字符串传给了数字参数。2. 工具函数内部逻辑有 Bug。1.加强参数验证在调用工具前使用 Pydantic 模型对输入参数进行强制验证和类型转换。2.提供更详细的工具描述和参数示例在工具定义中为每个参数写清示例和约束。3.完善工具函数的错误处理工具函数内部应有 try-catch并返回明确的错误信息方便 Agent 进行后续处理。Agent 陷入循环或调用错误工具1. 工具描述模糊导致模型混淆。2. 复杂任务需要多步调用但缺乏状态管理和规划。1.优化工具设计每个工具功能单一描述精确。避免功能重叠。2.实现 ReAct 模式或规划步骤让模型先“思考”Reason再“行动”Act。可以在提示词中鼓励模型输出思考链Chain-of-Thought。3.设置调用上限在可靠性层配置中限制单个会话中工具调用的最大次数防止死循环。连接本地模型服务超时1. Ollama 或其他服务未启动。2. 网络端口被占用或防火墙阻止。3. 模型加载过慢。1.检查服务状态ollama list查看模型curl http://localhost:11434/api/tags测试 API。2.确认端口和 URL确保代码中配置的base_url与模型服务地址一致。3.查看服务日志从 Ollama 或模型服务日志中查找错误信息。Forge 库导入错误或 API 不兼容1. 安装的 Forge 版本不对。2. Forge 的 API 已发生变化。1.查阅官方文档Forge 是一个较新的项目API 可能变动。务必参考其 GitHub 仓库的 README 和示例。2.检查版本使用pip show agent-forge查看已安装版本尝试安装最新版或指定版本。3.查看源码如果文档不全直接阅读 Forge 的源代码是理解其用法的最可靠方式。6. 最佳实践与工程建议将 Forge 用于生产环境或严肃项目时需要考虑以下工程化实践。6.1 工具设计与安全最小权限原则每个工具只应拥有完成其任务所必需的最小权限。例如一个文件读取工具不应有删除权限。输入验证与净化在工具函数内部必须对所有输入参数进行严格的验证、类型转换和净化防止注入攻击。永远不要直接执行用户提供的字符串代码。工具描述精细化工具的名称、描述、参数说明要尽可能清晰、无歧义。好的描述能极大提升模型选择工具的准确率。可以考虑提供多个调用示例。副作用与幂等性设计工具时考虑其副作用。尽可能让工具具有幂等性多次调用结果相同便于重试。6.2 提示词工程系统提示词System Prompt这是引导模型行为的关键。明确告诉模型你的角色、可用的工具、必须遵守的输出格式。将工具 Schema 以清晰的方式嵌入提示词。少样本示例Few-shot Examples在提示词中提供 2-3 个高质量的“用户查询 - 正确工具调用 JSON”的示例能显著提升模型输出的稳定性。输出格式强制除了在提示词中说明充分利用模型服务提供的response_format、grammar或json_mode等参数来约束输出格式。6.3 可靠性层配置优化重试策略配置合理的重试次数和退避延迟。对于网络超时等瞬时错误可以重试对于逻辑错误如参数无效则不应重试。超时设置为模型调用和工具执行设置超时时间避免单个请求阻塞整个系统。降级方案当工具调用连续失败时应有降级策略。例如让模型基于自身知识给出一个近似答案或者直接告知用户能力限制。日志与监控在可靠性层的每个关键步骤模型调用开始、收到响应、解析结果、工具执行前/后都记录详细的日志。这有助于问题排查和效果分析。6.4 与现有框架集成Forge 可以作为一个独立的组件集成到更大的 AI 应用框架中与 LangChain 集成你可以将 Forge 包装成一个 LangChainTool或自定义AgentExecutor。利用 Forge 处理与本地模型的可靠交互而 LangChain 负责更高层次的链Chain和记忆Memory管理。与 FastAPI 集成将你的 Forge Agent 封装成 RESTful API 服务供其他系统调用。注意做好身份认证、速率限制和输入验证。多模型路由可以配置 Forge 支持多个后端模型。根据查询复杂度、成本或性能需求动态选择不同的本地模型进行调用。6.5 性能考量本地模型选择工具调用对模型的指令跟随和格式控制能力要求较高。7B-14B 参数量的模型通常是性价比不错的选择。如果对精度要求极高可考虑 70B 级别模型但需要更强的硬件。上下文长度复杂的工具描述和少样本示例会消耗大量上下文。确保所选模型支持足够的上下文长度如 8K、32K、128K。批处理与异步如果处理大量并发请求考虑使用模型的批处理推理功能并采用异步编程模式如asyncio来提高吞吐量。通过遵循这些最佳实践你可以构建出一个既强大又稳健的、基于本地模型和 Forge 可靠性层的智能工具调用系统。它能够在离线环境中提供接近云端模型的可靠体验为你的 AI 应用注入更多可能。