Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

agent.py 3.8KB

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