qwen.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import asyncio
  2. import dashscope
  3. class QwenClient:
  4. def __init__(self):
  5. self.api_key = "sk-1022fe8e15ff4e0e9abc20541b281165"
  6. async def search_and_chat(
  7. self,
  8. model="qwen3-max",
  9. system_prompt="You are a helpful assistant.",
  10. user_prompt="",
  11. search_strategy="max",
  12. ):
  13. """
  14. 异步搜索并聊天(async 包装)
  15. """
  16. def _call_api():
  17. messages = [
  18. {"role": "system", "content": system_prompt},
  19. {"role": "user", "content": user_prompt},
  20. ]
  21. response = dashscope.Generation.call(
  22. api_key=self.api_key,
  23. model=model,
  24. messages=messages,
  25. enable_search=True,
  26. search_options={
  27. "forced_search": True,
  28. "enable_source": True,
  29. "search_strategy": search_strategy,
  30. },
  31. result_format="message",
  32. )
  33. if response.status_code != 200:
  34. raise Exception(f"API调用失败: {response.message}")
  35. content = response["output"]["choices"][0]["message"]["content"]
  36. search_results = []
  37. if hasattr(response.output, "search_info") and response.output.search_info:
  38. search_results = response.output.search_info.get("search_results", [])
  39. return {"content": content, "search_results": search_results}
  40. # 🔹 用 to_thread 包装同步逻辑变成异步任务
  41. return await asyncio.to_thread(_call_api)
  42. if __name__ == "__main__":
  43. client = QwenClient()
  44. # 测试
  45. try:
  46. # result = client.chat(user_prompt="hello")
  47. # print(result)
  48. user_prompt = """你是一个专业的信息搜索专家,负责从网络中搜索某个工具的页面操作路径
  49. **名词解释**
  50. 页面操作路径:表示在网页上使用某个工具完成某个功能需要进行的必要操作。通常是分步骤操作,最后形成一个完整的页面操作路径。
  51. 比如:1. 打开xxx网站, 2. 输入xxx提示词, 3. 点击确认按钮, 4. 等待图片生成完成, 5. 返回图片的url
  52. **任务目标**
  53. 搜索并整理 新红热搜词榜单功能 的页面操作路径
  54. **数据要求**
  55. - 操作页面必须是官方网站,排除任何第三方网站、移动端APP、PC软件
  56. - 页面操作路径数据最好有详细的操作步骤,如果没有,也可以是简单的操作步骤描述。步骤中如果包含账号注册/登录,需要去除,我们假设网站已经成功登录了
  57. - 页面操作路径数据要排除关于API的调用数据
  58. - 保留原始链接用于追溯,输出在 content_link 字段
  59. - 整理工具的核心功能名称和功能描述
  60. - 如果有多份数据,保留和任务目标最相关的一份数据即可
  61. **输出要求:**
  62. 严格按照以下JSON格式输出,不添加任何其他文字说明:
  63. {
  64. "content_link": "原始链接地址",
  65. "功能名称": "具体功能名称",
  66. "功能描述": "功能用途和作用描述",
  67. "页面操作路径": "完整的页面操作路径"
  68. }"""
  69. # user_prompt = "请搜索 白瓜AI 官网"
  70. result = client.search_and_chat(
  71. user_prompt=user_prompt, search_strategy="agent"
  72. )
  73. print("=" * 20 + "搜索结果" + "=" * 20)
  74. for web in result["search_results"]:
  75. print(f"[{web['index']}]: [{web['title']}]({web['url']})")
  76. print("=" * 20 + "回复内容" + "=" * 20)
  77. print(result["content"])
  78. except Exception as e:
  79. print(f"错误: {e}")