main.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. # main.py
  2. from fastapi import FastAPI, Request
  3. from agno.storage.sqlite import SqliteStorage
  4. from sse_starlette.sse import EventSourceResponse
  5. from agno.agent import Agent
  6. from agno.models.openai import OpenAILike
  7. from dotenv import load_dotenv
  8. import os
  9. app = FastAPI()
  10. load_dotenv()
  11. # 读取环境变量
  12. model = OpenAILike(
  13. id="qwen3-32b",
  14. api_key=os.getenv("BAILIAN_API_KEY"),
  15. base_url=os.getenv("BAILIAN_API_BASE_URL"),
  16. # request_params={"extra_body": {"enable_thinking": False}},#如果不使用流式输出记得加这句话不然会报错
  17. )
  18. # 初始化 Agent
  19. agent = Agent(
  20. model=model,
  21. instructions=(
  22. "你是一个信息收集助手,需要和用户多轮对话,收集用户的姓名、年龄和感兴趣的行业。"
  23. "请严格按照顺序提问:先问姓名,再问年龄,再问行业。"
  24. "每次只问一个问题,问完问题需要加一个?。"
  25. "用户如果输入无关内容,请提醒用户先完成信息收集,不要回答无关问题。"
  26. "用户如果拒绝回答(如‘不告诉你’),请礼貌提醒必须填写。"
  27. "收集完毕后请总结结果。"
  28. ),
  29. storage=SqliteStorage(table_name="agent_sessions", db_file="D:/pythonai/ai_learning/agno_cache/data.db"),
  30. add_history_to_messages=True,#是否自动把历史对话消息(chat history)添加到每次发送给大模型的 prompt 里。
  31. num_history_runs=20,#这里设置为 20,表示每次和模型对话时,会把最近的 20 轮(你和 Agent 的来回)历史消息一并发给模型
  32. )
  33. @app.get("/stream")
  34. async def stream(request: Request, prompt: str,session_id:str):
  35. async def event_generator():
  36. for chunk in agent.run(prompt, stream=True,session_id=session_id):
  37. if await request.is_disconnected():
  38. break
  39. if hasattr(chunk, "content") and chunk.content:
  40. yield {"data": chunk.content}
  41. return EventSourceResponse(event_generator())