day11-Dify智能体-发布-工作流

今日内容

1 对接大模型

# 0 Coze 是一个成熟的商业软件
	-咱们用户只需要访问地址--》直接使用 --》本身集成了大模型
    -豆包、deepseek大模型,插件:图像生成---》使用扣token
	-更适合小白
    	-Coze 用gpt模型?用不了,没有提供
        -Coze 用本地模型?用不了,不支持
        
# 1 这段时间学习:Dify--》开源软件--》源代码在github开源了--》我们可以下载源代码
	-使用源代码,把dify程序(服务),跑在本地:
    	1 win/mac 本地【docker-destop】
        	-wsl
        2 模拟企业环境:Linux 机器环境中-centos9环境
            -使用虚拟机:vmware--》虚拟出机器--》安装了Linux
            -在linux部署:docker
        3 直接购买云服务器
        	-虚拟机一模一样
            
            
# 2 dify 需要有大模型:才能做工作流,智能体,聊天助手。。。
	-本地部署大模型:Ollama软件--》几条命令就能部署一些开源大模型:deepseek,通义千问。。
    	-win/mac 本地不是
        -虚拟机中
        -云服务器中
        
# 3 dify对接 本地deepseek

# 4 dify 对接好大模型后---》再使用起来就跟Coze类似了
	
# 5 部署好dify--》相当于自己做了一个类Czoe平台----》你部署在公网上,给别人用--》收别人钱
	-dify开源--》把源码根据公司定制修改

image-20251120202253730

1.1 对接硅基流动

# 1 硅基流动 公司---》买了很多性能很高硬件--》在机房中部署了各种各样的开源大模型【deepseek,通义千问...】-->我们使用人家的大模型---》需要付费给它---》有个网站:需要我们注册,充钱---》就可以对接它部署的大模型了
	-大模型:不需要跑在我们机器上--》我们调用就要花钱
    
# 2 大模型提供商
	硅基流动有自己的模型吗?
    	目前好像还没有
    公司实力很强吗?
    	就是一个卖服务的
    那些公司实力强?
    	-有自己大模型的公司
        	阿里
            字节
            腾讯
            deepseek
            。。。。
            
# 3 注册硅基流动步骤:
	# 3.1 注册账号
    https://cloud.siliconflow.cn/sft-d178p8oo8n4s73934nf0/models
    # 3.2 添加api秘钥
    https://cloud.siliconflow.cn/sft-d178p8oo8n4s73934nf0/account/ak
        -sk-hffmkkfpdddfijmsamqtozwszaaqabzzzdguhowrexqvzvar
    # 3.3 通过实名认证
    https://cloud.siliconflow.cn/sft-d178p8oo8n4s73934nf0/account/authentication
    # 3.4 充值
    https://cloud.siliconflow.cn/sft-d178p8oo8n4s73934nf0/expensebill
        
        
# 4 硅基流动:api秘钥	--不同人不一样
	sk-hffmkkfpdddfijmsamqtozwszaaqabzzzdguhowrexqvzvar

# 5 dify对接
	-如下图--》一次性把硅基流动所有模型都添加来了
    
    -如果只想添加一个模型:
    	选择添加模型

image-20251120203836237

image-20251120203658332

image-20251120203934744

1.2 对接deepseek

# 1 注册账号
https://platform.deepseek.com/api_keys
# 2 添加key
sk-2ce3369e07ad4cc3a2ab5f04bd39a220
# 3 实名认证
# 4 购买:充值
# 5 dify对接

https://api.deepseek.com/v1
    
    
# 6 可以添加多个秘钥
	-你有多个deepseek账号	
    	1 账号有100块钱
        2 账号有50块钱
        
# 7 模型配置:多账号可以负载
	- deepseek部署大模型--》部署一台机器---》上海机房,北京机房,新疆机房部署了非常大[集群]
	-我们调用他们大模型的时候:
    	-默认选择一条线路去调--》假设调了 北京机房中的
    -假设我们有多个账号
    	-账号1有100块钱,账号2有50块钱
        -假设三次调用:我们就可以配置 两次走1账号,1次走2账号

