【AI测试】Python AI大模型介绍

1. AI大模型介绍

1.1 岗位

  1. 大模型工程化工程师
  2. 大模型应用开发工程师
  3. 大模型基座开发工程师
  4. 数据开发工程师
  5. 大模型运维、Infra工程师

1.2 Python大模型框架

  1. LangChain
    1. 最早最成熟,适合复杂任务分解和单智能体应用
  2. LlamaIndex
    1. 专注于高效的索引和检索,适合RAG场景(不是Meta开发的)
  3. Autogen0.4 --- 可兼容以下LLM
    1. Crewai
    2. Pydanticai
    3. LLmaindex
    4. Langchain
  4. Langgraph
  5. 能力可以解决以下问题
    1. 如何稳定输出
    2. 无法连接互联网
    3. 数据过时
    4. 没法查询数据库
    5. 不能调用第三方API
    6. 无法使用外部工具
    7. 如何接入私有数据

1.3 Autogen 0.5.7

  1. Studio -- 图形化界面的低代码平台 -- 原型
    1. pip install -U autogenstudio
    2. autogenstudio ui --port 8080 --appdir ./myapp
  2. AgentChat -- 智能体组件:开发重心
  3. Core -- 底层核心组件 -- 多智能体/分布式智能体
  4. Extensions -- 扩展应用

1.3.1 安装

python 复制代码
1. pip install -U "autogen-agentchat"
2. pip install "autogen-ext[openai]"

1.3.2 使用第三方大模型

  1. 需要申请官方API key ---- 这里我用的LLM是Kimi (Kimi-k2.6)
  2. 判断是否与OpenAI API兼容:几乎所有大模型访问的底层组件
  3. 使用OpenAI底层组件调用Kimi方法
python 复制代码
from openai import OpenAI

KIMI_API_KEY = '自己去买kimi2.6 api-key'

client = OpenAI(api_key=KIMI_API_KEY, base_url='https://api.moonshot.cn/v1')

completion = client.chat.completions.create(
    model='kimi-k2.6',
    messages = [
            {"role": "system", "content": "你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。同时,你会拒绝一切涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不可翻译成其他语言。"},
            {"role": "user", "content": "你好,我叫李雷,1+1等于多少?"}
        ],
    stream = False
)

print(completion.choices[0].message.content)

大模型回复结果

你好,李雷!很高兴认识你。

在常规算术里,1+1 等于 2

