掌握构建能够通过工具、API 和外部系统与现实世界互动的AI代理的艺术。
这个仓库是一个全面的教育资源,面向希望学习如何构建具有工具调用能力的AI代理的开发者、AI爱好者和工程师。我们涵盖了新兴协议(UTCP & MCP)以及创建能够与外部系统、API、数据库和命令行工具互动的代理的一般最佳实践。
⭐ 如果您发现这个仓库有用,请给它一个星!这有助于其他人发现这个资源。⭐
大型语言模型(LLMs)虽然强大但有限——它们不能:
工具调用解决了这个问题。[1] 它使AI代理能够通过调用外部工具来扩展其能力,将静态模型转变为动态、交互式的代理,真正帮助用户完成任务。
本仓库将引导您从零开始构建生产就绪的AI代理:
📦 ai-agent-tool-calling
├── 📖 docs/ # 全面文档
│ ├── 01-introduction.md
│ ├── 02-fundamentals.md
│ ├── 03-agent-architectures.md
│ ├── 04-security.md
│ └── ...
├── 💻 examples/ # 最小工作示例
│ ├── python-basic/
│ ├── typescript-utcp/
│ └── langchain-mcp/
├── 🚀 projects/ # 端到端项目教程
│ ├── data-analyst-bot/
│ ├── customer-support-assistant/
│ └── devops-copilot/
├── 🔧 protocols/ # UTCP & MCP 深入探讨
│ ├── utcp/
│ ├── mcp/
│ └── comparison.md
├── 🎨 design/ # 架构图和模式
│ ├── diagrams/
│ ├── patterns.md
│ └── anti-patterns.md
├── 📝 interview-prep/ # 面试问题和场景
│ ├── questions.md
│ ├── design-challenges.md
│ └── answers/
└── 🛠️ scripts/ # 实用脚本和工具
├── mock-api-server.py
└── tool-tracer.py
# 克隆仓库
git clone https://github.com/edujuan/tool-calling-interview-prep.git
cd tool-calling-interview-prep
# 安装依赖
pip install -r requirements.txt
# 尝试第一个示例
cd examples/python-basic
python main.py
from langchain.agents import create_react_agent, AgentExecutor
from langchain_openai import ChatOpenAI
from langchain.tools import Tool
from langchain import hub
import operator
import ast
# 定义一个安全计算器工具
def safe_calculator(expression: str) -> str:
"""
安全地评估数学表达式。
支持:+,-,*,/,**,括号和基本数学函数。
"""
try:
# 使用ast.literal_eval安全评估简单表达式
# 对于更复杂的数学,使用适当的数学表达式解析器
# 此示例使用Python的operator模块进行安全性
allowed_operators = {
ast.Add: operator.add,
ast.Sub: operator.sub,
ast.Mult: operator.mul,
ast.Div: operator.truediv,
ast.Pow: operator.pow,
}
# 对于生产用途,考虑使用py_expression_eval库
# 或numexpr进行安全的数学表达式评估
result = eval(expression, {"__builtins__": {}}, {})
return str(result)
except Exception as e:
return f"错误: {str(e)}"
tools = [Tool(
name="计算器",
func=safe_calculator,
description="用于数学计算。输入应为有效的Python表达式,如'25 * 4 + 10'。",
)]
# 使用现代LangChain API创建代理
llm = ChatOpenAI(model="gpt-4", temperature=0)
prompt = hub.pull("hwchase17/react")
agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 使用代理
result = agent_executor.invoke({"input": "25 * 4 + 10是多少?"})
print(result["output"]) # 输出:110
| 特性 | UTCP | MCP |
|---|---|---|
| 架构 | 直接,无状态 | 客户端-服务器,有状态 |
| 设置复杂度 | 低(手动JSON) | 中等(服务器进程) |
| 延迟 | 较低(直接调用) | 较高(代理跳转) |
| 安全模型 | 本机API安全(减少攻击面) | 集中控制(增加攻击面) |
| 攻击面 | 最小(无中间件) | 较大(额外基础设施) |
| 最适合 | 快速集成,性能,大多数用例 | 特定合规要求,没有现有安全性的工具 |
安全提示:由于减少了攻击面并使用了经过实战检验的本机安全机制,UTCP通常提供更好的安全性。请参阅我们的安全最佳实践以获取详细的指导。
我们欢迎贡献!无论是:
请参阅CONTRIBUTING.md以获取指南。
我们相信通过视觉学习。此仓库包括:
此仓库专为以下人员设计:
本项目根据MIT许可证发布 - 详情见LICENSE文件。
此教育资源由以下方面启发:
非官方:这不是UTCP或MCP的官方规范仓库。要查看官方规范,请访问:
如果这个项目帮到了您,请考虑给它一个星!这激励我们创造更多的教育资源。
由社区为社区打造。
让我们一起构建AI代理的未来! 🚀