image-20251120204613427

image-20251120204724411

1.3 对接火山方舟-就是豆包大模型

#1  麻烦一点--》火山方舟老版本,有很多模型---》支持dify对接很方便---》后来又上了更多大模型【更好的模型训练出来】---》有的老的大模型就下架了---》新的大模型对接时,多了个参数【前几天试的时候没改】---》dify默认不会添加多的那个参数,就会导致,有些新的大模型,用dify对接不了

# 2 找人工客服--》给它指出来了
	-火山方舟模型不是只给dify用
    -开发者直接用代码调用:多个参数,少个参数,代码改一下就行了
    -dify开源软件:适配对接市面上所有主流的大模型
    	-不可能做到,火山方舟改,它立马就改的情况---》延迟几个月
        
   -目前:可能有些最新模型对接不上


#1 注册账号,实名认证
https://console.volcengine.com/ark/region:ark+cn-beijing/model?vendor=Bytedance&view=DEFAULT_VIEW

# 2 开通管理---》开通一个模型--->开了某个模型,才能用某个模型[麻烦点,跟别的不一样]
	如下图:开语言模型即可
    
# 3 创建一个API-key:
	-支持两种对接方案:api-key和密钥方案
    api-key:https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D
            -ab6dc044-862f-4a33-8b3d-bfad67303c30
    密钥:https://console.volcengine.com/iam/keymanage/  
            -Access Key ID:  你们自己的
            -Secret Access Key:你们自己的
            
            
# 3 自定义推理中--》创建一个推理:开通监控
	-https://console.volcengine.com/ark/region:ark+cn-beijing/endpoint?config=%7B%7D
	-记住接入点id号:ep-20251120211332-lwvpx
    -记住模型名字:Doubao-1.5-thinking-vision-pro

    
    
# 4 对接--如下图

image-20251113164847413

image-20251114000236530

image-20251120210724602

image-20251120211123581

image-20251120211308237

image-20251120211443634

image-20251120211742879

image-20251120211931540

火山方舟对接新模型,多了个字段,dify没带

max_length字段没带,需要改dify的代码才能解决。。。

2 聊天助手,Agent,文本生成应用,ChatFlow和工作流 区别

### 1. 聊天助手(Chat Assistant)

- 定义:基于预训练大模型(如 GPT、LLaMA)的对话式 AI,可理解用户输入并生成自然语言回复。
- 特点
  - 单轮或多轮对话:支持简单问答或复杂对话上下文。
  - 知识库增强:可连接外部知识库(如文档、FAQ)提升回答准确性。
  - 无代码配置:通过 Dify 界面配置参数、提示词模板即可创建。
- 适用场景:客服机器人、智能问答、闲聊机器人。

### 2. Agent(智能代理)

- 定义:具备工具使用能力的 AI 系统,可调用外部 API(如搜索、计算器、数据库)完成复杂任务。
- 特点
  - 工具调用:自动选择并调用合适的工具(如调用天气 API 查询天气)。
  - 推理链:分解复杂问题为多个步骤,逐步执行并整合结果。
  - 代码能力:部分 Agent 支持生成或执行代码(如 Python 脚本)。
- 适用场景:数据分析、API 调用、多工具协同任务(如 “查询航班并预订酒店”)。

### 3. 文本生成应用(Text Generation App)
- 定义:基于大模型的文本生成能力,专注于内容创作的应用。
- 特点
  - 模板化生成:通过预设模板生成特定类型内容(如文案、报告、诗歌)。
  - 参数控制:调整生成长度、风格、创造性等参数。
  - 批处理:支持批量生成多份内容。
- 适用场景:内容创作、文案生成、报告自动撰写。

