国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

AI論文生成系統(tǒng)JAVA代碼簡單實現(xiàn)

這篇具有很好參考價值的文章主要介紹了AI論文生成系統(tǒng)JAVA代碼簡單實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?????? 大學開學了,博主的堂弟現(xiàn)在正值大四,論文是分毫未動,想要用國內網上的AI輔助寫作擬一篇文章進行完成,剛好聊天了解此事,我有點感興趣,去百度了一下,各個AI生成網站價格不菲,臨時起意想做一個AI代碼生成程序,當然這種生成的論文問題還是特別多,無法和成熟的軟件相比不過勝在成本低,可塑性強。

前置條件

????????首先我們需要對接現(xiàn)有大模型的接口,國內的各個大模型都有自己的商場,GPT-4在理解和生成自然語言方面比國內的模型在具有更強的能力,因此作者嫌麻煩花了10米去搞了個國內的中轉接口去調用GPT-4的api,否則你就需要魔法上網,去弄openAI的接口了。

代碼實現(xiàn)

????????首先簡單講解一下AI對話的原理,首先要了解tokens,引用一句AI的解釋:

????????在AI和機器學習的上下文中,"tokens" 通常是指文本數(shù)據(jù)被預處理后得到的基本單位。這些單位可以是單詞、子詞(subwords)、字符或更復雜的結構,取決于你選擇的分詞方法。Tokenization是自然語言處理中的一個重要步驟,它有助于將文本轉換為機器學習模型可以理解和處理的形式。

????????簡單來說就是你發(fā)送的消息和AI返回給你的內容都與tokens有關,字符越多,tokens越大,一般來說400個漢字,相當于1000tokens

??????? 而對話簡單來講就是你請求的時候會攜帶上文AI的回答或者你的塑造的上下文進行調用,如果不加限制就很容易消耗特別多的tokens,有些網站都是將次數(shù)限制到10條可能就是這個原因。

??????? 論文這個東西文本實在太多,使用我直接不考慮帶上文,這里是我的創(chuàng)建對話的代碼實現(xiàn):

 private ChatResponseWrapper createChat(String message, String model) {
        try {
            if (!chatConfig.isEnable()) {
                log.warn("createChat fail,ai is unable!");
                throw new AIExecuteException("check ai is enable!");
            }
            List<ChatMessagesDto> messages = new ArrayList<>();
            ChatMessagesDto systemMessage = new ChatMessagesDto(role, message);
            messages.add(systemMessage);
            //model 代表gpt當前的模型,我開發(fā)時使用的是3.5,role代表當前的角色
            ChatRequest chatCompletionRequest = ChatRequest.builder().model(model).messages(messages).user(role).maxTokens(4096).temperature(BigDecimal.ONE).build();

            ObjectMapper objectMapper = new ObjectMapper();
            //對接大模型的url
            HttpRequest request = HttpUtil.createPost(chatConfig.getUrl());
            request.setConnectionTimeout(TIMEOUT);
            request.body(objectMapper.writeValueAsBytes(chatCompletionRequest));
            // 設置請求頭
            request.header("Content-Type", "application/json");
            //攜帶token
            request.header("Authorization", "Bearer " + chatConfig.getAccessKey());
            String body;
            try (HttpResponse response = request.execute()) {
                body = response.body();
            }
            if (log.isDebugEnabled()) {
                log.debug("get Ai response body:{}", body);
            }
            ChatResponseWrapper wrapper = new ChatResponseWrapper();
            wrapper.setResponse(objectMapper.readValue(body, ChatResponse.class));
            wrapper.setQuestion(message);
            return wrapper;
        } catch (JsonProcessingException e) {
            log.error("Json Parse error,message:{}", message, e);
            throw new AIExecuteException(e.getMessage());
        } catch (Exception e) {
            log.error("createChat error,message:{}", message, e);
            throw new AIExecuteException(e.getMessage());
        }
    }

??????? 接下來創(chuàng)建生成大綱的接口,入參是標題,也就是前端傳入的值

