| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- import { AIMessage, HumanMessage, SystemMessage } from "langchain/schema"
- import { StructuredOutputParser } from "langchain/output_parsers"
- import { z } from "zod"
- import { PromptTemplate } from "langchain/prompts"
- import { llm, logger, conversation, usage } from "./llm.mjs"
- import fs from "fs"
- import { createFlow } from "./flow.mjs"
- import { createER } from "./er.mjs"
- import { createTable } from "./table.mjs"
- const chapters = [
- {
- title: "第一章概述"
- },
- {
- title: "第二章关键技术介绍"
- },
- {
- title: "第三章系统分析",
- sections: [
- {
- title: "3.1 系统概述"
- },
- {
- title: "3.2 需求分析"
- },
- {
- title: "3.3 可行性分析"
- },
- {
- title: "3.4 系统流程分析"
- },
- {
- title: "3.5 本章小节"
- }
- ]
- },
- {
- title: "第四章系统设计",
- sections: [
- { title: "4.1 系统基本结构设计" },
- {
- title: "4.2 数据库设计",
- sections: [{ title: "4.2.1 数据库E-R图设计" }, { title: "4.2.2 数据库表设计" }]
- },
- { title: "4.3 本章小节" }
- ]
- },
- {
- title: "第五章系统实现"
- },
- {
- title: "第六章系统测试"
- },
- {
- title: "结论"
- },
- {
- title: "参考文献"
- },
- {
- title: "致谢"
- }
- ]
- const title = "《thinkphp5鲜花销售管理系统》"
- const desc = `- 管理员:登录、个人中心、用户管理、鲜花分类管理、鲜花信息管理、鲜花信息、用户留言管理、特殊服务管理、系统管理、订单管理。
- - 用户:注册、登录、个人中心、鲜花信息、花语公告、后台管理、购物车、联系客服、我的订单、我的地址、我的收藏。`
- let paper = fs.createWriteStream("./paper.md")
- async function main(title, desc) {
- const startTime = Date.now()
- const { chain, memory } = conversation(`你是一个计算机专业擅长写毕业论文的专家,你的任务是帮我的毕业设计撰写一篇论文
- 我的毕业设计项目是${title}
- 这个项目包含以下功能:${desc}
- 现在我们已经为论文拟好了一个大纲:
- ${chapters.map((i) => `- ${i.title}`).join("\n")}
- 现在我们来一步一步的编写这篇论文
- 请严格按照markdown格式返回内容`)
- for (let i = 0; i < chapters.length; i++) {
- if (i === 2) {
- for (let j = 0; j < chapters[i].sections.length; j++) {
- let input = ""
- if (j === 0) {
- input += `现在我们来编写第三章系统分析,这一章节内容较多,我们可以分成几个小节来写:
- ${chapters[i].sections.map((i) => i.title).join("\n")}\n`
- }
- input += `现在我们来编写${chapters[i].title}的第${j + 1}小节: ${chapters[i].sections[j].title}`
- if (j === 3) {
- const flows = await createFlow(title, desc)
- input += `\n我已为你绘制好了以下几个流程图
- ${flows
- .map((i) => {
- return `- 
- ${i.desc}`
- })
- .join("\n\n")}
- 请你帮我完成第${j + 1}小节: ${chapters[i].sections[j].title}的内容,请确保附上我提供的图片`
- }
- let { response } = await chain.call({
- input: input
- })
- if (j !== 0) {
- response = response.replace(/# ?第三章 ?系统分析\n/, "")
- }
- paper.write("\n\n" + response)
- }
- } else if (i === 3) {
- for (let j = 0; j < chapters[i].sections.length; j++) {
- let input = ""
- if (j === 0) {
- input += `现在我们来编写第四章系统设计,这一章节内容较多,我们可以分成几个小节来写:
- ${chapters[i].sections.map((i) => i.title).join("\n")}\n`
- }
- input += `现在我们来编写${chapters[i].title}的第${j + 1}小节: ${chapters[i].sections[j].title}`
- if (j === 1) {
- const er = await createER(title, desc)
- const table = await createTable(title, desc)
- input += `\n本小节分为以下几个部分:
- ${chapters[i].sections[j].sections.map((i) => `- ${i.title}`).join("\n")}
- 我已为你绘制好了以下几个E-R图图
- ${er
- .map((i) => {
- return `- 
- ${i.desc}`
- })
- .join("\n")}
- 这是我为你提供的数据库表:
- ${table
- .map((i) => {
- return `- ${i.name}表:
- ${i.desc}
- `
- })
- .join("\n\n")}
- 请你帮我编写第${j + 1}小节: ${chapters[i].sections[j].title}的内容, 请确保附上我提供的E-R图和数据库表`
- }
- let { response } = await chain.call({
- input: input
- })
- if (j !== 0) {
- response = response.replace(/# ?第四章 ?系统设计\n/, "")
- }
- paper.write("\n\n" + response)
- }
- } else {
- const { response } = await chain.call({
- input: `现在我们来编写${chapters[i].title}`
- })
- paper.write("\n\n" + response)
- }
- }
- console.log(`usage: ${JSON.stringify(usage)}`)
- console.log(`time: ${(Date.now() - startTime) / 1000}s`)
- }
- main(title, desc)
|