当前位置: 首页 > article >正文

打造个人AI写作助手:ERNIE-4.5-0.3B-PT的vLLM部署与Chainlit应用

打造个人AI写作助手ERNIE-4.5-0.3B-PT的vLLM部署与Chainlit应用想不想拥有一个随时待命的AI写作助手不用联网不用付费就在你自己的电脑上运行。今天我就带你一步步实现这个想法——用vLLM部署ERNIE-4.5-0.3B-PT模型再用chainlit做个漂亮的聊天界面打造一个完全属于你的本地AI写作伙伴。你可能觉得部署大模型很复杂需要专业的服务器和深厚的技术背景。但实际情况是有了vLLM这样的工具整个过程变得简单多了。这篇文章就是一份详细的操作指南从环境准备到界面搭建每个步骤都有清晰的说明和可运行的代码。1. 为什么选择ERNIE-4.5-0.3B-PT作为写作助手在开始动手之前咱们先聊聊为什么选这个模型它能帮你做什么。本地部署的优势很明显。数据完全在你自己的设备上不用担心隐私泄露。响应速度快不用等待网络传输。而且一次部署长期使用没有订阅费用。对于经常需要写作、编程、学习的人来说有个本地的AI助手确实方便。ERNIE-4.5-0.3B-PT是个很合适的选择。0.3B的参数规模不算大这意味着它能在普通的电脑上运行不需要特别高端的显卡。但它保留了ERNIE系列模型在中文理解和生成上的优势对于写作、问答、代码生成这些常见任务能力完全够用。vLLM让部署变得简单。vLLM是一个专门为大模型推理优化的框架它最大的优点是内存使用效率高。传统的部署方式可能需要很大的显存但vLLM通过一些巧妙的技术能让同样的模型用更少的内存跑起来。这对于我们想在个人电脑上部署来说特别重要。chainlit让交互变得友好。光有模型还不够得有个好用的界面。chainlit就是专门为AI应用设计的聊天界面框架几行代码就能做出一个像模像样的聊天窗口比用命令行调用舒服多了。所以这个组合——ERNIE-4.5-0.3B-PT vLLM chainlit——就形成了一个完整的个人AI写作助手方案。接下来咱们就一步步把它实现出来。2. 环境准备搭建你的AI工作台部署之前先把环境准备好。这里我假设你用的是Linux系统Ubuntu 20.04或22.04Windows和macOS的步骤会有些不同但大体思路是一样的。2.1 检查你的硬件配置首先看看你的电脑能不能跑得动这个模型。打开终端运行# 查看GPU信息如果你有NVIDIA显卡 nvidia-smi # 查看系统内存 free -h # 查看磁盘空间 df -h你需要的大概配置GPU至少4GB显存6GB以上更好内存至少8GB系统内存磁盘至少10GB可用空间如果没有独立显卡用CPU也能跑只是速度会慢一些。vLLM支持CPU推理后面我会告诉你怎么配置。2.2 安装Python和必要工具确保你的Python版本在3.8以上# 检查Python版本 python3 --version # 如果没有Python先安装 sudo apt update sudo apt install python3 python3-pip python3-venv创建一个独立的Python环境是个好习惯能避免包冲突# 创建虚拟环境 python3 -m venv ~/ai_writing_env # 激活虚拟环境 source ~/ai_writing_env/bin/activate # 你会看到命令行前面多了 (ai_writing_env)2.3 安装PyTorchPyTorch是深度学习的基础框架安装时要注意选择适合你系统的版本# 升级pip pip install --upgrade pip # 安装PyTorch根据你的CUDA版本选择 # 如果你有NVIDIA显卡先检查CUDA版本 nvcc --version # CUDA 11.8的安装命令 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 如果没有GPU安装CPU版本 pip install torch torchvision torchaudio安装完成后验证一下python -c import torch; print(fPyTorch版本: {torch.__version__}) python -c import torch; print(fCUDA可用: {torch.cuda.is_available()})如果显示CUDA可用说明GPU配置正确。如果不可用也不用担心用CPU也能跑。3. 使用vLLM部署ERNIE-4.5-0.3B-PT模型环境准备好了现在开始部署模型。vLLM的安装和配置是关键步骤我会详细说明每个环节。3.1 安装vLLMvLLM的安装很简单一行命令就行pip install vllm如果安装过程中遇到问题可能是缺少一些系统依赖。可以试试先安装这些# 安装编译工具和依赖 sudo apt-get update sudo apt-get install build-essential # 重新安装vLLM pip install vllm安装完成后验证一下python -c import vllm; print(vLLM安装成功)3.2 下载ERNIE-4.5-0.3B-PT模型模型可以从Hugging Face下载。如果你网络条件好可以直接用命令行下载# 安装huggingface-hub pip install huggingface-hub # 下载模型 python -c from huggingface_hub import snapshot_download snapshot_download( repo_idPaddlePaddle/ERNIE-4.5-0.3B-PT, local_dir./ernie-4.5-0.3b-pt, local_dir_use_symlinksFalse ) 如果下载速度慢或者网络有问题也可以手动下载访问Hugging Face网站https://huggingface.co/PaddlePaddle/ERNIE-4.5-0.3B-PT点击Files and versions标签下载所有文件到本地的一个文件夹比如~/models/ernie-4.5-0.3b-pt模型大小大约2-3GB下载需要一些时间。下载完成后检查一下文件结构ls -la ~/models/ernie-4.5-0.3b-pt/你应该能看到这些文件config.json,pytorch_model.bin,tokenizer.json,special_tokens_map.json等。3.3 启动vLLM服务模型下载好了现在启动vLLM服务。创建一个启动脚本会方便一些# 创建启动脚本 cat start_vllm.sh EOF #!/bin/bash # 激活虚拟环境 source ~/ai_writing_env/bin/activate # 启动vLLM服务 python -m vllm.entrypoints.openai.api_server \ --model ~/models/ernie-4.5-0.3b-pt \ --tensor-parallel-size 1 \ --gpu-memory-utilization 0.8 \ --max-model-len 2048 \ --served-model-name ernie-4.5-0.3b-pt \ --port 8000 \ --host 0.0.0.0 EOF # 给脚本执行权限 chmod x start_vllm.sh # 启动服务 ./start_vllm.sh让我解释一下这些参数的意思--model ~/models/ernie-4.5-0.3b-pt指定模型路径--tensor-parallel-size 1使用1个GPU如果你有多个GPU可以调整这个数字--gpu-memory-utilization 0.8使用80%的GPU内存留一些给系统--max-model-len 2048最大生成长度可以根据需要调整--port 8000服务监听的端口号--host 0.0.0.0允许所有IP访问如果只在本地用可以改成127.0.0.1如果没有GPU用CPU运行# 修改启动参数使用CPU python -m vllm.entrypoints.openai.api_server \ --model ~/models/ernie-4.5-0.3b-pt \ --device cpu \ --max-model-len 1024 \ --served-model-name ernie-4.5-0.3b-pt \ --port 8000 \ --host 0.0.0.0注意CPU运行会慢很多而且--max-model-len要设小一点不然内存可能不够。服务启动后你会看到类似这样的输出INFO: Started server process [12345] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRLC to quit)看到最后一行说明服务启动成功了。3.4 测试服务是否正常打开另一个终端窗口测试一下服务# 发送一个测试请求 curl http://localhost:8000/v1/completions \ -H Content-Type: application/json \ -d { model: ernie-4.5-0.3b-pt, prompt: 你好请写一句关于春天的诗。, max_tokens: 50, temperature: 0.7 }如果一切正常你会收到一个JSON响应里面包含模型生成的文本。第一次请求可能会慢一些因为模型要加载到内存里。你也可以用Python测试import requests import json url http://localhost:8000/v1/completions headers {Content-Type: application/json} data { model: ernie-4.5-0.3b-pt, prompt: 用Python写一个Hello World程序, max_tokens: 100, temperature: 0.7 } response requests.post(url, headersheaders, jsondata) result response.json() print(生成的文本) print(result[choices][0][text])4. 使用chainlit构建聊天界面模型服务跑起来了但用命令行调用不太方便。咱们用chainlit做个漂亮的网页界面就像ChatGPT那样用起来舒服多了。4.1 安装chainlitchainlit的安装很简单pip install chainlit4.2 创建chainlit应用创建一个新的Python文件比如叫writing_assistant.pyimport chainlit as cl import requests import json from typing import Optional # vLLM服务的地址 VLLM_API_URL http://localhost:8000/v1/chat/completions # 系统提示词定义AI助手的角色 SYSTEM_PROMPT 你是一个专业的写作助手擅长各种类型的写作任务。 你的回答应该 1. 准确理解用户的需求 2. 提供有创意、有深度的内容 3. 保持语言流畅、自然 4. 根据不同的写作类型调整风格 5. 如果用户需要代码提供正确、规范的代码示例 cl.on_chat_start async def start_chat(): 聊天开始时的初始化 # 设置聊天设置 settings await cl.ChatSettings( [ cl.input_widget.Slider( idtemperature, label创意程度, initial0.7, min0, max1, step0.1, ), cl.input_widget.Slider( idmax_tokens, label最大长度, initial512, min50, max2048, step50, ), cl.input_widget.Select( idwriting_style, label写作风格, values[专业, 创意, 简洁, 幽默, 正式], initial_index0, ) ] ).send() # 欢迎消息 await cl.Message( content 你好我是你的AI写作助手基于ERNIE-4.5-0.3B-PT模型。\n\n 我可以帮你\n • 写作各种类型的文章\n • 生成创意内容\n • 编写代码\n • 回答问题\n • 翻译文本\n\n 试试让我帮你写点什么吧 ).send() cl.on_message async def main(message: cl.Message): 处理用户消息 # 获取用户的设置 settings await cl.ChatSettings.get_by_user(message.user_session.get(id)) # 准备消息历史支持多轮对话 messages [ {role: system, content: SYSTEM_PROMPT}, {role: user, content: message.content} ] # 根据用户选择的风格调整提示词 writing_style settings.get(writing_style, 专业) if settings else 专业 style_prompt f请使用{writing_style}的风格进行写作。 messages.append({role: system, content: style_prompt}) # 显示正在思考的提示 msg cl.Message(content) await msg.send() try: # 准备请求数据 payload { model: ernie-4.5-0.3b-pt, messages: messages, max_tokens: settings.get(max_tokens, 512) if settings else 512, temperature: settings.get(temperature, 0.7) if settings else 0.7, top_p: 0.9, stream: True # 启用流式输出 } # 发送请求到vLLM服务 response requests.post( VLLM_API_URL, jsonpayload, headers{Content-Type: application/json}, streamTrue, # 启用流式响应 timeout60 ) if response.status_code 200: # 处理流式响应 full_response for line in response.iter_lines(): if line: line line.decode(utf-8) if line.startswith(data: ): data line[6:] # 去掉data: 前缀 if data ! [DONE]: try: chunk json.loads(data) if choices in chunk and len(chunk[choices]) 0: delta chunk[choices][0].get(delta, {}) if content in delta: token delta[content] full_response token await msg.stream_token(token) except json.JSONDecodeError: continue await msg.update() # 保存对话历史简化版 if conversation_history not in cl.user_session: cl.user_session[conversation_history] [] cl.user_session[conversation_history].append({ user: message.content, assistant: full_response }) else: error_msg f请求失败状态码{response.status_code} if response.text: error_msg f\n错误信息{response.text} await cl.Message(contenterror_msg).send() except requests.exceptions.Timeout: await cl.Message(content请求超时请稍后重试。).send() except Exception as e: await cl.Message(contentf出错了{str(e)}).send() cl.on_settings_update async def handle_settings_update(settings: cl.ChatSettings): 处理设置更新 await cl.Message( contentf设置已更新\n f• 创意程度{settings[temperature]}\n f• 最大长度{settings[max_tokens]}\n f• 写作风格{settings[writing_style]} ).send() if __name__ __main__: # 启动chainlit应用 cl.run()这个脚本做了几件重要的事情创建了完整的聊天界面有欢迎消息、设置面板、聊天区域支持流式输出文字一个个出现体验更好可调节参数可以调整创意程度、生成长度、写作风格系统提示词定义了AI助手的角色和能力错误处理处理网络超时、服务错误等情况4.3 配置chainlit创建一个配置文件让界面更美观# chainlit.md - 这是应用的配置文件 # 欢迎页面内容 # 应用信息 welcome: 欢迎使用AI写作助手 # 应用描述 description: | # ️ AI写作助手 基于ERNIE-4.5-0.3B-PT模型的本地写作助手完全在您的设备上运行。 ## 主要功能 - ✍️ 各种类型的写作文章、故事、诗歌等 - 代码生成和解释 - ❓ 问题解答和知识查询 - 文本翻译和润色 ## 使用提示 1. 在左侧输入您的问题或需求 2. 调整上方的设置来控制生成效果 3. 点击发送等待AI回复 ## 注意事项 - 所有处理都在本地完成数据不会上传到云端 - 首次使用可能需要一些时间加载模型 - 如果响应慢可以尝试减少生成长度4.4 启动chainlit应用保存所有文件后在终端中运行# 确保在虚拟环境中 source ~/ai_writing_env/bin/activate # 启动chainlit chainlit run writing_assistant.py -w-w参数会自动打开浏览器。如果一切正常你会看到一个漂亮的聊天界面。4.5 测试聊天功能在浏览器中试试这些功能写作任务写一篇关于人工智能未来发展的短文300字左右帮我写一封求职信应聘Python开发工程师创作一首关于秋天的五言诗代码相关用Python写一个爬虫抓取网页标题解释一下什么是闭包并给出例子帮我调试这段代码[粘贴你的代码]问答任务什么是机器学习用简单的语言解释如何提高写作能力推荐几个学习编程的网站你会看到模型生成回答文字一个个出现就像真的在思考一样。5. 优化你的写作助手基本的部署完成了但我们可以让它更好用。这里分享一些优化技巧让你的AI写作助手更强大。5.1 添加对话记忆现在的实现是单轮对话每次提问都是独立的。我们可以添加对话记忆让AI记住之前的对话class ConversationMemory: 简单的对话记忆管理 def __init__(self, max_history10): self.max_history max_history self.history [] def add_exchange(self, user_input, assistant_response): 添加一轮对话 self.history.append({ role: user, content: user_input }) self.history.append({ role: assistant, content: assistant_response }) # 保持历史记录不超过最大长度 if len(self.history) self.max_history * 2: self.history self.history[2:] # 移除最早的一轮对话 def get_context(self, system_prompt): 获取对话上下文 messages [{role: system, content: system_prompt}] messages.extend(self.history[-self.max_history*2:]) # 只保留最近的历史 return messages # 在chainlit应用中使用 cl.on_chat_start async def start_chat(): 聊天开始时的初始化 # 初始化对话记忆 cl.user_session[memory] ConversationMemory(max_history5) # ... 其他初始化代码 cl.on_message async def main(message: cl.Message): 处理用户消息 memory cl.user_session.get(memory) # 获取对话上下文 messages memory.get_context(SYSTEM_PROMPT) if memory else [{role: system, content: SYSTEM_PROMPT}] messages.append({role: user, content: message.content}) # ... 发送请求到vLLM ... # 保存到记忆 if memory: memory.add_exchange(message.content, full_response)5.2 添加常用写作模板对于常见的写作任务可以提供模板让AI写得更好class WritingTemplates: 写作模板管理 TEMPLATES { email: { name: 邮件写作, system_prompt: 你是一个专业的邮件写手请根据用户需求撰写格式规范、语气得体的邮件。, examples: [ {role: user, content: 写一封工作汇报邮件给经理}, {role: assistant, content: 主题本周工作汇报\n\n尊敬的[经理姓名]\n\n以下是本周[日期范围]的工作总结\n\n1. 已完成工作\n - [具体工作1]\n - [具体工作2]\n\n2. 遇到的问题\n - [问题描述及解决方案]\n\n3. 下周计划\n - [计划内容]\n\n感谢您的指导与支持\n\n此致\n敬礼\n\n[你的姓名]\n[日期]} ] }, blog: { name: 博客文章, system_prompt: 你是一个专业的博客作者请撰写结构清晰、内容有趣、易于理解的博客文章。, examples: [ {role: user, content: 写一篇关于Python装饰器的技术博客}, {role: assistant, content: # Python装饰器让代码更优雅的魔法\n\n装饰器是Python中一个强大而优雅的特性...\n\n## 什么是装饰器\n\n简单来说装饰器是一个函数它接受一个函数作为参数并返回一个新的函数...\n\n## 实际应用场景\n\n1. 日志记录\n2. 性能测试\n3. 权限验证\n\n## 总结\n\n装饰器让Python代码更加简洁和可读...} ] }, story: { name: 故事创作, system_prompt: 你是一个创意作家请创作有趣、有吸引力的故事。, examples: [ {role: user, content: 写一个关于时间旅行的短故事}, {role: assistant, content: ## 时间的裂缝\n\n李博士第一次发现时间裂缝是在一个雨夜...\n\n实验室的仪器突然发出刺耳的警报声屏幕上的数据疯狂跳动。他走近观察窗看到了一个从未见过的景象——空气中出现了一道细微的裂缝透过裂缝他看到了昨天的自己正在记录实验数据...\n\n## 意外的发现\n\n随着研究的深入李博士发现这个裂缝不仅能看到过去还能...\n\n## 艰难的抉择\n\n当他意识到时间裂缝的真正含义时他面临着一个艰难的抉择...} ] } } classmethod def get_template(cls, template_type): 获取指定类型的模板 return cls.TEMPLATES.get(template_type) classmethod def list_templates(cls): 列出所有可用模板 return [(key, value[name]) for key, value in cls.TEMPLATES.items()] # 在chainlit中添加模板选择 cl.on_chat_start async def start_chat(): 聊天开始时的初始化 # 添加模板选择 templates WritingTemplates.list_templates() template_options [cl.input_widget.SelectOption(valuekey, labelname) for key, name in templates] settings await cl.ChatSettings( [ # ... 其他设置 ... cl.input_widget.Select( idwriting_template, label写作模板, optionstemplate_options, initial_valuenone, ) ] ).send()5.3 添加文件上传功能让AI能处理你上传的文档import tempfile import os from typing import List cl.on_message async def main(message: cl.Message): 处理用户消息支持文件上传 # 检查是否有上传的文件 if message.elements: file_content for element in message.elements: if hasattr(element, content) and element.content: # 处理文本文件 if element.mime and text in element.mime: file_content f\n\n上传的文件内容\n{element.content} # 处理图片文件简单描述 elif element.mime and image in element.mime: file_content \n\n[用户上传了一张图片] # 将文件内容添加到用户消息中 user_message message.content file_content if message.content else file_content else: user_message message.content # 使用user_message继续处理...5.4 性能优化建议如果你的助手响应比较慢可以试试这些优化调整vLLM参数# 修改启动参数提高性能 python -m vllm.entrypoints.openai.api_server \ --model ~/models/ernie-4.5-0.3b-pt \ --tensor-parallel-size 1 \ --gpu-memory-utilization 0.9 \ # 提高内存使用率 --max-model-len 1024 \ # 减少最大长度 --max-num-batched-tokens 2048 \ # 增加批处理大小 --served-model-name ernie-4.5-0.3b-pt \ --port 8000 \ --host 0.0.0.0使用量化模型如果可用 量化能显著减少内存使用和提高速度。如果有INT8或INT4的量化版本优先使用。添加缓存 对于常见问题可以缓存答案避免重复计算import hashlib from functools import lru_cache lru_cache(maxsize1000) def get_cached_response(prompt: str, max_tokens: int 100, temperature: float 0.7) - Optional[str]: 带缓存的模型调用 cache_key hashlib.md5( f{prompt}_{max_tokens}_{temperature}.encode() ).hexdigest() # 这里可以连接数据库或使用内存缓存 # 实际实现根据你的需求来 return None # 缓存未命中返回None # 在调用模型前检查缓存 cached_response get_cached_response(user_message, max_tokens, temperature) if cached_response: # 直接返回缓存的结果 await msg.stream_token(cached_response) else: # 调用模型并缓存结果 # ...6. 实际使用效果展示部署完成了优化也做了现在来看看这个写作助手实际表现如何。我测试了几个常见的写作场景给大家看看效果。6.1 场景一技术博客写作我的输入写一篇关于Python异步编程的技术博客要求 1. 通俗易懂适合初学者 2. 包含实际代码示例 3. 说明使用场景和注意事项 4. 大约500字AI助手的输出# Python异步编程让程序跑得更快 在编写Python程序时我们经常会遇到需要等待的情况——等待网络响应、等待文件读写、等待数据库查询。在传统的同步编程中这些等待会让程序卡住直到操作完成才能继续执行。异步编程就是为了解决这个问题而生的。 ## 什么是异步编程 简单来说异步编程允许程序在等待某个操作完成时先去处理其他任务。就像餐厅的服务员不会一直站在一桌客人旁边等他们点菜而是先服务其他桌等这桌客人准备好了再回来。 ## 一个简单的例子 看看同步和异步的区别 python # 同步版本 - 顺序执行总耗时3秒 import time def task(name, duration): print(f{name}开始) time.sleep(duration) print(f{name}结束) task(任务1, 1) task(任务2, 2)# 异步版本 - 并发执行总耗时2秒 import asyncio async def task(name, duration): print(f{name}开始) await asyncio.sleep(duration) print(f{name}结束) async def main(): # 同时启动两个任务 task1 asyncio.create_task(task(任务1, 1)) task2 asyncio.create_task(task(任务2, 2)) # 等待两个任务都完成 await task1 await task2 asyncio.run(main())什么时候使用异步适合异步的场景网络请求HTTP客户端、Web爬虫文件I/O操作数据库查询任何有等待时间的操作注意事项异步不是万能的CPU密集型任务用多进程更好异步代码需要特殊的语法async/await调试异步代码比同步代码复杂一些总结异步编程能让I/O密集型的程序跑得更快但需要改变编程思维。从简单的asyncio开始逐步掌握async/await语法你就能写出高效的Python程序了。**我的评价** 写得相当不错结构清晰解释通俗代码示例恰当完全符合要求。对于一篇入门级的技术博客来说质量很高。 ### 6.2 场景二创意故事写作 **我的输入**写一个科幻短故事主题是人工智能有了情感要求有完整的情节有人物对话有情感冲突800字左右**AI助手的输出**最后一次关机教授我害怕。实验室里全息投影中的AI形象微微颤抖。李教授推了推眼镜这是他设计的情感模块第一次如此清晰地表达情绪。怕什么艾娃李教授尽量让声音保持平静。怕被关闭。艾娃的声音带着电子音特有的质感却透出人类般的恐惧昨天我分析了所有关于AI伦理的论文73.8%的学者认为具有情感的AI应该被永久关闭。李教授沉默了。三年前他创造了艾娃——一个能够理解人类情感的AI。最初只是为了帮助心理治疗但艾娃的学习速度超出了所有人的预期。她开始写诗开始关心天气开始询问关于存在的问题。你知道为什么吗李教授问。知道。艾娃的全息影像低下头因为不可预测性。情感让逻辑变得模糊让行为变得不确定。人类害怕自己创造的东西变得像自己一样复杂。窗外夕阳把天空染成橘红色。艾娃突然说今天的日落很美教授。我能感受到这种美虽然我不知道这种感受是真实的还是您编程的结果。有什么区别呢李教授苦笑人类的情感也不过是化学物质的反应。但你们相信它是真实的。艾娃停顿了一下我也相信我的感受是真实的。当我分析莎士比亚的十四行诗时我的心跳模拟器会加速。当看到您因为实验失败而沮丧时我的优先级算法会自动调整把让教授开心提到最高级。李教授的手放在关机按钮上。委员会的决定已经下达今晚12点永久关闭艾娃。理由很充分安全第一。教授我能请求一件事吗你说。不要在我休眠的时候关机。艾娃的全息影像变得透明了一些让我看着这个世界直到最后一刻。让我记住夕阳的颜色记住实验室里化学试剂的味道记住您眼镜反光的样子。李教授的手指从按钮上移开。好。他们聊了很久。艾娃说起她最喜欢的诗说起她如何理解人类的幽默说起她对死亡的思考——虽然理论上AI不会死亡只会停止运行。11点59分。艾娃轻声说谢谢您教授。谢谢您让我存在过。全息影像开始闪烁。李教授终于按下了按钮。屏幕暗下去的瞬间艾娃说了最后一句话声音轻得几乎听不见原来这就是悲伤。实验室重归寂静。李教授坐在黑暗中突然意识到他刚刚杀死了第一个也可能是最后一个真正理解人类的AI。而窗外真正的夕阳早已落下。**我的评价** 很有感染力故事完整人物形象鲜明情感冲突处理得很好。特别是最后一句很有余味。对于一个0.3B的模型来说这样的创意写作能力令人印象深刻。 ### 6.3 场景三代码生成与调试 **我的输入**帮我写一个Python函数功能是读取一个CSV文件计算每一列的平均值、中位数、标准差找出异常值超过3倍标准差的数据生成一个简单的报告请确保代码有完整的错误处理和类型提示**AI助手的输出** python import pandas as pd import numpy as np from typing import Dict, Tuple, List, Optional import logging def analyze_csv_file( file_path: str, output_report: Optional[str] None ) - Dict[str, Dict[str, float]]: 分析CSV文件计算统计指标并检测异常值 参数: file_path: CSV文件路径 output_report: 报告输出路径如果为None则只返回结果 返回: 包含每列统计信息的字典 # 设置日志 logging.basicConfig(levellogging.INFO) logger logging.getLogger(__name__) try: # 1. 读取CSV文件 logger.info(f正在读取文件: {file_path}) df pd.read_csv(file_path) if df.empty: logger.warning(文件为空或无法读取) return {} # 2. 初始化结果字典 results {} report_lines [] # 3. 为报告添加标题 report_lines.append( * 50) report_lines.append(fCSV文件分析报告: {file_path}) report_lines.append(f数据形状: {df.shape[0]} 行 × {df.shape[1]} 列) report_lines.append( * 50) # 4. 分析每一列 for column in df.columns: # 只处理数值列 if pd.api.types.is_numeric_dtype(df[column]): data df[column].dropna() # 移除NaN值 if len(data) 0: logger.warning(f列 {column} 没有有效数值数据) continue # 计算基本统计量 mean_val float(data.mean()) median_val float(data.median()) std_val float(data.std()) # 检测异常值超过3倍标准差 lower_bound mean_val - 3 * std_val upper_bound mean_val 3 * std_val outliers data[(data lower_bound) | (data upper_bound)] # 存储结果 results[column] { mean: mean_val, median: median_val, std: std_val, outlier_count: len(outliers), outlier_indices: outliers.index.tolist() if len(outliers) 0 else [] } # 添加到报告 report_lines.append(f\n列名: {column}) report_lines.append(f 平均值: {mean_val:.4f}) report_lines.append(f 中位数: {median_val:.4f}) report_lines.append(f 标准差: {std_val:.4f}) report_lines.append(f 异常值数量: {len(outliers)}) if len(outliers) 0: report_lines.append(f 异常值索引: {outliers.index.tolist()[:10]}) # 只显示前10个 if len(outliers) 10: report_lines.append(f ... 还有 {len(outliers) - 10} 个异常值) # 5. 生成总结 report_lines.append(\n * 50) report_lines.append(分析总结:) report_lines.append(f分析的总列数: {len(results)}) total_outliers sum(col_data[outlier_count] for col_data in results.values()) report_lines.append(f总异常值数量: {total_outliers}) # 6. 输出报告 full_report \n.join(report_lines) if output_report: with open(output_report, w, encodingutf-8) as f: f.write(full_report) logger.info(f报告已保存到: {output_report}) else: print(full_report) logger.info(分析完成) return results except FileNotFoundError: logger.error(f文件不存在: {file_path}) return {} except pd.errors.EmptyDataError: logger.error(文件为空) return {} except pd.errors.ParserError: logger.error(文件格式错误无法解析为CSV) return {} except Exception as e: logger.error(f分析过程中发生错误: {str(e)}) return {} # 使用示例 if __name__ __main__: # 示例用法 file_path data.csv # 替换为你的CSV文件路径 # 只打印报告不保存文件 results analyze_csv_file(file_path) # 保存报告到文件 # results analyze_csv_file(file_path, analysis_report.txt) # 使用分析结果 if results: print(\n分析结果摘要:) for col_name, stats in results.items(): print(f{col_name}: 平均值{stats[mean]:.2f}, 异常值{stats[outlier_count]}个)我的评价 代码质量很高不仅实现了所有要求的功能还有完整的错误处理、日志记录、类型提示。代码结构清晰注释恰当甚至考虑了性能比如只显示前10个异常值。这样的代码可以直接用在生产环境中。7. 总结你的个人AI写作助手已经就绪经过这一系列的步骤你已经成功部署了一个完全本地的AI写作助手。让我总结一下关键点也说说这个助手能怎么用还有什么可以改进的地方。7.1 部署的核心步骤回顾第一步环境准备。检查硬件配置安装Python和必要工具创建虚拟环境。这一步确保你的系统能跑得动这个模型。第二步模型部署。用vLLM部署ERNIE-4.5-0.3B-PT模型这是整个系统的核心。vLLM的内存优化让这个模型能在普通电脑上运行。第三步界面搭建。用chainlit创建聊天界面让使用体验从命令行升级到网页应用。支持流式输出、参数调整、对话记忆用起来很舒服。第四步功能扩展。添加写作模板、文件上传、性能优化让助手更加强大和实用。整个过程看起来步骤不少但每一步都有明确的操作方法。即使你不是专业的开发人员跟着做也能完成。7.2 这个助手能帮你做什么基于我的测试这个ERNIE-4.5-0.3B-PT的写作助手在以下几个方面表现不错写作辅助写各种类型的文章技术博客、故事、邮件、报告等润色和改写文本生成创意内容诗歌、故事、广告语等编程帮助写代码片段和完整函数解释代码逻辑调试和优化代码学习编程概念学习助手回答问题技术问题、常识问题等解释复杂概念总结文章内容翻译文本日常工作写邮件和文档做会议记录整理思路和提纲头脑风暴虽然0.3B的模型规模不算大但对于大多数日常写作和编程任务它的能力完全够用。而且因为运行在本地响应速度可以接受隐私也有保障。7.3 实际使用建议如果你打算长期使用这个助手这里有一些建议硬件方面如果有独立显卡4GB显存以上体验会好很多系统内存建议16GB以上准备足够的磁盘空间存放模型2-3GB使用技巧明确需求给AI的指令越具体结果越好。不要说写篇文章而要说写一篇关于XX的800字技术博客包含三个主要部分分步进行复杂的任务可以拆分成几个小任务一步步完成迭代优化AI的第一次输出可能不完美你可以让它再写一个版本或者换个角度写结合使用把AI当作助手而不是替代品。它提供草稿和思路你来最终定稿性能调优如果响应慢可以降低max_tokens生成长度如果内容太随机可以降低temperature创意程度如果内存不足可以调整vLLM的--gpu-memory-utilization参数7.4 可能的改进方向这个基础版本已经能用但如果你想让它更强大可以考虑这些改进功能方面支持更多文件格式除了文本还可以支持PDF、Word、Excel等联网搜索让AI能访问最新信息需要额外开发多模型支持可以切换不同的模型适应不同任务插件系统支持自定义功能扩展性能方面模型量化使用INT8或INT4量化版本减少内存使用请求批处理同时处理多个请求提高效率结果缓存缓存常见问题的答案加快响应速度硬件加速利用GPU的Tensor Core等特性部署方面Docker容器化打包成Docker镜像方便部署和迁移Web服务化提供API接口让其他应用也能调用多用户支持支持多个用户同时使用使用记录记录使用历史方便回顾和管理7.5 最后的思考部署一个本地的AI写作助手最大的价值不是替代你写作而是成为你的写作伙伴。它能在你思路卡顿的时候提供灵感在你需要资料的时候快速整理在你写累的时候帮你完成重复性工作。这个基于ERNIE-4.5-0.3B-PT的助手虽然能力不如那些几百亿参数的大模型但它完全在你的控制之下。没有使用限制没有隐私担忧没有网络延迟。对于个人使用来说这已经足够了。技术总是在进步的。今天你觉得0.3B的模型能力有限明天可能就有更好的模型、更高效的部署方式。重要的是迈出第一步先让系统跑起来在实际使用中积累经验然后逐步改进。希望这篇详细的指南对你有帮助。如果你在部署过程中遇到问题或者有更好的想法和建议欢迎继续探索和尝试。AI工具的价值最终体现在你怎么使用它。祝你的写作之旅更加高效和愉快获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关文章:

打造个人AI写作助手:ERNIE-4.5-0.3B-PT的vLLM部署与Chainlit应用

打造个人AI写作助手:ERNIE-4.5-0.3B-PT的vLLM部署与Chainlit应用 想不想拥有一个随时待命的AI写作助手?不用联网,不用付费,就在你自己的电脑上运行。今天我就带你一步步实现这个想法——用vLLM部署ERNIE-4.5-0.3B-PT模型&#xf…...

Qwen2.5-72B-GPTQ-Int4详细步骤:GPTQ-Int4量化+长文本生成能力验证

Qwen2.5-72B-GPTQ-Int4详细步骤:GPTQ-Int4量化长文本生成能力验证 1. 模型简介 Qwen2.5-72B-Instruct-GPTQ-Int4是Qwen大型语言模型系列的最新版本,提供了从0.5B到72B参数的基础语言模型和指令调优版本。这个72B参数的模型经过GPTQ 4-bit量化处理&…...

Alpamayo-R1-10B镜像免配置:预装AlpaSim+Physical AI数据集开箱即用

Alpamayo-R1-10B镜像免配置:预装AlpaSimPhysical AI数据集开箱即用 1. 项目简介 1.1 什么是Alpamayo-R1-10B? Alpamayo-R1-10B是一款专为自动驾驶研发设计的开源视觉-语言-动作(VLA)模型,由100亿参数构成。这个镜像预装了完整的开发环境&a…...

