让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 成为你的万能助手。赶快动手试试吧!

相关推荐
何双新13 分钟前
基于Tornado的WebSocket实时聊天系统:从零到一构建与解析
python·websocket·tornado
AntBlack1 小时前
从小不学好 ,影刀 + ddddocr 实现图片验证码认证自动化
后端·python·计算机视觉
凪卄12131 小时前
图像预处理 二
人工智能·python·深度学习·计算机视觉·pycharm
巫婆理发2221 小时前
强化学习(第三课第三周)
python·机器学习·深度神经网络
EdisonZhou1 小时前
多Agent协作入门:群聊编排模式
llm·aigc·.net core
seasonsyy1 小时前
1.安装anaconda详细步骤(含安装截图)
python·深度学习·环境配置
半新半旧2 小时前
python 整合使用 Redis
redis·python·bootstrap
Blossom.1182 小时前
基于深度学习的图像分类:使用Capsule Networks实现高效分类
人工智能·python·深度学习·神经网络·机器学习·分类·数据挖掘
CodeCraft Studio2 小时前
借助Aspose.HTML控件,在 Python 中将 HTML 转换为 Markdown
开发语言·python·html·markdown·aspose·html转markdown·asposel.html
悠哉悠哉愿意3 小时前
【电赛学习笔记】MaxiCAM 项目实践——与单片机的串口通信
笔记·python·单片机·嵌入式硬件·学习·视觉检测