如果你是在其他语境下(比如二进制、编程或者玩笑梗)问这个问题,答案可能会不一样。需要我展开讲讲吗?

  1. 提示词
    1. 系统:系统角色类prompt,给LLM很多背景信息(比如:你擅长写python')
    2. 用户:用户发送的指令。(例如:帮我写一个自动化测试代码)
  2. 使用Autogen_model调用Kimi(使用AI给的详细解释)
python 复制代码
# 导入 asyncio 库,用于编写异步程序
# asyncio 是 Python 标准库,支持协程、事件循环等异步编程特性
import asyncio

# 从 autogen_ext 的 openai 模块导入 OpenAIChatCompletionClient 类
# 这是 AutoGen 框架中用于调用 OpenAI 兼容 API 的客户端类
# Kimi 的 API 是 OpenAI 兼容的,所以可以用这个类
from autogen_ext.models.openai import OpenAIChatCompletionClient

# 从 autogen_core 的 models 模块导入 UserMessage 和 SystemMessage
# UserMessage: 用户发送的消息
# SystemMessage: 系统提示消息,用于设定 AI 的角色和行为
from autogen_core.models import UserMessage, SystemMessage

# ============================================
# 创建 OpenAI 兼容的模型客户端实例
# ============================================
openai_model_client = OpenAIChatCompletionClient(
    # model: 指定使用的模型名称
    # 'kimi-k2.6' 是 Kimi 最新的大模型版本
    model='kimi-k2.6',
    
    # base_url: API 的基础地址
    # 默认是 OpenAI 的 https://api.openai.com/v1
    # 这里改为 Kimi 的 API 地址,实现兼容调用
    base_url='https://api.moonshot.cn/v1',
    
    # api_key: 你的 Kimi API 密钥
    # 需要从 https://platform.moonshot.cn/ 申请
    # 注意:实际使用时替换为真实密钥,不要硬编码
    api_key='sk-自己去买kimi2.6 api-key',
    
    # model_info: 声明模型的能力信息
    # 因为 AutoGen 不认识 'kimi-k2.6',必须手动声明模型特性
    model_info={
        # vision: 是否支持视觉/图片输入
        # False 表示纯文本模型,True 表示支持图片
        "vision": False,
        
        # function_calling: 是否支持函数调用/工具调用
        # True 表示模型可以调用外部函数/工具
        "function_calling": True,
        
        # json_output: 是否支持 JSON 格式输出
        # True 表示可以让模型输出结构化 JSON 数据
        "json_output": True,
        
        # family: 模型家族分类
        # "unknown" 表示未知/其他模型家族
        # 可选值: gpt-4, gpt-35, llama, unknown 等
        "family": "unknown",
        
        # structured_output: 是否支持结构化输出
        # True 表示支持复杂的结构化数据输出
        "structured_output": True,
        
        # multiple_system_messages: 是否支持多条系统消息
        # True 表示可以在对话中包含多条 SystemMessage
        "multiple_system_messages": True,
    }
)

# ============================================
# 定义异步主函数
# ============================================
# async def: 定义异步函数,内部可以使用 await 关键字
async def main():
    # await: 等待异步操作完成,不会阻塞事件循环
    # openai_model_client.create(): 发送消息给模型并获取回复
    result = await openai_model_client.create(
        # 传入消息列表,列表中的消息按顺序组成对话上下文
        [
            # UserMessage: 用户消息
            # content: 消息内容,用户的具体请求
            # source: 消息来源标识,通常为 "user"
            UserMessage(
                content="编写一个自动化脚本",  # 用户请求内容
                source="user"                   # 标识这是用户发送的消息
            ),
            
            # SystemMessage: 系统提示消息
            # 用于设定 AI 的角色、行为规则、输出格式等
            # 通常放在对话开头,但 AutoGen 支持多系统消息
            SystemMessage(
                content='你是pythhon编程高手'  # 设定 AI 角色为 Python 专家
                # 注意:这里 "pythhon" 拼写有误,应为 "python"
            )
        ]
    )
    
    # print(): 打印模型的返回结果
    # result 是模型的响应对象,包含 content, usage, finish_reason 等属性
    print(result)
    
    # await: 异步关闭客户端连接
    # close(): 释放资源,关闭 HTTP 连接池
    # 必须显式调用,否则程序不会结束
    await openai_model_client.close()

# ============================================
# 程序入口
# ============================================
# asyncio.run(): 运行异步主函数
# 1. 创建新的事件循环
# 2. 运行 main() 协程直到完成
# 3. 关闭事件循环
# 这是运行异步程序的标准方式
asyncio.run(main())

大模型回复结果

finish_reason='stop' content='我来为你编写一个专业级的文件自动整理脚本 。这个脚本可以按文件类型自动分类整理杂乱的文件夹,包含完整的日志记录、错误处理和统计功能。\n\npython\n#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n"""\n智能文件整理器 - Auto File Organizer\n功能:自动按文件类型分类整理文件夹内容\n特点:支持试运行、日志记录、冲突处理、自定义分类规则\n"""\n\nimport os\nimport sys\nimport shutil\nimport logging\nimport argparse\nfrom pathlib import Path\nfrom datetime import datetime\nfrom collections import defaultdict\nfrom typing import Dict, List, Optional, Tuple\nfrom dataclasses import dataclass\n\n# ==================== 配置区域 ====================\nFILE_CATEGORIES: Dict[str, List[str]] = {\n \'图片\': [\'.jpg\', \'.jpeg\', \'.png\', \'.gif\', \'.bmp\', \'.svg\', \'.webp\', \'.ico\', \'.raw\'],\n \'文档\': [\'.pdf\', \'.doc\', \'.docx\', \'.txt\', \'.md\', \'.xls\', \'.xlsx\', \'.ppt\', \'.pptx\', \'.csv\'],\n \'视频\': [\'.mp4\', \'.avi\', \'.mkv\', \'.mov\', \'.wmv\', \'.flv\', \'.m4v\', \'.mpg\', \'.mpeg\'],\n \'音频\': [\'.mp3\', \'.wav\', \'.flac\', \'.aac\', \'.ogg\', \'.m4a\', \'.wma\'],\n \'压缩包\': [\'.zip\', \'.rar\', \'.7z\', \'.tar\', \'.gz\', \'.bz2\', \'.xz\'],\n \'程序\': [\'.exe\', \'.msi\', \'.dmg\', \'.pkg\', \'.deb\', \'.rpm\', \'.appimage\'],\n \'代码\': [\'.py\', \'.js\', \'.ts\', \'.html\', \'.css\', \'.java\', \'.cpp\', \'.c\', \'.go\', \'.rs\', \'.php\', \'.json\', \'.xml\'],\n \'数据库\': [\'.sql\', \'.db\', \'.sqlite\', \'.sqlite3\'],\n \'电子书\': [\'.epub\', \'.mobi\', \'.azw3\', \'.fb2\'],\n}\n\n# 需要跳过的系统文件/目录\nSKIP_PATTERNS = {\'.DS_Store\', \'Thumbs.db\', \'desktop.ini\', \'.git\', \'.svn\', \'node_modules\', \'__pycache__\', \'.idea\', \'.vscode\'}\n\n\n@dataclass\nclass OperationResult:\n """操作结果数据类"""\n success: bool\n source: Path\n destination: Optional[Path] = None\n error: Optional[str] = None\n category: Optional[str] = None\n\n\nclass FileOrganizer:\n """文件整理器主类"""\n \n def __init__(self, source_dir: Path, dest_dir: Optional[Path] = None, \n move_mode: bool = True, conflict_mode: str = \'rename\'):\n """\n 初始化整理器\n \n Args:\n source_dir: 源目录\n dest_dir: 目标目录(默认在源目录内创建"已整理_时间戳")\n move_mode: True=移动文件, False=复制文件\n conflict_mode: 冲突处理方式: \'rename\'(重命名), \'skip\'(跳过), \'overwrite\'(覆盖)\n """\n self.source_dir = Path(source_dir).expanduser().resolve()\n if not self.source_dir.exists():\n raise FileNotFoundError(f"源目录不存在: {self.source_dir}")\n \n if dest_dir:\n self.dest_dir = Path(dest_dir).expanduser().resolve()\n else:\n timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")\n self.dest_dir = self.source_dir / f"已整理_{timestamp}"\n \n self.move_mode = move_mode\n self.conflict_mode = conflict_mode\n self.stats = defaultdict(int)\n self.errors: List[str] = []\n \n # 创建日志\n self.logger = self._setup_logger()\n \n def _setup_logger(self) -> logging.Logger:\n """配置日志记录"""\n logger = logging.getLogger("FileOrganizer")\n logger.setLevel(logging.DEBUG)\n \n # 控制台处理器\n console_handler = logging.StreamHandler()\n console_handler.setLevel(logging.INFO)\n console_format = logging.Formatter(\'%(levelname)s: %(message)s\')\n console_handler.setFormatter(console_format)\n \n # 文件处理器\n log_file = self.dest_dir / "organize.log"\n log_file.parent.mkdir(parents=True, exist_ok=True)\n file_handler = logging.FileHandler(log_file, encoding=\'utf-8\')\n file_handler.setLevel(logging.DEBUG)\n file_format = logging.Formatter(\'%(asctime)s - %(name)s - %(levelname)s - %(message)s\')\n file_handler.setFormatter(file_format)\n \n logger.addHandler(console_handler)\n logger.addHandler(file_handler)\n return logger\n \n def _get_category(self, file_path: Path) -> str:\n """根据后缀名判断文件分类"""\n suffix = file_path.suffix.lower()\n for category, extensions in FILE_CATEGORIES.items():\n if suffix in extensions:\n return category\n return \'其他\'\n \n def _resolve_conflict(self, dest_path: Path) -> Path:\n """处理文件名冲突"""\n if not dest_path.exists():\n return dest_path\n \n if self.conflict_mode == \'overwrite\':\n return dest_path\n elif self.conflict_mode == \'skip\':\n return Path() # 返回空路径表示跳过\n else: # rename\n stem = dest_path.stem\n suffix = dest_path.suffix\n parent = dest_path.parent\n counter = 1\n \n while True:\n new_name = f"{stem}_{counter:03d}{suffix}"\n new_path = parent / new_name\n if not new_path.exists():\n return new_path\n counter += 1\n \n def _should_skip(self, path: Path) -> bool:\n """判断是否应该跳过此文件/目录"""\n if path.name.startswith(\'.\') and path.name != \'.\': # 隐藏文件\n return True\n if path.name in SKIP_PATTERNS:\n return True\n return False\n \n def organize(self, dry_run: bool = False) -> Dict[str, any]:\n """\n 执行整理操作\n \n Args:\n dry_run: 如果为True,只模拟运行不实际操作\n \n Returns:\n 统计信息字典\n """\n mode_str = "【试运行】" if dry_run else ""\n action_str = "移动" if self.move_mode else "复制"\n \n self.logger.info(f"{mode_str} 开始整理文件...")\n self.logger.info(f"源目录: {self.source_dir}")\n self.logger.info(f"目标目录: {self.dest_dir}")\n self.logger.info(f"操作模式: {action_str} | 冲突处理: {self.conflict_mode}")\n \n if not dry_run:\n self.dest_dir.mkdir(parents=True, exist_ok=True)\n \n results: List[OperationResult] = []\n files_processed = 0\n \n # 遍历源目录\n for item in self.source_dir.rglob(\'*\'):\n # 跳过目录自身、目标目录、以及需要跳过的文件\n if item == self.source_dir:\n continue\n if self.dest_dir in item.parents or item == self.dest_dir:\n continue\n if self._should_skip(item):\n continue\n if item.is_dir():\n continue # 不处理子目录结构,只处理文件\n \n # 确定分类\n category = self._get_category(item)\n category_dir = self.dest_dir / category\n \n # 构建目标路径\n dest_path = category_dir / item.name\n \n # 处理冲突\n if not dry_run:\n dest_path = self._resolve_conflict(dest_path)\n if not dest_path.name: # 跳过模式\n self.logger.info(f"跳过已存在: {item.name}")\n continue\n \n # 创建分类目录\n category_dir.mkdir(parents=True, exist_ok=True)\n \n # 执行操作\n try:\n if not dry_run:\n if self.move_mode:\n shutil.move(str(item), str(dest_path))\n else:\n shutil.copy2(str(item), str(dest_path))\n \n result = OperationResult(\n success=True,\n source=item,\n destination=dest_path if not dry_run else None,\n category=category\n )\n self.stats[category] += 1\n files_processed += 1\n \n self.logger.debug(f"{action_str}: {item.name} -> {category}/")\n \n except Exception as e:\n error_msg = str(e)\n self.errors.append(f"{item.name}: {error_msg}")\n result = OperationResult(\n success=False,\n source=item,\n error=error_msg,\n category=category\n )\n self.logger.error(f"失败: {item.name} - {error_msg}")\n \n results.append(result)\n \n # 输出统计\n self.logger.info(f"\\n{\'=\'*50}")\n self.logger.info(f"整理完成! 共处理 {files_processed} 个文件")\n self.logger.info(f"{\'=\'*50}")\n \n for cat, count in sorted(self.stats.items(), key=lambda x: x[1], reverse=True):\n self.logger.info(f" {cat:8s}: {count:3d} 个文件")\n \n if self.errors:\n self.logger.warning(f"\\n警告: {len(self.errors)} 个操作失败")\n \n return {\n \'total\': files_processed,\n \'categories\': dict(self.stats),\n \'errors\': self.errors,\n \'destination\': self.dest_dir,\n \'results\': results\n }\n\n\ndef create_argument_parser() -> argparse.ArgumentParser:\n """创建命令行参数解析器"""\n parser = argparse.ArgumentParser(\n description=\'智能文件整理工具 - 自动按类型分类文件\',\n formatter_class=argparse.RawDescriptionHelpFormatter,\n epilog="""\n示例:\n # 基本使用(整理当前目录)\n python organizer.py .\n \n # 指定输出目录,复制模式(保留原文件)\n python organizer.py ~/Downloads -o ~/Desktop/整理完成 --copy\n \n # 试运行(查看会做什么,不实际操作)\n python organizer.py ~/Desktop --dry-run\n \n # 覆盖已存在文件\n python organizer.py ~/Downloads --conflict overwrite\n """\n )\n \n parser.add_argument(\'source\', help=\'要整理的源目录路径\')\n parser.add_argument(\'-o\', \'--output\', help=\'输出目录路径(默认:自动创建时间戳目录)\')\n parser.add_argument(\'-c\', \'--copy\', action=\'store_true\', help=\'复制模式(默认是移动)\')\n parser.add_argument(\'--conflict\', choices=[\'rename\', \'skip\', \'overwrite\'], \n default=\'rename\', help=\'文件冲突处理方式(默认:rename)\')\n parser.add_argument(\'-d\', \'--dry-run\', action=\'store_true\', \n help=\'试运行模式,不实际移动/复制文件\')\n parser.add_argument(\'--version\', action=\'version\', version=\'%(prog)s 2.0\')\n \n return parser\n\n\ndef main():\n """主入口"""\n parser = create_argument_parser()\n args = parser.parse_args()\n \n source = Path(args.source)\n \n # 检查源目录\n if not source.exists():\n print(f"错误: 源目录不存在 - {source}")\n sys.exit(1)\n if not source.is_dir():\n print(f"错误: 源路径不是目录 - {source}")\n sys.exit(1)\n \n try:\n organizer = FileOrganizer(\n source_dir=source,\n dest_dir=Path(args.output) if args.output else None,\n move_mode=not args.copy,\n conflict_mode=args.conflict\n )\n \n result = organizer.organize(dry_run=args.dry_run)\n \n # 最终用户友好的输出\n print(f"\\n✅ 任务完成!")\n if not args.dry_run:\n print(f"📁 文件位置: {result[\'destination\']}")\n print(f"📊 共处理: {result[\'total\']} 个文件")\n \n if result[\'errors\']:\n print(f"⚠️ 失败: {len(result[\'errors\'])} 个")\n \n except KeyboardInterrupt:\n print("\\n\\n用户中断操作")\n sys.exit(0)\n except Exception as e:\n print(f"\\n❌ 发生错误: {e}")\n sys.exit(1)\n\n\nif __name__ == \'__main__\':\n main()\n\n\n## 功能特性\n\n| 特性 | 说明 |\n|------|------|\n| 智能分类 | 内置10种常见文件类型分类规则 |\n| 冲突处理 | 支持重命名/跳过/覆盖三种模式 |\n| 安全机制 | 试运行模式(--dry-run),操作前可预览 |\n| 完整日志 | 同时输出到控制台和 organize.log 文件 |\n| 路径处理 | 自动处理中文、空格、特殊字符文件名 |\n| 错误恢复 | 单文件失败不影响整体任务 |\n\n## 使用方法\n\nbash\n# 1. 基础用法:整理 Downloads 文件夹\npython organizer.py ~/Downloads\n\n# 2. 试运行(先看效果,不真动)\npython organizer.py ~/Desktop --dry-run\n\n# 3. 复制到指定位置(保留原文件)\npython organizer.py ~/Downloads -o ~/backup --copy\n\n# 4. 处理冲突时覆盖旧文件\npython organizer.py ~/Downloads --conflict overwrite\n\n\n---\n\n如果你需要其他类型的自动化脚本 ,告诉我具体场景,我可以为你定制:\n\n- 🌐 网络自动化 (爬虫、API监控、自动下载)\n- 📧 办公自动化 (Excel/Word批量处理、邮件自动发送)\n- 🖥️ 系统运维 (日志清理、备份同步、服务监控)\n- 🤖 DevOps (CI/CD流水线、Docker部署、测试自动化)\n- 📱 Web/UI自动化 (Selenium/Playwright自动化操作)\n\n需要哪种?或者需要我修改这个文件整理器的某个功能?' usage=RequestUsage(prompt_tokens=21, completion_tokens=3928) cached=False logprobs=None thought='用户要求编写一个自动化脚本,并且系统提示我是Python编程高手。用户没有具体说明需要什么类型的自动化脚本,所以我应该:\n \n 1. 询问具体需求(但用户可能期待直接给出示例)\n 2. 提供一个通用且实用的自动化脚本示例\n 3. 展示多种常见的自动化场景\n \n 考虑到用户可能想要立即可用的代码,我应该提供一个综合性示例,同时说明可以根据需求定制。最实用的自动化脚本通常涉及:\n - 文件整理(按类型分类文件)\n - 批量重命名\n - 定时任务\n - 数据备份\n - 或者办公自动化(Excel/Word处理)\n \n 我决定提供一个文件自动整理脚本 作为示例,因为它:\n - 实用性强,几乎每个人都需要\n - 涵盖Python核心概念(os, shutil, pathlib等)\n - 容易理解和扩展\n - 包含错误处理和日志记录,体现"高手"水平\n \n 脚本应该包含:\n - 清晰的注释\n - 类型提示(体现专业性)\n - 错误处理\n - 日志记录\n - 命令行参数支持(argparse)\n - 配置文件支持(可选)\n \n 让我写一个高质量的文件整理脚本:\n \n python\n import os\n import shutil\n import logging\n from pathlib import Path\n from datetime import datetime\n from collections import defaultdict\n import argparse\n from typing import Dict, List, Optional\n \n # 配置日志\n def setup_logging(log_dir: Path) -> logging.Logger:\n ...\n \n # 文件分类规则\n FILE_CATEGORIES = {\n \'图片\': [\'.jpg\', \'.jpeg\', \'.png\', \'.gif\', \'.bmp\', \'.svg\', \'.webp\'],\n \'文档\': [\'.pdf\', \'.doc\', \'.docx\', \'.txt\', \'.md\', \'.xls\', \'.xlsx\', \'.ppt\', \'.pptx\'],\n \'视频\': [\'.mp4\', \'.avi\', \'.mkv\', \'.mov\', \'.wmv\', \'.flv\'],\n \'音频\': [\'.mp3\', \'.wav\', \'.flac\', \'.aac\', \'.ogg\'],\n \'压缩包\': [\'.zip\', \'.rar\', \'.7z\', \'.tar\', \'.gz\'],\n \'程序\': [\'.exe\', \'.msi\', \'.dmg\', \'.pkg\', \'.deb\', \'.rpm\'],\n \'代码\': [\'.py\', \'.js\', \'.html\', \'.css\', \'.java\', \'.cpp\', \'.c\', \'.go\', \'.rs\'],\n }\n \n class FileOrganizer:\n def __init__(self, source_dir: Path, dest_dir: Optional[Path] = None):\n self.source_dir = Path(source_dir).expanduser().resolve()\n self.dest_dir = Path(dest_dir).expanduser().resolve() if dest_dir else self.source_dir / "已整理"\n self.logger = self._setup_logger()\n self.stats = defaultdict(int)\n \n def _setup_logger(self) -> logging.Logger:\n ...\n \n def _get_category(self, file_path: Path) -> str:\n suffix = file_path.suffix.lower()\n for category, extensions in FILE_CATEGORIES.items():\n if suffix in extensions:\n return category\n return \'其他\'\n \n def organize(self, dry_run: bool = False) -> Dict[str, int]:\n ...\n \n def main():\n parser = argparse.ArgumentParser(description=\'智能文件整理工具\')\n parser.add_argument(\'source\', help=\'源目录路径\')\n parser.add_argument(\'-o\', \'--output\', help=\'输出目录路径(默认:源目录/已整理)\')\n parser.add_argument(\'-d\', \'--dry-run\', action=\'store_true\', help=\'试运行模式,不实际移动文件\')\n args = parser.parse_args()\n \n organizer = FileOrganizer(Path(args.source), Path(args.output) if args.output else None)\n stats = organizer.organize(dry_run=args.dry_run)\n \n print("\\n整理完成!统计信息:")\n for category, count in sorted(stats.items()):\n print(f" {category}: {count} 个文件")\n \n if __name__ == \'__main__\':\n main()\n \n \n 这个脚本展示了专业级的Python代码结构。我还应该提供其他场景的简要示例,让用户有更多选择。\n \n 最后,我需要提醒用户:\n 1. 运行前备份重要数据\n 2. 可以先使用 --dry-run 测试\n 3. 如何根据需求修改分类规则\n \n 让我确保代码完整、正确且高质量。'

进程已结束,退出代码为 0

  1. Agent智能体助手类使用
    1. 首先封装一下LLM调用类,包名称命名为llms
python 复制代码
import os
from autogen_ext.models.openai import OpenAIChatCompletionClient
from dotenv import load_dotenv

class LLMGet:
    """llm大模型调用类"""
    def __init__(self):
        load_dotenv()
        self.model = os.getenv("MODEL")
        self.base_url = os.getenv("BASE_URL")
        self.api_key = os.getenv("API_KEY")
        self.model_info = {
                "vision": False,
                "function_calling": True,
                "json_output": True,
                "family": "unknown",
                "structured_output": True,
                "multiple_system_messages": True,
            }

    def get_model(self):
        """获取模型方法"""
        openai_model_client = OpenAIChatCompletionClient(
            model=self.model,
            base_url=self.base_url,
            api_key=self.api_key,
            model_info= self.model_info
        )
        return openai_model_client


get_llm = LLMGet()
  1. 调用autogen_chat智能体助手
python 复制代码
import asyncio

from examples.llms import get_llm
from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.ui import Console

agent = AssistantAgent(
    name="reporter_agent",
    model_client=get_llm.get_model(),
    system_message='你擅长编写古诗',
    model_client_stream=True, # 支持流式输出
)
# 调用正常的输出
async def main():
    result = await agent.run(task="编写一首七言四句古诗,描写年轻女生,并且要带有赞美之意")
    print(result)

# 使用流式输出
async def main_stream():
    result = agent.run_stream(task="编写一首七言四句古诗,描写年轻女生,并且要带有赞美之意")
    async for item in result:
        print(item)

# 调用流式输出面板,只展示关键信息
async def main_console():
    result = await Console(agent.run_stream(task="编写一首七言四句古诗,描写年轻女生,并且要带有赞美之意"))
    print(result)

asyncio.run(main_console())

1.4 浏览器核心插件

  1. 沉浸式翻译
  2. Kimi插件:https://kimi.moonshot.cn/extension
相关推荐
我是一颗柠檬1 小时前
【Java项目技术亮点】全链路分层限流:从网关到数据库的多层防护体系
java·开发语言·数据库
The Sheep 20231 小时前
C#多线程学习
开发语言·学习·c#
碳基硅坊1 小时前
Obsidian:把 Markdown 笔记做成一套可维护的本地知识库
人工智能·obsidian
暗夜猎手-大魔王1 小时前
hermes源码学习6--工具运行时
人工智能
li-xun1 小时前
我给自己的 Django 博客做了一个在线工具箱:从图片压缩到正则测试,尽量都在浏览器本地处理
后端·python·django
chengzi_beibei1 小时前
Anthropic 开源 Skills:Agent 工程化,开始从 Prompt 走向能力封装
人工智能
lauo1 小时前
ibbot手机青春版:AI时代真正的生产力革命——从联想小新Air 13看智能设备的分水岭
大数据·人工智能·智能手机
Shadow(⊙o⊙)1 小时前
QT常用控件1.0,enabled() geometry() QIcon的.qrc文件导入
开发语言·c++·qt
tq10861 小时前
Prompt = SLIP
人工智能·prompt