ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

第05讲 系统提示词进阶 + 函数调用本质

第05讲 系统提示词进阶 + 函数调用本质 本讲目标搞懂两件事——① 怎么写一份专业的系统提示词让模型稳定听话② 函数调用Function Calling到底是什么、为什么它能让模型从嘴长出手。一、通俗入口岗位说明书 外挂工具系统提示词System Prompt就像你给新员工发的岗位说明书写明他是谁、负责什么、什么能做、什么不能做、产出格式什么样。说明书越清楚员工越不会跑偏。函数调用Function Calling则是给这位员工配了一套外挂工具——他不会自己查天气但能写出一张标准取货单结构化指令你程序拿单子去调天气 API把结果再喂回给他。他依旧动口不动手但事办成了。本讲拆开这两件事。二、原理拆解2.1 系统提示词的三层结构一份专业系统提示词通常分三层记忆口诀角色 → 规矩 → 格式层作用示例角色层Role设定身份与专业口吻你是一名资深 Python 后端工程师约束层Rules边界、禁忌、步骤只回答技术题不确定时明说不编造 API格式层Format输出结构约定用 Markdown先给结论再给代码代码带注释代码flowchart LR R[角色层: 你是谁] -- U[约束层: 能/不能/步骤] U -- F[格式层: 输出长什么样] F -- O[稳定可控的输出]图表2.2 函数调用的本质模型输出取货单程序去执行很多人误以为函数调用是模型自己跑了代码。不是。真实流程是你告诉模型你有一张工具清单schema当用户问北京今天天气模型判断需要工具于是输出一段结构化 JSON函数名 参数而不是自然语言你的程序拿到 JSON真正去调用天气 API把 API 结果作为新消息回传给模型模型再组织成自然语言回答。代码sequenceDiagram participant U as 用户 participant M as 大模型 participant P as 你的程序 participant T as 外部工具/API U-M: 北京今天天气 M-P: 返回 JSON {fn:get_weather, args:{city:北京}} P-T: 调用 get_weather(北京) T--P: {temp:22, weather:晴} P-M: 把结果回传模型 M-U: 北京今天晴22℃图表2.3 工具 schema 长什么样函数调用靠一份说明书JSON Schema告诉模型参数结构json{ name: get_weather, description: 查询指定城市的当前天气, parameters: { type: object, properties: { city: {type: string, description: 城市名如 北京}, unit: {type: string, enum: [celsius, fahrenheit]} }, required: [city] } }模型据此照着填空保证输出可被程序解析。三、动手实战3.1 系统提示词工程化LangChain 0.3Python 3.11python# 环境Python 3.11pip install langchain-openai0.3.* from langchain_openai import ChatOpenAI from langchain_core.messages import SystemMessage, HumanMessage llm ChatOpenAI(modelgpt-5, temperature0.2) system SystemMessage(content( 你是一名资深 Python 后端工程师角色层。\n 只回答后端技术问题不确定时明确说不知道绝不编造库名或 API约束层。\n 回答用 Markdown先给一句话结论再给可运行代码并加注释格式层。 )) user HumanMessage(content用 Flask 写一个返回 JSON 的 Hello 接口) print(llm.invoke([system, user]).content)3.2 函数调用最小可运行示例原生 OpenAI SDKPython 3.11python# 环境Python 3.11pip install openai import json, openai client openai.OpenAI() tools [{ type: function, function: { name: get_weather, description: 查询指定城市的当前天气, parameters: { type: object, properties: { city: {type: string, description: 城市名}, unit: {type: string, enum: [celsius, fahrenheit]} }, required: [city] } } }] # 第一次调用模型决定要不要调用工具 resp client.chat.completions.create( modelgpt-5, messages[{role: user, content: 北京天气怎么样}], toolstools ) msg resp.choices[0].message if msg.tool_calls: # 模型请求调用工具 call msg.tool_calls[0] args json.loads(call.function.arguments) # 这里本该调真实 API演示用假数据 fake_result {city: args[city], temp: 22, weather: 晴} # 把工具结果回传模型再生成最终自然语言回答 follow client.chat.completions.create( modelgpt-5, messages[ {role: user, content: 北京天气怎么样}, msg.model_dump(), {role: tool, tool_call_id: call.id, content: json.dumps(fake_result, ensure_asciiFalse)} ], toolstools ) print(follow.choices[0].message.content)这一套模型出单 → 程序执行 → 结果回传的闭环正是第01讲 ReAct 循环里行动这一步的工程实现。第21讲会专门深讲 Tool Calling 的容错与并行。四、避坑清单 小结三个常见坑系统提示词只写角色不写约束——你是个助手太模糊模型容易跑偏补上不能做什么 输出格式立刻变稳。把函数调用当成模型自动执行代码——其实只是输出 JSON 指令真正执行在你的程序里务必校验参数、隔离危险操作。工具描述写得太潦草——description 越清楚模型越会正确选工具、填参数含糊的 schema 是调用失败的头号原因。本讲小结系统提示词 角色 约束 格式 三层越细越可控。函数调用本质模型产出结构化取货单由你的程序执行并把结果回传。它是 ReAct 循环行动步的工程落地是多智能体用工具的基石。下讲预告第06讲《快速构建智能体的通用方法论路线地图》——把前 5 讲串成一张从零搭智能体的路线地图并对比低代码平台 vs 写代码两条路的取舍。
返回列表