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 集合中
这里有几点需要注意:
- 如果第一次运行 tool 时返回的是错误信息,openai 可能会让重新运行 tool,但是返回的 tool_call_id 是不变的,这时不能把错误的结果与正确的结果都返回给 openai,不然会出现错误
- 需要 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%免费】🆓