当前位置: 首页 > news >正文

【Agent】使用 Python 结合 OpenAI 的 API 实现一个支持 Function Call 的程序,修改本机的 txt 文件

使用 Python 结合 OpenAI 的 API 来实现一个支持 Function Call 的程序,修改本机的 txt 文件。需要注意,在运行代码前,要确保已经安装了 openai 库,并且拥有有效的 OpenAI API Key。

import openai
import os# 设置你的 OpenAI API Key
openai.api_key = "your_api_key"# 定义修改 txt 文件的函数
def modify_txt_file(file_path, new_content):try:with open(file_path, 'w', encoding='utf-8') as file:file.write(new_content)return f"文件 {file_path} 已成功修改。"except Exception as e:return f"修改文件时出现错误: {str(e)}"# 定义函数的元数据,供 OpenAI 模型使用
functions = [{"name": "modify_txt_file","parameters": {"type": "object","properties": {"file_path": {"type": "string","description": "要修改的 txt 文件的路径"},"new_content": {"type": "string","description": "要写入文件的新内容"}},"required": ["file_path", "new_content"]}}
]# 与 OpenAI 模型交互
def chat_with_openai(prompt):response = openai.ChatCompletion.create(model="gpt-3.5-turbo-0613",messages=[{"role": "user", "content": prompt}],functions=functions,function_call="auto")message = response["choices"][0]["message"]if message.get("function_call"):function_name = message["function_call"]["name"]parameters = message["function_call"]["parameters"]if function_name == "modify_txt_file":result = modify_txt_file(parameters["file_path"], parameters["new_content"])return resultreturn message["content"]if __name__ == "__main__":# 用户输入的提示信息user_prompt = "请将 /paths/file.txt 文件的内容修改为 '这是新的文件内容。'"result = chat_with_openai(user_prompt)print(result)

代码说明:

  1. 定义修改文件的函数modify_txt_file 函数接收文件路径和新内容作为参数,尝试打开文件并将新内容写入,同时处理可能出现的异常。
  2. 定义函数元数据functions 列表中包含了 modify_txt_file 函数的元数据,描述了函数的名称、参数类型和参数描述等信息,供 OpenAI 模型识别和调用。
  3. 与 OpenAI 模型交互chat_with_openai 函数向 OpenAI 模型发送用户的提示信息,并传递函数元数据。如果模型决定调用函数,就执行相应的函数并返回结果;否则,直接返回模型的文本响应。
  4. 主程序:设置用户的提示信息,调用 chat_with_openai 函数并打印结果。

请将 "your_api_key" 替换为你自己的 OpenAI API Key,并根据实际情况修改文件路径和用户提示信息。

相关文章:

  • 光伏“531”政策倒逼下,光储充一体化系统如何破解分布式光伏收益困局?
  • VMware更改语言设置
  • 使用Go语言对接全球股票数据源API实践指南
  • 【C++进阶】第1课—继承
  • 【软件设计师:数据结构】1.数据结构基础(一)
  • 【Bootstrap V4系列】学习入门教程之 组件-轮播(Carousel)高级用法
  • linux基础学习--linux磁盘与文件管理系统
  • OC的实例对象,类对象,元类对象
  • 外包团队协作效率低,如何优化
  • python打卡day18
  • 【一篇详解】深入浅出RabbtiMQ消息队列
  • openstack的网络
  • 第十六次博客打卡
  • Qt开发经验 --- 避坑指南(6)
  • Java中字符转数字的原理解析 - 为什么char x - ‘0‘能得到对应数字
  • C++回顾 Day4
  • Web前端入门及基础代码
  • 创建虚拟服务时实现持久连接。
  • hadoop中的序列化和反序列化(1)
  • 猫咪如厕检测与分类识别系统系列~进阶【一】视频流推流及网页实时展示
  • 追光|铁皮房、土操场,这有一座“筑梦”摔跤馆
  • 洞天寻隐·学林纪丨玉洞桃源:仇英青绿山水画中的洞天与身体
  • 鸿蒙电脑正式亮相,五年布局积累超2700项核心专利
  • 习近平向“和平薪火 时代新章——纪念中国人民抗日战争和苏联伟大卫国战争胜利80周年中俄人文交流活动”致贺信
  • 印巴矛盾已达近年“最高点”:军政经文全面紧张,巴将向联合国通报局势
  • 山大齐鲁医院回应论文现“男性确诊子宫肌瘤”:给予该护士记过处分、降级处理