Daily Tech Briefing
AI 科技速览

每天 5 分钟内学习 AI。获取最新的人工智能新闻,理解其重要性,并学习如何将其应用于您的工作。

AI 快讯
MarkTechPost · 2026/7/27 18:08:24

Designing Skill-Driven Financial Analysis Agents with Claude, Python, MCP Connectors, and Automated Deliverables

AI 中文解读
Claude和Python联手搞金融分析,这次Anthropic开源了一套技能驱动的AI代理框架,让你能用自然语言指挥AI自动完成估值建模、敏感性分析、可比公司对比等复杂任务,连Excel报告都能自动生成。这套方法把金融分析师的“招式”写成可调用的技能模块,AI不再只会聊天,而是像专业助手一样一步步执行计算、画图、写备忘录。对普通人来说,以后做投资决策、分析公司价值可能不再需要精通Excel和公式,只要告诉AI想要什么结果,它就能自动跑数据、出报告。企业财务部门也能用这套流程大幅提升效率,把重复性的分析工作交给AI,聚焦更高价值的策略判断。
In this tutorial, we build an advanced workflow around Anthropic’s financial-services repository and reproduce its skill-driven architecture in pure Python. We begin by installing the required libraries, cloning the repository, and programmatically mapping its agents, vertical plugins, partner integrations, managed-agent cookbooks, and financial analysis skills. We then parse the repository’s SKILL.md files into a searchable registry and construct a reusable SkillAgent that injects selected financial playbooks into the Anthropic Messages API while supporting an iterative tool-use loop for Python calculations and file generation. Using this architecture, we execute a synthetic discounted cash flow valuation, generate a WACC and terminal-growth sensitivity heatmap, perform comparable-company analysis with formatted Excel output, draft a private-equity investment committee memo, and inspect a managed-agent deployment specification without sending a live deployment request. Copy CodeCopiedUse a different Browserimport subprocess, sys, os, io, re, json, glob, textwrap, contextlib, pathlib def sh(cmd): print(f"$ {cmd}") r = subprocess.run(cmd, shell=True, capture_output=True, text=True) if r.returncode != 0: print(r.stderr[-1500:]) return r sh(f"{sys.executable} -m pip install -q anthropic pandas openpyxl pyyaml matplotlib") import pandas as pd import yaml import matplotlib.pyplot as plt REPO_URL = "https://github.com/anthropics/financial-services.git" REPO_DIR = "financial-services" if not os.path.isdir(REPO_DIR): sh(f"git clone --depth 1 {REPO_URL} {REPO_DIR}") else: print("Repo already cloned — skipping.") def get_api_key(): try: from google.colab import userdata k = userdata.get("ANTHROPIC_API_KEY") if k: return k except Exception: pass if os.environ.get("ANTHROPIC_API_KEY"): return os.environ["ANTHROPIC_API_KEY"] from getpass import getpass return getpass("Enter your Anthropic API key: ") os.environ["ANTHROPIC_API_KEY"] = get_api_key() import anthropic client = anthropic.Anthropic() MODEL = "claude-sonnet-4-6" print("SDK ready. Model:", MODEL) We install the required Python libraries, clone Anthropic’s financial-services repository, and prepare the Google Colab runtime for execution. We retrieve the Anthropic API key from Colab secrets, environment variables, or a secure interactive prompt. We then initialize the official Anthropic SDK and select the Claude model that powers the financial-analysis workflows. Copy CodeCopiedUse a different Browserdef repo_map(root=REPO_DIR): rows = [] for kind, pattern in [ ("agent", f"{root}/plugins/agent-plugins/*"), ("vertical",f"{root}/plugins/vertical-plugins/*"), ("partner", f"{root}/plugins/partner-built/*"), ("cookbook",f"{root}/managed-agent-cookbooks/*"), ]: for p in sorted(glob.glob(pattern)): if not os.path.isdir(p): continue skills = glob.glob(f"{p}/**/SKILL.md", recursive=True) commands = glob.glob(f"{p}/commands/*.md") rows.append({"type": kind, "name": os.path.basename(p), "skills": len(skills), "commands": len(commands)}) return pd.DataFrame(rows) print("\n=== REPO MAP ===") repo_df = repo_map() print(repo_df.to_string(index=False)) mcp_files = glob.glob(f"{REPO_DIR}/plugins/**/.mcp.json", recursive=True) for f in mcp_files[:1]: print(f"\n=== MCP CONNECTORS ({f}) ===") try: cfg = json.load(open(f)) for name, srv in cfg.get("mcpServers", cfg).items(): print(f" {name:<14} -> {srv.get('url', srv)}") except Exception as e: print(" (could not parse:", e, ")") FRONTMATTER = re.compile(r"^---\s*\n(.*?)\n---\s*\n", re.S) class Skill: def __init__(self, path): self.path = path raw = open(path, encoding="utf-8", errors="replace").read() m = FRONTMATTER.match(raw) meta = {} if m:
分享
阅读原文