Dify1.01版本vscode 本地环境搭建运行实践

dify 是python编写的低代码AI 开发平台,是常用的大模型开发平台。

本文基于最新的1.0.1版本实践完成,有需要的可以私信交流。

咨询免费,详细文档及视频需要一定成本,大概相当于节约的时间成本。

搭建环境windows 11
开发工具vscode

搭建步骤:

1. Start the docker-compose stack

window 环境下运行docker命令,需要下载docker 官网镜像,会遇到timeout 问题。

2. Copy .env.example to .env

3. Generate a SECRET_KEY in the .env file.

这一步需要先在window 系统中配置openssl

4. Create environment.

你需要安装合适版本的python 、然后安装poetry

5. Install dependencies

下载python依赖的库,根据网速需要不同的时间

6. Run migrate

PS D:\Projects-python\dify-1.0.1\docker> cd ..\api\
PS D:\Projects-python\dify-1.0.1\api> poetry run python -m flask db upgrade
2025-03-13 10:55:25,160 INFO [utils.py:162]  NumExpr defaulting to 8 threads.
D:\Projects-python\dify-1.0.1\api\controllers\console\remote_files.py:9: UserWarning: To use python-magic guess MIMETYPE, you need to run `pip install python-magic-bin`
  from controllers.common import helpers
INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade  -> 64b051264f32, init
INFO  [alembic.runtime.migration] Running upgrade 64b051264f32 -> 9f4e3427ea84, add created by role
INFO  [alembic.runtime.migration] Running upgrade 9f4e3427ea84 -> a45f4dfde53b, add language to recommend apps
INFO  [alembic.runtime.migration] Running upgrade a45f4dfde53b -> 614f77cecc48, add last active at
INFO  [alembic.runtime.migration] Running upgrade 614f77cecc48 -> e32f6ccb87c6, e08af0a69ccefbb59fa80c778efee300bb780980
INFO  [alembic.runtime.migration] Running upgrade e32f6ccb87c6 -> d3d503a3471c, add is_deleted to conversations
INFO  [alembic.runtime.migration] Running upgrade d3d503a3471c -> a5b56fb053ef, app config add speech_to_text
INFO  [alembic.runtime.migration] Running upgrade a5b56fb053ef -> 2beac44e5f5f, add is_universal in apps
INFO  [alembic.runtime.migration] Running upgrade 2beac44e5f5f -> 7ce5a52e4eee, add tool providers
INFO  [alembic.runtime.migration] Running upgrade 7ce5a52e4eee -> 8d2d099ceb74, add_qa_model_support
INFO  [alembic.runtime.migration] Running upgrade 8d2d099ceb74 -> 16fa53d9faec, add provider model support
INFO  [alembic.runtime.migration] Running upgrade 16fa53d9faec -> e35ed59becda, modify quota limit field type
INFO  [alembic.runtime.migration] Running upgrade e35ed59becda -> bf0aec5ba2cf, add provider order
INFO  [alembic.runtime.migration] Running upgrade bf0aec5ba2cf -> 5022897aaceb, add model name in embedding
INFO  [alembic.runtime.migration] Running upgrade 5022897aaceb -> 2c8af9671032, add_qa_document_language
INFO  [alembic.runtime.migration] Running upgrade 2c8af9671032 -> e8883b0148c9, add_dataset_model_name
INFO  [alembic.runtime.migration] Running upgrade e8883b0148c9 -> 853f9b9cd3b6, add message price unit
INFO  [alembic.runtime.migration] Running upgrade 853f9b9cd3b6 -> 4bcffcd64aa4, update_dataset_model_field_null_available
INFO  [alembic.runtime.migration] Running upgrade 4bcffcd64aa4 -> 6dcb43972bdc, add_dataset_retriever_resource
INFO  [alembic.runtime.migration] Running upgrade 6dcb43972bdc -> 77e83833755c, add_app_config_retriever_resource
INFO  [alembic.runtime.migration] Running upgrade 77e83833755c -> 6e2cfb077b04, add_dataset_collection_binding
INFO  [alembic.runtime.migration] Running upgrade 6e2cfb077b04 -> ab23c11305d4, add dataset query variable at app model configs.
INFO  [alembic.runtime.migration] Running upgrade ab23c11305d4 -> 2e9819ca5b28, add_tenant_id_in_api_token
INFO  [alembic.runtime.migration] Running upgrade 2e9819ca5b28 -> b3a09c049e8e, add advanced prompt templates
INFO  [alembic.runtime.migration] Running upgrade b3a09c049e8e -> 968fff4c0ab9, add_api_based_extension
INFO  [alembic.runtime.migration] Running upgrade 968fff4c0ab9 -> a9836e3baeee, add external_data_tools in app model config
INFO  [alembic.runtime.migration] Running upgrade a9836e3baeee -> 8fe468ba0ca5, add gpt4v supports
INFO  [alembic.runtime.migration] Running upgrade 8fe468ba0ca5 -> fca025d3b60f, add-dataset-retrieval-model
INFO  [alembic.runtime.migration] Running upgrade fca025d3b60f -> e1901f623fd0, add-annotation-reply
INFO  [alembic.runtime.migration] Running upgrade e1901f623fd0 -> 46976cc39132, add-annotation-histoiry-score
INFO  [alembic.runtime.migration] Running upgrade 46976cc39132 -> f2a6fc85e260, add_anntation_history_message_id
INFO  [alembic.runtime.migration] Running upgrade f2a6fc85e260 -> 714aafe25d39, add_anntation_history_match_response
INFO  [alembic.runtime.migration] Running upgrade 714aafe25d39 -> 246ba09cbbdb, add_app_anntation_setting
INFO  [alembic.runtime.migration] Running upgrade 246ba09cbbdb -> 88072f0caa04, add custom config in tenant
INFO  [alembic.runtime.migration] Running upgrade 88072f0caa04 -> 187385f442fc, modify provider model name length
INFO  [alembic.runtime.migration] Running upgrade 187385f442fc -> 89c7899ca936, empty message
INFO  [alembic.runtime.migration] Running upgrade 89c7899ca936 -> 3ef9b2b6bee6, add_assistant_app
INFO  [alembic.runtime.migration] Running upgrade 3ef9b2b6bee6 -> ad472b61a054, add api provider icon
INFO  [alembic.runtime.migration] Running upgrade ad472b61a054 -> 8ec536f3c800, rename api provider credentials
INFO  [alembic.runtime.migration] Running upgrade 8ec536f3c800 -> 00bacef91f18, rename api provider description
INFO  [alembic.runtime.migration] Running upgrade 00bacef91f18 -> f25003750af4, add created/updated at
INFO  [alembic.runtime.migration] Running upgrade f25003750af4 -> c71211c8f604, add tool_invoke_model_log
INFO  [alembic.runtime.migration] Running upgrade c71211c8f604 -> 114eed84c228, remove tool id from model invoke
INFO  [alembic.runtime.migration] Running upgrade 114eed84c228 -> 4829e54d2fee, change message chain id to nullable
INFO  [alembic.runtime.migration] Running upgrade 4829e54d2fee -> 053da0c1d756, add api tool privacy
INFO  [alembic.runtime.migration] Running upgrade 053da0c1d756 -> 4823da1d26cf, add tool file
INFO  [alembic.runtime.migration] Running upgrade 4823da1d26cf -> 9fafbd60eca1, add message file belongs to
INFO  [alembic.runtime.migration] Running upgrade 9fafbd60eca1 -> 8ae9bc661daa, add tool conversation variables idx
INFO  [alembic.runtime.migration] Running upgrade 8ae9bc661daa -> 23db93619b9d, add message files into agent thought
INFO  [alembic.runtime.migration] Running upgrade 23db93619b9d -> de95f5c77138, migration serpapi_api_key
INFO  [alembic.runtime.migration] Running upgrade de95f5c77138 -> b24be59fbb04, empty message
INFO  [alembic.runtime.migration] Running upgrade b24be59fbb04 -> dfb3b7f477da, add-tool-index
INFO  [alembic.runtime.migration] Running upgrade dfb3b7f477da -> 380c6aa5a70d, add tool labels to agent thought
INFO  [alembic.runtime.migration] Running upgrade 380c6aa5a70d -> 16830a790f0f, empty message
INFO  [alembic.runtime.migration] Running upgrade 16830a790f0f -> a8f9b3c45e4a, add_tenant_id_db_index
INFO  [alembic.runtime.migration] Running upgrade a8f9b3c45e4a -> 17b5ab037c40, add-keyworg-table-storage-type
INFO  [alembic.runtime.migration] Running upgrade 17b5ab037c40 -> a8d7385a7b66, add-embeddings-provider-name
INFO  [alembic.runtime.migration] Running upgrade a8d7385a7b66 -> b289e2408ee2, add workflow
INFO  [alembic.runtime.migration] Running upgrade b289e2408ee2 -> cc04d0998d4d, set model config column nullable
INFO  [alembic.runtime.migration] Running upgrade cc04d0998d4d -> f9107f83abab, add desc for apps
INFO  [alembic.runtime.migration] Running upgrade f9107f83abab -> 42e85ed5564d, conversation columns set nullable
INFO  [alembic.runtime.migration] Running upgrade 42e85ed5564d -> b5429b71023c, messages columns set nullable
INFO  [alembic.runtime.migration] Running upgrade b5429b71023c -> 563cf8bf777b, enable tool file without conversation id
INFO  [alembic.runtime.migration] Running upgrade 563cf8bf777b -> e2eacc9a1b63, add status for message
INFO  [alembic.runtime.migration] Running upgrade e2eacc9a1b63 -> c3311b089690, add tool meta
INFO  [alembic.runtime.migration] Running upgrade c3311b089690 -> 3c7cac9521c6, add-tags-and-binding-table
INFO  [alembic.runtime.migration] Running upgrade 3c7cac9521c6 -> 47cc7df8c4f3, modify default model name length
INFO  [alembic.runtime.migration] Running upgrade 47cc7df8c4f3 -> 5fda94355fce, Custom Disclaimer
INFO  [alembic.runtime.migration] Running upgrade 5fda94355fce -> 7bdef072e63a, add workflow tool
INFO  [alembic.runtime.migration] Running upgrade 7bdef072e63a -> 3b18fea55204, add tool label bings
INFO  [alembic.runtime.migration] Running upgrade 3b18fea55204 -> 9e98fbaffb88, add workflow tool version
INFO  [alembic.runtime.migration] Running upgrade 9e98fbaffb88 -> 03f98355ba0e, add workflow tool label and tool bindings idx
INFO  [alembic.runtime.migration] Running upgrade 03f98355ba0e -> 64a70a7aab8b, add workflow run index
INFO  [alembic.runtime.migration] Running upgrade 64a70a7aab8b -> 4e99a8df00ff, add load balancing
INFO  [alembic.runtime.migration] Running upgrade 4e99a8df00ff -> 7b45942e39bb, add-api-key-auth-binding
INFO  [alembic.runtime.migration] Running upgrade 7b45942e39bb -> 4ff534e1eb11, add workflow to site
INFO  [alembic.runtime.migration] Running upgrade 4ff534e1eb11 -> b69ca54b9208, add chatbot color theme
INFO  [alembic.runtime.migration] Running upgrade 4ff534e1eb11 -> 04c602f5dc9b, update AppModelConfig and add table TracingAppConfig
INFO  [alembic.runtime.migration] Running upgrade 04c602f5dc9b -> c031d46af369, remove app model config trace config and rename trace app config
INFO  [alembic.runtime.migration] Running upgrade c031d46af369 -> 2a3aebbbf4bb, add app tracing
INFO  [alembic.runtime.migration] Running upgrade 2a3aebbbf4bb, b69ca54b9208 -> 63f9175e515b, merge branches
INFO  [alembic.runtime.migration] Running upgrade 63f9175e515b -> b2602e131636, add workflow_run_id index for message
INFO  [alembic.runtime.migration] Running upgrade b2602e131636 -> 7e6a8693e07a, add table dataset_permissions
INFO  [alembic.runtime.migration] Running upgrade 7e6a8693e07a -> 161cadc1af8d, add dataset permission tenant id
INFO  [alembic.runtime.migration] Running upgrade 161cadc1af8d -> 408176b91ad3, 'add_max_active_requests'
INFO  [alembic.runtime.migration] Running upgrade 408176b91ad3 -> fecff1c3da27, remove extra tracing app config table and add idx_dataset_permissions_tenant_id
INFO  [alembic.runtime.migration] Running upgrade fecff1c3da27 -> 6e957a32015b, add-embedding-cache-created_at_index
INFO  [alembic.runtime.migration] Running upgrade 6e957a32015b -> 8e5588e6412e, add environment variable to workflow model
INFO  [alembic.runtime.migration] Running upgrade 8e5588e6412e -> 53bf8af60645, update model
INFO  [alembic.runtime.migration] Running upgrade 53bf8af60645 -> eeb2e349e6ac, increase max model_name length
INFO  [alembic.runtime.migration] Running upgrade eeb2e349e6ac -> 1787fbae959a, update tools original_url length
INFO  [alembic.runtime.migration] Running upgrade 1787fbae959a -> 63a83fcf12ba, support conversation variables
INFO  [alembic.runtime.migration] Running upgrade 63a83fcf12ba -> 8782057ff0dc, add conversations.dialogue_count
INFO  [alembic.runtime.migration] Running upgrade 8782057ff0dc -> a6be81136580, app and site icon type
INFO  [alembic.runtime.migration] Running upgrade a6be81136580 -> 2dbe42621d96, rename workflow__conversation_variables to workflow_conversation_variables
INFO  [alembic.runtime.migration] Running upgrade 2dbe42621d96 -> d0187d6a88dd, add created_by and updated_by to app, modelconfig, and site
INFO  [alembic.runtime.migration] Running upgrade d0187d6a88dd -> 030f4915f36a, add use_icon_as_answer_icon fields for app and site
INFO  [alembic.runtime.migration] Running upgrade 030f4915f36a -> 675b5321501b, add node_execution_id into node_executions
INFO  [alembic.runtime.migration] Running upgrade 675b5321501b -> d57ba9ebb251, add parent_message_id to messages
INFO  [alembic.runtime.migration] Running upgrade d57ba9ebb251 -> 6af6a521a53e, update-retrieval-resource
INFO  [alembic.runtime.migration] Running upgrade 6af6a521a53e -> 33f5fac87f29, external_knowledge_api
INFO  [alembic.runtime.migration] Running upgrade 33f5fac87f29 -> d8e744d88ed6, fix wrong service-api history
INFO  [alembic.runtime.migration] Running upgrade d8e744d88ed6 -> bbadea11becb, add name and size to tool_files
INFO  [alembic.runtime.migration] Running upgrade bbadea11becb -> 0251a1c768cc, add-tidb-auth-binding
INFO  [alembic.runtime.migration] Running upgrade 0251a1c768cc -> 43fa78bc3b7d, add_white_list
INFO  [alembic.runtime.migration] Running upgrade 43fa78bc3b7d -> d3f6769a94a3, Add upload_files.source_url
INFO  [alembic.runtime.migration] Running upgrade d3f6769a94a3 -> 93ad8c19c40b, rename conversation variables index name
INFO  [alembic.runtime.migration] Running upgrade 93ad8c19c40b -> f4d7ce70a7ca, update upload_files.source_url
INFO  [alembic.runtime.migration] Running upgrade f4d7ce70a7ca -> d07474999927, update type of custom_disclaimer to TEXT
INFO  [alembic.runtime.migration] Running upgrade d07474999927 -> 09a8d1878d9b, update workflows graph, features and updated_at
INFO  [alembic.runtime.migration] Running upgrade 09a8d1878d9b -> 01d6889832f7, add_created_at_index_for_messages
INFO  [alembic.runtime.migration] Running upgrade 01d6889832f7 -> cf8f4fc45278, add exceptions_count field to WorkflowRun model
INFO  [alembic.runtime.migration] Running upgrade cf8f4fc45278 -> 11b07f66c737, remove unused tool_providers
INFO  [alembic.runtime.migration] Running upgrade 11b07f66c737 -> e1944c35e15e, add retry_index field to node-execution model
INFO  [alembic.runtime.migration] Running upgrade e1944c35e15e -> d7999dfa4aae, remove workflow_node_executions.retry_index if exists
INFO  [alembic.runtime.migration] Running upgrade d7999dfa4aae -> e19037032219, parent-child-index
INFO  [alembic.runtime.migration] Running upgrade e19037032219 -> 923752d42eb6, add_auto_disabled_dataset_logs
INFO  [alembic.runtime.migration] Running upgrade 923752d42eb6 -> a91b476a53de, change workflow_runs.total_tokens to bigint
INFO  [alembic.runtime.migration] Running upgrade a91b476a53de -> ddcc8bbef391, increase max length of builtin tool provider
INFO  [alembic.runtime.migration] Running upgrade ddcc8bbef391 -> 08ec4f75af5e, add_tenant_plugin_permisisons
INFO  [alembic.runtime.migration] Running upgrade 08ec4f75af5e -> 4413929e1ec2, extend_provider_name_column
INFO  [alembic.runtime.migration] Running upgrade 4413929e1ec2 -> 5511c782ee4c, extend provider column
INFO  [alembic.runtime.migration] Running upgrade 5511c782ee4c -> ee79d9b1c156, add marked_name and marked_comment in workflows
INFO  [alembic.runtime.migration] Running upgrade ee79d9b1c156 -> f051706725cc, add_rate_limit_logs

