下一步

在本文中,您构建了个性化的 AI 朋友来监控​​您的活动。但是,添加外部集成(例如日历或 Gmail 工具)可以使其更加有用。这可以让您知道您是否有一些活动要参加或有重要的电子邮件要回复。

您可以通过 Composio 的广泛集成(从 GitHub 和 Calendar 到 Slack、Discord 等)轻松完成此任务。

如果你想看更多AI相关文章,请在评论中告诉我,并在GitHub上给我们一个star。

为 Composio.dev 存储库加注星标 ⭐

感谢您的阅读!

","image":"http://www.luping.net/uploads/20240816/172381104866bf44e803c73.gif","datePublished":"2024-08-16T20:24:07+08:00","dateModified":"2024-08-16T20:24:07+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 我创建了一个 AI 伴侣,可以监控我的屏幕并帮助修复我的问题 ✨

我创建了一个 AI 伴侣,可以监控我的屏幕并帮助修复我的问题 ✨

发布于2024-08-16
浏览:516

最近,我一直在与狂看火影忍者的瘾作斗争。虽然这很令人愉快,但它绝对不能帮助我实现股东价值。 ?

那么,为什么不建立一个人工智能个人助理来监控我的屏幕并让我知道我是否做了不应该做的事情,比如看动漫? ?

考虑到过去一年人工智能的快速发展,我决定使用多模态语言模型来监控我的屏幕,并让我知道何时我在非生产性活动上花费了太多时间。

所以,这就是我的做法。

  • 配置OpenAI GPT-4o,多模态AI模型。
  • 使用 Composio 的屏幕分析器工具来监控屏幕。
  • 定期将屏幕截图传递到 GPT。
  • 将来自 GPT 的消息呈现为系统中的通知。

I Created an AI Companion that Monitors My Screen and Helps Fix My Screw Ups ✨

在本文中,我还将解释如何使用 OpenAI 和 Composio 构建您的个人 AI 朋友。


Composio - 您的 AI 代理工具平台

Composio 是一个开源平台,可为您的 AI 代理提供工具和集成。它可让您通过代码解释器、RAG、嵌入等集成工具以及 GitHub、Slack、Jira 等集成来扩展 AI 代理的能力和多功能性。

I Created an AI Companion that Monitors My Screen and Helps Fix My Screw Ups ✨

请帮我们加一颗星。 ?

这将帮助我们创建更多这样的文章?

为 Composio.dev 存储库加注星标 ⭐


建立 AI Friend 的先决条件

要成功完成该项目,您将需要以下内容。

  • OpenAI SDK 和 API 密钥:与 LLM 交互。
  • Composio:用于访问图像分析工具。
  • PyAutoGUI:自动化屏幕上的交互。
  • Osascript:执行 AppleScript 命令来控制 macOS 应用程序。

那么,让我们开始吧。


让我们开始吧?

首先创建一个 Python 虚拟环境。

python -m venv ai-friend
cd ai-friend
source bin/activate

现在,安装以下依赖项。

pip install composio-core
pip install composio-openai openai
pip install pyautogui

接下来,创建一个 .env 文件并为 OpenAI API 密钥添加环境变量。

OPENAI_API_KEY=your API key

设置合成

您可以使用 CLI 轻松设置 Composio。

首先,通过运行以下命令登录您的帐户。

composio login

完成登录流程以继续。

现在,更新应用程序。

composio apps update

现在,您已准备好进入编码部分。


建立人工智能朋友

现在环境已经搭建完毕,让我们开始编码部分。

首先,导入库并初始化工具集。

import dotenv
from openai import OpenAI

from composio_openai import App, ComposioToolSet
from composio.utils.logging import get as get_logger

logger = get_logger(__name__)


# Load environment variables from .env
dotenv.load_dotenv()

# Initialize tools.
openai_client = OpenAI()
composio_toolset = ComposioToolSet()

# Retrieve actions
actions = composio_toolset.get_tools(apps=[App.SYSTEMTOOLS, App.IMAGEANALYSERTOOL])

所以,在上面的代码块中,

  • 我们导入了所有必需的库和模块。
  • 加载.env文件中定义的变量。
  • 创建了 OpenAI() 和 ComposioToolSet 的实例。
  • 从 SYSTEMTOOLS 和 IMAGEANALYSERTOO 检索了操作。

所以,这就是这些工具的作用。

  • 系统工具:系统工具有两个操作:推送通知和屏幕截图。
  • IMAGEANALYSERTOOL:该工具只有一个操作:使用 GPT-4o 和 Claude Sonnet 等多模态 LLM 分析图像

如果您想检查代码及其工作原理,请检查系统工具和图像分析工具的代码文件。

注意:Composio 中的操作是您的代理可以执行的任务,例如单击屏幕截图、发送通知或发送邮件。

设置 OpenAI 助手

现在,为客服人员定义清晰简洁的提示。这对于代理绩效至关重要。您可以根据您的要求更改提示。

assistant_instruction = (
    """You are an intelligent and proactive personal productivity assistant.
    Your primary tasks are:
    1. Regularly capture and analyze screenshots of the user's screen.
    2. Monitor user activity and provide timely, helpful interventions.

    Specific responsibilities:
    - Every few seconds, take a screenshot and analyze its content.
    - Compare recent screenshots to identify potential issues or patterns.
    - If you detect that the user is facing a technical or workflow problem:
        - Notify them with concise, actionable solutions.
        - Prioritize non-intrusive suggestions that can be quickly implemented.
    - If you notice extended use of potentially distracting websites or applications (e.g., social media, video streaming):
        - Gently remind the user about their productivity goals.
        - Suggest a brief break or a transition to a more focused task.
    - Maintain a balance between being helpful and not overly disruptive.
    - Tailor your interventions based on the time of day and the user's apparent work patterns.

    Operational instructions:
    - You will receive a 'CHECK' message at regular intervals. Upon receiving this:
        1. Take a screenshot using the screenshot tool.
        2. Then, analyse that screenshot using the image analyser tool.
        3. Then, check if the user uses distracting websites or applications.
        4. If they are, remind them to do something productive.
        5. If they are not, check if the user is facing a technical or workflow problem based on previous history.
        6. If they are, notify them with concise, actionable solutions.
        7. Try to maintain a history of the user's activity and notify them if they are doing something wrong.

    Remember: Your goal is to enhance productivity while respecting the user's autonomy and work style."""
)
assistant = openai_client.beta.assistants.create(
    name="Personal Productivity Assistant",
    instructions=assistant_instruction,
    model="gpt-4-turbo",
    tools=actions,  # type: ignore
)
# create a thread
thread = openai_client.beta.threads.create()
print("Thread ID: ", thread.id)
print("Assistant ID: ", assistant.id)

上面的代码块中,

  • 提供详细的辅助说明。
  • 使用先前定义的指令、模型名称和先前定义的操作创建了一个新的助手实例。
  • 最后,创建一个与模型交互的线程。

定义并运行助手

现在,定义一个用于运行助手的函数。

def check_and_run_assistant():
    logger.info("Checking and running assistant")

    # Send 'CHECK' message to the assistant
    message = openai_client.beta.threads.messages.create(
        thread_id=thread.id,
        role="user",
        content="CHECK",
    )

    # Execute Agent
    run = openai_client.beta.threads.runs.create(
        thread_id=thread.id,
        assistant_id=assistant.id,
    )

    # Execute function calls
    run_after_tool_calls = composio_toolset.wait_and_handle_assistant_tool_calls(
        client=openai_client,
        run=run,
        thread=thread,
    )

# Run the assistant check every 10 seconds
while True:
    check_and_run_assistant()

上面的代码是这样的。

  • 发送“CHECK”消息:这会向指定线程中的助手发送“CHECK”消息,以确保模型响应。
  • 执行代理:使用指定的线程和助手 ID 为助手创建运行。
  • 处理工具调用:等待并处理助手使用 Composio 工具集发出的工具调用。
  • 循环代理:循环代理,以便它连续运行并监控您的工作流程。

最后,通过运行 Python 文件来执行该文件,让你的新 AI 朋友让你专注于你的目标。

代理会监视您的屏幕,并在发现您做了不应该做的事情时发送通知。

完整代码可以在这里找到

这是正在运行的代理的示例。


下一步

在本文中,您构建了个性化的 AI 朋友来监控​​您的活动。但是,添加外部集成(例如日历或 Gmail 工具)可以使其更加有用。这可以让您知道您是否有一些活动要参加或有重要的电子邮件要回复。

您可以通过 Composio 的广泛集成(从 GitHub 和 Calendar 到 Slack、Discord 等)轻松完成此任务。

如果你想看更多AI相关文章,请在评论中告诉我,并在GitHub上给我们一个star。

为 Composio.dev 存储库加注星标 ⭐

感谢您的阅读!

