fastapi-proxy / agent_example.py
airsltd's picture
update
ebf2eae
import requests
import json
import os
from dotenv import load_dotenv
# 加载 .env 文件中的环境变量
load_dotenv()
# 从环境变量中获取配置
# 代理服务器的地址
# 确保 anyapi.py 正在运行在 127.0.0.1:7860
BASE_URL = os.getenv("BASE_URL", "http://localhost:7860/v1/https/generativelanguage.googleapis.com/v1beta/openai")
# 目标 OpenAI 兼容 API 的完整路径
# 例如,对于智谱AI的GLM模型,其API路径可能是 https://open.bigmodel.cn/api/paas/v4/chat/completions
# 代理服务器会将其解析为协议、域名和路径
ENTER_POINT = os.getenv("ENTER_POINT", "/chat/completions")
# 完整的代理URL
API_URL = f"{BASE_URL}{ENTER_POINT}"
# 您的 API 密钥
# 注意:在实际应用中,API 密钥不应硬编码在代码中,应通过环境变量等方式安全管理。
API_KEY = os.getenv("API_KEY", "YOUR_ACTUAL_API_KEY_HERE")
MODEL_NAME = os.getenv("MODEL_NAME", "gemini-2.5-flash-preview-05-20")
def call_openai_compatible_api(prompt_message: str):
print("正在调用 OpenAI 兼容 API...")
print('prompt_message',prompt_message)
"""
调用 OpenAI 兼容 API 的示例函数。
"""
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}",
"accept-encoding": "identity"
}
payload = {
"model": f"{MODEL_NAME}", # 替换为您希望使用的模型名称,例如 "gpt-3.5-turbo", "glm-4" 等
"messages": [
{"role": "system", "content": "你是一个有用的助手。"},
{"role": "user", "content": prompt_message}
],
"stream": True # 如果需要流式响应,可以设置为 True
}
print(f"正在向代理服务器发送请求: {API_URL}")
print(f"请求头部: {headers}")
print(f"请求体: {json.dumps(payload, indent=2, ensure_ascii=False)}")
try:
response = requests.post(API_URL, headers=headers, json=payload, stream=payload.get("stream", False))
response.raise_for_status() # 如果请求返回了错误状态码,会抛出 HTTPError
print("\n代理服务器响应:")
if payload.get("stream"):
full_response_content = ""
for line in response.iter_lines():
if line:
decoded_line = line.decode('utf-8')
if decoded_line.startswith("data:"):
json_data = decoded_line[len("data:"):].strip()
if json_data == "[DONE]":
break
try:
parsed_json = json.loads(json_data)
# 打印或处理每个流式块
# print(json.dumps(parsed_json, indent=2, ensure_ascii=False))
# 假设我们只关心 content
print(json.dumps(parsed_json, indent=2, ensure_ascii=False))
full_response_content += json_data # 收集原始JSON数据
except json.JSONDecodeError as e:
print(f"JSON 解析错误: {e} - {json_data}")
print("\n--- 流式响应结束 ---")
return {"raw_stream_data": full_response_content} # 返回一个包含原始流数据的字典
else:
print(json.dumps(response.json(), indent=2, ensure_ascii=False))
return response.json()
except requests.exceptions.HTTPError as http_err:
print(f"HTTP 错误发生: {http_err}")
print(f"响应状态码: {response.status_code}")
print(f"响应体: {response.text}")
except requests.exceptions.ConnectionError as conn_err:
print(f"连接错误发生: {conn_err}")
print("请确保代理服务器 (anyapi.py) 正在运行。")
except requests.exceptions.Timeout as timeout_err:
print(f"请求超时: {timeout_err}")
except requests.exceptions.RequestException as req_err:
print(f"发生未知错误: {req_err}")
if __name__ == "__main__":
# 在运行此脚本之前,请确保:
# 1. anyapi.py 代理服务器正在运行。
# 2. 您已将 API_KEY 替换为您的实际 API 密钥。
# 3. 您已安装 requests 库 (pip install requests)。
user_query = "你好!请介绍一下你自己。"
call_openai_compatible_api(user_query)
# 您可以尝试不同的查询
# call_openai_compatible_api("请给我讲一个关于人工智能的笑话。")