yxl
2025-02-19 3dc17dbcb1fb1d64c469deed1518d1817846b452
src/views/chartView/index.vue
@@ -22,12 +22,14 @@
  getAgentIntention,
  getAgentLayerList,
  getAgentThistorySave,
  getRagAgentIntention,
} from "../../api/api.js";
import mapSetFunc from "../../assets/js/mapSetFunc.js";
import { nanoid } from "nanoid";
import mapServer from "../../assets/js/map/mapServer.js";
import mapImg from "../../assets/js/map/mapImg.js";
import mapModel from "../../assets/js/map/mapModel.js";
import { marked } from "marked";
export default {
  name: "jwChat",
@@ -106,12 +108,6 @@
        this.setRagMoreList(res);
      }
    });
    // axios.get("http://192.168.11.89:12315/Markdown.md").then((response) => {
    //     if (response.status == 200) {
    //       console.log(response);
    //       this.setMarkDownInfo(response.data);
    //     }
    //   });
  },
  methods: {
    createSocket() {
@@ -147,7 +143,7 @@
      const item = {
        sourceType: "Tileset",
        name: "MilitaryFacilities",
        url: "/data-api/gisserver/c3dserver/sedb_DESKTOP-15DOTHJ_SEM4550/tileset.json",
        url: config.modelUrl,
      };
      setTimeout(() => {
        mapServer.addServer(item);
@@ -249,13 +245,8 @@
      this.$store.state.setListColor = [];
      this.$store.state.showLenged = false;
      this.$store.state.showRelationBox = false;
      // const formData = new FormData();
      // formData.append("message", res);
      // formData.append("lib_id", "No1");
      // formData.append("session_id", this.uuid.toString());
      const formData = {
        message: res,
        message: res.replace(/\s+/g, ""),
        lib_id: "No1",
        session_id: this.uuid.toString(),
      };
@@ -268,65 +259,247 @@
        update_time: "",
        userid: 0,
      };
      getAgentThistorySave(obj).then((response) => {
        if (response.code == 200) {
          obj.id = response.id;
          this.obj = obj;
        }
        this.setAgentIntention(obj, formData);
        if (formData.message.indexOf("@map") > -1) {
          this.setAgentIntention(obj, formData);
        } else {
          this.setRagAgentIntention(obj, formData);
        }
      });
    },
    //地图相关问答
    async setAgentIntention(obj, formData) {
      console.log("obj", formData);
      getAgentIntention(formData)
        .then((response) => {
          if (response.code != 200) {
            if (formData.message != "@map") {
      if (formData.message.indexOf("@map") > -1) {
        getAgentIntention(formData)
          .then((response) => {
            if (response.code != 200) {
              if (formData.message != "@map") {
                var rolMsg = [
                  {
                    type: "text",
                    val: "未查询到相关信息。",
                  },
                ];
                this.refashMsg(rolMsg);
              }
              return;
            }
            const type = response.type;
            //普通对话信息查询
            if (type == "message" || type == "Rag") {
              //关闭地图
              if (!this.closeMap) {
                this.$store.state.setScreenFlag = false;
              }
              var rolMsg = [
                {
                  type: "text",
                  val: "未查询到相关信息。",
                  val: type == "Rag" ? response.content : response.msg,
                },
              ];
              this.refashMsg(rolMsg);
            }
            return;
          }
          const type = response.type;
          //普通对话信息查询
          if (type == "message" || type == "Rag") {
            //关闭地图
            if (!this.closeMap) {
              this.$store.state.setScreenFlag = false;
            //地图查询
            else {
              //打开地图
              this.$store.state.setScreenFlag = true;
              this.setMapfunc(response.content, obj);
            }
          })
          .catch((error) => {
            var rolMsg = [
              {
                type: "text",
                val: type == "Rag" ? response.content : response.msg,
                val: "未查询到相关信息。",
              },
            ];
            this.refashMsg(rolMsg);
          }
          //地图查询
          else {
            //打开地图
            this.$store.state.setScreenFlag = true;
            this.setMapfunc(response.content, obj);
          }
        })
        .catch((error) => {
          });
      } else {
        getRagAgentIntention(formData).then((res) => {});
      }
      // getAgentIntention(formData)
      //   .then((response) => {
      //     if (response.code != 200) {
      //       if (formData.message != "@map") {
      //         var rolMsg = [
      //           {
      //             type: "text",
      //             val: "未查询到相关信息。",
      //           },
      //         ];
      //         this.refashMsg(rolMsg);
      //       }
      //       return;
      //     }
      //     const type = response.type;
      //     //普通对话信息查询
      //     if (type == "message" || type == "Rag") {
      //       //关闭地图
      //       if (!this.closeMap) {
      //         this.$store.state.setScreenFlag = false;
      //       }
      //       var rolMsg = [
      //         {
      //           type: "text",
      //           val: type == "Rag" ? response.content : response.msg,
      //         },
      //       ];
      //       this.refashMsg(rolMsg);
      //     }
      //     //地图查询
      //     else {
      //       //打开地图
      //       this.$store.state.setScreenFlag = true;
      //       this.setMapfunc(response.content, obj);
      //     }
      //   })
      //   .catch((error) => {
      //     var rolMsg = [
      //       {
      //         type: "text",
      //         val: "抱歉,服务器似乎出了点问题,我们正在修复中。",
      //       },
      //     ];
      //     this.refashMsg(rolMsg);
      //   });
    },
    //普通对话问答
    async setRagAgentIntention(obj, formData) {
      try {
        // 发送请求
        const params = new URLSearchParams(formData);
        const url = `/rag-api/rag?${params.toString()}`;
        let response = await fetch(url, {
          method: "get",
          responseType: "stream",
          headers: {
            "Content-Type": "application/json",
          },
        });
        // ok字段判断是否成功获取到数据流
        if (!response.ok) {
          var rolMsg = [
            {
              type: "text",
              val: "抱歉,服务器似乎出了点问题,我们正在修复中。",
              val: "未查询到相关信息。",
            },
          ];
          this.refashMsg(rolMsg);
        });
          return;
        }
        // 用来获取一个可读的流的读取器(Reader)以流的方式处理响应体数据
        const reader = response.body.getReader();
        // 将流中的字节数据解码为文本字符串
        const textDecoder = new TextDecoder();
        let result = true;
        let thinkMsg = false;
        let sqlValue = "";
        let afterText = "";
        while (result) {
          // done表示流是否已经完成读取  value包含读取到的数据块
          const { done, value } = await reader.read();
          if (done) {
            result = false;
            this.setUpdateHistoryInFor(obj, sqlValue);
            console.log(sqlValue, "sqlValue-----");
            break;
          }
          let resText = textDecoder.decode(value);
          //包含<think>停止输出
          //包含</think>继续输出
          console.log(resText, "返回的数据");
          if (resText.indexOf("<think>") > -1) {
            resText = resText.replace(/<think>/, "");
            thinkMsg = true;
            sqlValue += resText;
            var rolMsg = [
              {
                type: "stream",
                thinkMsg: thinkMsg,
                val: marked(sqlValue),
              },
            ];
            this.refashMsg(rolMsg);
          } else if (resText.indexOf("</think>") > -1) {
            let position = resText.indexOf("</think>");
            //</think>之前的内容
            const beforeText = resText.substring(0, position);
            //刷新
            sqlValue += beforeText;
            var rolMsg = [
              {
                type: "stream",
                thinkMsg: thinkMsg,
                val: marked(sqlValue),
              },
            ];
            this.refashMsg(rolMsg);
            thinkMsg = false;
            // </think>之后的内容
            const afterT = resText.substring(position + "</think>".length);
            //刷新
            if (afterT) {
              afterText += afterT;
              var rolMsg = [
                {
                  type: "stream",
                  thinkMsg: true,
                  val: marked(sqlValue),
                },
                {
                  type: "stream",
                  thinkMsg: false,
                  val: marked(afterText),
                },
              ];
              this.refashMsg(rolMsg);
            }
          } else {
            if (thinkMsg) {
              sqlValue += resText;
              var rolMsg = [
                {
                  type: "stream",
                  thinkMsg: thinkMsg,
                  val: marked(sqlValue),
                },
              ];
              this.refashMsg(rolMsg);
            } else {
              afterText += resText;
              var rolMsg = [
                {
                  type: "stream",
                  thinkMsg: true,
                  val: marked(sqlValue),
                },
                {
                  type: "stream",
                  thinkMsg: false,
                  val: marked(afterText),
                },
              ];
              this.refashMsg(rolMsg);
            }
          }
        }
      } catch (err) {
        var rolMsg = [
          {
            type: "text",
            val: "未查询到相关信息。",
          },
        ];
        this.refashMsg(rolMsg);
      }
    },
    setMapfunc(res, obj) {
      this.$store.state.showLenged = false;
      switch (res.func) {
@@ -496,6 +669,18 @@
          this.setUpdateHistoryInFor(obj, res.msg);
          this.refashMsg(roleMsg.list);
          break;
        case "getTAIWAN":
          mapSetFunc.init(res);
          console.log("res.data.targetinfo", res);
          const resInfo = res.data
            .map((item) => `| ${item.name} | ${item.targetinfo} |`)
            .join("\n");
          var attr = `| 名称 | 属性信息 |\n|------|------|\n` + resInfo;
          console.log("aaa", attr);
          var roleMsg = msgData.getMdData("markdown", attr);
          this.setUpdateHistoryInFor(obj, res.msg);
          this.refashMsg(roleMsg.list);
          break;
        case "attackentity":
          mapSetFunc.init(res);
          this.setUpdateHistoryInFor(obj, res.msg);