一个用于构建具有工具调用支持的AI代理的Swift SDK。SwiftOpenAIAgentic提供了一个干净且生产就绪的API,用于创建与MCP(模型上下文协议)集成并支持自定义工具的LLM应用程序。
在你的Package.swift中添加SwiftOpenAIAgentic:
dependencies: [
.package(url: "https://github.com/mfreiwald/SwiftOpenAIAgentic.git", from: "1.0.0")
]
import SwiftOpenAIAgentic
let agenticAI = AgenticAI(apiKey: "your-openai-api-key")
let conversation = try await agenticAI.chat(
message: "2 + 2等于多少?",
model: "gpt-4o-mini"
)
print(conversation.last?.content ?? "")
import SwiftOpenAIAgentic
// 配置MCP服务器
let mcpServer = MCPServerConfig(
name: "filesystem",
transport: "http",
url: "https://your-mcp-server.com/mcp"
)
let config = AgenticConfiguration(
mcpServers: [mcpServer]
)
let agenticAI = AgenticAI(apiKey: "your-api-key", configuration: config)
// 初始化(连接到MCP服务器)
await agenticAI.initialize()
// 启用工具进行聊天
let conversation = try await agenticAI.chat(
message: "列出当前目录中的文件",
model: "gpt-4o",
enabledTools: ["mcp__*"] // 启用所有MCP工具
)
print(conversation.last?.content ?? "")
await agenticAI.cleanup()
class MyDelegate: AgentServiceDelegate {
func agentService(_ service: AgentService, willExecuteTool toolName: String, arguments: String, toolCallId: String) {
print("🔧 正在执行:\(toolName)")
}
func agentService(_ service: AgentService, didExecuteTool toolName: String, result: String, toolCallId: String) {
print("✅ 完成:\(toolName)")
}
func agentService(_ service: AgentService, didReceiveFinalResponse response: String) {
print("💬 响应:\(response)")
}
func agentService(_ service: AgentService, didReceiveStreamContent content: String) {
print(content, terminator: "")
}
func agentService(_ service: AgentService, didEncounterError error: Error) {
print("❌ 错误:\(error)")
}
}
let agenticAI = AgenticAI(apiKey: "your-api-key")
let delegate = MyDelegate()
agenticAI.setAgentDelegate(delegate)
_ = try await agenticAI.chat(
message: "在这里输入您的消息",
model: "gpt-4o",
enableStreaming: true
)
var conversation: [ChatCompletionParameters.Message] = []
// 第一轮
conversation = try await agenticAI.chat(
message: "法国的首都是哪里?",
model: "gpt-4o-mini"
)
// 第二轮 - 传递对话历史
conversation = try await agenticAI.chat(
message: "它的人口是多少?",
model: "gpt-4o-mini",
conversationHistory: conversation
)
import SwiftOpenAIAgentic
import SwiftOpenAI
class CalculatorTool: Tool {
let name = "local__calculator"
let description = "执行基本算术运算"
var parameters: JSONSchema {
JSONSchema(
type: .object,
properties: [
"operation": JSONSchema(type: .string),
"a": JSONSchema(type: .number),
"b": JSONSchema(type: .number)
],
required: ["operation", "a", "b"]
)
}
func execute(arguments: String) async throws -> String {
// 解析参数并执行计算
// 返回结果字符串
return "结果:42"
}
}
let agenticAI = AgenticAI(apiKey: "your-api-key")
agenticAI.registerTool(CalculatorTool())
let conversation = try await agenticAI.chat(
message: "计算123 * 456",
model: "gpt-4o-mini",
enabledTools: ["local__calculator"]
)
SwiftOpenAIAgentic基于几个关键组件构建:
let config = AgenticConfiguration(
baseURL: "https://api.openai.com/v1", // 可选:自定义基础URL
debugEnabled: false, // 开启调试日志
mcpServers: [mcpServer1, mcpServer2], // 连接的MCP服务器
localToolsConfigPath: "tools.json" // 本地工具配置路径
)
let agenticAI = AgenticAI(apiKey: "key", configuration: config)
通过名称或通配符模式启用特定工具:
// 启用所有MCP工具
enabledTools: ["mcp__*"]
// 启用特定工具
enabledTools: ["mcp__filesystem__read_file"]
// 启用来自特定服务器的所有工具
enabledTools: ["mcp__github__*"]
// 混合MCP和本地工具
enabledTools: ["mcp__*", "local__grep"]
let agenticAI = AgenticAI(apiKey: "key")
// 开始长时间运行的操作
Task {
_ = try await agenticAI.chat(message: "长时间任务", model: "gpt-4o")
}
// 从另一个上下文中取消
agenticAI.cancel()
// 运行时连接到服务器
try await agenticAI.connectMCPServer(newServerConfig)
// 断开服务器连接
await agenticAI.disconnectMCPServer("servername")
// 获取可用工具
let tools = agenticAI.getAvailableTools()
print("MCP工具:\(tools.mcpTools.count)")
print("本地工具:\(tools.localTools.count)")
agenticAI.setToolExecutorStatusCallback { message in
print("📡 \(message)")
}
agenticAI.setToolExecutorEventCallback { event in
switch event {
case .executionStarted(let tool, let args):
print("开始:\(tool)")
case .executionCompleted(let tool, let result):
print("完成:\(tool)")
case .executionFailed(let tool, let error):
print("失败:\(tool) - \(error)")
}
}
查看Examples目录中的完整可运行示例:
SwiftOpenAIAgentic目前支持:
对于基于HTTP的MCP服务器(例如Zapier):
let server = MCPServerConfig(
name: "zapier",
transport: "http",
url: "https://actions.zapier.com/mcp/v1/servers/YOUR_ID"
)
欢迎贡献!请随时提交Pull Request。
[您的许可证这里]
SwiftOpenAIAgentic受到SwiftOpenAICLI的启发,并从中提取了核心功能,适应为通用SDK。