public List<ThesisOutline> genThesisOutline(String message) {
        try {
            String template = "以《{}》為題目,給我一篇計算類論文的大綱,使用中文回答,一級目錄使用編號1,二級目錄使用編號1.1,以此類推";
            //對ai的問句
            String askQuestion = StringUtil.format(template, message);
            ChatResponseWrapper wrapper = aiClient.createChat35(askQuestion);
            ChatResponse response = wrapper.getResponse();
            if (response == null) {
                throw new AIExecuteException();
            }
            List<ThesisOutline> thesisOutlines = new ArrayList<>();
            for (ChatChoice choice : response.getChoices()) {
                ChatMessagesDto choiceMessage = choice.getMessage();
                String content = choiceMessage.getContent();
                if (StringUtil.isEmpty(content)) {
                    continue;
                }
                //過濾為空的行和不為數(shù)字的行
                List<String> outlines = StringUtil.split(content, "\n").stream().filter(StringUtil::isNotBlank).filter(StringUtil::isStartsWithDigit).map(String::trim).collect(Collectors.toList());
                for (String outlineContent : outlines) {
                    ThesisOutline outline = new ThesisOutline();
                    outline.setContent(outlineContent);
                    thesisOutlines.add(outline);
                }
            }
            return thesisOutlines;
        } catch (Exception e) {
            log.error("genThesisOutline error", e);
            return Collections.emptyList();
        }
    }

/**
 * 論文標題實體
 * @author zwh
 */
@Data
public class ThesisOutline {

    /**
     * 層級
     */
    private Integer level;

    /**
     * 標題內容
     */
    private String content;
}

這個接口將生成的數(shù)據(jù)返回給前端

java 集成ai大模型 實現(xiàn)文檔分析,人工智能,java,后端,畢業(yè)設計,AI寫作

隨手寫的前端,樣式什么的也懶的調了,能用就行,代碼如下:

<template>
  <div class="app-container home">
    <el-card style="height: 95vh">
      <el-button @click="genThesisOutline" :disabled="showText">生成論文大綱</el-button>
      <el-button @click="toText" v-if="!showText">變更為文本</el-button>
      <el-button @click="toList" v-if="showText">保存并展示為列表</el-button>
      <el-button @click="downloadByOutline" icon="el-icon-download" v-if="!showText">生成并下載論文</el-button>


      <div style="margin-top: 20px">
        <div v-show="!showText">
          <el-row style="margin-bottom: 10px">
            <el-col :span="4">標題</el-col>
            <el-col :span="20">{{ thesis.title }}</el-col>
          </el-row>
          <el-table ref="table" :data="outlineData" max-height="1100px">
            <el-table-column type="index" width="100"/>
            <el-table-column label="大綱內容" prop="content"/>
          </el-table>
        </div>

        <el-form v-show="showText">
          <el-form-item label="標題">
            <el-input v-model="thesis.title"/>
          </el-form-item>
          <el-form-item label="大綱">
            <el-input type="textarea" v-model="outlineText" rows="45"/>
          </el-form-item>
        </el-form>
      </div>

    </el-card>


    <el-dialog title="生成論文大綱" :visible.sync="outline.visible">
      <el-form>
        <el-form-item label="論文題目">
          <el-input v-model="outline.content"/>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="outline.visible = false">取 消</el-button>
        <el-button type="primary" @click="genOutline">確認生成大綱</el-button>
      </div>
    </el-dialog>
  </div>
</template>

<script>
import {downloadWord, genOutline} from "@/api";

export default {
  name: "Index",
  data() {
    return {
      outline: {
        visible: false,
        content: null,
      },
      outlineData: [],
      thesis: {
        title: null,
        messages: []
      },
      outlineText: null,
      showText: false,
    };
  },
  methods: {
    genThesisOutline() {
      this.outline.visible = true;
    },
    genOutline() {
      genOutline(this.outline.content).then(resp => {
        this.outlineData = resp.data
        this.thesis.title = this.outline.content
        this.outline.content = null
        this.outline.visible = false
      })
    },
    toText() {
      const fieldValues = this.outlineData.map(obj => obj.content);
      this.outlineText = fieldValues.join('\n');
      this.showText = true;
    },
    toList() {
      // 使用 split 方法按換行符分割字符串
      const lines = this.outlineText.split('\n');
      // 過濾掉空字符串,并將每個字符串轉化回對象
      // 將每行轉化為一個對象,該對象具有指定的字段名和內容
      this.outlineData = lines
        .filter(line => line.trim() !== '')
        .map(line => ({content: line}));
      this.showText = false;
    },
    downloadByOutline() {
      this.thesis.messages = this.outlineData.map(obj => obj.content);
      downloadWord(this.thesis).then(resp => {
        // 創(chuàng)建一個blob對象URL
        const url = window.URL.createObjectURL(new Blob([resp]));
        // 創(chuàng)建一個下載鏈接元素
        const link = document.createElement('a');
        link.href = url;
        link.setAttribute('download', this.thesis.title+'.docx'); // 設置下載文件名
        // 觸發(fā)下載
        document.body.appendChild(link);
        link.click();
        // 清理
        window.URL.revokeObjectURL(url);
      })
    }
  },
};
</script>

