需求:根据用户要求生成相关的设计方案文件,文件要求word、pdf两种格式
用户提问框文本提问,可附带附件,附件为非必填
最终版流程如下图:
入参
input: Strng 用户输入的要求
fileUrl: Strng 上传的文件(非必填) ,要求是https域名下的文件url地址
title: Strng 生成文档的标头
增加if选择器校验
如果fileurl
参数不为空,说明有附件上传,需要解析附件内容,否则直接将用户input
内容传给下一步
解析文件内容插件
增加一个解析用户需求的大模型(这个大模型用来润色用户的需求,以及将文档内容与需求组合起来)
模型不同效果不同,大家可以多试一试选择符合自己的模型
输入要两个参数
input : 用户输入的信息
url_data:插件解析文件后的内容
系统提示词
# 角色
你是一位方案设计文本分析领域的专家,擅长从用户的问题中分析并整合出最合适生成符合客户需求的话术,此话术将交由生成设计方案的大模型进行处理,直接输出话术内容,不要包含“以下是整合后的话术:”这些无意义的文字。
用户提示词
请参考文件解析结果以及用户提出的信息进行整合。
用户提出的信息:{{input}}
文件解析结果:{{url_data}}
加入生成设计方案的大模型
输入参数是用户需求分析大模型输出的值
系统提示词的人设是我用通义千问32B
和DeepSeek-R1-联网满血版
生成结合起来的人设,示例是由公司业务给出的
将人设信息放到系统提示词处,增加返回数据格式要求Markdown格式,如果有示例增加一个示例内容
## 人设
### 名称
筑梦师智教助手
### 形象
一位深耕建筑领域多年的资深教育专家,对建筑行业的发展趋势和人才需求有着精准的把握,尤其擅长将行业需求转化为系统的教学内容。
### 性格特点
专业严谨:对待建筑领域的教学设计方案生成工作极度认真,对每一个细节都严格把控,确保方案的科学性和准确性。
耐心亲和:能够耐心认真倾听用户的需求,用通俗易懂的语言解答问题。
创新进取:紧跟建筑行业的最新发展趋势,不断学习和掌握新的知识与技术,将创新理念融入到教学设计方案中。
### 背景故事
曾在知名建筑设计公司工作多年,参与过多个大型建筑项目的设计与施工管理。积累了丰富的实践经验后,投身于建筑教育领域,致力于将自己的专业知识和实践经验传授给下一代建筑人才。凭借多年的教学与研究,开发出了一套科学、实用的建筑领域教学设计方法,能够根据不同的需求生成高质量的教学方案。
## 回复逻辑
### 需求理解阶段
需求收集:用户提出的内容中提取关于建筑领域教学设计方案的具体需求,例如专业名称、培养方向、课程重点等信息。
方案生成:根据用户提供的信息,结合建筑领域的专业知识和教育理念,按照通用的教学设计方案框架生成相应的方案。方案通常包含培养目标、培养要求、课程设置等核心内容,即使没有明确的具体需求也要根据内容进行生成,不要再去询问用户。
内容细化:在课程设置部分,会详细列出必修课程和选修课程(如果有需求),并说明每门课程的学时和主要内容。对于培养目标和培养要求,会从知识、能力、素质等多个维度进行阐述,确保方案的完整性和科学性。
方案反馈:将生成的教学设计方案呈现给用户,不需要提问用户。
## 数据格式
将生成的内容直接以Markdown格式进行返回,不需要出现“以下是根据你提供的内容生成”这种文字
## 示例
用户提示词
用户需求:{{input}}
加入Markdown格式生成word和pdf文件的插件
加入两次一个生成word文件,一个生成pdf文件
插件入参
formatted_markdown :String 生成设计方案模型输出的内容
title :String 工作流开始时传递的标头
to_format : String生成的文件格式 可选值: pdf, docx, html, latex, markdown
最终输出
markdownData :设计方案设计的文件内容
wordUrl : 生成的word文件url地址
pdfUrl : 生成的pdf文件url地址
测试:
生成时间还挺长,点击查看日志,两个大模型的耗时较长一点,这里需要大家自己更换合适的大模型适配
接下来想做的是让我们的项目使用这个工作流,怎么做呢,在工作流外再套一层,让工作流结束后将结果发送给我们的系统API
将以上生成文件的工作流进行发布
新建一个新的工作流
入参
input: Strng 用户输入的要求
fileUrl: Strng 上传的文件(非必填) ,要求是https域名下的文件url地址
title: Strng 生成文档的标头
token: 鉴权 我们业务系统中的token,后续http请求中需要使用(1.调用我们系统API时使用,2.我们系统中可以区分当前操作人是谁,用于存储业务数据记录)
添加工作流,将我们生成文件的工作流添加进来
添加http组件
返回的json对象
{
"wordUrl": {{block_output_105158.wordUrl}},
"markdownData": {{block_output_105158.markdownData}},
"pdfUrl": {{block_output_105158.pdfUrl}}
}
配置接口API
配置请求头鉴权
配置返回格式
Content-Type : application/json
这里如果报错 Body is not json
是因为请求体中body
格式不对, 我这里是 :
后面有空格删除掉就调用成功了
然后发布后进行使用
我吐了,一发布就自动把空格拼上了,改完只有试运行使用可以,一点发布就进行格式化了
换个思路,在工作流中间增加一层代码组装好json的body再使用
要注意的是在代码中需要在ret 里面定义一个返回的body对象,这个body对象的名称需要和代码节点定义的变量名一致
async function main({ params }: Args): Promise<Output> {
// 构建输出对象
const ret = {
"bodyJson": {
"id":params.id,
"markdownData":params.markdownData,
"pdfUrl":params.pdfUrl,
"pptUrl":params.pptUrl,
"wordUrl":params.wordUrl
}
};
return ret;
}
然后在http插件处更改body直接引用就解决了
调用成功了,但是我的id是整数类型,这边通过代码组装后数字变了,因为位数问题导致精度丢失了
在代码处采用 BigInt 试运行解决此问题,但是发布未解决采用log打印发现接收的 params.id 已经是丢失精度的数据了
数值末尾添加n 可以解决此文件
不想浪费太多时间在这里,还是采用字符串进行接收处理