微信扫码
添加专属顾问
我要投稿
import openaiimport osfrom math import *from icecream import icimport json# 加载 .env 文件from dotenv import load_dotenv, find_dotenv_ = load_dotenv(find_dotenv())# 从环境变量中获得你的 OpenAI Keyopenai.api_key = os.getenv('OPENAI_API_KEY')openai.api_base = os.getenv('OPENAI_API_URL')model = os.getenv('MODEL')# 基于 prompt 生成文本def get_completion3(messages, model=model):response = openai.ChatCompletion.create(# 注意,以前的 openai.ChatCompletion 要换成 openai.chat.completionsmodel=model,messages=messages,temperature=0,# 模型输出的随机性,0 表示随机性最小tools=[{# 用 JSON 描述函数。可以定义多个。由大模型决定调用谁"type": "function","function": {"name": "sum","description": "计算一组数的加和","parameters": {"type": "object","properties": {"numbers": {"type": "array","items": {"type": "number"}}}}}}],)return response.choices[0].messagedef test_promopt():prompt = "Tell me the sum of 1, 2, 3, 4, 5, 6, 7, 8, 9, 10."#prompt = "桌上有 2 个苹果,四个桃子和 3 本书,一共有几个水果?"#prompt = "1+2+3...+99+100"messages = [{"role": "system", "content": "你是一个小学数学老师,你要教学生加法"},{"role": "user", "content": prompt}]response = get_completion3(messages)# 把大模型的回复加入到对话历史中if (response.content is None):# 解决 OpenAI 的一个 400 bugresponse.content = "null"messages.append(response)# 如果返回的是函数调用结果,则打印出来if (response.tool_calls is not None):# 是否要调用 sumtool_call = response.tool_calls[0]if (tool_call.function.name == "sum"):# 调用 sumargs = json.loads(tool_call.function.arguments)result = sum(args["numbers"])# 把函数调用结果加入到对话历史中messages.append({"tool_call_id": tool_call.id,# 用于标识函数调用的 ID"role": "tool","name": "sum","content": str(result)# 数值result 必须转成字符串})# 再次调用大模型ic("=====最终回复=====")ic(get_completion3(messages).content)if __name__ == '__main__':test_promopt()
ic| '=====最终回复====='ic| get_completion3(messages).content: 'The sum of 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 is 55.'
import openaiimport osfrom math import *from icecream import icimport jsonfrom math import *# 加载 .env 文件from dotenv import load_dotenv, find_dotenv_ = load_dotenv(find_dotenv())# 从环境变量中获得你的 OpenAI Keyopenai.api_key = os.getenv('OPENAI_API_KEY')openai.api_base = os.getenv('OPENAI_API_URL')model = os.getenv('MODEL')# 基于 prompt 生成文本def get_completion(messages, model=model):response = openai.ChatCompletion.create(# 注意,以前的 openai.ChatCompletion 要换成 openai.chat.completionsmodel=model,messages=messages,temperature=0,# 模型输出的随机性,0 表示随机性最小tools=[{"type": "function","function": {"name": "calculate","description": "计算一个数学表达式的值","parameters": {"type": "object","properties": {"expression": {"type": "string","description": "a mathematical expression in python grammar.",}}}}}],)return response.choices[0].messagedef test_promopt():#prompt = "从1加到10"prompt = "3的平方根乘以2再开平方"messages = [{"role": "system", "content": "你是一个数学家,你可以计算任何算式。"},{"role": "user", "content": prompt}]response = get_completion(messages)if (response.content is None):# 解决 OpenAI 的一个 400 bugresponse.content = "null"messages.append(response)# 把大模型的回复加入到对话中ic("=====GPT回复=====")ic(response)# 如果返回的是函数调用结果,则打印出来if (response.tool_calls is not None):# 是否要调用 sumtool_call = response.tool_calls[0]if (tool_call.function.name == "calculate"):# 调用 calculateargs = json.loads(tool_call.function.arguments)result = eval(args["expression"])ic("=====函数返回=====")ic(result)# 把函数调用结果加入到对话历史中messages.append({"tool_call_id": tool_call.id,# 用于标识函数调用的 ID"role": "tool","name": "calculate","content": str(result)# 数值result 必须转成字符串})# 再次调用大模型ic("=====最终回复=====")ic(get_completion(messages).content)if __name__ == '__main__':test_promopt()
ic| '=====GPT回复====='ic| response: <OpenAIObject at 0x1a97b6d3480> JSON: {"role": "assistant","content": "null","tool_calls": [{"id": "call_jSVjTMqMIMUHYCpDisvpYInp","type": "function","function": {"name": "calculate","arguments": "{\"expression\":\"((3**0.5)*2)**0.5\"}"}}]}ic| '=====函数返回====='ic| result: 1.8612097182041991ic| '=====最终回复====='ic| get_completion(messages).content: '3的平方根乘以2再开平方的结果约为1.8612。'import openaiimport osfrom math import *from icecream import icimport jsonfrom math import *import requestsimport logging# 设置日志记录配置logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')# 加载 .env 文件from dotenv import load_dotenv, find_dotenv_ = load_dotenv(find_dotenv())# 从环境变量中获得你的 OpenAI Keyopenai.api_key = os.getenv('OPENAI_API_KEY')openai.api_base = os.getenv('OPENAI_API_URL')model = os.getenv('MODEL')amap_key = os.getenv('GAODE_MAP_API_KEY')def get_completion(messages, model=model):response = openai.ChatCompletion.create(model=model,messages=messages,temperature=0,# 模型输出的随机性,0 表示随机性最小tools=[{"type": "function","function": {"name": "add_contact","description": "添加联系人","parameters": {"type": "object","properties": {"name": {"type": "string","description": "联系人姓名"},"address": {"type": "string","description": "联系人地址"},"tel": {"type": "string","description": "联系人电话"},}}}}],)return response.choices[0].messagedef test_promopt():prompt = "帮我寄给星城老谭,地址是湖南省长沙市岳麓区湘江壹号8楼,电话18874868888。"messages = [{"role": "system", "content": "你是一个联系人录入员。"},{"role": "user", "content": prompt}]response = get_completion(messages)logging.info("====GPT回复====")logging.info(response)args = json.loads(response.tool_calls[0].function.arguments)logging.info("====函数参数====")logging.info(args)if __name__ == '__main__':test_promopt()
2024-06-05 13:31:30,121 - INFO - ====GPT回复====2024-06-05 13:31:30,124 - INFO - {"role": "assistant","content": null,"tool_calls": [{"id": "call_QEnFRbZRBs2Eww4YbUxP7oKv","type": "function","function": {"name": "add_contact","arguments": "{\"name\":\"\u661f\u57ce\u8001\u8c2d\",\"address\":\"\u6e56\u5357\u7701\u957f\u6c99\u5e02\u5cb3\u9e93\u533a\u6e58\u6c5f\u58f9\u53f78\u697c\",\"tel\":\"18874868888\"}"}}]}2024-06-05 13:31:30,124 - INFO - ====函数参数====2024-06-05 13:31:30,125 - INFO - {'name': '星城老谭', 'address': '湖南省长沙市岳麓区湘江壹号8楼', 'tel': '1887486XXXX'}53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2025-10-30
Cursor 2.0的一些有趣的新特性
2025-10-30
Anthropic 发布最新研究:LLM 展现初步自省迹象
2025-10-30
让Agent系统更聪明之前,先让它能被信任
2025-10-30
Rag不行?谷歌DeepMind同款,文档阅读新助手:ReadAgent
2025-10-29
4大阶段,10个步骤,助你高效构建企业级智能体(Agent)
2025-10-29
DocReward:让智能体“写得更专业”的文档奖励模型
2025-10-29
沃尔沃RAG实战:企业级知识库,早就该放弃小分块策略
2025-10-29
大模型的Funcation Calling是什么?
2025-08-21
2025-08-21
2025-08-19
2025-09-16
2025-10-02
2025-09-08
2025-09-17
2025-08-19
2025-09-29
2025-08-20
2025-10-29
2025-10-29
2025-10-28
2025-10-28
2025-10-27
2025-10-26
2025-10-25
2025-10-23