正文生成,因為是要對大綱的內容進行循環(huán)的請求,使用需要異步請求chatgpt,因為每一個論點請求花費的時間都十分之長,計算了一下一個論點大約30s左右,所以我們這里需要異步去請求論文返回的結果,我這里是使用CompletableFuture去異步請求,方法通過異步方式與AI交互,生成論文文本,并將結果導出為Word文檔供用戶下載。

@Override
    public void genThesisText(List<String> messages, String title, HttpServletResponse resp) {
        try {
            String template = "請繼續(xù)以{}為題生成關于:{}的內容,內容需要在500字以上";
            List<CompletableFuture<ThesisTextModel>> futures = new ArrayList<>(messages.size());
            // 每個標題異步創(chuàng)建會話
            for (String message : messages) {
                String question = StringUtil.format(template, title, message);
                CompletableFuture<ThesisTextModel> future = CompletableFuture.supplyAsync(() -> ThesisTextModel.builder().wrapper(aiClient.createChat35(question)).message(message).build(), executor).exceptionally(e -> {
                    log.error("createChat sync execute error", e);
                    return null;
                });
                futures.add(future);
            }

            // 獲取所有消息內容 (key: 問題, value: 回答)
            Map<String, List<String>> allContent = new LinkedHashMap<>();
            for (CompletableFuture<ThesisTextModel> future : futures) {
                ThesisTextModel model = future.get();
                ChatResponse response = model.getWrapper().getResponse();
                List<ChatChoice> choices = response.getChoices();
                String outline = model.getMessage();
                ArrayList<String> perContent = new ArrayList<>();
                for (ChatChoice choice : choices) {
                    ChatMessagesDto choiceMessage = choice.getMessage();
                    // 獲取某個標題的回答內容
                    String content = choiceMessage.getContent().replaceAll("\n+", "\n");
                    if (StringUtil.isEmpty(content)) {
                        continue;
                    }
                    perContent.add(content);
                }
                allContent.put(outline, perContent);
            }
            // 生成 word 文檔
            ThesisBuildHelper.exportWordDocument(resp, allContent);
        } catch (Exception e) {
            log.error("genThesisText error", e);
        }
    }

調用ThesisBuildHelper設置好相應的格式,這里貼上我大學時使用的論文格式(ps.還是從吃灰的老電腦里翻到的)

java 集成ai大模型 實現(xiàn)文檔分析,人工智能,java,后端,畢業(yè)設計,AI寫作

總結

經過兩天的努力,到現(xiàn)在程序已經能夠生成結構清晰、內容豐富的論文。同時,通過導出為Word文檔的形式,使得我能夠方便地查看和編輯生成的論文。

這樣生成的論文成本也特別的低,我開發(fā)中使用的是gpt3.5,大概2w字的論文花費就2毛左右,可想而知百度到的論文生成網站里面利潤之高,其實我還想了將gpt3.5生成的文章交給gpt4潤色,加入參考文獻,不過嫌麻煩,也沒有好的思路,就懶得做了,說到底也是心血來潮。

最后,附以一張我畢業(yè)的論題生成的論文,27頁字數(shù)23184,雖然不是標準的論文,但是再也不需要去冥思苦想論文該咋寫了。

java 集成ai大模型 實現(xiàn)文檔分析,人工智能,java,后端,畢業(yè)設計,AI寫作文章來源地址http://www.zghlxwxcb.cn/news/detail-844816.html