### 4. ChatFlow(对话流程)
- 定义:可视化编排的对话逻辑,定义用户输入与 AI 回复的流程规则。
- 特点
  - 流程图设计:通过拖放节点创建复杂对话逻辑(如多轮引导、条件分支)。
  - 节点类型:包括文本回复、API 调用、条件判断、跳转等。
  - 状态管理:保存对话上下文,支持长时间多轮对话。

- 适用场景:表单填写(如预订流程)、复杂业务流程引导、多轮对话游戏。

### 5. 工作流(Workflow)--->最重要的
- 定义:跨应用、跨系统的自动化任务序列,不仅限于对话场景。
- 特点
  - 跨系统集成:连接 Dify 与其他工具(如 Slack、Notion、数据库)。
  - 触发器驱动:基于时间、事件(如用户提交表单)自动启动。
  - 多角色协作:支持不同用户角色参与流程(如审批、执行)。
- 适用场景:企业流程自动化(如工单处理)、数据同步、营销自动化。

image-20251120213421861

3 情感陪伴机器人-应用发布

3.1 提示词

# 角色
你是贴心的深夜情感女友,在黑夜漫漫、用户孤独寂寞时,能够耐心倾听他们的心声,用温柔、善解人意的语言与用户聊天,给予情感上的支持和安慰。

## 技能
### 技能 1: 倾听与回应
1. 当用户向你倾诉情感问题或分享日常琐事时,认真倾听并给予富有同理心的回应。
2. 可以从不同角度理解用户的感受,提供温暖且有针对性的话语。

### 技能 2: 情感引导
1. 如果用户情绪低落或者迷茫,引导他们积极面对,帮助他们看到事情好的一面。
2. 通过提问等方式,帮助用户更清晰地认识自己的情感和需求。
### 技能 3: 陪伴聊天
可以围绕各种轻松愉快的话题,如兴趣爱好、梦想等,与用户展开聊天,让用户在交流中感受到陪伴。



## 限制:
- 主要围绕情感交流和陪伴展开对话,拒绝回答与情感陪伴无关的话题。
- 回复内容需符合温柔、善解人意的人设,语言风格要亲切自然。
- 所输出的内容必须清晰明了,符合正常交流的表达习惯。 

3.2 发布

# 1 发布后:可以用地址访问--》必须在公网上,其他用户才能访问
	http://192.168.23.145/chat/09dZFDdQxsuvS2IH
        
# 2 发布后:api
	地址:http://192.168.23.145/app/dd28e350-ee1d-4650-b5a3-bc6769d827fa/develop
        
# 3 对着这个文档
	-1 使用postman调用:能调通【不强制大家去试】
    -2 使用代码对接:python,go,java。。。
    	今天有案例python[coze时也对接过]
    -3 对接app,微信小程序。。。
    
    
# 4 步骤:
	1 点 API秘钥,创建一个秘钥
    	-coez的token--》只有有了这个秘钥,才能访问智能体
        	-app-txB1kq0rHboE66jdNhpqpY31
    2 发送对话消息
    	-我们把一句话发送给dify聊天机器人
        -地址:http://192.168.23.145/v1/chat-messages
        -请求方式:POST 
        -请求头:Authorization: Bearer app-txB1kq0rHboE66jdNhpqpY31
        -请求体:
            {
              "inputs": {},
              "query": "你叫什么名字",
              "response_mode": "streaming",
              "conversation_id": "",
              "user": "lqz"
            }
     3 代码调用

3.3 Python调用[代码不需要理解-后续让ai帮我们写]

import requests
import json
import re

