Initial commit
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
from openai import OpenAI
|
||||
import os
|
||||
|
||||
# 初始化 OpenAI 客户端
|
||||
client = OpenAI(
|
||||
api_key=os.getenv("DEEPSEEK_API_KEY"),
|
||||
base_url="https://api.deepseek.com",
|
||||
)
|
||||
|
||||
# 定义一个函数,用于发送消息并获取模型的响应
|
||||
def send_messages(messages, tools=None):
|
||||
response = client.chat.completions.create(
|
||||
model="deepseek-chat",
|
||||
messages=messages,
|
||||
tools=tools,
|
||||
tool_choice="auto", # 让模型自主决定是否调用工具
|
||||
)
|
||||
return response.choices[0].message
|
||||
|
||||
# 1. 定义工具(函数)的 Schema
|
||||
tools = [
|
||||
{
|
||||
"type": "function",
|
||||
"function": {
|
||||
"name": "get_weather",
|
||||
"description": "获取指定地点的天气信息",
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"location": {
|
||||
"type": "string",
|
||||
"description": "城市和省份,例如:杭州市, 浙江省",
|
||||
}
|
||||
},
|
||||
"required": ["location"]
|
||||
},
|
||||
}
|
||||
},
|
||||
]
|
||||
|
||||
# 1. 用户提问,模型决策调用工具
|
||||
messages = [{"role": "user", "content": "杭州今天天气怎么样?"}]
|
||||
print(f"User> {messages[0]['content']}\n")
|
||||
message = send_messages(messages, tools=tools)
|
||||
|
||||
# 2. 执行工具,并将结果返回模型
|
||||
if message.tool_calls:
|
||||
print("--- 模型发起了工具调用 ---")
|
||||
tool_call = message.tool_calls[0]
|
||||
function_info = tool_call.function
|
||||
print(f"工具名称: {function_info.name}")
|
||||
print(f"工具参数: {function_info.arguments}")
|
||||
|
||||
# 将模型的回复(包含工具调用请求)添加到消息历史中
|
||||
messages.append(message)
|
||||
|
||||
# 模拟执行工具
|
||||
tool_output = "24℃,晴朗"
|
||||
print(f"--- 执行工具并返回结果 ---")
|
||||
print(f"工具执行结果: {tool_output}\n")
|
||||
|
||||
# 将工具的执行结果作为一个新的消息添加到历史中
|
||||
messages.append({"role": "tool", "tool_call_id": tool_call.id, "content": tool_output})
|
||||
|
||||
# 3. 第二次调用:将工具结果返回给模型,获取最终回答
|
||||
print("--- 将工具结果返回给模型,获取最终答案 ---")
|
||||
final_message = send_messages(messages, tools=tools)
|
||||
print(f"Model> {final_message.content}")
|
||||
else:
|
||||
# 如果模型没有调用工具,直接打印其回答
|
||||
print(f"Model> {message.content}")
|
||||
Reference in New Issue
Block a user