7. Start backend

启动api 服务,这步之前确保第一步成功

8. Start Dify web service.

启动前端服务

需要配置node 环境
如果只是后端开发,这步可以教给前端研究

9. Setup your application by visiting http://localhost:3000

浏览器访问地址

10、初次登录报错

需要观察日志关键字配置redis

在这里插入图片描述

在这里插入图片描述

<think> 我们正在处理用户关于在Dify 1.10版本中添加本地Xinference模型进行Rerank的查询。根据提供的引用内容,我们可以总结出以下关键步骤和注意事项: 1. **部署Xinference服务**:首先需要在本地或服务器上部署Xinference服务。引用[2]提到可以使用docker部署Xinference。注意,Xinference是一个分布式推理框架,支持多种模型,包括Rerank模型。 2. **下载Rerank模型**:使用Xinference提供的命令下载所需的Rerank模型。引用[1]中给出了一个示例命令:`ollama pull qllama/bge-reranker-large`。注意,这里使用的是`ollama`命令,但实际上Xinference可能使用自己的命令或通过其API来管理模型。根据引用[1],Xinference会自动配置Rerank模型。 3. **访问Xinference服务**:Xinference服务部署后,可以通过浏览器访问其Web界面(如引用[1]中提到的`http://localhost:9997`)。但需要注意的是,如果Dify是通过Docker部署的,那么Dify容器内部无法通过`localhost`访问宿主机上的服务(引用[3])。因此,在Dify配置中,需要使用宿主机对容器的可访问地址,比如使用`host.docker.internal`(在Docker for Mac/Windows中)或宿主机的IP地址(在Linux中需要配置网络)。 4. **在Dify中配置Rerank模型**:进入Dify的管理界面,找到模型配置的地方(可能是Rerank模型的配置部分)。在配置时,需要提供模型名称和Xinference服务的URL。引用[1]提到,模型名称和模型UID相同,而服务器URL是`http://host.docker.internal:9997`(针对Docker部署的Dify访问宿主机上的Xinference)。 5. **网络配置注意事项**:强调网络配置的重要性。如果Dify和Xinference都运行在Docker中,需要确保它们在同一网络下,或者通过宿主机的IP进行通信。引用[3]明确指出,Dify容器内部无法访问localhost,必须使用宿主机IP或特殊DNS(如`host.docker.internal`)。 根据以上信息,我们可以整理出在Dify 1.10版本中添加本地Xinference模型进行Rerank的步骤: ### 步骤: 1. **部署Xinference**:使用Docker部署Xinference服务(参考引用[2])。假设我们使用以下命令启动Xinference容器(注意端口映射): ```bash docker run -d --name xinference -p 9997:9997 xprobe/xinference:latest ``` 2. **下载Rerank模型**:进入Xinference容器或使用Xinference的API下载模型。实际上,Xinference提供了命令行工具`xinference`来拉取模型。但根据引用[1],也可以使用`ollama pull`,不过这里可能是指Xinference兼容Ollama的模型格式?但更准确的做法是使用Xinference的命令。例如,使用Xinference的Python客户端或通过Web界面下载模型。由于引用[1]提到使用`ollama pull`,我们可以理解为Xinference支持从Ollama模型库中拉取模型,但具体命令可能需要查阅Xinference文档。另一种方式是通过Xinference的Web界面(http://localhost:9997)来下载和管理模型。 3. **启动模型**:在Xinference中启动Rerank模型。同样,可以通过Web界面或API启动模型。启动后,模型会有一个唯一的UID(模型标识符)。 4. **配置Dify**: - 进入Dify的管理后台(假设通过Docker部署在本地)。 - 找到“模型供应商”或“Rerank模型”配置部分(在Dify 1.10中,具体路径可能是:设置 -> 模型供应商 -> Rerank模型)。 - 选择Xinference作为供应商,填写以下信息: - 模型名称:填写模型UID(如引用[1]所述,模型名称和模型UID相同) - 服务器URL:由于Dify在Docker容器中运行,我们需要填写能够从Dify容器内部访问到Xinference服务的地址。如果Xinference运行在宿主机上(即Docker宿主机),则URL为:`http://host.docker.internal:9997`(在Mac/Windows的Docker中)。在Linux环境下,可能需要使用宿主机的IP地址(如`http://<宿主机IP>:9997`)并确保Docker容器可以访问该IP(注意防火墙设置)。 5. **测试与验证**:保存配置后,在Dify中使用一个需要Rerank功能的工作流进行测试,检查是否能够正常调用Rerank模型。 ### 注意事项: - 如果遇到连接问题,请检查: - Xinference服务是否正常运行(通过浏览器访问Xinference的Web界面确认)。 - 从Dify容器内部是否能访问Xinference服务(可以进入Dify容器使用`curl http://host.docker.internal:9997`测试连通性)。 - 模型UID必须正确,可以在Xinference的Web界面中查看已启动模型的UID。 ### 引用说明: 以上步骤参考了提供的引用内容,特别是引用[1]和引用[3]中关于网络配置的关键点。 §§相关问题§§ 1. 如何在Docker中部署Xinference并下载Rerank模型? 2. Dify和Xinference不在同一台机器上如何进行配置? 3. 在Linux环境下,如何配置Dify容器访问宿主机上的Xinference服务? 4. 如何验证Dify已成功连接到Xinference的Rerank模型? </think> 在 Dify 1.10 版本中添加本地 Xinference 模型进行 Rerank 的配置方法如下: ### 配置步骤 1. **部署 Xinference 服务** 使用 Docker 启动 Xinference 服务(默认端口 9997): ```bash docker run -d -p 9997:9997 --name xinference xprobe/xinference:latest ``` 2. **下载 Rerank 模型** 通过 Xinference 下载 Rerank 模型(以 `bge-reranker-large` 为例): ```bash docker exec xinference xinference launch -n rerank_model -u bge-reranker-large -t rerank ``` > 注:模型 UID 将自动生成,可通过 `http://localhost:9997` 在 Web 界面查看。 3. **配置 Dify 容器网络** **关键步骤**:确保 Dify 容器能访问宿主机服务。在 `docker-compose.yml` 中添加 `extra_hosts` 配置: ```yaml services: dify-web: extra_hosts: - "host.docker.internal:host-gateway" # Linux/macOS # Windows 使用宿主机的实际 IP(如:192.168.x.x) ``` 4. **在 Dify 中添加模型** 登录 Dify 管理后台 → 进入 **模型供应商** → 选择 **Xinference**: - **模型名称**:填写模型 UID(从 Xinference Web 界面获取) - **服务器 URL**:`http://host.docker.internal:9997`(Docker 部署) ![图示:Dify后台配置界面](https://example.com/dify-config-screenshot.png) ### 常见问题解决 - **连接失败**: 检查 Dify 容器到宿主机的网络连通性: ```bash docker exec dify-web curl http://host.docker.internal:9997 ``` 若返回 `Connection refused`,需检查防火墙或改用宿主机 IP(Linux 需配置 `--add-host`)[^3]。 - **模型加载错误**: 确认 Xinference 模型 UID 与 Dify 配置一致,并通过 Xinference 接口验证模型状态: ```bash curl http://localhost:9997/v1/models ``` ### 验证配置 在 Dify 工作流中添加 Rerank 节点,使用测试数据查看返回的相关性分数,确认模型生效。 > 提示:Dify 1.10 优化了本地模型支持,但需严格遵循跨容器网络配置原则[^1][^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值