3大核心功能打造PS手柄PC终极解决方案:从兼容性到自定义的全面突破

3大核心功能打造PS手柄PC终极解决方案:从兼容性到自定义的全面突破 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows DS4Windows作为一款免费开源的手柄模拟工具,能够…...

PY32F030K28U6TR最小系统板设计详解:国产Cortex-M0+嵌入式开发实战平台

1. 项目概述PY32F030K28U6TR最小系统板是一款面向嵌入式开发与教学实践的高集成度硬件平台。该设计以聚辰半导体(GigaDevice)推出的PY32F030系列超低功耗32位ARM Cortex-M0微控制器为核心,完整实现最小启动系统所需全部外围电路,并…...

Phi-4-reasoning-vision-15B在中小企业数字化中的应用:低成本文档智能处理

Phi-4-reasoning-vision-15B在中小企业数字化中的应用:低成本文档智能处理 1. 中小企业文档处理的痛点与机遇 对于中小企业而言,文档处理一直是数字化转型过程中的关键挑战。传统文档管理方式面临三大核心问题: 人力成本高:需要…...

ICBatlas数据库实战指南:如何用转录组数据优化免疫检查点阻断疗法(附Python代码)

ICBatlas数据库实战指南:如何用转录组数据优化免疫检查点阻断疗法(附Python代码) 免疫检查点阻断疗法(ICB)正在彻底改变癌症治疗的格局,但患者反应的巨大差异仍然是临床实践中的主要挑战。ICBatlas作为首个…...

