总结:
AI可以干很多事,关键在于提示词,有时候不要急,给大模型时间,可以一步步引导大模型解决复杂任务。
本周知识清单:
- 调研dify,实现文档生成demo
- 查找大模型前端招聘要求并整理
- dify实现根据多轮对话进行意图识别并调用相应的api
-
看chatllamainex和dify能否结合,看看dify自身有没有上传数据源并检索的功能,有。
【LLM】快速了解Dify 0.6.10的核心功能:知识库检索、Agent创建和工作流编排(二)-CSDN博客
下周任务:
- 交接工作
- 任务闭环
关键记录
调研dify,实现文档生成demo
dify的目标:
开发者可以快速搭建生产级的生成式 AI 应用
提供:
包括对数百个模型的支持、直观的 Prompt 编排界面、高质量的 RAG 引擎、稳健的 Agent 框架、灵活的流程编排,并同时提供了一套易用的界面和 API。
AutoDoc-ChatGPT 智能文档生成器
AutoDoc-ChatGPT 是一个Python脚本,利用ChatGPT模型的强大功能,可以自动为任何编程语言生成详细的文档。
通过AutoDoc-ChatGPT,您能够轻松为代码库创建全面的文档。只需提供要记录的文件路径,AutoDoc-ChatGPT就会用自然语言生成关于其功能、参数和返回值的详细描述。
Copilot:
Text_To_Video 是一个利用本文直接生成视频的:guifaChild/text_to_vedio: 这是一个由文本直接生成视频的项目 (github.com)
(一)用Dify创建一个由AI自动生成PPT的应用:
用Dify创建一个由AI自动生成PPT的应用_哔哩哔哩_bilibili
没实现,因为大模型目前只能用llama
发现科大讯飞已经实现了效果还不错:
讯飞智文 - AI在线生成PPT、Word (xfyun.cn)
输入奥运会闭幕式:
讯飞智文 - AI在线生成PPT、Word (xfyun.cn)
下载要钱:
(二)dify流程构建与Api调用 Ai开发 开源版的coze
3、dify流程构建与Api调用 Ai开发 开源版的coze_哔哩哔哩_bilibili
1.建好工作流
用cool快速调用dify登录官网
(1)
Cool官网 | 闪酷科技 (cool-js.com)找到插件市场,搜索dify,下载插件
这样就有密钥和网址了
(2)自己搭建cool admin代码生成界面
(3)cool admin添加插件
点击右上角设置
修改这2个地方就好了,可能有端口设置,记得如果有要加上端口
我没有搭建cool admin,用的演示示例
账户:admin,密码:123456
报错
重启一下就好了
(4)编写代码运行之后可以在控制台看到结果,但是这是TypeScript 或 JavaScript 编写的,不是很懂。
找到了,在vscode运行:
git clone https://gitee.com/cool-team-official/cool-admin-midway.git
cd cool-admin-midway
npm i
npm run dev
open http://localhost:8001/
注: npm i
如果安装失败可以尝试使用cnpm,或者切换您的镜像源,推荐使用pnpm。
需要1小时以上
src/modules/demo/controller/open/plugin.ts目录下编写上面的图片
靠,好像可以直接python调
import requests
import json
# API URL
api_url = "http://172.16.45.8/v1/workflows/run"
# API Key
api_key = "app-GjxaXNIlZzpXuLJRfNk7S48w"
# Request headers
headers = {
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json',
}
# Request payload
data = {
"inputs": { '你是谁' },
"response_mode": "streaming",
"user": "abc-123"
}
# Send the POST request
response = requests.post(api_url, headers=headers, data=json.dumps(list(data)))
# Check the response
if response.status_code == 200:
print("Request successful")
print("Response:", response.json())
else:
print(f"Request failed with status code: {response.status_code}")
print("Error:", response.text)
显示服务错误,可能部署dify的服务器出了问题。
(三)dify构建输入一段话,写一个图文的说明稿,并结合python在本地输出一个word
1.新建一个工作流,开始:
下一个链接专门扩写的大模型
2.LLM扩写的配置,注意system是确定功能,use模块才是对话的内容:
3.下一个是编写说明稿LLM
4.编写生成图片的三个关键词的LLM
5.cogview 3实现关键词生成图片,注意这个需要质谱AI,big modol有免费密钥,但是每天并发生成5次,总次数还限制400次.智谱AI开放平台 (bigmodel.cn)。还有爬虫也有免费密钥萤火虫 (firecrawl.dev)
6.结束模块,设计好输出什么就行
运行结果:
"Question": "AI发展"
{
"text": "**标题:** 人工智能简史:从早期阶段到当前发展\n\n**正文:**\n\n人工智能(AI)是一门计算机科学分支,旨在使计算机能够模仿人类的大脑行为。从20世纪50年代至今,AI发展迅速,不仅改变了我们对技术的理解,也深刻影响了我们的生活。\n\n早期阶段(1950-1970年)\n\n* 第一台电子计算机:英国科学家Alan Turing于1951 年创造了第一个电子计算机,并发表了《计算机和智能》一文,提出了测试计算机智能的概念,即现在的图灵测试。\n* 机器学习:1950 年代末期,David Marr 和 Marvin Minsky 等人开始研究机器学习。这是 AI 的第一阶段,主要关注的是使计算机能够自动从数据中学习和做出决策。\n\nAI冬眠(1970-1980年)\n\n* 经济因素:1970 年代初期,由于资金紧张,许多政府和机构开始减少对 AI 研究的投资。这导致了 AI 的发展速度放缓。\n* 技术瓶颈:当时的计算机硬件和软件技术尚未足够成熟,难以实现复杂的人工智能系统。\n\nAI复兴(1980-1990年)\n\n* 专注于特定领域:1980 年代末期,研究人员开始专注于特定的 AI 领域,例如自然语言处理、图像识别和机器学习。这一时期的工作重点是解决具体问题。\n* 技术进步:运算能力、存储空间和网络速度的飞速增长为新的AI应用提供了基础。\n\n当前阶段(2000年起)\n\n* 大数据与云计算:大数据和云计算的出现,提供了海量数据处理和分析能力,使得 AI 应用更加广泛和深入。\n* 深度学习:深度学习成为主流的机器学习方法,许多现实世界问题都可以通过此技术得到解决。\n\n未来的展望\n\n人工智能将继续进步,将其应用于医疗、教育、交通等各个领域。",
"json": [
{
"url": "https://sfile.chatglm.cn/testpath/9c62ff73-398f-556d-8936-cd8b5d27ad34_0.png"
}
],
"files": [
{
"__variant": "FileVar",
"tenant_id": "49fa5b7a-5e15-437e-939a-92b17bdd76de",
"type": "image",
"transfer_method": "tool_file",
"url": "/files/tools/f52e9b42-5af5-4946-b719-2f66bfc8dd27.png?timestamp=1723598467&nonce=a7a06b6fe71658ef79df61bfff697f45&sign=4NT6mXBgI6YOm-n1C9ZXIKjxMwmA-VUfofBo7YuwbBY=",
"remote_url": "/files/tools/f52e9b42-5af5-4946-b719-2f66bfc8dd27.png",
"related_id": "f52e9b42-5af5-4946-b719-2f66bfc8dd27",
"filename": "f52e9b42-5af5-4946-b719-2f66bfc8dd27.png",
"extension": ".png",
"mime_type": "image/jpeg"
}
]
}
访问url就出现图片
把上面的文本和这个图片url输入到python代码中,就能输出word文档。别忘了pip install 开头的包
import os
import requests
# 导入模块
from docx import Document
from docx.shared import Inches, Cm
path = os.getcwd() + '\\abc\\' # 设置图片文件路径,前提是必须要有abc这个文件夹
# df=pd.read_excel('url1.xlsx')
#urls=df['url']
url = 'https://sfile.chatglm.cn/testpath/9c62ff73-398f-556d-8936-cd8b5d27ad34_0.png'
r = requests.request('get', url) # 获取网页
print(r.status_code)
with open('2.jpg', 'wb') as f: # 打开写入到path路径里-二进制文件,返回的句柄名为f
f.write(r.content) # 往f里写入r对象的二进制文件
f.close()
# 新建文档对象按模板新建 word 文档文件,具有模板文件的所有格式
doc = Document()
# 增加标题:add_heading(self, text="", level=1):
doc.add_heading('AI发展',1)
# 增加段落正文,add_paragraph(self, text='', style=None):返回一个 Paragraph 段落对象
par = doc.add_paragraph('第一个段落:')
print(par) # <docx.text.paragraph.Paragraph object at 0x000000000A889F08>
# 在段落中添加文字块,add_run(self, text=None, style=None):返回一个 run 对象
run_ = par.add_run('**标题:** 人工智能简史:从早期阶段到当前发展\n\n**正文:**\n\n人工智能(AI)是一门计算机科学分支,旨在使计算机能够模仿人类的大脑行为。从20世纪50年代至今,AI发展迅速,不仅改变了我们对技术的理解,也深刻影响了我们的生活。\n\n早期阶段(1950-1970年)\n\n* 第一台电子计算机:英国科学家Alan Turing于1951 年创造了第一个电子计算机,并发表了《计算机和智能》一文,提出了测试计算机智能的概念,即现在的图灵测试。\n* 机器学习:1950 年代末期,David Marr 和 Marvin Minsky 等人开始研究机器学习。这是 AI 的第一阶段,主要关注的是使计算机能够自动从数据中学习和做出决策。\n\nAI冬眠(1970-1980年)\n\n* 经济因素:1970 年代初期,由于资金紧张,许多政府和机构开始减少对 AI 研究的投资。这导致了 AI 的发展速度放缓。\n* 技术瓶颈:当时的计算机硬件和软件技术尚未足够成熟,难以实现复杂的人工智能系统。\n\nAI复兴(1980-1990年)\n\n* 专注于特定领域:1980 年代末期,研究人员开始专注于特定的 AI 领域,例如自然语言处理、图像识别和机器学习。这一时期的工作重点是解决具体问题。\n* 技术进步:运算能力、存储空间和网络速度的飞速增长为新的AI应用提供了基础。\n\n当前阶段(2000年起)\n\n* 大数据与云计算:大数据和云计算的出现,提供了海量数据处理和分析能力,使得 AI 应用更加广泛和深入。\n* 深度学习:深度学习成为主流的机器学习方法,许多现实世界问题都可以通过此技术得到解决。\n\n未来的展望\n\n人工智能将继续进步,将其应用于医疗、教育、交通等各个领域')
print(run_) # <docx.text.run.Run object at 0x000000000B2D31C8>
# 增加图片,add_picture(self, image_path_or_stream, width=None, height=None):返回一个 InlineShape 对象
pic_par = doc.add_picture('2.jpg', width=Cm(6), height=Cm(5))
print(pic_par) # <docx.shape.InlineShape object at 0x000000000B2F11C8>
# p2 = doc.add_paragraph('第二个段落:')
# p2.add_run('段落文字块')
#
# # 增加表格add_table(self, rows, cols, style=None):返回一个表格对象
# table = doc.add_table(2,3)
# print(table) # <docx.table.Table object at 0x000000000B302688>
# 保存文件
doc.save('test2.docx')
部分结果:
尝试把python嵌入到dify里面,但是报错,没有docx的包,要改dify的后端安装包。
先不改dify试试,设置一个http请求模块,实现输入http://127.0.0.1:8009/items/bsy?url=https://sfile.chatglm.cn/testpath/9c62ff73-398f-556d-8936-cd8b5d27ad34_0.png&title=’hfkjsdhvl’&text=’dshfhjdhflaj’
在代码编写端输出bsy.docx,然后在想办法嵌入进dify,下面是代码,别忘了安装包
import os
import requests
# 导入模块
from docx import Document
from docx.shared import Inches, Cm
from fastapi import FastAPI, File, UploadFile, Path, Query
from fastapi.responses import HTMLResponse
app = FastAPI()
@app.get("/items/{item_id}")
def read_item(item_id,url,title,text ):
path = os.getcwd() + '\\scratches\\' # 设置图片文件路径,前提是必须要有abc这个文件夹
# df=pd.read_excel('url1.xlsx')
#urls=df['url']
#url = 'https://sfile.chatglm.cn/testpath/9c62ff73-398f-556d-8936-cd8b5d27ad34_0.png'
r = requests.request('get', url) # 获取网页
print(r.status_code)
with open(f'{item_id}.jpg', 'wb') as f: # 打开写入到path路径里-二进制文件,返回的句柄名为f
f.write(r.content) # 往f里写入r对象的二进制文件
f.close()
# 新建文档对象按模板新建 word 文档文件,具有模板文件的所有格式
doc = Document()
# 增加标题:add_heading(self, text="", level=1):
doc.add_heading(title,1)
# 增加段落正文,add_paragraph(self, text='', style=None):返回一个 Paragraph 段落对象
par = doc.add_paragraph('第一个段落:')
print(par) # <docx.text.paragraph.Paragraph object at 0x000000000A889F08>
# 在段落中添加文字块,add_run(self, text=None, style=None):返回一个 run 对象
run_ = par.add_run(text)
print(run_) # <docx.text.run.Run object at 0x000000000B2D31C8>
# 增加图片,add_picture(self, image_path_or_stream, width=None, height=None):返回一个 InlineShape 对象
pic_par = doc.add_picture(f'{item_id}.jpg', width=Cm(6), height=Cm(5))
print(pic_par) # <docx.shape.InlineShape object at 0x000000000B2F11C8>
# p2 = doc.add_paragraph('第二个段落:')
# p2.add_run('段落文字块')
#
# # 增加表格add_table(self, rows, cols, style=None):返回一个表格对象
# table = doc.add_table(2,3)
# print(table) # <docx.table.Table object at 0x000000000B302688>
# 保存文件
doc.save(f'{item_id}.docx')
return {"item_id": item_id}
if __name__ == "__main__":
import uvicorn
# uvicorn.run(app, host="192.168.140.2", port=8002)
uvicorn.run(app, host="127.0.0.1", port=8009)
dify实现根据多轮对话进行意图识别并调用相应的api
意图识别
意图是承载具体领域下的各个功能点,每一个意图都有一个明确的功能,且两个意图不应该有相同的功能。例:
用户的query说"我要听晴天",对应的意图就是"根据歌名听音乐"
用户的query是"我听",此处明显无法确认用户的意图,用户是想听歌、还是想听新闻?
槽位填充
槽位填充可以理解成针对用户query中的关键字的提取。举例:
用户的query说"我要听晴天",对应的一个槽位就是 song="晴天"
用户的 query说"我要听周杰伦的晴天",对应可以提取出两个槽位:artist="周杰伦", song="晴天"
槽位是执行意图必要的前提条件,槽位需要关联一个实体作为参数的取值范围。例如:"根据歌名听音乐"意图中"歌名"是必要的条件,"歌名"就是一个实体。实体是某一类名词的集合,提供了一个有限定范围的词典。
原文链接:智能语音交互流程_智能语音对话交互设计 对话管理-CSDN博客
搭建成果:
注意地图是中文地图,必须输入中文,所以加了一个翻译器,然后参数提取器内核好像是英文,换了中文大模型也还是没用,可能是参数提取器提示词的问题,下面是提示词细节:
提示词工程
来源:ChatGPT提示工程|AI大神吴恩达教你写提示词(含全部翻译稿和视频,建议收藏!) - 知乎 (zhihu.com)
第2集 指南- ChatGPT提示工程师教程 | AI大神吴恩达 x OpenAI官方-prompt engineering_哔哩哔哩_bilibili
1.编写清晰明确的指示
(1)用分隔符,分段,可以更清晰,并且避免跟对话输入冲突。
例子:目标是总结一段话的内容
(2)构建结构化输出,json、html。
(3)要求模型检查是否满足条件
(4)少量训练提示:执行任务之前,提供成功的示例
2.给模型时间思考
当碰到一个复杂的任务时,人都需要时间去完成,大模型更是。
(1)说明解决任务的详细步骤
结果:
会一下法语一下英语,改进,就是格式再细化:
(2)指示模型在匆忙做出结论之前思考解决方案
比如输入数学题和学生答案,其实每一步逻辑是对的,但是对题目理解是错的,直接输入,大模型会回答这是对的,所以要先让大模型自己回答,再比对答案。
结果:
3.模型限制
如果模型在训练过程中接触到了大量的知识,尽管如此,它并没有完美地记住所见到的信息,因此它并不了解自己知识的边界。这意味着它可能会尝试回答关于晦涩主题的问题,并且可能会编造出听起来合理但实际上并不真实的东西。我们称这些虚构的观念为“幻觉”。比如问他一个牙刷公司不存在的产品介绍,他会回答的很像真的产品,有条理。
解决办法:要求模型首先从文本中找到任何相关的引用,之后要求用引用的文本进行回答,并且可以追溯答案、回源文档
4.迭代提示
提示从技术说明开始写产品说明:
但是回答太长了:
提示词加一段:
结果;
想专业一点,可以添加:
结果:
进一步修改提示,使得最后显示产品ID
想展示尺寸,并用HTML格式展现:
结果:
打印出来是这样子:
5.模型推理
还可以利用提示进行推理和情感分析,还可以设定选项。
提取多个结果: