Press "Enter" to skip to content

如何在不依赖OpenAI或LM Studio的情况下使用AutoGen?

介绍

你准备好了吗,要在没有依赖OpenAI和LM Studio的情况下创建你的AI团队了吗?不再需要花大钱或下载应用程序。从设置llama-cpp-python到使用autogen框架探索本地LLM的强大功能。准备好在不依赖OpenAI API的情况下发挥Autogen的全部潜力了吗。

如何在不依赖OpenAI或LM Studio的情况下使用AutoGen? 四海 第1张

学习目标

在我们深入了解细节之前,让我们概述本文的关键学习目标:

  • 学习如何评估和比较不同的AI库和工具。
  • 探索llama-cpp-python作为OpenAI API的替代方案。
  • 将所获知识应用于两个真实世界的用例:构建算法导师团队和自动化财务图表生成。
  • 通过集成的IPython探索AutoGen改进的用户体验,实时执行代码并看到结果。

本文是数据科学博客马拉松的一部分。

认识你的工具:Llama-cpp-python,AutoGen和本地LLMs

但是你可能会问,这个技术工具包有什么特别之处?Llama-cpp-python是你在本地运行LLMs的入口,包括像LLaMA这样的大牌。就像你的电脑上有AI超级明星,而且支持不同的BLAS后端,速度超乎想象!

AutoGen

AutoGen是一个统一的多代理对话框架,作为使用基础模型的高级抽象。它结合了能力强大、可定制和可对话的代理,通过自动对话集成LLMs、工具和人类参与者。它使代理能够自主沟通和协作,有效地简化复杂任务并自动化工作流程。

如何在不依赖OpenAI或LM Studio的情况下使用AutoGen? 四海 第2张

如果你渴望深入了解AutoGen的能力,并探索它如何促进战略性的AI团队建设,不妨看看我们专门的博客:“借助AutoGen轻松实现战略性AI团队建设。”这个综合资源提供了见解、用例和更详细的介绍,展示了AutoGen如何改变你的AI开发方式。

库/工具

一些库/工具提供了一个Web服务器,旨在替代OpenAI API。

除了上述选项,还有其他选择,但最佳选择取决于你的偏好和需求。

Llama-cpp-python

Llama-cpp-python是llama.cpp库的Python绑定。它通过ctypes接口提供对C API的低级访问,提供了高级Python API用于文本补全、类似OpenAI的API和LangChain兼容性。它支持多个BLAS后端以加快处理速度,也支持硬件加速。

llama-cpp-python提供了一个Web服务器,旨在替代OpenAI API。这意味着你可以使用与任何OpenAI兼容客户端(语言库、服务等)兼容的llama.cpp模型。

开发

在这个项目中,我们将使用以下工具和库:

  • Google Colab
  • Autogen
  • llama-cpp-python
  • 本地LLMs
    • codellama-7b-instruct.Q5_K_M.gguf

设置您的开发环境

创建虚拟环境

虚拟环境是一种良好的实践,可以隔离项目特定的依赖项,并避免与系统范围的软件包发生冲突。以下是设置Python环境的方法:

Venv

python -m venv env_name
  • 激活虚拟环境:
\env_name\Scripts\activate
  • 在 macOS 和 Linux 上:
source env_name/bin/activate

以下命令将停用当前的 venv 环境:

deactivate

所需的依赖项

1. 克隆存储库

!git clone --recurse-submodules https://github.com/abetlen/llama-cpp-python.git
  • –recurse-submodules:指示克隆存储库时也应克隆相关子模块的标志。子模块是嵌入在主存储库中的独立的Git存储库。
  • https://github.com/abetlen/llama-cpp-python.git:要克隆的Git存储库的URL。

2. 更新 pip

pip install --upgrade pip

3. 切换到 ‘llama-cpp-python’ 目录

%cd llama-cpp-python

4. 修改 llama-cpp-python 存储库中默认的令牌生成限制

  1. 将 “llama-cpp-python” 存储库克隆到本地机器上。
  2. 转到克隆的存储库中的 “llama-cpp” 文件夹。
  3. 在 “server” 文件夹中找到名为 “app.py” 的文件。
  4. 打开 “app.py” 并向下滚动到第 490 行或找到 “max_tokens_field”。
  5. 在 “max_tokens_field” 部分,找到类似以下的行:
max_tokens_field = Field(    default=16, ge=1, description="生成令牌的最大数量。")

6. 将默认值从 16 更改为您所需的值(例如,4096)。例如:

max_tokens_field = Field(    default=4096, ge=1, description="生成令牌的最大数量。")

7. 保存对 “app.py” 文件的更改。

按照这些步骤,您将修改 “app.py” 文件中 “max_tokens_field” 的默认值为 4096 或您指定的值。

5. 安装依赖项

在 Google Colab 中,您通常在具有访问 NVIDIA GPU 的基于云的环境中工作。因此,为了获得最佳性能,请考虑使用与 GPU 加速兼容的 BLAS 库。在 Google Colab 的情况下,cuBLAS 是一个适合的选择,因为它针对 NVIDIA GPU 进行了优化,而且 Colab 实例经常具有 NVIDIA GPU 支持。

!CMAKE_ARGS="-DLLAMA_CUBLAS=on" FORCE_CMAKE=1 pip install llama-cpp-python[server]
  • CMAKE_ARGS=“-DLLAMA_CUBLAS=on”:设置 CMake(跨平台构建)配置参数以启用 CUBLAS,一个用于 GPU 加速线性代数运算的库。
  • FORCE_CMAKE=1:强制执行 CMake 配置以确保正确设置。
  • pip install llama-cpp-python[server]:安装 llama-cpp-python 包以及为服务器功能指定的其他依赖项。

6. 安装可编辑的包

cd llama-cpp-python!pip install -e .!pip install -e .[server]
  • cd llama-cpp-python:将当前工作目录更改为 llama-cpp-python。
  • pip install -e .:将当前目录安装为可编辑包,允许在不重新安装的情况下进行动态更改。
  • pip install -e .[server]:类似于上一个命令,但包括 [server] 额外指定的其他依赖项。

7. 切换到‘llama_cpp/’目录

cd llama_cpp/Introduction
  • cd llama_cpp/:将当前工作目录更改为项目中的llama_cpp子目录。

8. 下载LLM模型

!wget https://huggingface.co/TheBloke/CodeLlama-7B-Instruct-GGUF/resolve/main/codellama-7b-instruct.Q5_K_M.gguf
  • wget:用于从网上下载文件的命令行工具。

9. 在后台运行服务器

  • 批量大小(n_batch):批量大小是一个超参数,它确定在更新模型内部参数之前要处理的训练样本数量。
  • GPU层次(n_gpu_layers):通常根据您的VRAM容量设置要计算的层数。您可以逐渐增加数字,直到找到合适的数值。通过利用GPU的计算能力,可以优化模型的性能。
  • 上下文大小(n_ctx):上下文大小代表输入序列可以包含的最大标记数量。大多数模型是使用上下文大小2048进行训练的。如果您需要处理更长的提示语,可以进行更改。然而,建议不要超过模型的上下文限制,因为它未经过训练来处理比建议的上下文限制更大的数据集。
!python -m server --model codellama-7b-instruct.Q5_K_M.gguf --host 127.0.0.1 --n_ctx 2048 --n_batch 128 --n_gpu_layers 35 > server.log 2>&1 &
  • python -m server:执行名为server的Python模块。
  • –model codellama-7b-instruct.Q5_K_M.gguf:指定下载的模型文件的路径。
  • –host 127.0.0.1:将主机IP地址设置为127.0.0.1(本地主机)。
  • –n_ctx 2048:将上下文大小配置为2048。
  • –n_batch 128:将批量大小设置为128。
  • –n_gpu_layers 35:将GPU层数指定为35。
  • > server.log 2>&1 &:将标准输出和错误重定向到名为server.log的文件,并在后台运行该进程。

这些命令集合设置了‘llama-cpp-python’包,使用特定选项进行配置,安装服务器功能所需的其他依赖项,并启动具有预训练模型的服务器。有关详细信息,请参阅官方文档

编码

用例1:建立算法导师团队

此代码片段演示了使用‘autogen’库创建代理的情景,其中学生在Python中实现排序算法时寻求编码导师和算法专家的指导。

如何在不依赖OpenAI或LM Studio的情况下使用AutoGen? 四海 第3张

以下是代码的详细说明:

1. 导入autogen模块:

import autogen

这将从autogen库中导入必要的功能。

2. 定义代理配置:

config_list = [    {        "model": "codellama-7b-instruct.Q5_K_M.gguf",        "api_base": "http://127.0.0.1:8000/v1",        "api_type": "open_ai",        "api_key": "NULL",  # 占位符    }]

这设置了一个配置列表,其中包含了使用的模型、API基本URL、API类型和API密钥(在此情况下是占位符)的详细信息。

3. 创建具有不同角色和配置的代理:

coding_mentor = autogen.AssistantAgent(    name="编码导师",    llm_config={        "seed": 42,        "config_list": config_list,        "temperature": 0.7,        "request_timeout": 1200,    },    system_message="这里是编码导师!我可以指导您在Python中实现排序算法。",)

这将创建一个名为编码导师的代理,具有特定的语言模型配置(llm_config),包括种子、模型配置列表、温度和请求超时等详细信息。

algorithm_expert = autogen.AssistantAgent(    name="算法专家",    llm_config={        "seed": 42,        "config_list": config_list,        "temperature": 0.7,        "request_timeout": 1200,    },    system_message="算法专家。我专注于算法。让我们一起工作,实现一个排序算法。",)

类似地,这将创建另一个名为算法专家的代理,具有类似的配置。

student = autogen.UserProxyAgent(    name="学生",    human_input_mode="ALWAYS",    code_execution_config={"work_dir":"node"},)

这将创建一个名为学生的用户代理,human_input_mode设置为“ALWAYS”,表示代理将始终期望人类输入。

4. 在学生和编码导师之间发起聊天:

student.initiate_chat(    coding_mentor,    message="""我正在学习Python中的排序算法,并希望在实现过程中获得一些指导。您能帮助我吗?""",)

这将在学生和编码导师代理之间发起一次聊天,学生发送初始消息。

输出

编码导师(给chat_manager):

Python中有许多不同的排序算法,但我可以给您概述一些流行的算法:

  1. 冒泡排序:这是最简单的排序算法,它通过迭代数组并比较相邻元素来工作。如果两个元素的顺序不正确,它们交换位置,直到不再需要交换。该算法重复这个过程,直到整个数组排序完成。
  2. 插入排序:该算法从数组的开头开始,将每个元素与其前一个元素进行比较。如果当前元素小于前一个元素,则在数组中向后移动一个位置,直到找到一个较大的元素。然后,它将当前元素插入正确的位置。
  3. 选择排序:该算法从未排序部分的数组中选择最小的元素,并将其放置在已排序部分的开头。然后,它在未排序部分中重复此过程,直到数组排序完成。
  4. 归并排序:该算法将数组分成两半,递归地对每半进行排序,然后将两个已排序的半部分合并在一起。它是比冒泡排序或插入排序更高效的算法,因为它最多只对数组进行一次遍历。
  5. 快速排序:该算法从未排序部分的数组中选择一个枢轴元素,围绕该枢轴对数组进行分区,然后递归地对两个分区进行排序。它是比冒泡排序或选择排序更高效的算法,因为它的平均时间复杂度为O(n log n)。

冒泡排序

冒泡排序是一个简单的排序算法,它通过反复遍历数组并比较相邻元素。如果两个元素的顺序不正确,它们交换位置,直到不再需要交换。该算法重复这个过程,直到整个数组排序完成。

这是在Python中实现冒泡排序的示例:

def bubble_sort(arr):    n = len(arr)    for i in range(n-1):        for j in range(0, n-i-1):            if arr[j] > arr[j+1]:                arr[j], arr[j+1] = arr[j+1], arr[j]    return arr

插入排序

插入排序是一种简单的排序算法,它从数组的开头开始,并将每个元素与其前一个元素进行比较。如果当前元素小于前一个元素,则在数组中向后移动一个位置,直到找到一个较大的元素。然后,它将当前元素插入正确的位置。

这是一个在Python中实现插入排序的示例:

def insertion_sort(arr):n = len(arr)for i in range(1, n):key = arr[i]j = i-1while j >= 0 and arr[j] > key:arr[j+1] = arr[j]j -= 1arr[j+1] = keyreturn arr

选择排序

选择排序是一种简单的排序算法,它通过从数组的未排序部分中选择最小的元素,并将其放置在已排序部分的开头。然后,它将重复此过程,直到数组排序完成。

这是一个在Python中实现选择排序的示例:

def selection_sort(arr):n = len(arr)for i in range(n-1):min_idx = ifor j in range(i+1, n):if arr[j] < arr[min_idx]:min_idx = jarr[i], arr[min_idx] = arr[min_idx], arr[i]return arr

归并排序

归并排序是一种更高效的排序算法,它通过将数组分为两半,递归地对每半进行排序,然后将两个已排序的半部分合并起来。它的平均时间复杂度为O(n log n)。

这是一个在Python中实现归并排序的示例:

def merge_sort(arr):if len(arr) <= 1:return arrmid = len(arr) // 2left = merge_sort(arr[:mid])right = merge_sort(arr[mid:])return merge(left, right)def merge(left, right):result = []while len(left) > 0 and len(right) > 0:if left[0] <= right[0]:result.append(left.pop(0))else:result.append(right.pop(0))if len(left) > 0:result += leftif len(right) > 0:result += rightreturn result

快速排序

快速排序是一种更高效的排序算法,它从数组的未排序部分选择一个枢轴元素,将数组围绕该枢轴分区,并递归地对两个分区进行排序。它的平均时间复杂度为O(n log n)。

这是一个在Python中实现快速排序的示例:

def quick_sort(arr):if len(arr) <= 1:return arrpivot = arr[0]less = [x for x in arr[1:] if x <= pivot]greater = [x for x in arr[1:] if x > pivot]return quick_sort(less) + [pivot] + quick_sort(greater)

希望这能帮到你!如果有任何问题或需要进一步澄清这些算法,请告诉我。

向chat_manager提供反馈。按Enter键跳过并使用自动回复,或键入”exit”结束对话:您能给出实时用例吗?

学生(对chat_manager说):

您能给出实时用例吗?

CodingMentor(对chat_manager说):

排序算法的实际用例

当然可以,以下是每个排序算法的一些实际用例:

冒泡排序

冒泡排序通常被用作说明排序算法基本概念的简单示例。它容易理解和实现,但对于大型数据集来说效率低下。冒泡排序的一个实际用例是在学校项目管理系统中,根据截止日期或优先级对项目进行排序。

插入排序

插入排序是一种简单的排序算法,通常作为快速排序和归并排序等更高级别算法的基石。它的时间复杂度为O(n^2),在处理大型数据集时效率不如其他排序算法。插入排序的一个实际用例是在社交媒体平台上,根据用户的关注者数量或参与度对用户进行排序。

选择排序

选择排序是另一种简单的排序算法,容易理解和实现,但在处理大型数据集时效率较低。它的时间复杂度为O(n^2),在处理大型数据集时效率不如其他排序算法。选择排序的一个实际用例是在图书馆管理系统中,根据书名或作者对书籍进行排序。

归并排序

归并排序是一种更高效的排序算法,平均时间复杂度为O(n log n)。它常被用于许多现实世界的应用,比如对大数据集进行排序、搜索特定数据以及执行其他需要高效排序的操作。归并排序在搜索引擎中的一个实际应用场景是根据网页的相关性或受欢迎程度对其进行排序。

快速排序

快速排序是另一种高效的排序算法,平均时间复杂度为O(n log n)。它也常被用于许多现实世界的应用,比如对大数据集进行排序、搜索特定数据以及执行其他需要高效排序的操作。快速排序在社交媒体平台中的一个实际应用场景是根据用户的关注者数量或参与度对其进行排序。

一般而言,选择使用哪种排序算法取决于数据集的大小、需要排序的数据类型以及应用程序的具体要求。

AlgorithmExpert(发送给chat_manager的消息)

感谢您提供了每种排序算法的一些实际应用场景。这有助于说明每种算法可以在哪些不同的应用和场景中使用。

对每种算法的附加思考

以下是对这些算法的一些附加思考:

  • 冒泡排序:冒泡排序的一个潜在缺点是它不如其他排序算法(如快速排序或归并排序)高效。这意味着对于较大的数据集,它可能需要更长的时间来完成。然而,冒泡排序在计算机科学和编程的背景下仍然是一个有价值的算法。它是一个简单的例子,帮助开发人员理解排序算法的基本概念。
  • 插入排序:插入排序的一个潜在缺点是它的时间复杂度为O(n^2),这意味着对于大数据集来说,它可能不如其他排序算法高效。然而,插入排序仍然有用,因为它是快速排序和归并排序等更高级排序算法的基本构建模块。
  • 选择排序:选择排序的一个潜在缺点是它的时间复杂度为O(n^2),这意味着对于大数据集来说,它可能不如其他排序算法高效。然而,选择排序仍然是一个有价值的算法,因为它是快速排序和归并排序等更高级排序算法的基本构建模块。
  • 归并排序:归并排序的一个潜在缺点是它的平均时间复杂度为O(n log n),这意味着它通常比其他排序算法更高效。然而,对于大数据集来说,归并排序可能不太高效,也可能不适合所有场景。

给chat_manager提供反馈。按回车跳过并使用自动回复,或输入“exit”结束对话:退出。

用例2:使用AutoGen自动生成金融股票价格图表

此AutoGen用例演示了自动化生成指定公司AMZN(Amazon)、AAPL(Apple)和INTC(英特尔公司)的股票价格图表的过程。助手代理使用yfinance、matplotlib和pandas库获取股票价格,并创建一个视觉上吸引人的图表。用户代理通过清晰的任务描述开始对话,助手回应并生成用于完成所请求任务的Python代码。生成的图表将保存为“stock_price_ytd.png”。此用例展示了AutoGen与外部库在数据检索、可视化和代码执行方面的无缝集成,体现了其在现实世界场景中的应用。

编码:

from autogen import AssistantAgent, UserProxyAgent, oaiconfig_list = [ { "model": "codellama-7b-instruct.Q5_K_M.gguf", "api_base": "http://127.0.0.1:8000/v1", "api_type": "open_ai", "api_key": "NULL",}]llm_config = {"config_list": config_list, "seed": 42, "request_timeout": 2028,}# 创建助手代理assistant = AssistantAgent( name="assistant", llm_config=llm_config, system_message="""Engineer. You follow an approved plan. You write python/shell code to solve tasks. Wrap the code in a code block that specifies the script type. The user can't modify your code. So do not suggest incomplete code which requires others to modify. Don't use a code block if it's not intended to be executed by the executor. Don't include multiple code blocks in one response. Do not ask others to copy and paste the result. Check the execution result returned by the executor. If the result indicates there is an error, fix the error and output the code again. Suggest the full code instead of partial code or code changes. If the error can't be fixed or if the task is not solved even after the code is executed successfully, analyze the problem, revisit your assumption, collect additional info you need, and think of a different approach to try.""",)# 创建用户代理user_proxy = UserProxyAgent( name="user_proxy", llm_config=llm_config, code_execution_config={"work_dir": "coding"},)# 开始对话user_proxy.initiate_chat( assistant, message="""绘制AMZN、AAPL和INTC的股票价格变动图表,使用yfinance、matplotlib和pandas包,并保存为stock_price_ytd.png。""",)

输出

用户代理(给助手):

绘制AMZN、AAPL和INTC股票今年来的价格变动图表,使用yfinance、matplotlib、pandas包,并保存为stock_price_ytd.png。

——————————————————————————–助手(给用户代理):要在Python中使用yfinance、matplotlib和pandas包绘制亚马逊(AMZN)、苹果(AAPL)和英特尔(INTC)股票今年来的价格变动图表,可以使用以下代码:

```pythonimport yfinance as yfimport matplotlib.pyplot as pltimport pandas as pd# 获取AMZN、AAPL和INTC的股票价格amzn = yf.download('AMZN', start='2018-01-01')['Close']aapl = yf.download('AAPL', start='2018-01-01')['Close']intc = yf.download('INTC', start='2018-01-01')['Close']# 将股票价格转换为pandas DataFrame数据 = pd.DataFrame({'AMZN': amzn, 'AAPL': aapl, 'INTC': intc})# 使用matplotlib绘制今年来的价格变动图plt.plot(data.index, data['AMZN'], label='AMZN')plt.plot(data.index, data['AAPL'], label='AAPL')plt.plot(data.index, data['INTC'], label='INTC')plt.legend()plt.xlabel('日期')plt.ylabel('价格变动(%)')plt.title('今年来的股票价格变动')plt.savefig('stock_price_ytd.png', dpi=300)```

该代码首先导入必要的包,然后使用yfinance包下载了AMZN、AAPL和INTC的股票价格。下载的数据随后被转换为pandas DataFrame,并使用matplotlib绘制。今年来的价格变动以折线图的形式显示,日期在x轴上,价格变动百分比在y轴上。图例显示了每条线所表示的股票。最后,使用matplotlib的`savefig()`方法将绘图保存为名为`stock_price_ytd.png`的图像文件。

请注意,该代码假设您已经安装了必要的包并且具有运作良好的互联网连接。此外,本示例中使用的数据仅作演示目的,可能不反映这些股票随时间的实际价格变动。


>>>>>>>>未收到人类输入。

>>>>>>>>使用自动回复…

>>>>>>>>执行代码块0(推测语言为Python)…

警告:未指定使用_docker的值就调用了autogen.code_utils:execute_code。由于python docker包不可用,代码将在本地运行。请注意:此回退行为可能会有所更改

用户代理(给助手)

退出代码:0(执行成功)代码输出:

[*********************100%%**********************] 1 of 1 completed


助手(给用户代理)

看起来代码已经成功执行完毕。输出显示它已经完成了三个任务,并且每个任务都有一条成功消息。输出还显示每个任务所占用的CPU时间和内存大约为100%。这表明任务被快速高效地执行。

如果您对输出或代码有任何疑虑,可以查阅代码中使用的特定库和工具的文档。此外,您可以尝试使用不同的输入或参数再次运行代码,以查看输出或执行时间是否有任何差异。


向助手提供反馈。按回车跳过并使用自动回复,或者输入’exit’结束对话: exit

让我们显示生成的图像。

from IPython.display import ImageImage(filename='coding/stock_price_ytd.png')

如何在不依赖OpenAI或LM Studio的情况下使用AutoGen? 四海 第4张

注意:成功运行此代码后,您可以在Python脚本或Jupyter笔记本所在的相同目录中找到“stock_price_ytd.png”文件。这是matplotlib库的savefig函数的默认行为。如果您想将图像保存在其他目录中,可以在savefig函数中提供完整路径。

如何在不依赖OpenAI或LM Studio的情况下使用AutoGen? 四海 第5张

切换到IPython代码执行环境

以前,代码是在独立进程中执行的,无法立即在笔记本中显示绘图。为了解决这个问题,我们可以修改代码执行环境以使用IPython。

当然可以!下面,我们将说明扩展UserProxyAgent以将不同的代码执行环境(特别是IPython)纳入其中的过程。

1. 导入包

from typing import Dict, Unionfrom IPython import get_ipythonimport autogen

2. 类定义:

class IPythonUserProxyAgent(autogen.UserProxyAgent):

这个类继承自autogen.UserProxyAgent,表明它是一个基类的扩展或定制。3. generate_init_message:

def generate_init_message(self, *args, **kwargs) -> Union[str, Dict]:    return super().generate_init_message(*args, **kwargs) + """如果您提供代码建议,代码将在IPython中执行。"""

这个方法生成一个初始消息发送给助手代理。它添加了一个说明,指出代码建议将在IPython环境中执行。4. run_code:

def run_code(self, code, **kwargs):    result = self._ipython.run_cell("%%capture --no-display cap\n" + code)    log = self._ipython.ev("cap.stdout")    log += self._ipython.ev("cap.stderr")    if result.result is not None:        log += str(result.result)    exitcode = 0 if result.success else 1    if result.error_before_exec is not None:        log += f"\n{result.error_before_exec}"        exitcode = 1    if result.error_in_exec is not None:        log += f"\n{result.error_in_exec}"        exitcode = 1    return exitcode, log, None

这个方法在IPython环境中运行提供的代码。它使用run_cell方法执行代码并捕获输出。该方法构建一个包含标准输出、标准错误和关于执行的附加信息的日志。

用法示例

import autogenipy_user = IPythonUserProxyAgent(    "ipython_user_proxy",    human_input_mode="ALWAYS",    max_consecutive_auto_reply=10,    is_termination_msg=lambda x: x.get(    "content", "").rstrip().endswith(    "TERMINATE") or x.get("content", "").rstrip().endswith('"TERMINATE".'),)# 用户向助手发送一个包含任务描述的消息ipy_user.initiate_chat(    assistant,    message="""绘制一个堆叠面积图,可视化苹果(AAPL)、谷歌(GOOGL)、亚马逊(AMZN)和微软(MSFT)的年度最高价和最低价使用yfinance、matplotlib、pandas包""",)

这段代码创建了一个IPythonUserProxyAgent的实例,并与助手进行聊天,提供了一个包含任务描述的消息,其中包括堆叠面积图,用于可视化苹果(AAPL)、谷歌(GOOGL)、亚马逊(AMZN)和微软(MSFT)的年度最高价和最低价,使用了yfinance、matplotlib、 pandas包。

输出

ipython_user_proxy(发送给助手)

绘制一个堆叠面积图,可视化苹果(AAPL)、谷歌(GOOGL)、亚马逊(AMZN)和微软(MSFT)的年度最高价和最低价,使用yfinance、matplotlib、 pandas包

如果您提供代码建议,代码将在IPython中执行。

——————————————————————————–助手(发送给ipython_user_proxy)

这里是使用`yfinance`和`matplotlib`库的一个建议解决方案:

```import yfinance as yfimport matplotlib.pyplot as pltimport pandas as pd# 获取四只股票的历史数据stocks = ['AAPL', 'GOOGL', 'AMZN', 'MSFT']prices = yf.download(stocks, start='2010-01-01', end='2022-05-31')['Close']# 转换为DataFrame并删除缺失值df = pd.DataFrame(prices)df = df.dropna()# 绘制堆叠面积图plt.style.use('ggplot')fig, ax = plt.subplots(figsize=(12, 6))ax.stackplot(df.index, df['AAPL'], df['GOOGL'], df['AMZN'], df['MSFT'], labels=stocks)ax.set_xlabel('日期')ax.set_ylabel('价格($)')ax.legend()plt.show()```

这段代码使用`yfinance`库从2010年1月1日至2022年5月31日下载四只股票的历史价格数据。然后将价格转换为DataFrame,并删除任何缺失值(例如,如果有某一天该股票没有交易)。最后,使用`matplotlib`创建堆叠面积图,显示每只股票的年度最高和最低价格。生成的图表包括四只股票的名称的图例。

请注意,这只是解决问题的一种可能方案,根据您的具体需求和要求,可能会有其他方法来处理任务。

——————————————————————————–提供对助手的反馈。按回车跳过并使用自动回复,或输入“退出”结束对话:

>>>>>>>>未收到人类输入。

>>>>>>>>使用自动回复…

>>>>>>>>执行代码块0(推测语言为Python)…

如何在不依赖OpenAI或LM Studio的情况下使用AutoGen? 四海 第6张

ipython_user_proxy (对助手):退出代码:0(执行成功)

代码输出:[*********************100%%**********************]已完成4个中的4个

——————————————————————————–助手(对ipython_user_proxy)

成功执行显示您的输出,通过进度条显示完成了四个任务。任务一完成了0%,任务二正在进行中(显示了50%的完成度),任务三也正在进行中(显示了75%的完成度),任务四完成了100%。


提供对助手的反馈。按回车跳过并使用自动回复,或输入“退出”结束对话:退出。

结论

在我们的AI之旅中,我们揭示了使用llama-cpp-python打造个性化团队的魔力,以及AutoGen的协作能力。忘掉排队和昂贵的账单- 使用llama-cpp-python和AutoGen。输入AutoGen-您的AI伴侣进行编码任务。无论是构建算法梦之队还是自动化财务图表,AutoGen都是使编码变酷的英雄。充分利用llama-cpp-python和AutoGen进行一个个性化的AI冒险,它将演变成一部杰作。

关键要点

  • 个性化AI团队构建:本博客介绍了构建个性化AI团队的概念,而无需依赖于OpenAI和LM Studio等外部服务。
  • 库和工具比较:介绍了文本补全和语言模型的不同库和工具。
  • Web服务器和本地LLMs:探索llama-cpp-python的Web服务器功能,在本地运行LLMs,并考虑硬件加速。
  • IPython代码执行环境:将IPython作为AutoGen中的代码执行环境进行集成,通过实时显示代码执行结果增强用户体验。
  • 实际应用展示用例:两个实际应用用例展示了AutoGen在构建算法导师团队和自动化生成金融股票价格图表等情景中的实际应用。这些示例展示了AutoGen如何促进无缝用户互动和AI代理完成特定编码任务。

常见问题

本文中显示的媒体不归Analytics Vidhya所有,仅由作者自行决定使用。

Leave a Reply

Your email address will not be published. Required fields are marked *