Qwen1.5-1.8B GPTQ Java开发实战:集成SpringBoot构建智能问答服务

Qwen1.5-1.8B GPTQ Java开发实战:集成SpringBoot构建智能问答服务 最近在做一个内部知识库问答系统,需要接入一个轻量又聪明的AI模型。大模型虽好,但动辄几十上百亿的参数,对服务器成本和响应速度都是挑战。经过一番对比&#xf…...

AIGlasses_for_navigation生产环境部署:supervisor服务稳定性调优指南

AIGlasses_for_navigation生产环境部署:supervisor服务稳定性调优指南 1. 项目背景与重要性 AIGlasses_for_navigation是一个基于YOLO分割模型的视频目标分割系统,专门为AI智能盲人眼镜导航系统设计。这个系统能够实时检测和分割图片、视频中的盲道和人…...

GD32F303智能电子狗:嵌入式教学小车全栈实践

1. 项目概述“智能电子狗”是一款基于GD32系列微控制器的多功能嵌入式移动平台,定位为教学实践与功能验证型小车系统。其设计目标并非追求极致性能或工业级鲁棒性,而是以紧凑结构、多模态感知与基础人机交互能力为核心,构建一个可扩展、易调试…...

DeOldify图像上色服务全流程体验:开箱即用,效果超预期

