+
98
-

回答

我以chatgpt和python为例实现一个对话过程中条用functioncall的过程,其他兼容openai的国内大模型也可以使用

800_auto

800_auto

代码如下:

from openai import OpenAI

# 初始化 OpenAI 客户端
client = OpenAI(api_key="",base_url="https://api.openai.com/v1")

# 定义可用的工具(Function Call)
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "获取指定城市的天气信息",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "城市名称,例如:北京"
                    }
                },
                "required": ["location"]
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "calculate_math",
            "description": "计算数学表达式",
            "parameters": {
                "type": "object",
                "properties": {
                    "expression": {
                        "type": "string",
                        "description": "数学表达式,例如:2 + 3 * 4"
                    }
                },
                "required": ["expression"]
            }
        }
    }
]

# 模拟工具调用
def call_tool(function_name, arguments):
    if function_name == "get_weather":
        location = arguments["location"]
        # 这里可以调用实际的天气 API
        return f"{location}的天气是晴天,25℃。"
    elif function_name == "calculate_math":
        expression = arguments["expression"]
        # 这里可以调用计算逻辑
        return f"计算结果:{eval(expression)}"
    else:
        return "未知工具"

# 主对话函数
def chat_with_assistant():
    messages = [{"role": "system", "content": "你是一个智能助手,可以帮助用户查询天气或计算数学表达式。"}]
    
    while True:
        # 获取用户输入
        user_input = input("用户: ")
        if user_input.lower() in ["退出", "再见"]:
            print("助手: 再见!")
            break
        
        # 将用户输入添加到消息中
        messages.append({"role": "user", "content": user_input})
        
        # 调用 OpenAI API
        response = client.chat.completions.create(
            model="gpt-3.5-turbo",  # 使用 GPT-3.5 模型
            messages=messages,
            tools=tools,
            tool_choice="auto"  # 自动选择是否调用工具
        )
        
        # 获取助手的回复
        assistant_message = response.choices[0].message
        messages.append({"role": assistant_message.role, "content": assistant_message.content})
        
        # 检查是否需要调用工具
        if assistant_message.tool_calls:
            for tool_call in assistant_message.tool_calls:
                function_name = tool_call.function.name
                arguments = eval(tool_call.function.arguments)
                
                # 调用工具并获取结果
                tool_result = call_tool(function_name, arguments)
                
                # 将工具结果添加到消息中,并包含 tool_call_id
                messages.append({
                    "role": "tool",
                    "name": function_name,
                    "content": tool_result,
                    "tool_call_id": tool_call.id  # 添加 tool_call_id
                })
                
                # 将工具结果返回给用户
                print(f"助手: {tool_result}")
        else:
            # 直接返回助手的回复
            print(f"助手: {assistant_message.content}")

# 启动对话
if __name__ == "__main__":
    chat_with_assistant()

网友回复

我知道答案,我要回答