python+openai+tavily实现ai分步骤深度研究deepresearch前后端代码

代码语言:python

所属分类:人工智能

代码描述:python+openai+tavily实现ai分步骤深度研究deepresearch前后端代码,这里使用了兼容openai的qwen系统api与模型,改成兼容openai的其他模型即可。

代码标签: python openai tavily ai 分步骤 深度 研究 deep research

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

#!/usr/local/python3/bin/python3
# -*- coding: utf-8 -*
import asyncio
import os
import json
# 移除 playwright 导入: from playwright.async_api import async_playwright, Page
import requests # 添加 requests 导入
from openai import AsyncOpenAI
from dotenv import load_dotenv
import re # 用于清理文本
import uuid # 用于生成唯一目录名
import datetime # 用于时间戳

# 加载环境变量
load_dotenv()


# 从环境变量获取API Key
API_KEY = "sk-"#os.getenv("OPENAI_API_KEY")
BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1"#os.getenv("OPENAI_BASE_URL") # 新增:获取 Base URL
TAVILY_API_KEY ="tvly-"#os.getenv("TAVILY_API_KEY") # 新增:获取 Tavily Key



# 初始化 OpenAI 客户端
client = AsyncOpenAI(base_url=BASE_URL,api_key=API_KEY)
TEXT_MODEL = "qwen-max" # 或根据需要选用其他模型,如 gpt-3.5-turbo

# --- 1. 任务分解函数 (保持不变) ---
async def decompose_research_topic(topic: str) -> list[str] | None:
    # ... existing code ...
    print(f"--- 正在分解研究主题: {topic} ---")
    prompt_messages = [
        {
            "role": "system",
            "content": """
            你是一个研究规划助手。请将用户提供的复杂研究主题或问题分解成一系列逻辑清晰、可按顺序执行的子任务或子问题。
            这些子任务应有助于逐步深入理解主题。请以 JSON 格式返回结果,包含一个名为 "sub_tasks" 的数组,数组中的每个元素是一个描述子任务的字符串。
            例如:{"sub_tasks": ["定义核心概念", "搜索相关背景信息", "分析主要观点", "查找案例研究", "总结发现"]}
            确保步骤逻辑连贯且有助于深入研究。
            """,
        },
        {
            "role": "user",
            "content": f"请分解以下研究主题:'{topic}'",
        },
    ]
    try:
        response = await client.chat.completions.create(
            model=TEXT_MODEL,
            messages=prompt_messages,
            response_format={"type": "json_object"},
            max_tokens=1000,
            temperature=0.1,
        )
        if response.choices and response.choices[0].message and response.choices[0].message.content:
            content = response.choices[0].message.content.strip()
            print(f"--- AI 任务分解原始响应 ---\n{content}\n--------------------------")
            try:
                task_data = json.loads(content)
                if isinstance(task_data.get("sub_tasks"), list):
                    print("--- 分解得到的子任务 ---")
                    for i, task in enumerate(task_data["sub_tasks"]):
                        print(f"{i+1}. {task}")
                    print("------------------------")
                    return task_data["sub_tasks"]
                else:
                    print("错误: AI 响应中未包含有效的 'sub_tasks' 列表。")
                    return None
            ex.........完整代码请登录后点击上方下载按钮下载查看

网友评论0