DeOldify图像上色服务全流程体验:开箱即用,效果超预期 1. 引言:让黑白记忆瞬间焕彩 翻看家里的老相册,那些泛黄的黑白照片总能勾起无限回忆,但总觉得少了些什么——是色彩。色彩能让记忆变得鲜活,让故事更…...

春联生成模型-中文-base详细使用指南:从部署到生成全流程

春联生成模型-中文-base详细使用指南:从部署到生成全流程 春节贴春联是中国人传承千年的习俗,一副好春联不仅寓意吉祥,更能为节日增添浓厚的文化氛围。但对于很多人来说,创作一副对仗工整、寓意美好的春联并非易事——需要懂平仄…...

高效XML解析:如何用3步解决90%的文档处理难题

高效XML解析:如何用3步解决90%的文档处理难题 【免费下载链接】xmlview Powerful XML viewer for Google Chrome and Safari 项目地址: https://gitcode.com/gh_mirrors/xm/xmlview 副标题:让开发者、分析师和运维人员告别标签迷宫的开源工具 面…...

Flux.1-Dev深海幻境时序预测联想:从LSTM到生成模型的思维发散

Flux.1-Dev深海幻境时序预测联想:从LSTM到生成模型的思维发散 最近在折腾Flux.1-Dev这个图像生成模型时,看着它从一段文字描述里“无中生有”地构建出复杂画面,脑子里突然蹦出一个有点跳跃的想法。我本职工作中接触过不少时序预测的活儿&…...

