微软最强AutoGen入门与示例twoagent.py运行

AutoGen目前正火热

AutoGen是一个让LLM(大语言模型)相互聊天过程中解决任务的框架,可定制、可对话,并允许人类无缝参与。
直接上干货,了解AutoGen,并能运行。

AutoGen主要资源

参考博客:https://blog.csdn.net/techforward/article/details/133863795,了解主要介绍,下面直接给出所需步骤。

  1. 代码地址 https://github.com/microsoft/autogen.git
  2. 帮助文档:https://microsoft.github.io/autogen/docs/Getting-Started

运行环境搭建

  1. pip install pyautogen
  2. 修改autogen\test下的twoagent.py文件
  3. 代码修改如下:
#注释原代码config_list = 所在行
#config_list = config_list_from_json(env_or_file="OAI_CONFIG_LIST")
#加入如下语句,注意api_key后面的key为你要用的openai的key,默认是14天有效的那个。后面*号是因为太长了省略了,这个一定要用有效的,重要的东西重复一遍。
config_list = [{'model': 'gpt-3.5-turbo', 'api_key': 'eyJhbGciOiJSUzI1NiIsInR5c***'},]

如图所示:
在这里插入图片描述

运行代码

前提安装好python3.8以上版本。在AutoGen目录下执行:

  1. pip install pyautogen
  2. python test/twoagent.py
  3. 正常会输出如下内容:
user_proxy (to assistant):

Plot a chart of NVDA and TESLA stock price change YTD.

--------------------------------------------------------------------------------
assistant (to user_proxy):

To plot the chart of NVDA and TESLA stock price change Year-to-Date (YTD), we need to first collect the historical stock prices for both NVDA and TESLA. There are various APIs and libraries available to fetch stock prices. In this case, I will use the yfinance library to retrieve the stock prices.

Here is the Python code to accomplish this:

