☰
【零基础入门 LLM 开发 · Day 9】:工具描述的艺术——AI 靠“读说明书“做决策
2026/10/8 23:41:13 网站建设 项目流程

【零基础入门 LLM 开发 · Day 9】:工具描述的艺术——AI 靠"读说明书"做决策

今天只解决一个问题

Day 8 你可能没注意到:两个练习文件里的工具描述不一样。

Day 8 版本(openAITools.py):

"description":"获取指定城市的当前天气",# 参数描述"location":{"type":"string","description":"城市名称:如:北京"}

Day 9 版本(openAITools2.py):

"description":"需要查询天气的城市名称,例如:北京、上海、纽约。如果用户没有指定具体城市,请询问用户。",

差别在哪?Day 9 的描述里多了一句行为指令:“如果用户没有指定具体城市,请询问用户。”

效果:当用户问"今天天气怎么样?"(没说城市)——

  • 前者:AI 可能瞎猜一个城市直接调用;
  • 后者:AI 会反问"请问您想查询哪个城市的天气呢?"

description 不是注释,是提示词(prompt)的一部分。AI 的决策完全基于它。

描述写得好的五个要领

要领反例正例
说清"什么时候该用"“发送邮件”“当用户明确要求发送邮件时使用”
说清"什么时候不该用"——“如果用户没有指定城市,请询问用户”
给出取值示例“城市名”“城市名称,如:北京、上海、纽约”
参数有约束就写明“数量”“数量,1-10 之间的整数”
多工具时说明边界两个工具都写"处理数据"“查询订单状态” vs “统计订单金额”

一个认知:AI 是"最较真的新员工"

把 AI 想象成一个第一天上班、极其较真的实习生:

  • 说明书模糊 → 它就自由发挥(调用错工具、编造参数);
  • 说明书精确 → 它执行得比谁都标准。

工具多了之后这一点尤其致命:10 个描述含糊的工具摆在面前,选错的概率直线上升——这也是 Day 14 为什么要用"多 Agent 分工"来限制每个 AI 能看到的工具数量。

完整代码

完整代码与 Day 8 相同(openAITools2.py),只改了 description。你可以做一个对照实验:

# 实验 A:把 description 改回简短版,问"今天天气怎么样?"# 实验 B:用 Day 9 的完整描述,问同样的问题# 对比 AI 的行为差异

今日踩坑点

  1. 描述里互相矛盾:比如 description 说"用户没指定城市就询问",参数却标了required——AI 可能先编个城市再询问,行为混乱。
  2. 描述写成给人看的文档:大段产品介绍没用,AI 需要的是决策规则(何时用、参数怎么填)。
  3. 以为改参数默认值能引导 AI:不如老老实实写进 description。

今日小练习

  1. 必做:故意把get_weather的 description 改成"获取股票行情",问"北京天气如何",观察 AI 的困惑或错误调用——反向证明 AI 真的在读说明书。
  2. 进阶:写两个功能相近的工具(如"查天气"和"查空气质量"),精心设计边界描述,测试 10 个刁钻问题,看 AI 能否稳定选对。

明日预告

Day 10:原生 SDK 的样板代码越写越多?从今天起进入 LangChain——把重复劳动打包成"积木"。


附录:完整练习代码

openAITools2.py

importosimportjsonfromdotenvimportload_dotenvfromopenaiimportOpenAI load_dotenv()client=OpenAI(api_key=os.getenv("YUMC_MODEL_API_KEY"),base_url=os.getenv("YUMC_MODEL_BASE_URL"),)# 1.定义一个普通的Python 函数defget_weather(location:str)->str:"""模拟获取天气的函数"""if"北京"inlocation:return"晴天,25度"elif"上海"inlocation:return"雷阵雨,28度"return"未知天气"tools=[{"type":"function","function":{"name":"get_weather","description":"需要查询天气的城市名称,例如:北京、上海、纽约。如果用户没有指定具体城市,请询问用户。","parameters":{"type":"object","properties":{"location":{"type":"string","description":"城市名"}},"required":["location"],},},}]messages=[{"role":"user","content":"今天北京和上海的天气怎么样?"}]response=client.chat.completions.create(model="yumcode-pro",messages=messages,tools=tools,tool_choice="auto")ai_message=response.choices[0].message messages.append(ai_message)ifai_message.tool_calls:fortool_callinai_message.tool_calls:func_name=tool_call.function.name func_args=json.loads(tool_call.function.arguments)print(f"AI 想调用:{func_name}({func_args})")iffunc_name=="get_weather":result=get_weather(**func_args)print(f"本地函数执行结果:{result}")messages.append({"role":"tool","tool_call_id":tool_call.id,"content":result})final_response=client.chat.completions.create(model="yumcode-pro",messages=messages)print("\nAI 最终回复:",final_response.choices[0].message.content)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询