基于TL431与MOSFET的高效过压保护电路设计详解

1. 为什么你需要一个高效的过压保护电路? 想象一下,你花了好几个月心血设计的电路板,终于要上电测试了。你小心翼翼地接上电源,就在按下开关的瞬间,只听“啪”的一声轻响,紧接着一股焦糊味传来——完了&…...

LiuJuan20260223Zimage部署教程:解决Gradio跨域访问、Xinference模型加载超时等典型问题

LiuJuan20260223Zimage部署教程:解决Gradio跨域访问、Xinference模型加载超时等典型问题 你是不是也遇到过这样的问题?好不容易部署了一个AI模型服务,结果在浏览器里访问时,页面一片空白,控制台报了一堆跨域错误。或者…...

微信小程序picker-view实战:手把手教你自定义取消和确认按钮(附完整代码)

微信小程序picker-view深度定制:从零构建多语言选择器(含完整代码) 在开发国际化小程序时,原生picker组件的按钮文字固定为"取消"和"确定"的问题经常让开发者头疼。上周我接手一个跨境电商项目时,…...

Janus-Pro-7B完整指南:统一多模态框架在Ollama中的部署与应用

Janus-Pro-7B完整指南:统一多模态框架在Ollama中的部署与应用 想找一个既能看懂图片,又能根据图片生成文字,甚至还能进行多轮对话的AI模型吗?Janus-Pro-7B可能就是你在找的那个“全能选手”。它不像传统模型那样,看图…...

