让AI“动手”帮你查股票?一文带你玩转大模型 FunctionCall!

"为什么我的AI只会说话,不会帮我查数据?"

"大模型怎么才能像人一样,自动调用工具查信息?"

如果你也有这些疑惑,这篇文章一定能帮你打开新世界的大门!

一、什么是 FunctionCall?为什么它很重要?

随着大语言模型(LLM)越来越强大,很多人发现:AI 虽然能聊天、写代码,但遇到需要查实时数据、调用外部服务时,往往只能"胡说八道"------这就是所谓的"幻觉"问题。

FunctionCall 机制,就是让大模型不仅能"说",还能"做"!它能让 AI 自动调用你预设的函数,查数据、调接口、甚至操作硬件,真正成为你的"超级助手"。

现实场景举例

比如你问 AI:"青岛啤酒的收盘价是多少?"

传统 LLM 只能"猜"一个答案,但有了 FunctionCall,AI 会自动调用你写好的查股价函数,返回真实数据!

二、FunctionCall 的原理是什么?

FunctionCall 的核心思想是:
你把一组函数(工具)告诉大模型,AI 在理解用户问题后,自动决定是否调用这些函数,并把结果返回给用户。

整个流程大致如下:

  1. 用户提问(如"青岛啤酒的收盘价是多少?")
  2. LLM 判断需要查数据,自动选择合适的函数
  3. LLM 生成函数调用请求(如 get_closing_price("青岛啤酒"))
  4. 你的后端代码实际执行这个函数,拿到结果
  5. LLM 根据结果生成最终回复

三、实战:用 Python 玩转 FunctionCall

下面我们用 Deepseek 的大模型 API,手把手实现一个"查股票收盘价"的 FunctionCall 小项目。

1. 环境准备

首先,安装 openai 包(Deepseek 兼容 openai 标准):

bash 复制代码
pip install openai

准备好 API Key,并写入 .env.local 文件:

ini 复制代码
Deepseek_API_Key=你的key

2. 定义工具函数

我们要让 AI 能查股票价格,先定义一个查价函数:

python 复制代码
def get_closing_price(name):
    if name == '青岛啤酒':
        return '67.92'
    elif name == '贵州茅台':
        return '1488.21'
    else:
        return '未找到该股票'

3. 向大模型"注册"工具

通过 tools 参数,把函数的描述、参数等信息告诉 LLM:

python 复制代码
tools = [
  {
    "type": "function",
    "function": {
      "name": "get_closing_price",
      "description": "获取指定股票的收盘价",
      "parameters": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "股票名称",
          },
        },
        "required": ["name"],
      }
    }
  }
]

4. 让 LLM 自动选择并调用函数

核心代码如下:

python 复制代码
response = client.chat.completions.create(
    model='deepseek-reasoner',
    messages=messages,
    tools=tools,
    tool_choice='auto'
)

当用户提问时,LLM 会自动判断是否需要用工具,并生成调用请求。

5. 执行函数并返回结果

拿到 LLM 的 tool_calls 后,实际执行对应的 Python 函数,把结果再发给 LLM,最后由 LLM 生成最终回复。

完整流程代码片段:

python 复制代码
if response.choices[0].message.tool_calls != None:
    tool_Call = response.choices[0].message.tool_calls[0]
    if tool_Call.function.name == "get_closing_price":
        arguments_dict = json.loads(tool_Call.function.arguments)
        price = get_closing_price(arguments_dict['name'])
        messages.append({
            "role": "tool",
            "content": price,
            "tool_call_id": tool_Call.id
        })
    response = send_message(messages)
    print("回复:")
    print(response.choices[0].message.content)

四、FunctionCall 的更多玩法

FunctionCall 不止能查股票价!你可以注册任意函数,比如查天气、查快递、甚至操作数据库。

只要你能用 Python 实现的功能,都能让 LLM 自动调用。

比如:

  • 查天气:get_weather(city)
  • 查快递:get_express_info(tracking_number)
  • 控制硬件:turn_on_light(room)

五、FunctionCall 的优势与注意事项

优势

  • 极大提升 LLM 实用性:AI 不再只会"胡说八道",而是能查实情、做实事。
  • 可扩展性强:你可以随时添加新工具,AI 能力无限扩展。
  • 自动化体验好:用户无需学习命令,直接用自然语言提问即可。

注意事项

  • 工具函数要写得健壮,避免异常和安全问题
  • 工具描述要清晰,方便 LLM 理解
  • 注意接口调用频率和数据隐私

六、进阶:多轮对话与角色设定

FunctionCall 还能结合多轮对话和角色设定,打造更智能的 AI 助手。例如:

python 复制代码
messages=[
    {'role': 'system', 'content': '你是一个资深龙族粉丝...'},
    {'role': 'user', 'content': '请你告诉我楚子航的言灵是什么'},
    ...
]

LLM 会根据上下文和角色设定,自动选择合适的工具和回复风格。

七、总结

FunctionCall 让大模型从"会说话"进化到"会做事",极大拓展了 AI 的应用边界。只要你掌握了工具注册、调用流程,就能让 AI 成为你的万能助手。赶快动手试试吧!

相关推荐
鹏码纵横2 小时前
已解决:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 异常的正确解决方法,亲测有效!!!
java·python·mysql
仙人掌_lz2 小时前
Qwen-3 微调实战:用 Python 和 Unsloth 打造专属 AI 模型
人工智能·python·ai·lora·llm·微调·qwen3
猎人everest2 小时前
快速搭建运行Django第一个应用—投票
后端·python·django
猎人everest2 小时前
Django的HelloWorld程序
开发语言·python·django
chusheng18403 小时前
2025最新版!Windows Python3 超详细安装图文教程(支持 Python3 全版本)
windows·python·python3下载·python 安装教程·python3 安装教程
别勉.3 小时前
Python Day50
开发语言·python
xiaohanbao094 小时前
day54 python对抗生成网络
网络·python·深度学习·学习
爬虫程序猿4 小时前
利用 Python 爬虫按关键字搜索 1688 商品
开发语言·爬虫·python
英杰.王4 小时前
深入 Java 泛型:基础应用与实战技巧
java·windows·python
安替-AnTi4 小时前
基于Django的购物系统
python·sql·django·毕设·购物系统