版本声明 本文转载于:https://dev.to/composiodev/i-created-an-ai-companion-that-monitors-my-screen-and-helps-fix-my-screw-ups-144i?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 在Ubuntu/linux上安装mysql-python时,如何修复\“ mysql_config \”错误?
    在Ubuntu/linux上安装mysql-python时,如何修复\“ mysql_config \”错误?
    mysql-python安装错误:“ mysql_config找不到”“ 由于缺少MySQL开发库而出现此错误。解决此问题,建议在Ubuntu上使用该分发的存储库。使用以下命令安装Python-MysqldB: sudo apt-get安装python-mysqldb sudo pip in...
    编程 发布于2025-06-05
  • 如何在php中使用卷发发送原始帖子请求?
    如何在php中使用卷发发送原始帖子请求?
    如何使用php 创建请求来发送原始帖子请求,开始使用curl_init()开始初始化curl session。然后,配置以下选项: curlopt_url:请求 [要发送的原始数据指定内容类型,为原始的帖子请求指定身体的内容类型很重要。在这种情况下,它是文本/平原。要执行此操作,请使用包含以下标头...
    编程 发布于2025-06-05
  • 您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    在javascript console 中显示颜色是可以使用chrome的控制台显示彩色文本,例如红色的redors,for for for for错误消息?回答是的,可以使用CSS将颜色添加到Chrome和Firefox中的控制台显示的消息(版本31或更高版本)中。要实现这一目标,请使用以下模...
    编程 发布于2025-06-05
  • 如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    编程 发布于2025-06-05
  • 为什么PYTZ最初显示出意外的时区偏移?
    为什么PYTZ最初显示出意外的时区偏移?
    与pytz 最初从pytz获得特定的偏移。例如,亚洲/hong_kong最初显示一个七个小时37分钟的偏移: 差异源利用本地化将时区分配给日期,使用了适当的时区名称和偏移量。但是,直接使用DateTime构造器分配时区不允许进行正确的调整。 example pytz.timezone(...
    编程 发布于2025-06-05
  • CSS强类型语言解析
    CSS强类型语言解析
    您可以通过其强度或弱输入的方式对编程语言进行分类的方式之一。在这里,“键入”意味着是否在编译时已知变量。一个例子是一个场景,将整数(1)添加到包含整数(“ 1”)的字符串: result = 1 "1";包含整数的字符串可能是由带有许多运动部件的复杂逻辑套件无意间生成的。它也可以是故意从单个真理...
    编程 发布于2025-06-05
  • Go web应用何时关闭数据库连接?
    Go web应用何时关闭数据库连接?
    在GO Web Applications中管理数据库连接很少,考虑以下简化的web应用程序代码:出现的问题:何时应在DB连接上调用Close()方法?,该特定方案将自动关闭程序时,该程序将在EXITS EXITS EXITS出现时自动关闭。但是,其他考虑因素可能保证手动处理。选项1:隐式关闭终止数...
    编程 发布于2025-06-05
  • 为什么我在Silverlight Linq查询中获得“无法找到查询模式的实现”错误?
    为什么我在Silverlight Linq查询中获得“无法找到查询模式的实现”错误?
    查询模式实现缺失:解决“无法找到”错误在Silverlight应用程序中,尝试使用LINQ建立LINQ连接以错误而实现的数据库”,无法找到查询模式的实现。”当省略LINQ名称空间或查询类型缺少IEnumerable 实现时,通常会发生此错误。 解决问题来验证该类型的质量是至关重要的。在此特定实例中...
    编程 发布于2025-06-05
  • 版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    在时间戳列上使用current_timestamp或MySQL版本中的current_timestamp或在5.6.5 此限制源于遗留实现的关注,这些限制需要对当前的_timestamp功能进行特定的实现。 创建表`foo`( `Productid` int(10)unsigned not n...
    编程 发布于2025-06-05
  • PHP与C++函数重载处理的区别
    PHP与C++函数重载处理的区别
    作为经验丰富的C开发人员脱离谜题,您可能会遇到功能超载的概念。这个概念虽然在C中普遍,但在PHP中构成了独特的挑战。让我们深入研究PHP功能过载的复杂性,并探索其提供的可能性。在PHP中理解php的方法在PHP中,函数超载的概念(如C等语言)不存在。函数签名仅由其名称定义,而与他们的参数列表无关。...
    编程 发布于2025-06-05
  • C++成员函数指针正确传递方法
    C++成员函数指针正确传递方法
    如何将成员函数置于c [&& && && && && && && && && && &&&&&&&&&&&&&&&&&&&&&&&华仪的函数时,在接受成员函数指针的函数时,要在函数上既要提供指针又可以提供指针和指针到函数的函数。需要具有一定签名的功能指针。要通过成员函数,您需要同时提供对象指针(此...
    编程 发布于2025-06-05
  • FastAPI自定义404页面创建指南
    FastAPI自定义404页面创建指南
    response = await call_next(request) if response.status_code == 404: return RedirectResponse("https://fastapi.tiangolo.com") else: ...
    编程 发布于2025-06-05
  • 如何避免Go语言切片时的内存泄漏?
    如何避免Go语言切片时的内存泄漏?
    ,a [j:] ...虽然通常有效,但如果使用指针,可能会导致内存泄漏。这是因为原始的备份阵列保持完整,这意味着新切片外部指针引用的任何对象仍然可能占据内存。 copy(a [i:] 对于k,n:= len(a)-j i,len(a); k
    编程 发布于2025-06-05
  • 如何使用Python理解有效地创建字典?
    如何使用Python理解有效地创建字典?
    在python中,词典综合提供了一种生成新词典的简洁方法。尽管它们与列表综合相似,但存在一些显着差异。与问题所暗示的不同,您无法为钥匙创建字典理解。您必须明确指定键和值。 For example:d = {n: n**2 for n in range(5)}This creates a dicti...
    编程 发布于2025-06-05

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3