選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

agent.py 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. from .base import Base
  2. from .session import Session,Message
  3. import requests
  4. import json
  5. class Agent(Base):
  6. def __init__(self,rag,res_dict):
  7. self.id = None
  8. self.avatar = None
  9. self.canvas_type = None
  10. self.description = None
  11. self.dsl = None
  12. super().__init__(rag, res_dict)
  13. class Dsl(Base):
  14. def __init__(self,rag,res_dict):
  15. self.answer = []
  16. self.components = {
  17. "begin": {
  18. "downstream": ["Answer:China"],
  19. "obj": {
  20. "component_name": "Begin",
  21. "params": {}
  22. },
  23. "upstream": []
  24. }
  25. }
  26. self.graph = {
  27. "edges": [],
  28. "nodes": [
  29. {
  30. "data": {
  31. "label": "Begin",
  32. "name": "begin"
  33. },
  34. "id": "begin",
  35. "position": {
  36. "x": 50,
  37. "y": 200
  38. },
  39. "sourcePosition": "left",
  40. "targetPosition": "right",
  41. "type": "beginNode"
  42. }
  43. ]
  44. }
  45. self.history = []
  46. self.messages = []
  47. self.path = []
  48. self.reference = []
  49. super().__init__(rag,res_dict)
  50. @staticmethod
  51. def create_session(id,rag) -> Session:
  52. res = requests.post(f"{rag.api_url}/agents/{id}/sessions",headers={"Authorization": f"Bearer {rag.user_key}"},json={})
  53. res = res.json()
  54. if res.get("code") == 0:
  55. return Session(rag,res.get("data"))
  56. raise Exception(res.get("message"))
  57. @staticmethod
  58. def list_sessions(agent_id,rag,page: int = 1, page_size: int = 30, orderby: str = "create_time", desc: bool = True,
  59. id: str = None) -> list[Session]:
  60. url = f"{rag.api_url}/agents/{agent_id}/sessions"
  61. headers = {"Authorization": f"Bearer {rag.user_key}"}
  62. params = {"page": page, "page_size": page_size, "orderby": orderby, "desc": desc, "id": id}
  63. res = requests.get(url=url,headers=headers,params=params)
  64. res = res.json()
  65. if res.get("code") == 0:
  66. result_list = []
  67. for data in res.get("data"):
  68. temp_agent = Session(rag,data)
  69. result_list.append(temp_agent)
  70. return result_list
  71. raise Exception(res.get("message"))
  72. @staticmethod
  73. def ask(agent_id,rag,stream=True,**kwargs):
  74. url = f"{rag.api_url}/agents/{agent_id}/completions"
  75. headers = {"Authorization": f"Bearer {rag.user_key}"}
  76. res = requests.post(url=url, headers=headers, json=kwargs,stream=stream)
  77. for line in res.iter_lines():
  78. line = line.decode("utf-8")
  79. if line.startswith("{"):
  80. json_data = json.loads(line)
  81. raise Exception(json_data["message"])
  82. if line.startswith("data:"):
  83. json_data = json.loads(line[5:])
  84. if json_data["data"] is not True:
  85. if json_data["data"].get("running_status"):
  86. continue
  87. answer = json_data["data"]["answer"]
  88. reference = json_data["data"]["reference"]
  89. temp_dict = {
  90. "content": answer,
  91. "role": "assistant"
  92. }
  93. if "chunks" in reference:
  94. chunks = reference["chunks"]
  95. temp_dict["reference"] = chunks
  96. message = Message(rag, temp_dict)
  97. yield message