chatgpt tools调用,大模型调用你学会了吗?

chatgpt tools 调用

1. 引入 openai, 创建 client

import json
import os
import subprocess

from openai import OpenAI

# api_key 可以填入自己的key
# base_url 可以使用国内的代理,海外可以使用官方地址
client = OpenAI(api_key="", base_url="https://api.openai-proxy.com/v1")

2. 创建一个 tool 的实现

这里定义的是一个执行系统命令的方法, 接受传入的命令,返回运行结果与运行错误

def do_command(command: str):

    process = subprocess.Popen(command, shell=True, stdin=subprocess.PIPE,
                               stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, encoding="utf-8")

    stdout, stderr = process.communicate()

    return {"stdout": stdout, "stderr": stderr}

3. 创建一个提供给 openai 的 tools 定义集合

在提供给 openai 时会有 schema 的校验,校验不通过时会报错,参数的类型没有 list 或者 array

tools = [{
    "type": "function",
    "function": {
        "name": "do_command",
        "description": "执行linux / windows命令",
        "parameters": {
            "type": "object",
            "properties": {
                "command": {"type": "string", "description": "输入的命令"}
            },
            "required": ["command"]
        }
    }
}]

4. 创建一个运行 tool 的方法

接收参数为 chatgpt 返回的 response 与 message 集合, 将运行完成的结果写入到集合中

如果不需要执行 tool,则将 response 的 message 添加到 message 集合中

这里有几点需要注意:

  1. 如果第一次运行 tool 时返回的是错误信息,openai 可能会让重新运行 tool,但是返回的 tool_call_id 是不变的,这时不能把错误的结果与正确的结果都返回给 openai,不然会出现错误
  2. 需要 tool_call 的场景下,不代表 content 是空的;可能一边有结果返回,一边让你再次运行;方法中没有处理运行 tool 的 message,也没有处理并行 tool 的场景(因为只有一个方法)
def parse_function_call(model_response, messages):
    _messages = messages.copy()
    _messages.append(model_response.choices[0].message.model_dump())

    if model_response.choices[0].message.tool_calls:
        tool_call = model_response.choices[0].message.tool_calls[0]
        model = model_response.model
        args = tool_call.function.arguments
        function_result = {}
        if tool_call.function.name == "do_command":
            function_result = do_command(**json.loads(args))
            _messages.append({
                "role": "tool",
                "content": f"{json.dumps(function_result)}",
                "tool_call_id": tool_call.id
            })

            print(_messages)

            response = client.chat.completions.create(
                model=model,  # 填写需要调用的模型名称
                messages=_messages,
                tools=tools,
            )
            if response.choices[0].message.tool_calls:
                parse_function_call(response, messages)
            else:
                messages.append(response.choices[0].message.model_dump())
    else:
        messages.append(model_response.choices[0].message.model_dump())

5. 运行 chatgpt,并将工具的定义作为参数传入

messages = []

messages.append({"role": "system", "content": "当前的运行环境是{}".format(os.name)})
messages.append({"role": "user", "content": "查询python的版本"})

resp = client.chat.completions.create(messages=messages, model="gpt-4o-2024-05-13", tools=tools)

parse_function_call(resp, messages)

print(messages)

运行tool的message 记录

[{'role': 'system', 'content': '当前的运行环境是nt'}, {'role': 'user', 'content': '查询python的版本'}, {'content': None, 'role': 'assistant', 'function_call': None, 'tool_calls': [{'id': 'call_f3OaTCDet0p73o2fPvTRBFIs', 'function': {'arguments': '{"command":"python --version"}', 'name': 'do_command'}, 'type': 'function'}]}, {'role': 'tool', 'content': '{"stdout": "Python 3.11.6\\n", "stderr": ""}', 'tool_call_id': 'call_f3OaTCDet0p73o2fPvTRBFIs'}]

返回结果

[{'role': 'system', 'content': '当前的运行环境是nt'}, {'role': 'user', 'content': '查询python的版本'}, {'content': '当前的Python版本是:**Python 3.11.6**。', 'role': 'assistant', 'function_call': None, 'tool_calls': None}]

6. 总结

tool 确实让chatgpt 的使用变得更加灵活,后续应该扩展为系统命令创建一个稳定的运行环境,现在是单命令的场景;message可以添加一个缓存机制,使读取与写入更加灵活一些

用openai原生的api与langchain的体验不太一样,原生的可以很明显的感受的到是基于一个message的流来进行交流

langchian的LECL也有比较方便的地方,但是对于tool的调用很别扭

---------END--------

可能大家都想学习AI大模型技术,也想通过这项技能真正达到升职加薪,就业或是副业的目的,但是不知道该如何开始学习,因为网上的资料太多太杂乱了,如果不能系统的学习就相当于是白学。为了让大家少走弯路,少碰壁,这里我直接把全套AI技术和大模型入门资料、操作变现玩法都打包整理好,希望能够真正帮助到大家。

👉AI大模型学习路线汇总👈
大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)
在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

👉大模型视频和PDF合集👈
观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述

在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值