ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

AutoGen 双智能体股票分析实战:通过自定义 ModelClient 接入 Qualcomm Cloud AI 100 Ultra

2026/9/9 20:33:30 拓冰建站 浏览量
AutoGen 双智能体股票分析实战:通过自定义 ModelClient 接入 Qualcomm Cloud AI 100 Ultra AutoGen 双智能体股票分析实战通过自定义 ModelClient 接入 Qualcomm Cloud AI 100 Ultra【免费下载链接】ai-engineering-hubIn-depth tutorials on LLMs, RAGs and real-world AI agent applications.项目地址: https://gitcode.com/GitHub_Trending/ai/ai-engineering-hub本篇文章围绕本仓库中的 autogen-stock-analyst 示例讲解如何用微软 AutoGen 搭建“代码生成 代码执行”的双智能体协作管线完成 QCOM、TSLA 等股票的 YTD 收益可视化分析。核心难点——把非 OpenAI 协议的本地/私有模型接入 AutoGen——将通过自定义ModelClient的实现细节逐一拆解读完你可以独立复现这套 Coding Stock Analyst 场景并掌握把任意自研或第三方推理服务挂载到 AutoGen Agent 的通用方法。一、项目概览它解决什么问题从 README 的定位看这个示例展示了 AutoGen 驱动下的“程序员 财务分析师”复合角色一个 Agent 负责根据自然语言任务生成可执行的金融分析代码另一个 Agent 负责真实执行这些代码并反馈结果。整个 LLM 推理环节没有走 OpenAI API而是借助 Qualcomm Cloud AI 100 Ultra 相关服务完成高性能大模型推理模型侧通过imagineSDK 的ImagineLLM/ImagineChat访问。仓库内与该主题直接相关的文件只有三个文件作用README.md项目说明、安装命令、功能清单custom_autogen_model.py自定义 AutoGen 模型客户端把 Imagine 推理接入 AutoGencoding_and_financial_analyst.ipynb完整实战 Notebook双智能体协同完成股票 YTD 分析绘图README 中概括的三项能力LLM 驱动的股票分析、面向金融与分析任务的自动代码生成、基于 Qualcomm Cloud AI 100 Ultra 的推理部署正好对应这三份文件Notebook 负责“分析任务编排”自定义客户端负责“LLM 服务接入”两者合起来即是 README 描述的完整方案。二、安装与环境准备根据 README 的安装说明环境前提是Python 3.11 或更高版本然后安装两类依赖pip install imagine_sdk-0.4.1-py3-none-any.whl[langchain] pip install autogen-agentchat~0.2第一条命令从本地 wheel 安装 imagine SDK[langchain]表示同时安装其 LangChain 集成扩展第二条安装 AutoGen 的 agentchat 组件。结合 Notebook 的实际运行环境可以补充几点Notebook 记录到的内核是env_qualcomm (Python 3.11.10)说明作者使用 conda 虚拟环境env_qualcomm运行示例与本仓库 README 要求的 Python 3.11 一致实际代码中还会用到python-dotenv读取本地环境变量、yfinance拉取股票行情与matplotlib绘图首次跑通前需自行安装补齐需要提前在环境变量中设置IMAGINE_API_KEYNotebook 中通过os.environ[IMAGINE_API_KEY]读取用于向推理服务鉴权见下文 Notebook 讲解。三、核心原理AutoGen 的自定义 ModelClient 协议AutoGen 默认假设模型服务兼容 OpenAI 的 Chat API。要接入其他推理服务官方预留了一条扩展通道模型客户端接口ModelClient。从源码注释可以看到其定位——对应 AutoGen 的oai客户端封装层。本仓库的 custom_autogen_model.py 就是一个完整的最小实现把ImagineLLM/ImagineChat包装成了 AutoGen 可以识别的模型客户端。3.1 初始化与配置参数映射init方法 负责解析 AutoGen 传入的config并把params子字典映射为底层推理对象的构造参数参数代码内默认值Notebook 中的取值含义model必填取自config[model]imaginechat选择客户端实现imagine→ImagineLLMimaginechat→ImagineChat否则抛ValueErrorparams.max_length2561500生成的最大 token 数映射为底层max_tokensparams.api_keyNone来自IMAGINE_API_KEY推理服务的 API Keyparams.verifyFalse未设置HTTPS 证书校验开关params.endpointNone未设置服务端点地址Qualcomm Cloud AI 100 Ultra 推理地址params.temperature0.70.0采样温度0 表示尽可能确定性输出值得注意的实现细节是无论选imagine还是imaginechat代码都固定以modelLlama-3.1-70B构造底层对象也就是说推理侧实际加载的权重由代码写死为 Llama-3.1-70Bendpoint则决定打到哪一台 Cloud AI 100 Ultra 服务上。3.2 请求处理create() 把 OpenAI 格式翻译成 Imagine 调用AutoGen 在对话生成时调用客户端的 create() 方法def create(self, params): if params.get(stream, False) and messages in params: raise NotImplementedError(Local models do not support streaming.) else: num_of_responses params.get(n, 1) response SimpleNamespace() inputs .join([item[content] for item in params[messages]]) response.choices [] response.model self.model_name for _ in range(num_of_responses): text self.model.invoke(inputs, max_tokensself.max_length) choice SimpleNamespace() choice.message SimpleNamespace() choice.message.content text choice.message.tool_calls None response.choices.append(choice) return response几个关键设计不支持流式一旦发现streamTrue且有消息直接抛NotImplementedError避免静默出错提示词拼接由于 Imagine 的调用接口与 OpenAI 的messages结构不同这里把多轮消息的content直接拼接成一段字符串作为输入响应伪装成 OpenAI 结构通过SimpleNamespace动态构造choices[].message.content、model等字段让 AutoGen 上层无需改动即可消费结果响应数量读取params.get(n, 1)支持一次生成多条候选回复。3.3 结果回传message_retrieval、cost 与 get_usageAutoGen 拿到响应后需要通过客户端暴露的三个辅助方法理解结果message_retrieval() 遍历response.choices若消息带tool_calls则回传工具调用对象否则回传文本内容——这是 AutoGen 判断“模型想说什么/想调什么工具”的唯一入口cost() 恒返回0从源码看该方法会把response.cost 0写回属于占位实现便于统计时不影响总额get_usage() 是静态方法默认返回空字典{}表示暂不追踪 token 用量。这四者构成一份最小的ModelClient契约。Notebook 的运行日志也印证了协议要求在注册客户端之前AutoGen 会打印Detected custom model client in config: CustomModelClient, model client can not be used until register_model_client is called见 Notebook cell 6 输出即仅配置了model_client_cls还不够必须先调用register_model_client。四、Notebook 逐段实战从配置到跑通分析Notebook 是整条链路的落地演示下面按其执行顺序拆解。4.1 注册自定义客户端并把配置交给 AutoGen前置 cell 完成三件事加载.env、引入CustomModelClient、从autogen导入ConversableAgent / UserProxyAgent / AssistantAgent与LocalCommandLineCodeExecutor。随后用辅助函数把模型配置注入 AutoGen 的配置系统def config_list(config, client_nameCustomModelClient): dict_list [config] # set the config into an environment variable os.environ[IMAGINE_AUTOGEN_CONFIG] json.dumps(dict_list) config_list_custom autogen.config_list_from_json( IMAGINE_AUTOGEN_CONFIG, filter_dict{model_client_cls: [client_name]}, ) return config_list_custom这段代码的巧妙之处在于config_list_from_json通常从 JSON 文件或环境变量读取配置列表这里直接json.dumps把内存中的字典序列化写进IMAGINE_AUTOGEN_CONFIG环境变量再按model_client_cls CustomModelClient过滤出符合条件的模型配置完成“内存配置 → AutoGen 配置系统”的无文件转换。随后定义真正的模型配置api_key os.environ[IMAGINE_API_KEY] config { model: imaginechat, model_client_cls: CustomModelClient, n: 1, params: {max_length: 1500, api_key: api_key, temperature: 0.0}, } config_list_custom config_list(config)对照第 3.1 节参数表可以推断temperature0.0是为金融分析任务刻意选择的低随机性设置保证同一问题给出的代码尽量稳定max_length1500则为多步生成留足空间。4.2 构建代码执行器与两个 Agent先创建代码执行环境executor LocalCommandLineCodeExecutor( timeout60, work_dircoding, )LocalCommandLineCodeExecutor是 AutoGen 在本地执行生成代码的组件timeout60限制单次执行 60 秒超时work_dircoding指定代码文件的落盘目录注意该目录相对于运行环境创建。接着创建承担“代码执行”角色的 Agentcode_executor_agent ConversableAgent( namecode_executor_agent, code_execution_config{executor: executor}, default_auto_replyPlease continue. If everything is done, reply TERMINATE., )它只负责执行不接 LLM。default_auto_reply是关键协议约定当对话内容已解决时要求对方回复TERMINATE以终止会话循环。再创建承担“代码生成”角色的 Agentcode_writer_agent UserProxyAgent( namecode_writer_agent, llm_config{config_list: config_list_custom}, code_execution_configFalse, )这里有个值得注意的反向设计写代码的 Agent 用的是UserProxyAgent而不是常见的AssistantAgent。它携带llm_config并显式关闭自身代码执行code_execution_configFalse。被注释掉的备选写法则使用更常规的组合——AssistantAgent配human_input_modeNEVER说明两种角色组合都能成立核心取决于你想让哪个节点拥有 LLM 配置。最后把自定义客户端真正注册进写代码的 Agentcode_writer_agent.register_model_client(model_client_clsCustomModelClient)这一步与 cell 6 的告警日志前后呼应配置里声明了model_client_clsAutoGen 会检测到但不会立即使用必须显式register_model_client之后custom_autogen_model.py 才会被实例化日志中随即出现CustomModelClient config: {...}与Loaded model imaginechat。4.3 发起任务并观察多轮协作任务消息由日期与需求拼接而成today datetime.datetime.now().date() message ( fToday is {today}. Create a plot showing stock gain YTD over the whole year for (Qualcomm) QCOM and (Tesla) TSLA. Make sure the code is in python code block and save the figure to a file ytd_stock_gains.png. use the yfinance lib ) chat_result code_executor_agent.initiate_chat( code_writer_agent, messagemessage, )随后由执行者 Agent 发起会话把任务交给写代码 Agent。从 Notebook 保存的运行记录cell 10 输出可以看到完整链路code_executor_agent向code_writer_agent发送含当日日期的分析任务在无人工介入的批处理环境下系统打印NO HUMAN INPUT RECEIVED / USING AUTO REPLY写代码 Agent 经由已注册的CustomModelClient调用后端推理返回一段带python代码块的回复——代码用yfinance拉取 QCOM、TSLA 行情计算相对年初的 YTD 涨跌幅百分比并通过matplotlib绘图后savefig保存为ytd_stock_gains.png执行者 Agent 收到代码后由LocalCommandLineCodeExecutor在coding目录下运行运行中若一切正常即按default_auto_reply约定推进直到一方回复TERMINATE结束整个会话。这个“生成代码 → 执行代码 → 继续或终止”的循环正是 README 所称 Coding Stock Analyst 的核心工作流分析师的“思考”被转化为可执行代码由执行 Agent 用真实数据验证结果避免了大模型凭空编造行情结论的常见问题。五、复现运行与结果验证要点要在你自己的环境复现这个双智能体股票分析示例可按以下顺序操作安装依赖按第二节的 README 命令安装imagine_sdk与autogen-agentchat~0.2Python 版本保持 3.11准备鉴权导出IMAGINE_API_KEY或在项目目录准备.env由load_dotenv()加载确保能访问 README 提到的 Cloud AI 100 Ultra 推理入口按 Notebook 顺序执行先跑自定义客户端与配置相关 cell再创建 executor 与两个 Agent最后initiate_chat发起 QCOM/TSLA 的 YTD 分析任务确认产物正常结束时coding目录下应出现被执行的 Python 脚本与保存的ytd_stock_gains.png图对话流最终出现TERMINATE切换模型名做对照在config[model]中把imaginechat换成imagine即走ImagineLLM分支对应 custom_autogen_model.py可用于对比两种接入方式的差异。运行前提需要注意该示例的推理链路依赖 Qualcomm Cloud AI 100 Ultra 对应服务与IMAGINE_API_KEY脱离该推理环境时无法直接出结果若只是想学习 AutoGen 自定义模型客户端机制可以基于 custom_autogen_model.py 的四件套方法create/message_retrieval/cost/get_usage自行替换成任意本地推理接口。六、小结本示例的可复用价值不在股票分析本身而在于三点方法论一是用config_list_from_json 环境变量完成“内存配置 → AutoGen 配置系统”的传递二是用register_model_client 自定义ModelClient四方法把任意非 OpenAI 推理服务无缝接入 AutoGen 的对话循环三是用“LLM 生成代码 本地执行器运行代码”的双 Agent 结构让金融分析结论落在真实数据与真实执行上。需要继续深入时可对照阅读本仓库的 README安装与功能总览、custom_autogen_model.py模型客户端协议实现与 Notebook端到端运行示例。【免费下载链接】ai-engineering-hubIn-depth tutorials on LLMs, RAGs and real-world AI agent applications.项目地址: https://gitcode.com/GitHub_Trending/ai/ai-engineering-hub创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考