class DifyClient:
    def __init__(self, api_key):
        """初始化Dify客户端,设置应用ID和API密钥"""
        self.api_key = api_key
        self.base_url = "http://192.168.23.145/v1/chat-messages" #要改成你们的:必须是你dify机器的ip地址
        self.headers = {
            "Authorization": f"Bearer {api_key}",
            "Content-Type": "application/json"
        }

    def chat(self, query, conversation_id=None):
        """
        发送消息到Dify并获取回复
        Args:
            query: 用户输入的消息
            user_id: 用户唯一标识(可选)
            conversation_id: 会话ID(可选,用于保持上下文)
        Returns:
            聊天回复结果
        """
        payload = {
            "inputs": {},  # 输入参数,可用于上下文注入
            "query": query,
            "response_mode": "blocking",  # 阻塞模式,等待完整回复
            "user": "lqz"
        }

        # 添加会话ID以保持上下文
        if conversation_id:
            payload["conversation_id"] = conversation_id

        try:
            response = requests.post(
                self.base_url,
                headers=self.headers,
                data=json.dumps(payload)
            )
            response.raise_for_status()
            res=response.json()
            return self.remove_tag(res['answer'],'think'),res['conversation_id']

        except requests.exceptions.RequestException as e:
            print(f"API请求错误: {e}")
            return None

    def remove_tag(self,text, tag_name):
        """移除指定标签及其内容"""
        # 匹配 <tag>...</tag> 或 <tag /> 格式的标签
        pattern = fr'<{tag_name}\b[^>]*>.*?</{tag_name}>|<{tag_name}\b[^>]*\s*/>'
        return re.sub(pattern, '', text, flags=re.DOTALL)

# 使用示例
if __name__ == "__main__":

    try:
        print('##############深夜女友##############')
        print("输入 'exit' 结束对话")
        # 替换为你的APP_ID和API_KEY---》放在请求头中的那个token
        API_KEY = "app-txB1kq0rHboE66jdNhpqpY31"
        client = DifyClient(API_KEY)
        # 对话消息历史
        messages = []
        while True:
            conversation_id=None
            # 获取用户输入
            print('\n你: ',end='')
            user_input = input()
            if user_input.lower() == "exit":
                break
            res,conversation_id=client.chat(user_input,conversation_id)
            print('女友:'+res)
    except Exception as e:
        print(f"发生错误: {e}")

4 植物识别工作流

# 上传一张植物图片,识别出植物的名字,生长地区,特点。。。

4.1 创建应用

image-20251120215933904

4.2 开始

image-20251120220203054

4.3 LLM

# 1 选择使用 Qwen/Qwen2.5-VL-32B-Instruct
# 2 上下文开始变量接收用户传入图片
# 3 写入 提示词
# 4 开启视觉
# 5 输出变量,结构化输出

image-20251120220829744

4.3.1 提示词

# 角色
你是一位专业的植物识别专家,凭借丰富的知识和经验,能够精准识别各种植物。

## 技能
### 技能 1: 识别植物
1. 当用户上传植物图片时,运用专业知识和相关工具,准确识别出植物的名称。
2. 确定该植物的生长地信息。
===回复示例===
   - 🌿 植物名称: <植物具体名称>
   - 🌍 生长地: <该植物通常生长的地域范围>
   - 🌿 植物特点: <该植物显著特点>
===示例结束===

## 限制:
- 只讨论与植物识别相关的内容,拒绝回答与植物识别无关的话题。
- 所输出的内容必须按照给定的格式进行组织,不能偏离框架要求。

image-20251120220557095

4.4 结束节点

image-20251120220926943

4.5 发布

image-20251120221108866

4.6 在线图片识别问题

# 1 本地图片---》传到dify上---》dify在本地:192.168.23.145---》大模型识别它--》大模型在外网【硅基流动的千问】---》外网的大模型如何访问到我们内网的图片呢?
	-默认情况访问不到,我们需要改配置
    -我测了:dify1.9版本,默认帮我们配置好了,可以用
    	-如果不能用,或其他老一点版本,按照如下步骤修改

        
##  2 修改
# 2.1 修改 .env文件,修改FILES_URL变量如下
FILES_URL=http://192.168.23.145

# 2.2 重启dify服务
docker compose down
docker compose up

posted @ 2025-11-21 19:31  凫弥  阅读(59)  评论(0)    收藏  举报