到了這里,關于AI論文生成系統(tǒng)JAVA代碼簡單實現(xiàn)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • java代碼實現(xiàn)生成條形碼

    2024年02月20日
    瀏覽(24)
  • 圖書管理系統(tǒng)(Java簡單版)(完整代碼+詳解)

    圖書管理系統(tǒng)(Java簡單版)(完整代碼+詳解)

    目錄 詳解:? BookList類: InOperation接口? User類(父類)?和 Main類(這倆要一起看) 完整代碼? book包? Book類? BookList類 operation包? ?AddBook類 BorrowBook類 DeleteBook類 FindBook類 PrintBook類 ReturnBook類 Exit類 InOperation接口 user包? Domestic類 Administrator類 User類? Main類? 按照上圖邏輯來寫

    2024年02月08日
    瀏覽(26)
  • ASP.NET基于cs的電子郵件簡單收發(fā)系統(tǒng)設計與實現(xiàn)(源代碼+論文)

    電子郵件作為互聯(lián)網中交換信息廣泛的通信工具之一,如今都已被廣大用戶接受。 早期的電子郵件只是從一個計算機終端向另外一個計算機終端傳送文本信息,而現(xiàn)在的電子郵件不僅可以發(fā)送文本信息,還可以傳送聲音、圖片、文檔等多種信息。很多郵件郵件客戶端軟件不斷

    2024年02月08日
    瀏覽(21)
  • JAVA+SQL離散數(shù)學題庫管理系統(tǒng)(源代碼+論文+外文翻譯)

    題庫、試卷建設是教學活動的重要組成部分,傳統(tǒng)手工編制的試卷經常出現(xiàn)內容雷同、知識點不合理以及筆誤、印刷錯誤等情況。為了實現(xiàn)離散數(shù)學題庫管理的信息化而開發(fā)了離散數(shù)學題庫管理系統(tǒng)。 該系統(tǒng)采用C/S 模式,前臺采用JAVA(JBuilder2006),后臺采用SQLServer2000數(shù)據(jù)庫

    2024年02月09日
    瀏覽(19)
  • Java生成微信小程序二維碼,5種實現(xiàn)方式,一個比一個簡單

    Java生成微信小程序二維碼,5種實現(xiàn)方式,一個比一個簡單

    先介紹一下 項目場景 ,主要是通過微信小程序二維碼 裂變分享 ,每個賬號有專屬邀請二維碼,分享出去,有新人掃碼入駐,就可以得到現(xiàn)金獎勵或紅包獎勵。當然,產品設計會更豐富,不止有裂變模式,還有渠道推廣模式,還有各種獎勵規(guī)則,但核心實現(xiàn)都是生成二維碼。

    2024年02月03日
    瀏覽(96)
  • 經緯度坐標為中心點生成米距離長度半徑的圓形面,含java js源碼+在線繪制,代碼簡單零依賴

    經緯度坐標為中心點生成米距離長度半徑的圓形面,含java js源碼+在線繪制,代碼簡單零依賴

    目錄 java版源碼 js版源碼 在線繪制預覽效果 關于計算的精確度 前些時間在更新我的坐標邊界查詢工具的時候,需要用到經緯度坐標點的距離計算,和以坐標點為中心生成一個指定距離為半徑的圓,搜了一下沒有找到現(xiàn)成簡單又合適的代碼,于是把自己壓箱底的代碼翻出來了

    2024年02月08日
    瀏覽(93)
  • java畢業(yè)設計——基于Java+Spring Boot+MySQL的論文選題系統(tǒng)設計與實現(xiàn)(畢業(yè)論文+程序源碼)——論文選題系統(tǒng)

    java畢業(yè)設計——基于Java+Spring Boot+MySQL的論文選題系統(tǒng)設計與實現(xiàn)(畢業(yè)論文+程序源碼)——論文選題系統(tǒng)

    大家好,今天給大家介紹基于Java+Spring Boot+MySQL的論文選題系統(tǒng)設計與實現(xiàn),文章末尾附有本畢業(yè)設計的論文和源碼下載地址哦。需要下載開題報告PPT模板及論文答辯PPT模板等的小伙伴,可以進入我的博客主頁查看左側最下面欄目中的自助下載方法哦 文章目錄: 伴隨著我國高

    2024年01月21日
    瀏覽(22)
  • JAVA+access綜合測評系統(tǒng)畢業(yè)設計(源代碼+論文+開題報告+任務書)

    大學期間,綜合測評計算是每學期必不可少的工作。人工計算綜合測評是一個很繁雜的過程:每個學生先計算自己的綜合測評成績,制成草表,上交給班委;然后班委核對并將成績錄入制成電子文檔上交給院系相關部門。在這個過程中,學生常常感到厭煩,因而草表的準確率

    2024年02月09日
    瀏覽(18)
  • JAVA 3D的網絡三維技術的設計與實現(xiàn)(源代碼+論文+說明)

    互聯(lián)網的出現(xiàn)及飛速發(fā)展使IT業(yè)的各個領域發(fā)生了深刻的變化,它必然引發(fā)一些新技術的出現(xiàn)。3D圖形技術并不是一個新話題,在圖形工作站以至于PC機上早已日臻成熟,并已應用到各個領域。然而互聯(lián)網的出現(xiàn),卻使3D圖形技術發(fā)生了和正在發(fā)生著微妙而深刻的變化。Web3D協(xié)會

    2024年02月10日
    瀏覽(24)
  • java代碼實現(xiàn)自動生成數(shù)據(jù)庫表er圖

    最近有同事看到字節(jié)跳動產品設計文檔里有數(shù)據(jù)庫表er圖。就想問問又沒有現(xiàn)成的工具也給直接生成一個er圖,經查找驗證發(fā)現(xiàn)并沒有。因為現(xiàn)在表關系都是用的邏輯外鍵而非物理外鍵約束的,所以像navicat等工具就算生成了也沒有描述關系的連接線。那么為了滿足需求,這邊

    2024年02月19日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包