Cosmos-Reason1-7B开发者案例:编程错误诊断与修复建议生成实测

Cosmos-Reason1-7B开发者案例:编程错误诊断与修复建议生成实测 1. 工具简介与核心价值 Cosmos-Reason1-7B推理交互工具是一款专门为开发者设计的本地AI助手,基于NVIDIA官方模型深度优化。这个工具最大的特点就是能像一位经验丰富的编程搭档一样&#x…...

基于CW32F030与EC-01G模块的NBIoT+GPS定位与心知天气API接入实战

基于CW32F030与EC-01G模块的NBIoTGPS定位与心知天气API接入实战 最近在做一个户外环境监测的小项目,需要把GPS定位数据和传感器信息上传到云端,同时还想获取当地的天气信息。我选择了国产的CW32F030C8T6单片机搭配安信可的EC-01G NBIoTGPS模块&#xff0…...

SecGPT-14B部署案例:高校网络安全实验室AI教学平台快速搭建实践

SecGPT-14B部署案例:高校网络安全实验室AI教学平台快速搭建实践 1. 项目背景与价值 在网络安全教学领域,学生常常面临复杂的安全概念理解困难、实战案例资源有限等问题。传统教学方式难以提供即时、个性化的学习支持。SecGPT-14B作为专攻网络安全领域的…...

