你好,我是方可乐。
一个正在深耕AI编程的30+的AI应用开发工程师。
用AI编程开发过Web应用网站,浏览器插件,微信小程序,AI智能体,RAG系统。
关注公众号&添加微信:ThinkFun666
领取【AI编程资料包】
去年6月份,我做了一个连自己都觉得疯狂的决定:裸辞,All in AI。
现在已经换赛道成功,继续在工作中探索。
学过前几节课后,我们已经能够将多个步骤像流水线一样组织起来。
但是,你可能已经发现:流水线再怎么丝滑,本质上还是“模型+Prompt”的组合,用的只是模型本身的回答能力。并不能很好地和我们的实际业务结合起来。
这时候,就要上新知识了:Agent和Tool,这节课教你让 AI 会用工具
Agent 是能根据上下文动态选择工具的“小助手”,类型有多种。
这节课我们主要讲Tool Calling Agent,它是最常用的一个agent,能够利用模型的 function calling能力,调用Tool。
Tool 本质上就是一个包装过的 Python 函数。
推荐写法是这样的(以一个密码生成器作为tool举例):
from langchain.tools import tool
@tool("password_generator", return_direct=True)
def generate_password(level: str) -> str:
"""根据复杂度生成密码,复杂度可选:low / medium / high"""
...
return password
-
• @tool("工具名"):注册工具名,Agent 才能调用。 -
• return_direct=True:工具的返回结果直接作为输出返回。 -
• 函数的 docstring 必须写清楚输入和输出,模型才知道怎么用。
老规矩,上代码,我们来进行一个完整的实战。
新建文件10_tool.py
import os
import random
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.tools import tool
from langchain.prompts import ChatPromptTemplate
from langchain.agents import create_tool_calling_agent, AgentExecutor
load_dotenv()
# 1. 初始化 LLM(这里用 DeepSeek,支持 OpenAI 接口)
base_url = os.getenv("DEEPSEEK_BASE_URL", "https://api.deepseek.com/v1")
llm = ChatOpenAI(model="deepseek-chat", base_url=base_url, api_key=os.getenv("DEEPSEEK_API_KEY"), temperature=0)
# 2. 自定义工具
@tool("password_generator", return_direct=True)
def generate_password(level: str) -> str:
"""根据复杂度生成密码,复杂度可选:low / medium / high"""
chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
special = "!@#$%^&*()_+-=[]{}|;:,.<>?"
length = {"low": 6, "medium": 10, "high": 16}.get(level, 8)
pool = chars + special if level == "high" else chars
return "".join(random.choice(pool) for _ in range(length))
# 3. 构建 Agent
tools = [generate_password]
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个密码生成助手。根据用户的自然语言需求,决定是否调用工具来生成密码。"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}"),
])
agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=False)
print("=== 密码生成助手(支持 low / medium / high)===\n")
print("试试输入:'帮我生成一个 high 强度密码',输入 quit 退出。\n")
while True:
user_input = input("你:")
if user_input.lower() in ["quit", "exit", "退出"]:
print("退出。")
break
result = agent_executor.invoke({"input": user_input})
print("AI:", result["output"], "\n")
verbose如果改为True,你就可以看到,AI到底传入什么参数到Tool中。
是不是很强?
Function call的能力,就像是AI的手,Tool则是各种各样的工具。
我们可以把我们的业务函数,封装成Tool,给agent调用,从而帮助我们自动完成任务。
对AI应用开发感兴趣的同学,欢迎加微信申请入群交流学习。
想要学习AI应用开发的同学,可以参照我的代码跑起来,举一反三,一天一个脚印的进步,我相信,会足够坚实。
接下来100天,我会记录从Java程序员到AI应用开发工程师的完整转型路:每一个困惑、每一次突破、每一个真实瞬间。
当前是28/100。
如果你也想了解AI应用开发到底是什么,如果你也在考虑转型但还在犹豫,那就跟着我的记录,一起探索。
继续折腾中,有问题随时交流 🤝
微信号:ThinkFun666
我的免费AI编程交流群,欢迎加入讨论AI编程玩法(加我微信,说明需求和来意,申请入群)
推荐阅读:
我就喜欢干这种傻事!为什么转型AI应用开发,我不建议你直接从看书开始学起?