```python
# filename: stock_price_chart.py

import yfinance as yf
import matplotlib.pyplot as plt

# Define the ticker symbols for NVDA and TSLA
nvda = yf.Ticker("NVDA")
tsla = yf.Ticker("TSLA")

# Get the historical stock prices for YTD
nvda_hist = nvda.history(period="YTD")
tsla_hist = tsla.history(period="YTD")

# Plotting the stock price changes
fig, ax = plt.subplots()
ax.plot(nvda_hist.index, nvda_hist["Close"], label="NVDA")
ax.plot(tsla_hist.index, tsla_hist["Close"], label="TESLA")
ax.set_title("YTD Stock Price Change")
ax.set_xlabel("Date")
ax.set_ylabel("Stock Price")
ax.legend()

# Display the chart
plt.show()

Please make sure you have the following libraries installed:

  • yfinance
  • matplotlib

You can install the libraries using pip:

pip install yfinance matplotlib

Save the code in a file named stock_price_chart.py, then execute it. The code will retrieve the historical stock prices for NVDA and TESLA for the current year and plot a chart showing the stock price changes.

Let me know if you need any further assistance!


Provide feedback to assistant. Press enter to skip and use auto-reply, or type ‘exit’ to end the conversation:
以上为输出内容;

  1. 直接回车结束代码
  2. 在目录下新建一个文件名称为:stock_price_chart.py
  3. 执行:pip install yfinance matplotlib
  4. 执行:python stock_price_chart.py
  5. 输出如下:可拉长显示,这样横坐标日期就没有重叠了。
    股价对比图
    总结:如果想尝试更多功能,可以继续运行里面的范例,最好的4的token,方便使用。

参考如下:

[1]: https://github.com/microsoft/autogen
[2]: https://microsoft.github.io/autogen/docs/Getting-Started

<think>好的,我现在需要解决用户在C++ Qt项目中遇到的依赖循环问题,特别是涉及mocs_compilation.cpp的情况。首先,我需要理解依赖循环是如何产生的。依赖循环通常发生在项目中的目标之间相互引用,导致构建系统无法确定正确的编译顺序。例如,如果目标A依赖于目标B,而目标B又依赖于目标A,就会形成循环,这在Qt的自动生成文件如moc文件中尤其常见。 接下来,用户提到了mocs_compilation.cpp,这是Qt的元对象编译器(MOC)生成的文件,用于处理信号槽机制等Qt特性。当多个目标或子项目需要生成这些文件时,如果没有正确管理依赖关系,就容易出现循环依赖。例如,主程序可能依赖于一个库,而该库又需要主程序生成的moc文件,这就会导致循环。 根据引用[3]中的示例代码,用户可能在项目中使用了add_executable和add_dependencies来管理目标,但可能未正确处理自动生成的MOC文件。Qt的MOC处理通常需要为每个目标生成对应的moc文件,如果这些生成的文件被多个目标共享或错误地引用,就会导致依赖问题。 解决依赖循环的常见方法包括: 1. **分离模块**:将共享代码提取到静态库中,主程序和子项目都依赖该库,避免直接相互依赖。例如,将需要MOC处理的类放在独立的静态库中,主程序和其他模块依赖这个库,这样MOC生成的文件会集中在库中,减少循环的可能性。 2. **显式管理依赖**:使用add_dependencies命令明确指定目标之间的依赖顺序,确保生成MOC文件的目标先于依赖它的目标编译。例如,在引用[3]中,add_dependencies确保了生成的头文件在编译目标之前完成。 3. **检查生成文件路径**:确保生成的MOC文件路径正确,避免不同目标生成到同一目录导致冲突。可以设置不同的输出目录,或在add_library/add_executable时正确包含生成的源文件。 4. **使用中间静态库**:将需要MOC处理的代码编译为静态库,其他目标依赖该库。这样,MOC处理在库中完成,主程序和其他模块无需重复处理,减少依赖循环的可能。 此外,还需要检查项目结构是否合理,避免循环包含头文件或相互引用类。如果存在这样的情况,可能需要重构代码,使用前向声明或接口类来解耦。 参考引用[4]中提到的无法打开ui_xxxx.h的问题,可能生成文件未正确包含有关,同样需要确保MOC生成的文件路径被正确添加到包含目录中,避免编译时找不到头文件。 总结来说,解决Qt中的依赖循环问题需要合理组织项目结构,正确管理自动生成文件的依赖,必要时提取公共部分为库,并显式声明依赖关系,确保构建顺序正确。同时,检查生成文件的路径和包含设置,避免因路径错误导致的编译问题。</think>### 解决C++ Qt依赖循环问题(涉及mocs_compilation.cpp) #### 问题分析 依赖循环通常由以下原因导致: 1. **目标间相互依赖**:如目标A依赖目标B生成的MOC文件,而目标B又依赖目标A的代码[^3]。 2. **MOC生成冲突**:Qt的元对象编译器(MOC)需要为多个目标生成`mocs_compilation.cpp`时,若未正确隔离,会导致文件覆盖或重复编译[^3]。 3. **项目结构不合理**:头文件循环引用或模块间耦合度过高。 --- #### 解决方案 ##### 1. 分离共享代码为静态库 将需要信号槽机制的代码提取到静态库中,主程序和其他模块依赖该库: ```cmake # 创建静态库(含MOC处理) add_library(common_lib STATIC src/common_class.cpp src/common_class.h ) qt5_wrap_cpp(common_lib_MOC_SRCS src/common_class.h) # 生成MOC文件 target_link_libraries(common_lib Qt5::Core) # 主程序依赖该库 add_executable(main_app src/main.cpp ${common_lib_MOC_SRCS} ) target_link_libraries(main_app common_lib) ``` 此方法将MOC处理限制在静态库中,避免多目标重复生成`mocs_compilation.cpp`。 ##### 2. 显式声明依赖关系 若必须保留多个独立目标,使用`add_dependencies`强制指定编译顺序: ```cmake add_executable(app1 ...) add_executable(app2 ...) # 确保app1的MOC文件生成优先于app2 add_dependencies(app2 app1) ``` ##### 3. 规范生成文件路径 为不同目标指定独立的MOC输出目录,避免文件冲突: ```cmake set(CMAKE_AUTOMOC_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/app1_moc") add_executable(app1 ...) set(CMAKE_AUTOMOC_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/app2_moc") add_executable(app2 ...) ``` ##### 4. 代码重构 - **前向声明**:减少头文件间的直接依赖。 ```cpp // ClassB.h class ClassA; // 前向声明 class ClassB { void doSomething(ClassA* obj); // 使用指针或引用 }; ``` - **接口抽象**:通过纯虚类解耦模块。 --- #### 验证步骤 1. **检查CMake输出**:查看编译日志中`mocs_compilation.cpp`的生成路径是否隔离。 2. **分析依赖图**:使用`cmake --graphviz=dep.dot`生成依赖关系图,检查循环路径。 3. **最小化复现**:逐步移除代码,定位具体引发循环的模块。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值