拓冰建站拓冰建站
首页 / 资讯中心 / 正文

从零构建桌面AI助手:本地LLM、Agent架构与自动化实践

桌面 AI 助手正在从云端走向本地从简单的问答工具演变为能够深度融入工作流、理解上下文、并执行复杂任务的智能伙伴。对于开发者、内容创作者和效率追求者而言一个功能强大、响应迅速、且能保护隐私的桌面 AI 助手意味着生产力的巨大跃升。本文将以“语创未来”这一概念为引深入探讨如何从零开始构建或深度定制一个新一代的桌面 AI 助手。我们将不局限于某个特定产品而是聚焦于实现其核心功能所需的技术栈、架构设计、关键模块实现以及避坑指南。通过本文你将掌握构建一个集成本地大语言模型、具备文件操作、屏幕理解、自动化工作流等能力的桌面 AI 助手的核心思路与实践路径。1. 理解新一代桌面 AI 助手的技术内核传统的桌面助手多依赖于规则脚本或简单的云端 API 调用而新一代 AI 助手的核心在于其“智能”与“自主”能力。这背后是多种技术的融合理解这些是进行开发或选型的前提。1.1 核心能力拆解不止于聊天一个功能完备的新一代桌面 AI 助手应具备以下分层能力自然语言交互层这是用户感知最直接的部分。它需要能准确理解用户的自然语言指令如“总结我昨天写的文档”、“给这张截图里的代码加注释”并转化为结构化的任务意图。上下文感知层助手需要“看见”和“知道”当前桌面环境。这包括活动窗口信息当前哪个应用在前台其标题、进程名是什么。屏幕内容理解通过 OCR光学字符识别和视觉模型“读取”屏幕上的文字、识别界面元素。文件系统状态用户当前正在编辑哪个文件最近访问了哪些目录。剪贴板内容用户最近复制了什么文本或图片。任务规划与执行层将用户意图分解为一系列可执行的原子操作。例如“总结文档”可能分解为定位文档文件 - 读取内容 - 调用 LLM 总结 - 将结果输出到指定位置如新文件、剪贴板或直接朗读。工具调用层执行原子操作的具体实现。这是助手能力的扩展点例如操作系统 API 调用模拟键盘输入、鼠标点击、启动程序、操作文件。应用程序自动化通过 UI Automation、AppleScript、COM 对象等控制特定软件如 Word, Excel, Chrome。外部服务集成调用 Web API、数据库查询等。大语言模型LLM引擎作为整个系统的“大脑”负责意图理解、任务规划、内容生成和决策。可以选择云端 API如 GPT-4, Claude或本地部署的轻量级模型如 Llama.cpp, ChatGLM, Qwen。1.2 架构设计模式Agent 驱动的自动化现代 AI 助手通常采用Agent智能体架构。在这种架构下LLM 作为核心控制器Agent用户指令和上下文信息作为输入LLM 输出一个包含“思考过程”和“具体动作”的规划。动作则通过调用预先定义好的工具Tools来执行。一个简化的数据流如下用户语音/文本指令 - 语音识别/直接输入 - 系统提示词 用户指令 上下文信息 - LLM - 解析出“工具调用”及参数 - 执行工具 - 工具执行结果返回给 LLM - LLM 生成最终回复或下一步动作 - 输出给用户文本/语音。这种架构的优势在于高度模块化和可扩展。新增一个功能往往只需要定义一个新的“工具”并将其描述告知 LLM 即可。2. 环境准备与核心技术选型在开始动手之前需要搭建开发环境并做出关键的技术选型。这里以跨平台Windows/macOS的 Python 技术栈为例因为它拥有丰富的库生态。2.1 基础开发环境Python 3.9建议使用 3.10 或 3.11以获得更好的兼容性和性能。包管理工具使用pip和venv或conda创建独立的虚拟环境。代码编辑器VS Code 或 PyCharm并安装 Python 相关插件。创建并激活虚拟环境# 创建虚拟环境 python -m venv ai_assistant_env # 激活 (Windows) ai_assistant_env\Scripts\activate # 激活 (macOS/Linux) source ai_assistant_env/bin/activate2.2 核心依赖库选型与安装根据核心能力我们需要一系列库。以下是一个基础的requirements.txt示例# 核心框架与LLM交互 langchain0.1.0 # 用于构建Agent和链简化流程 openai1.0.0 # 如需使用OpenAI API litellm1.0.0 # 统一的多模型调用接口支持本地模型 # 本地LLM引擎 (可选二选一或搭配使用) llama-cpp-python0.2.0 # 运行GGUF格式的本地模型如Llama 3 transformers4.35.0 # Hugging Face 模型库运行其他本地模型 accelerate # 加速推理 # 桌面自动化与上下文获取 pyautogui0.9.0 # 跨平台GUI自动化鼠标、键盘、截图 pyperclip1.8.0 # 读写剪贴板 pynput1.7.0 # 监听和控制键盘鼠标事件更底层 psutil5.9.0 # 获取系统进程信息 # 屏幕内容理解 pytesseract0.3.0 # OCR引擎需要额外安装Tesseract pillow10.0.0 # 图像处理 mss7.0.0 # 高性能跨平台截图 # 语音交互 (可选) speechrecognition3.10.0 # 语音识别 pyttsx32.90 # 文本转语音离线 # 其他工具 requests2.31.0 # HTTP请求 python-dotenv1.0.0 # 管理环境变量如API密钥使用 pip 安装pip install -r requirements.txt重要提示pytesseract是 Tesseract OCR 引擎的 Python 封装。你需要单独安装 TesseractmacOS:brew install tesseractWindows: 从 GitHub 下载安装程序并记得将安装目录如C:\Program Files\Tesseract-OCR添加到系统 PATH 环境变量中。Linux:sudo apt install tesseract-ocr(Debian/Ubuntu)2.3 本地大语言模型选型与部署如果追求完全离线、隐私安全或需要低成本高频调用部署本地 LLM 是关键。对于桌面助手场景需要在模型能力、响应速度和硬件资源间权衡。推荐方案使用llama.cpp项目及其 Python 绑定llama-cpp-python。它支持在 CPU 上高效运行量化后的模型GGUF 格式对 GPU 要求低。下载模型从 Hugging Face 等平台下载合适的 GGUF 模型文件。对于桌面助手7B 或 13B 参数的模型是平衡点。例如Llama-3-8B-Instruct-Q4_K_M.ggufQwen1.5-7B-Chat-Q4_K_M.ggufgemma-7b-it-q4_k_m.gguf加载与测试模型from llama_cpp import Llama # 初始化模型路径替换为你的模型文件路径 llm Llama( model_path./models/Llama-3-8B-Instruct-Q4_K_M.gguf, n_ctx4096, # 上下文长度 n_threads8, # 使用的CPU线程数 n_gpu_layers0, # 如果无GPU或不想用设为0。有GPU时可设置层数以加速。 verboseFalse ) # 简单测试 response llm( Q: What is the capital of France? A:, max_tokens50, stop[Q:, \n], echoFalse ) print(response[choices][0][text])关键参数说明n_ctx模型能处理的上下文令牌数。太小会导致长文档处理被截断。n_threadsCPU 推理线程数通常设置为物理核心数。n_gpu_layers卸载到 GPU 的层数。如果显卡内存足够如 8GB可以设置一个较大的值如 30以显著提升速度。3. 构建核心功能模块我们将以模块化的方式构建助手每个模块对应一个独立的功能。3.1 模块一桌面上下文感知器这个模块负责收集当前桌面环境的状态为 LLM 提供“眼睛”。import psutil import pyautogui import mss import pytesseract from PIL import Image import pyperclip import time class DesktopContextCollector: def __init__(self): self.sct mss.mss() def get_active_window_info(self): 获取当前活动窗口信息跨平台实现较复杂此处为简化示例 # 注意pyautogui.getActiveWindow() 在非Windows平台可能不工作 # 生产环境可能需要使用平台特定库如 pygetwindow (Windows) 或 AppKit (macOS) try: # 这是一个简化示例实际需要更复杂的跨平台处理 active psutil.Process().parent().name() return {active_process: active} except: return {active_process: unknown} def capture_screen(self, regionNone): 截取屏幕或指定区域 if region: monitor {top: region[1], left: region[0], width: region[2], height: region[3]} else: monitor self.sct.monitors[1] # 主显示器 screenshot self.sct.grab(monitor) # 转换为PIL Image img Image.frombytes(RGB, screenshot.size, screenshot.rgb) return img def extract_text_from_screen(self, regionNone): 从屏幕或区域提取文字 img self.capture_screen(region) # 可以在此处对图像进行预处理如灰度化、二值化以提高OCR精度 # img img.convert(L) # 转为灰度 text pytesseract.image_to_string(img, langengchi_sim) # 支持中英文 return text.strip() def get_clipboard_content(self): 获取剪贴板内容 try: return pyperclip.paste() except: return def get_system_info(self): 获取基础系统信息如时间、内存占用等 import datetime mem psutil.virtual_memory() return { current_time: datetime.datetime.now().isoformat(), memory_usage_percent: mem.percent } # 使用示例 collector DesktopContextCollector() print(剪贴板内容:, collector.get_clipboard_content()[:100]) screen_text collector.extract_text_from_screen(region(100, 100, 400, 200)) # 截取区域 (x, y, width, height) print(屏幕区域文字:, screen_text)3.2 模块二工具集定义与封装工具是 Agent 可以调用的函数。我们需要用清晰的描述来定义它们以便 LLM 理解。import subprocess import os import webbrowser from typing import Type from pydantic import BaseModel, Field # 使用Pydantic定义工具输入参数的Schema class OpenFileInput(BaseModel): file_path: str Field(description要打开的文件的完整路径) class SearchWebInput(BaseModel): query: str Field(description要在网络上搜索的关键词) class WriteToClipboardInput(BaseModel): content: str Field(description要写入剪贴板的内容) class DesktopAutomationTools: 桌面自动化工具集 staticmethod def open_file(file_path: str) - str: 使用系统默认程序打开文件 try: if os.name nt: # Windows os.startfile(file_path) else: # macOS/Linux subprocess.run([open, file_path] if os.name posix else [xdg-open, file_path], checkTrue) return f成功打开文件: {file_path} except Exception as e: return f打开文件失败: {str(e)} staticmethod def search_web(query: str) - str: 在默认浏览器中打开搜索引擎进行搜索 search_url fhttps://www.google.com/search?q{query} webbrowser.open(search_url) return f已在浏览器中搜索: {query} staticmethod def write_to_clipboard(content: str) - str: 将内容写入系统剪贴板 try: pyperclip.copy(content) return f内容已复制到剪贴板: {content[:50]}... except Exception as e: return f复制到剪贴板失败: {str(e)} staticmethod def type_text(text: str) - str: 模拟键盘输入文本注意会干扰当前用户操作慎用 pyautogui.write(text, interval0.05) return f已输入文本: {text[:30]}... # 工具描述列表用于提供给LLM TOOLS_DESCRIPTION [ { type: function, function: { name: open_file, description: 使用系统默认应用程序打开指定的文件。, parameters: OpenFileInput.schema() } }, { type: function, function: { name: search_web, description: 在用户的默认网页浏览器中打开搜索引擎并搜索给定的查询词。, parameters: SearchWebInput.schema() } }, { type: function, function: { name: write_to_clipboard, description: 将给定的文本内容写入系统剪贴板。, parameters: WriteToClipboardInput.schema() } }, # ... 可以继续添加更多工具 ]3.3 模块三基于 LangChain 构建智能体Agent我们将使用 LangChain 来编排 LLM 和工具构建一个能够理解指令、规划并执行任务的智能体。import os from langchain.agents import initialize_agent, AgentType from langchain.tools import Tool from langchain_community.llms import LlamaCpp from langchain.callbacks.manager import CallbackManager from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler from dotenv import load_dotenv # 加载环境变量例如 OPENAI_API_KEY如果使用云端模型 load_dotenv() class AIDesktopAssistant: def __init__(self, use_local_llmTrue, model_pathNone): self.context_collector DesktopContextCollector() self.tools self._create_tools() # 初始化LLM if use_local_llm and model_path: # 使用本地 Llama.cpp 模型 callback_manager CallbackManager([StreamingStdOutCallbackHandler()]) llm LlamaCpp( model_pathmodel_path, temperature0.1, # 降低随机性使输出更确定 max_tokens2000, top_p1, callback_managercallback_manager, verboseFalse, n_ctx4096, n_threads8, n_gpu_layers0 ) else: # 使用 OpenAI API (需设置环境变量 OPENAI_API_KEY) from langchain_openai import ChatOpenAI llm ChatOpenAI(modelgpt-4-turbo-preview, temperature0) # 初始化智能体 # 使用 ZERO_SHOT_REACT_DESCRIPTION 代理类型它适合基于工具描述的推理 self.agent initialize_agent( toolsself.tools, llmllm, agentAgentType.ZERO_SHOT_REACT_DESCRIPTION, verboseTrue, # 设置为True可以看到Agent的思考过程 handle_parsing_errorsTrue # 处理解析错误 ) def _create_tools(self): 将我们的功能封装成LangChain可用的Tool对象 automation DesktopAutomationTools() tools [ Tool( nameOpenFile, funcautomation.open_file, description用于打开本地文件。输入应为文件的完整路径。 ), Tool( nameSearchWeb, funcautomation.search_web, description用于在互联网上搜索信息。输入应为搜索关键词。 ), Tool( nameWriteToClipboard, funcautomation.write_to_clipboard, description用于将文本复制到系统剪贴板。输入应为要复制的文本内容。 ), Tool( nameGetClipboard, funcself.context_collector.get_clipboard_content, description用于获取当前系统剪贴板中的文本内容。无需输入。 ), Tool( nameExtractScreenText, funcself.context_collector.extract_text_from_screen, description用于从当前屏幕或指定区域提取文字。输入应为表示区域的元组 (x, y, width, height)或留空以截取全屏。 ), ] return tools def run(self, user_input: str): 运行助手处理用户输入 # 在实际应用中可以将上下文信息如剪贴板内容、活动窗口拼接到提示词中 context f 当前系统剪贴板内容的前200字符是{self.context_collector.get_clipboard_content()[:200]} 当前活动进程是{self.context_collector.get_active_window_info().get(active_process)} 用户指令{user_input} full_prompt f{context}\n请根据以上上下文和用户指令决定是否需要调用工具并给出最终答复。 try: response self.agent.run(full_prompt) return response except Exception as e: return f处理指令时出错: {str(e)} # 初始化并使用助手 if __name__ __main__: # 使用本地模型 assistant AIDesktopAssistant( use_local_llmTrue, model_path./models/Llama-3-8B-Instruct-Q4_K_M.gguf ) # 使用云端模型 (需配置OPENAI_API_KEY) # assistant AIDesktopAssistant(use_local_llmFalse) result assistant.run(帮我把‘Hello, World!’复制到剪贴板) print(\n助手回复:, result)4. 实现高级功能与工作流演示有了基础框架我们可以实现更复杂、更贴近“新一代助手”的功能。4.1 功能演示一自动化文档总结与归档场景用户选中一段文字或指定一个文档文件要求助手总结并保存到指定位置。实现思路通过工具获取文本内容从剪贴板或读取文件。调用 LLM 进行总结。使用工具将总结结果写入新文件或剪贴板。我们需要新增一个“总结文本”的工具并可能修改 Agent 的提示词以更好地处理多步任务。from langchain.prompts import PromptTemplate from langchain.chains import LLMChain class AdvancedTools(DesktopAutomationTools): staticmethod def summarize_text(text: str, max_length: int 200) - str: 使用LLM总结文本 # 这里为了简化直接使用初始化好的LLM。更优雅的方式是将LLM传入。 # 实际项目中应通过依赖注入或全局访问来使用同一个LLM实例。 prompt_template PromptTemplate.from_template( 请用简洁的中文总结以下文本总结长度不超过{max_length}字\n\n{text} ) # 假设我们有一个全局的 llm_chain # summary llm_chain.run(texttext, max_lengthmax_length) # return summary # 此处返回模拟结果 return f模拟总结文本摘要{text[:50]}... staticmethod def save_to_file(content: str, file_path: str) - str: 将内容保存到指定文件 try: with open(file_path, w, encodingutf-8) as f: f.write(content) return f内容已成功保存到: {file_path} except Exception as e: return f保存文件失败: {str(e)} # 在AIDesktopAssistant的_create_tools方法中添加上面两个新工具工作流提示词优化为了让 Agent 更好地处理“总结并保存”这类复合指令需要在初始化 Agent 时提供更明确的系统提示词System Message指导其按步骤思考。4.2 功能演示二基于屏幕内容的智能问答场景用户问“我屏幕上这个错误弹窗说的是什么”助手能自动截图当前活动窗口识别文字并解释错误。实现思路监听特定热键如CtrlShiftA触发问答模式。自动截取当前屏幕或活动窗口。将截图和用户问题一起发送给具备视觉能力的多模态 LLM如 GPT-4V或先 OCR 再发送给文本 LLM。返回解读结果。import keyboard # 需要安装 keyboard 库 class ScreenQAAssistant: def __init__(self, llm): self.llm llm self.collector DesktopContextCollector() def capture_and_ask(self, question: str): 截图并提问 screenshot self.collector.capture_screen() # 方案A使用多模态模型如通过API # 此处需要能处理图像的模型代码略复杂。 # 方案BOCR 文本LLM本例采用 screen_text self.collector.extract_text_from_screen() prompt f 用户的问题是关于他当前屏幕内容的。以下是屏幕截图识别出的文字 {screen_text} 用户的问题是{question} 请根据屏幕文字内容回答用户的问题。 # 调用文本LLM # response self.llm(prompt) # return response return f模拟回答根据屏幕文字错误可能与‘{screen_text[:30]}’有关。 def start_listening(self): 监听热键 print(按 CtrlShiftA 进行屏幕问答...) keyboard.add_hotkey(ctrlshifta, lambda: self.on_hotkey_pressed()) keyboard.wait(esc) # 按ESC退出 def on_hotkey_pressed(self): question input(请输入关于当前屏幕的问题: ) answer self.capture_and_ask(question) print(助手回答:, answer)4.3 功能演示三自定义工作流与宏命令用户可以录制或编写一系列操作如打开 IDE - 打开特定项目 - 运行测试 - 将结果发到群聊并绑定到一个自然语言命令上如“准备开发环境”。实现思路设计一个简单的 DSL领域特定语言或使用 JSON/YAML 来描述工作流步骤。创建一个“执行工作流”的工具该工具解析工作流描述并依次调用其他工具。允许用户通过自然语言保存和触发工作流。import json import yaml class WorkflowEngine: def __init__(self, tools_dict): # tools_dict 是工具名到函数引用的映射 self.tools tools_dict def execute_workflow(self, workflow_definition: str) - str: 执行一个JSON/YAML格式定义的工作流 try: # 尝试解析为JSON或YAML try: steps json.loads(workflow_definition) except json.JSONDecodeError: steps yaml.safe_load(workflow_definition) results [] for step in steps: tool_name step.get(tool) params step.get(parameters, {}) if tool_name in self.tools: result self.tools[tool_name](**params) results.append(f{tool_name}: {result}) else: results.append(f错误未找到工具 {tool_name}) return \n.join(results) except Exception as e: return f执行工作流失败: {str(e)} # 工作流定义示例 (JSON) dev_setup_workflow [ {tool: OpenFile, parameters: {file_path: C:\\\\Users\\\\Me\\\\project\\\\code.py}}, {tool: WriteToClipboard, parameters: {content: git pull origin main}}, {tool: TypeText, parameters: {text: Running tests...\\n}} ] # 将这个工作流保存起来并让Agent可以调用 execute_workflow 工具。5. 部署、优化与常见问题排查5.1 部署为常驻桌面应用要让助手在后台运行并随时响应你需要系统托盘图标使用pystray或PyQt5/Tkinter创建最小化到系统托盘的应用。全局热键监听使用keyboard或pynput库监听全局快捷键如CtrlSpace来唤醒助手输入框。主循环与事件处理将助手逻辑集成到一个 GUI 框架如PyQt5,Tkinter,Eel或使用异步框架如asyncio来保持响应。打包分发使用PyInstaller或cx_Freeze将 Python 脚本打包成独立的可执行文件.exe,.app方便分发。一个简单的PyQt5系统托盘示例结构# app_tray.py 示例框架 import sys from PyQt5.QtWidgets import QApplication, QSystemTrayIcon, QMenu, QAction from PyQt5.QtGui import QIcon class AssistantTrayApp: def __init__(self): self.app QApplication(sys.argv) self.tray_icon QSystemTrayIcon(QIcon(icon.png), self.app) self.setup_menu() self.tray_icon.show() def setup_menu(self): menu QMenu() show_action QAction(显示主窗口, self.app) show_action.triggered.connect(self.show_main_window) menu.addAction(show_action) menu.addSeparator() quit_action QAction(退出, self.app) quit_action.triggered.connect(self.app.quit) menu.addAction(quit_action) self.tray_icon.setContextMenu(menu) def show_main_window(self): # 显示你的助手主界面 pass def run(self): sys.exit(self.app.exec_()) if __name__ __main__: assistant_app AssistantTrayApp() assistant_app.run()5.2 性能与资源优化LLM 推理优化模型量化始终使用量化模型如 GGUF 格式的 Q4_K_M。这能大幅减少内存占用和提升推理速度。GPU 卸载如果拥有 NVIDIA GPU在LlamaCpp初始化时设置n_gpu_layers将大部分计算卸载到 GPU。上下文长度根据实际需要设置n_ctx不要盲目设大会消耗更多内存。工具调用优化异步执行对于 I/O 密集型工具如网络请求、文件读写使用asyncio避免阻塞主线程。缓存对频繁读取且不常变的数据如文件列表、某些 API 结果进行缓存。响应速度将常驻的 LLM 模型加载到内存中避免每次查询都重新加载。对于简单、固定的查询如“你好”可以设置缓存或直接返回预设答案绕过 LLM。5.3 常见问题排查清单在开发和使用过程中你可能会遇到以下问题问题现象可能原因检查与解决步骤本地 LLM 加载失败或报错1. 模型文件路径错误或损坏。2. 系统内存不足。3.n_ctx或n_gpu_layers参数设置超出硬件能力。1. 确认模型文件路径正确并尝试重新下载。2. 关闭不必要的程序或换用更小的量化模型如 Q4_K_S。3. 逐步降低n_ctx如 2048并将n_gpu_layers设为 0 仅用 CPU 测试。OCR 识别文字为空或乱码1. Tesseract 未安装或未在 PATH 中。2. 图像质量差分辨率低、对比度低。3. 语言包未安装如需要识别中文。1. 在命令行输入tesseract --version确认安装成功。2. 对截图进行预处理灰度化、二值化、缩放。3. 安装中文语言包并在pytesseract.image_to_string中指定langchi_simeng。桌面自动化操作点击、输入不生效1. 权限问题macOS/Linux 需要辅助功能权限。2. 屏幕缩放比例导致坐标计算错误。3. 操作速度太快目标窗口未就绪。1. 在系统设置中为你的 IDE 或终端授予辅助功能权限。2. 使用pyautogui.size()获取实际分辨率并考虑缩放因子。3. 在关键操作间加入time.sleep(0.5)等待。Agent 不理解指令或错误调用工具1. 工具描述不够清晰。2. 提示词Prompt未提供足够的上下文或约束。3. LLM 能力不足。1. 优化工具描述明确输入输出格式和用途。2. 在系统提示词中强化规则例如“你必须先调用工具 X 获取信息再调用工具 Y”。3. 尝试更强大的模型或在本地模型前增加一个更小的“路由模型”来判断意图。应用打包后无法运行1. 动态链接库缺失。2. 数据文件如模型未正确打包。3. 路径问题。1. 使用PyInstaller时通过--add-data参数包含模型等资源文件。2. 在代码中使用sys._MEIPASS来获取打包后的资源路径。3. 在打包前充分测试并查阅打包工具的文档。5.4 安全与隐私最佳实践最小权限原则你的助手脚本应只请求必要的系统权限。避免以管理员权限运行。本地处理优先敏感信息如文档内容、截图尽量在本地由 LLM 处理避免不必要的网络传输。如果使用云端 API确保了解其数据使用政策。环境变量管理API 密钥等机密信息永远不要硬编码在代码中。使用python-dotenv从.env文件加载。用户确认对于执行文件删除、系统设置修改、发送消息等高风险操作在执行前应弹出确认对话框。日志记录记录助手的操作日志便于审计和故障排查但日志中不要记录敏感信息。构建新一代桌面 AI 助手是一个将多种技术栈融合的工程实践。从理解 Agent 架构开始到选型本地模型、实现桌面自动化工具链再到集成工作流和优化性能每一步都需要在功能、性能和易用性之间做出权衡。本文提供的模块和代码示例构成了一个可运行的起点但真正的挑战在于如何根据你的具体需求编程辅助、写作协同、数据分析来设计和训练助手的“行为模式”。你可以从扩展工具集开始例如集成日历、邮件、项目管理软件或是为特定编程语言添加代码理解和生成能力。最终一个真正“智能”的助手是其背后开发者对日常工作流深刻理解的体现。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门