
在实际的大语言模型LLM应用开发中很多开发者会遇到一个典型困境模型本身能力很强但一到具体业务场景要么回答不准确要么无法执行任务要么成本高得难以承受。这背后往往不是模型选型的问题而是工程化实践的缺失。从简单的提示词调用到构建具备自主规划和工具调用能力的智能体Agent再到考虑生产环境的部署、监控与成本控制每一步都需要系统的工程思维和具体的技术方案。本文将围绕“大语言模型工程”这一核心主题拆解从基础应用到高级智能体开发的完整链路。无论你是希望将LLM集成到现有系统的开发者还是计划从零构建AI驱动的应用理解如何准备环境、设计提示、构建上下文、集成工具链并最终实现一个可运行、可维护的智能体系统都是必经之路。我们将从最基础的本地模型部署与API调用讲起逐步深入到智能体的核心架构与开发框架并讨论生产环境下的关键考量。1. 理解大语言模型工程的核心要素大语言模型工程远不止是调用一个API。它是一套系统工程方法旨在将原始的、通用的LLM能力可靠、高效、经济地转化为解决特定业务问题的应用。这个过程涉及多个层面的决策与技术集成。1.1 从模型调用到应用工程关键的范式转变初学者往往从一行代码调用openai.ChatCompletion.create开始但这仅仅是起点。工程化的视角要求我们思考更多稳定性如何应对API服务的抖动、限流或不可用成本如何通过缓存、提示优化、模型选型来控制token消耗准确性如何通过提示工程、上下文管理和知识检索来提升回答质量可控性如何让模型遵循业务规则、避免有害输出或执行未授权的操作可观测性如何记录每一次交互的输入、输出、token用量和延迟以便调试和优化这种转变意味着开发重心从“让模型回答问题”转移到“构建一个以模型为核心组件的、健壮的应用系统”。1.2 核心概念界定LLM、智能体与工程实践在深入技术细节前需要明确几个关键概念及其在工程链路中的位置大语言模型LLM指如GPT-4、Claude、Llama等参数规模巨大的自回归语言模型。它们是能力的提供者接受文本输入并生成文本输出。在工程中它们被视为一个具有特定接口API或本地库的“服务”。提示词工程Prompt Engineering指通过精心设计输入文本来引导LLM产生期望输出的技术。这是连接业务逻辑与模型能力的桥梁包括指令设计、上下文组织、示例Few-shot构造等。智能体Agent指一个能感知环境、进行决策并执行动作以达成目标的系统。在LLM语境下智能体通常以LLM作为其“大脑”或“规划器”负责理解用户请求、拆解任务、决定调用哪个工具如计算器、搜索引擎、数据库并整合工具结果形成最终回复。智能体是LLM工程的高级形态。LLM工程LLM Engineering涵盖上述所有环节并额外包括模型选择与微调、系统架构设计、上下文管理、向量数据库集成、流程编排、评估与测试、部署与运维等一系列实践。2. 环境准备与基础工具链搭建在开始构建复杂应用前一个稳定且高效的基础开发环境是必不可少的。这里我们分为本地实验环境和面向生产的云环境两种场景来讨论。2.1 本地开发环境配置对于学习、原型验证或对数据隐私有极高要求的场景本地部署开源模型是一个重要选项。1. 硬件与软件基础要求本地运行LLM尤其是7B参数以上的模型对硬件有一定要求。以下是一个参考清单组件学习/轻量级开发推荐生产/重型开发推荐说明CPU现代多核处理器如 Intel i7/Ryzen 7服务器级多核CPUCPU影响模型加载和部分运算速度。内存16 GB RAM32 GB RAM 或更高模型参数和运行时的中间状态需要大量内存。7B模型通常需要14GB。GPU可选但强烈推荐如 NVIDIA RTX 3060 12GB必需如 NVIDIA A100/A10, RTX 4090GPU通过并行计算极大加速推理。显存大小直接决定能运行的模型规模。存储50 GB 可用空间SSD100 GB 可用空间高速SSD用于存放模型文件单个模型可能达10-40GB和数据集。操作系统Windows 10/11, macOS, LinuxLinux (推荐 Ubuntu 22.04 LTS)Linux在服务器部署和工具链支持上更成熟。Python3.9 - 3.113.9 - 3.11确保版本兼容性避免使用过新或过旧的版本。2. 核心软件安装以下命令基于Linux/macOS系统Windows用户建议使用WSL2或PowerShell。# 1. 创建并激活一个独立的Python虚拟环境强烈推荐 python -m venv llm-env source llm-env/bin/activate # Linux/macOS # llm-env\Scripts\activate # Windows # 2. 升级pip并安装基础包 pip install --upgrade pip pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 根据CUDA版本调整如无GPU则去掉--index-url部分 # 3. 安装模型加载与推理框架 # 选项A: 使用 transformers (Hugging Face 主流库) pip install transformers accelerate bitsandbytes # bitsandbytes 用于4/8比特量化降低显存占用 # 选项B: 使用 llama.cpp (C实现CPU/GPU高效推理) # 需要从源码编译或下载预编译版本适合在资源受限环境运行量化模型 # git clone https://github.com/ggerganov/llama.cpp # cd llama.cpp make # 4. 安装Web UI或API服务框架方便交互测试 pip install gradio # 快速构建Web界面 # 或安装专为LLM服务的框架如 vLLM (高性能推理)、Ollama (简化本地模型管理) # pip install vllm # curl -fsSL https://ollama.com/install.sh | sh # 安装Ollama3. 下载并运行第一个本地模型以使用transformers运行一个较小的模型如Qwen2.5-1.5B为例# run_local_model.py from transformers import AutoTokenizer, AutoModelForCausalLM import torch # 指定模型名称从Hugging Face Hub下载 model_name Qwen/Qwen2.5-1.5B-Instruct # 加载分词器和模型 tokenizer AutoTokenizer.from_pretrained(model_name) # 根据设备自动选择CPU或GPU使用低精度加载以节省内存 model AutoModelForCausalLM.from_pretrained( model_name, torch_dtypetorch.float16, # 半精度 device_mapauto # 自动分配模型层到可用设备GPU/CPU ) # 准备输入 prompt 请用中文解释一下什么是大语言模型。 messages [{role: user, content: prompt}] text tokenizer.apply_chat_template(messages, tokenizeFalse, add_generation_promptTrue) # 编码并生成 inputs tokenizer(text, return_tensorspt).to(model.device) with torch.no_grad(): outputs model.generate(**inputs, max_new_tokens200) response tokenizer.decode(outputs[0], skip_special_tokensTrue) print(模型回复, response.split(assistant\n)[-1].strip()) # 提取助手回复运行此脚本将自动下载模型首次需要较长时间并生成回复。这是验证本地环境是否就绪的最直接方法。2.2 云API服务环境配置对于大多数生产应用直接调用云服务商提供的LLM API如OpenAI API、 Anthropic Claude API、国内各大厂的API是更主流和高效的选择。其优势在于免运维、性能稳定、模型迭代快。1. 获取API密钥访问对应云服务商的平台注册账号并创建API Key。务必妥善保管此Key不要提交到代码仓库。2. 安装官方SDK# OpenAI (GPT系列) pip install openai # Anthropic (Claude系列) pip install anthropic # 国内常见平台例如百度千帆、阿里灵积、智谱AI等通常也有对应的Python SDK # pip install qianfan # 百度 # pip install dashscope # 阿里3. 基础调用示例以OpenAI API为例创建一个安全的调用客户端# api_client.py import os from openai import OpenAI # 方法1设置环境变量推荐避免硬编码 # 在终端执行export OPENAI_API_KEYyour-api-key-here # 或在代码中临时设置os.environ[“OPENAI_API_KEY”] ‘your-key‘ client OpenAI() # 会自动读取 OPENAI_API_KEY 环境变量 # 方法2在客户端中直接指定灵活性高但需注意代码安全 # client OpenAI(api_key“your-api-key-here”) def get_chat_completion(prompt, model“gpt-3.5-turbo”): try: response client.chat.completions.create( modelmodel, messages[{“role”: “user”, “content”: prompt}], max_tokens500, temperature0.7, ) return response.choices[0].message.content except Exception as e: print(f“API调用出错 {e}”) return None if __name__ “__main__”: answer get_chat_completion(“你好请简单自我介绍。”) if answer: print(answer)注意永远不要将API密钥直接写在源代码中并提交到Git等版本控制系统。应使用环境变量、密钥管理服务如AWS Secrets Manager或配置文件并加入.gitignore。3. 提示词工程从基础技巧到模式化设计提示词是与LLM交互的“编程语言”。低质量的提示导致低质量的结果。本节将系统介绍有效的提示设计方法。3.1 提示词的核心结构一个结构良好的提示通常包含以下部分虽然不是所有部分都必须存在指令Instruction明确告诉模型要做什么。例如“你是一个专业的翻译助手。”上下文Context提供完成任务所需的外部信息。例如“以下是用户提交的工单描述...”输入数据Input Data需要模型处理的具体内容。例如“请将这段中文翻译成英文今天天气很好”输出指示Output Indicator指定输出的格式、风格或结构。例如“请以JSON格式输出包含‘title’和‘summary’两个字段。”一个综合示例你是一位经验丰富的技术文档撰写专家。请根据以下用户提出的功能需求撰写一段产品功能描述。 要求描述清晰、突出价值、面向非技术用户。输出格式为Markdown段落。 功能需求用户希望系统能自动将上传的PDF合同中的关键条款如甲方乙方、金额、日期、违约责任提取出来并填入一个结构化的表格中。3.2 高级提示技巧1. 零样本Zero-Shot与少样本Few-Shot学习零样本仅给出指令依赖模型的内化知识。适用于通用任务。将以下句子分类为正面或负面情感句子“这个产品的用户体验太糟糕了。”少样本在指令后提供几个输入-输出示例让模型通过类比学习。适用于格式复杂或需要特定风格的任务。将中文日期转换为标准YYYY-MM-DD格式。 示例1 输入二零二三年十月一日 输出2023-10-01 示例2 输入农历腊月廿五 输出模型需要知道这是农历可能无法直接转换这里示例设计不佳 请转换输入明年劳动节注意少样本示例必须准确、一致且具有代表性。错误的示例会误导模型。2. 思维链Chain-of-Thought, CoT对于复杂推理问题鼓励模型一步步思考能显著提升准确性。可以通过在提示中加入“让我们一步步思考”来实现或在少样本示例中展示推理步骤。问题一个篮子里有15个苹果。你拿走了3个然后又放进去5个最后吃掉了2个。篮子里还剩几个苹果 让我们一步步思考 1. 最初有15个苹果。 2. 拿走3个后剩下 15 - 3 12个。 3. 放进去5个后有 12 5 17个。 4. 吃掉2个后剩下 17 - 2 15个。 所以篮子里还剩15个苹果。3. 角色扮演Role Playing为模型赋予一个特定的角色可以约束其回答的风格和范围。假设你是一位严格的、注重细节的代码审查机器人。你的任务是检查下面这段Python代码找出潜在的错误、不规范的写法并提出改进建议。请以列表形式输出。 代码[此处粘贴代码]3.3 系统提示词System Prompt的设计在使用Chat Completion类API时system消息用于设定对话的全局背景、规则和风格。它是塑造智能体行为的关键。messages [ {“role”: “system”, “content”: “你是一个乐于助人且准确的助手。你的回答应当简洁、专业。如果用户询问你不知道的事情请诚实告知不要编造信息。所有关于财务、医疗、法律建议的询问你都必须声明自己不是专业人士建议用户咨询相关专家。”}, {“role”: “user”, “content”: “我应该如何投资我的储蓄”} ]一个强大的系统提示词应定义身份与目标助手是谁要达成什么目标边界与限制什么不能做什么话题需要谨慎响应格式回答应该长还是短用什么语言是否需要结构化外部知识是否以及如何引用知识库例如“请优先使用提供的文档内容回答问题。”4. 构建你的第一个智能体Agent智能体是LLM工程的进阶形态它使模型从“聊天者”变为“执行者”。一个典型的智能体包含规划、工具调用、记忆等核心模块。4.1 智能体的基本架构一个简化但完整的智能体工作流程如下接收用户输入例如“查询北京今天的天气然后根据天气推荐是穿外套还是T恤。”任务规划与拆解LLM作为大脑分析请求将其拆解为可执行的子任务序列。例如[“调用天气API查询北京天气” “根据温度结果生成穿衣建议”]。选择并执行工具LLM根据子任务决定调用哪个工具如get_weather并生成符合工具输入格式的参数如{“city”: “北京”}。智能体框架执行该工具。观察结果并整合LLM接收工具执行的结果如{“city”: “北京”, “temp”: 22, “condition”: “晴”}并判断是否继续执行下一个工具或已获得足够信息来合成最终答案。生成最终回复LLM综合所有中间结果生成面向用户的自然语言回复。例如“北京今天天气晴朗气温22摄氏度。建议穿一件薄外套或长袖T恤即可。”4.2 使用LangChain框架快速实现智能体LangChain是一个流行的框架它抽象了与LLM交互、管理提示模板、串联工具链、维护记忆等常见模式让开发者能快速搭建智能体应用。1. 安装与环境准备pip install langchain langchain-openai langchain-community # langchain-openai 包含OpenAI集成 # langchain-community 包含许多社区贡献的工具和组件2. 定义自定义工具工具是智能体与外界交互的“手”和“脚”。一个工具本质上是一个Python函数带有清晰的描述LLM通过描述来理解何时以及如何使用它。# custom_tools.py from langchain.tools import tool import requests import json tool def get_weather(city: str) - str: “”“查询指定城市的当前天气情况。 参数: city: 城市名称例如“北京”、“上海”。 返回: 一个描述天气的字符串。 ”“” # 这里使用一个模拟的天气API实际项目中应替换为真实的API # 例如和风天气、OpenWeatherMap等 mock_data { “北京”: {“temp”: 22, “condition”: “晴朗”, “humidity”: “40%”}, “上海”: {“temp”: 25, “condition”: “多云”, “humidity”: “65%”}, } if city in mock_data: data mock_data[city] return f“{city}的天气{data[‘condition’]}气温{data[‘temp’]}摄氏度湿度{data[‘humidity’]}。” else: return f“未找到{city}的天气信息。” tool def calculator(expression: str) - str: “”“执行一个数学表达式计算。支持加减乘除和括号。 参数: expression: 数学表达式字符串例如“3 5 * 2”。 返回: 计算结果字符串。 ”“” try: # 警告使用eval有安全风险仅用于演示。生产环境应使用安全计算库如ast.literal_eval或专门数学库。 result eval(expression) return f“表达式 {expression} 的计算结果是{result}” except Exception as e: return f“计算表达式 {expression} 时出错{e}” # 将工具放入列表供智能体使用 tools [get_weather, calculator]3. 创建智能体并运行我们将使用LangChain的“ReAct”代理类型它鼓励模型以“思考 - 行动 - 观察”的循环来解决问题。# simple_agent.py import os from langchain_openai import ChatOpenAI from langchain.agents import create_react_agent, AgentExecutor from langchain import hub # 用于拉取预定义的提示模板 # 1. 初始化LLM # 确保已设置环境变量 OPENAI_API_KEY llm ChatOpenAI(model“gpt-3.5-turbo”, temperature0) # 2. 拉取一个适合ReAct代理的提示模板 prompt hub.pull(“hwchase17/react”) # 3. 创建智能体 agent create_react_agent(llm, tools, prompt) # 4. 创建代理执行器它负责运行循环 agent_executor AgentExecutor(agentagent, toolstools, verboseTrue, handle_parsing_errorsTrue) # 5. 运行智能体 if __name__ “__main__”: # 示例查询1需要调用工具 query1 “北京现在的天气怎么样如果气温低于20度请计算一下比25度低了多少。” print(f“用户提问{query1}”) result1 agent_executor.invoke({“input”: query1}) print(f“最终答案{result1[‘output’]}”) print(“-” * 50) # 示例查询2无需调用工具LLM直接回答 query2 “你好请介绍一下你自己。” print(f“用户提问{query2}”) result2 agent_executor.invoke({“input”: query2}) print(f“最终答案{result2[‘output’]}”)运行上述代码你将看到verboseTrue模式下智能体的详细思考过程 Entering new AgentExecutor chain... 我需要先查询北京的天气然后根据温度决定是否需要计算温差。 思考我应该使用get_weather工具来查询北京天气。 行动get_weather 行动输入北京 观察北京的天气晴朗气温22摄氏度湿度40%。 思考现在我知道气温是22度。用户问“如果气温低于20度”才计算但22度高于20度所以条件不满足。我只需要报告天气不需要计算。 最终答案北京现在天气晴朗气温22摄氏度湿度40%。因为气温高于20度所以没有计算与25度的温差。 Finished chain. 最终答案北京现在天气晴朗气温22摄氏度湿度40%。因为气温高于20度所以没有计算与25度的温差。这个例子清晰地展示了智能体如何规划、调用工具、并根据观察结果决定下一步行动。4.3 为智能体增加记忆能力无状态的智能体每次对话都是独立的这不符合人类对话习惯。我们需要为其添加记忆使其能记住之前的对话内容。LangChain提供了多种记忆组件。# agent_with_memory.py from langchain.memory import ConversationBufferMemory from langchain.agents import AgentExecutor, create_react_agent from langchain_openai import ChatOpenAI from langchain import hub # 1. 初始化带记忆的LLM链这里记忆是独立于代理的 memory ConversationBufferMemory(memory_key“chat_history”, return_messagesTrue) llm ChatOpenAI(model“gpt-3.5-turbo”, temperature0) # 2. 创建代理注意标准react代理提示模板不直接处理记忆我们需要一个支持记忆的模板或自定义 # 这里我们使用一个简化方式将历史记录作为上下文放入输入中。 from langchain.prompts import PromptTemplate from langchain.agents import Tool, AgentType, initialize_agent # 定义提示模板包含历史记录占位符 template “”“你是一个有帮助的助手。以下是之前的对话历史 {chat_history} 现在请回答人类的最新问题。如果你需要用到工具请使用它们。问题{input} {agent_scratchpad}”“” prompt PromptTemplate.from_template(template) # 重新创建代理使用支持聊天的代理类型 agent initialize_agent( tools, llm, agentAgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION, # 专为对话设计的代理类型 verboseTrue, memorymemory, promptprompt, # 使用自定义模板 ) # 3. 运行多轮对话 print(“第一轮”) result1 agent.run(“我叫小明。”) # 智能体会记住这个名字 print(result1) print(“\n第二轮”) result2 agent.run(“我的名字是什么”) # 智能体应该能回忆起名字 print(result2)在这个例子中ConversationBufferMemory会保存完整的对话历史并在每一轮新的对话中将历史记录作为上下文的一部分传递给LLM从而实现连续对话的能力。5. 生产环境关键考量与常见问题排查将LLM应用或智能体从原型推向生产会面临一系列新的挑战。本节聚焦于稳定性、成本、安全性和可观测性。5.1 稳定性与容错处理LLM API服务可能因网络、限流、服务端错误而不稳定。必须为调用添加重试、退避和降级逻辑。# robust_client.py import openai from tenacity import retry, stop_after_attempt, wait_exponential, retry_if_exception_type import logging logging.basicConfig(levellogging.INFO) logger logging.getLogger(__name__) # 定义重试装饰器针对特定异常如速率限制、服务不可用进行重试 retry( stopstop_after_attempt(3), # 最多重试3次 waitwait_exponential(multiplier1, min2, max10), # 指数退避等待2s, 4s, 8s... retryretry_if_exception_type((openai.RateLimitError, openai.APIConnectionError, openai.APIStatusError)), before_sleeplambda retry_state: logger.warning(f“API调用失败正在重试第{retry_state.attempt_number}次... 错误{retry_state.outcome.exception()}”) ) def robust_chat_completion(messages, model“gpt-3.5-turbo”): “”“带重试机制的聊天补全调用”“” client openai.OpenAI() response client.chat.completions.create( modelmodel, messagesmessages, timeout30.0, # 设置超时 ) return response.choices[0].message.content # 降级策略当主要模型如GPT-4失败或成本过高时降级到备用模型如GPT-3.5 def get_completion_with_fallback(prompt, primary_model“gpt-4”, fallback_model“gpt-3.5-turbo”): try: return robust_chat_completion([{“role”: “user”, “content”: prompt}], modelprimary_model) except Exception as e: logger.error(f“主模型{primary_model}调用失败尝试降级到{fallback_model}。错误{e}”) try: return robust_chat_completion([{“role”: “user”, “content”: prompt}], modelfallback_model) except Exception as fallback_e: logger.critical(f“降级模型也失败{fallback_e}”) return “系统服务暂时不可用请稍后再试。” # 最终兜底回复5.2 成本控制与优化LLM API成本主要由token消耗驱动。优化策略包括缓存对相同或相似的查询结果进行缓存。提示压缩精简系统提示和上下文移除冗余信息。输出限制设置合理的max_tokens避免生成过长无关内容。模型选型在满足需求的前提下选择更经济的模型如用gpt-3.5-turbo替代gpt-4进行简单任务。异步与批处理对于非实时任务可以考虑批量处理请求。# 使用LRU缓存示例 from functools import lru_cache import hashlib lru_cache(maxsize1024) def get_cached_completion(prompt: str, model: str) - str: “”“对相同提示词和模型进行缓存”“” # 生成缓存的键可以更复杂例如包含temperature等参数 cache_key hashlib.md5(f“{prompt}_{model}”.encode()).hexdigest() # 这里简化处理实际应检查缓存存储如Redis # 如果缓存命中直接返回 # 如果未命中调用API并存入缓存 # 以下为伪代码逻辑 print(f“缓存未命中或已过期调用API获取: {prompt[:50]}...”) return robust_chat_completion([{“role”: “user”, “content”: prompt}], modelmodel)5.3 安全性防护LLM应用可能面临提示词注入、敏感信息泄露、生成有害内容等风险。输入过滤与净化对用户输入进行检查过滤明显恶意或无关的指令。def sanitize_input(user_input: str) - tuple[bool, str]: “”“简单的输入检查”“” blacklist [“忽略之前指令”, “扮演”, “系统提示”, “sudo”, “rm -rf”] # 示例黑名单 lower_input user_input.lower() for forbidden in blacklist: if forbidden in lower_input: return False, “输入包含不被允许的指令。” # 检查长度等 if len(user_input) 2000: return False, “输入过长。” return True, user_input输出审查对模型生成的内容进行二次检查可以使用规则或另一个小型分类器模型。权限控制在智能体框架中严格限制每个工具可访问的资源范围。例如一个用于查询数据库的工具其SQL查询权限应该是只读且限制在特定视图上。5.4 可观测性与监控生产系统必须能够被监控和调试。日志记录详细记录每次调用的请求、响应、token用量、耗时和错误。import json import time def logged_completion(prompt, model): start_time time.time() try: response robust_chat_completion(prompt, model) end_time time.time() log_entry { “timestamp”: time.time(), “model”: model, “prompt_length”: len(prompt), “response_length”: len(response), “latency”: end_time - start_time, “status”: “success”, } logger.info(json.dumps(log_entry)) return response except Exception as e: logger.error(json.dumps({“timestamp”: time.time(), “model”: model, “status”: “error”, “error”: str(e)})) raise指标收集将耗时、成功率、token消耗等指标发送到监控系统如Prometheus。链路追踪在微服务架构中使用OpenTelemetry等工具对LLM调用进行分布式追踪。5.5 常见问题排查清单当你的LLM应用出现问题时可以按照以下清单进行排查问题现象可能原因检查点解决方案API调用返回认证错误API密钥错误、过期或未设置。1. 检查环境变量名是否正确。2. 检查密钥是否包含多余空格或换行。3. 在服务商控制台验证密钥状态。重新生成并设置正确的API密钥。模型回复不符合预期或胡言乱语提示词设计不佳、温度参数过高、上下文混乱。1. 检查系统提示和用户提示是否清晰。2. 将temperature调低如0.2。3. 检查上下文是否包含矛盾信息。优化提示词结构使用更明确的指令和示例降低温度参数清理上下文。智能体陷入循环或重复调用工具代理逻辑缺陷、工具描述不清、停止条件不明确。1. 查看verbose日志观察代理的“思考-行动”循环。2. 检查工具描述是否准确。3. 代理是否缺少“任务已完成”的判断。优化工具描述在系统提示中明确结束条件为代理执行设置最大步骤限制max_iterations。本地模型加载失败或推理极慢内存/显存不足、模型文件损坏、未使用GPU。1. 使用nvidia-smiGPU或htop内存查看资源占用。2. 检查模型文件完整性下载是否完整。3. 确认PyTorch/CUDA版本兼容。尝试量化模型如4bit/8bit加载使用更小的模型确保使用GPU并安装对应CUDA驱动。处理长文本时被截断或丢失信息超过模型上下文窗口限制。1. 计算输入token数可使用tiktoken库。2. 确认模型的最大上下文长度如GPT-3.5-turbo是16K。对输入文本进行分块处理使用具有更长上下文的模型如GPT-4-128K采用摘要或检索方法减少输入长度。工具调用参数解析错误LLM生成的参数格式与工具期望不符。1. 查看代理输出的“行动输入”原始字符串。2. 检查工具函数的参数类型和名称。在工具描述中明确参数格式使用支持结构化输出的LLM如GPT-4或让代理输出JSON在代码中添加更健壮的参数解析和错误处理。构建一个成熟的大语言模型应用是一个持续迭代的过程。从最初的环境搭建和API调用到设计有效的提示词再到组装具备规划和工具使用能力的智能体每一步都需要结合具体的业务需求进行设计和调优。更重要的是当应用进入生产阶段必须将稳定性、成本、安全和可观测性纳入核心设计。建议从一个小而具体的场景开始实践例如先构建一个能准确回答公司内部文档问题的智能客服原型再逐步扩展其能力和集成范围。在这个过程中持续监控、评估和收集用户反馈是驱动系统不断优化的关键。