import os import json from openai import OpenAI def deepseek(user_query, need_extra=False): """ 调用 deepseek 接口生成回答。 参数: user_query (str): 用户输入的查询内容。 need_extra (bool): 是否额外返回 usage 信息(completion_tokens),默认为 False。 返回: 如果 need_extra 为 True,则返回一个元组 (full_response, completion_tokens); 否则仅返回 full_response。 """ client = OpenAI( # 如果没有配置环境变量,请直接将 api_key 替换为实际的 API Key,例如:api_key="sk-xxx" api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", ) # 调用接口,开启流式输出并包含 usage 信息 completion = client.chat.completions.create( model="deepseek-r1-distill-qwen-32b", temperature=0.5, messages=[ {'role': 'user', 'content': user_query} ], stream=True, stream_options={"include_usage": True} ) full_response = "" completion_tokens = 0 for chunk in completion: # 解析 chunk 数据:优先使用 to_dict 方法,否则采用 model_dump_json 进行转换 if hasattr(chunk, 'to_dict'): chunk_data = chunk.to_dict() else: chunk_data = json.loads(chunk.model_dump_json()) # 处理 usage 信息 usage = chunk_data.get('usage') if usage is not None: completion_tokens = usage.get('completion_tokens', 0) # 处理 choices 信息 choices = chunk_data.get('choices', []) if choices: choice = choices[0] delta = choice.get('delta', {}) content = delta.get('content', '') if content: full_response += content # 如需实时输出可取消注释下面一行 print(content, end='', flush=True) # 若需要处理完成原因,可在此处增加相应逻辑 if choice.get('finish_reason'): pass # 根据 need_extra 决定返回值 if need_extra: return full_response, completion_tokens else: return full_response # 示例调用 if __name__ == "__main__": query = "1+1等于几?请用json格式回答,键名为'答案',键值为你的回答" result = deepseek(query, need_extra=True) print("\n完整内容为:", result)