当前位置: 首页 > 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,并根据实际情况修改文件路径和用户提示信息。

http://www.dtcms.com/a/177434.html

相关文章:

  • 光伏“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)
  • 猫咪如厕检测与分类识别系统系列~进阶【一】视频流推流及网页实时展示
  • 如何测试 esp-webrtc-solution_solutions_doorbell_demo 例程?
  • 【Python】通过`Editable Install`模式详解,解决Python开发总是import出错的问题
  • 电商双11美妆数据分析(二)
  • Python案例实战《水果识别模型训练及调用》
  • 写个远程操作Android的调试程序
  • OpenMVS 的编译与运行
  • 电子电器架构 --- 48V架构的一丢丢事情
  • 2014年写的一个文档《基于大数据应用的综合健康服务平台研发及应用示范》
  • 【性能工具】一种简易hook bitmap创建的插件使用
  • 单片机-STM32部分:7、GPIO输入 按键