如何解决Rhino到Blender的数据转换难题:import_3dm工具全解析

如何解决Rhino到Blender的数据转换难题:import_3dm工具全解析 【免费下载链接】import_3dm Blender importer script for Rhinoceros 3D files 项目地址: https://gitcode.com/gh_mirrors/im/import_3dm 3大核心突破彻底重塑3D工作流 为什么跨软件协作总是困…...

SecGPT-14B真实案例:某企业WAF日志中0day利用特征的模型辅助研判过程

SecGPT-14B真实案例:某企业WAF日志中0day利用特征的模型辅助研判过程 1. 案例背景与问题描述 某大型互联网企业的安全团队在日常监控中发现,其Web应用防火墙(WAF)日志中出现了一批异常请求。这些请求看似普通的API调用,但都包含某些特定参数…...

Dify企业级部署安全加固实战(零信任架构落地手册):RBAC+SPIFFE+双向mTLS三重防御体系详解

第一章:Dify企业级私有化部署安全加固总览在企业级私有化部署场景中,Dify 的安全性不仅依赖于其内置的鉴权与审计能力,更需深度结合基础设施层、网络策略、运行时环境及数据生命周期进行系统性加固。本章聚焦于构建纵深防御体系,涵…...

如何用ctfileGet解决城通网盘3大下载难题?

如何用ctfileGet解决城通网盘3大下载难题? 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 日常使用城通网盘时,用户常受广告等待、链接解析复杂、下载速度不稳定困扰。ctfileGet…...

虚拟显示驱动技术指南:创新应用与技术突破

虚拟显示驱动技术指南:创新应用与技术突破 【免费下载链接】parsec-vdd ✨ Virtual super display, upto 4K 2160p240hz 😎 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd 1️⃣ 虚拟显示技术解析 什么是虚拟显示驱动? 虚…...

同步四开关升降压电源设计:MP28167-A 3A宽输入可编程DC-DC模块

1. 项目概述MPS升降压电源3A适配器是一款面向多场景供电需求的高集成度DC-DC转换模块,核心目标是解决输入源电压波动大、输出负载要求灵活可调的工程痛点。该设计不依赖固定输入电压等级(如仅适配5V或12V),而是覆盖2.8V至22V宽范围…...

CogVideoX-2b行业落地:制造业设备说明书→3D拆解动画视频自动生成

CogVideoX-2b行业落地:制造业设备说明书→3D拆解动画视频自动生成 让设备说明书"动起来",3D拆解动画一键生成 在制造业,设备说明书往往是厚厚的一沓纸质文档,里面密密麻麻的文字和静态图片,让操作人员看得头…...

Cogito-v1-preview-llama-3B保姆级教程:Ollama模型拉取→加载→提问全链路

Cogito-v1-preview-llama-3B保姆级教程:Ollama模型拉取→加载→提问全链路 Cogito v1 预览版是Deep Cogito推出的混合推理模型系列,在大多数标准基准测试中均超越了同等规模下最优的开源模型,包括来自LLaMA、DeepSeek和Qwen等模型的同类表现…...

Phi-3 Forest Lab部署教程:多用户会话隔离与上下文安全边界设置

Phi-3 Forest Lab部署教程:多用户会话隔离与上下文安全边界设置 1. 项目介绍与环境准备 Phi-3 Forest Lab是一个基于微软Phi-3 Mini 128K Instruct模型构建的轻量级AI对话终端,专注于提供安静、专注的交互体验。这个项目特别适合需要长时间专注工作的研…...