ไธไธชๅ่ฝๅผบๅคง็ Python AI Agent ๆกๆถ๏ผไธไธบ้่ๅๆๅ่ก็ฅจไบคๆๅบๆฏ่ฎพ่ฎกใๅฎ็ฐไบ ReAct ้ฃๆ ผ็ๆบ่ฝไฝ่ฟ่กๆถ๏ผๆฏๆๅทฅๅ ท่ฐ็จใMCP ้ๆใ็ฅ่ฏๅบๆฃ็ดขใ่ฎฐๅฟ็ฎก็ๅๆ่ฝ็ณป็ปใ
- ReAct Agent Runtime: ๅบไบ OpenAI function-calling ็ๆ่-่กๅจๅพช็ฏๅฎ็ฐ
- MCP ้ๆ: ๆฏๆ Model Context Protocol ๆๅกๅจ่ฟๆฅๅๅทฅๅ ท่ฐ็จ
- ็ฅ่ฏๅบๆฃ็ดข: ้ๆ RagFlow ่ฟ่ก RAG ๆฃ็ดขๅขๅผบ
- ่ฎฐๅฟ็ฎก็: ็ญๆ/้ฟๆ่ฎฐๅฟๆฏๆ๏ผ่ชๅจ่ฎฐๅฟๅๆ
- ็ป้ช็ณป็ป: Agent ๅฏๅญฆไน ๅๅค็จๅๅฒ็ป้ช
- ๆ่ฝ็ณป็ป: ๅบไบ Markdown ็ๆ่ฝๅฎไนๅ่ชๅจๅ ่ฝฝ
- ๅคๆบ่ฝไฝ: ๆฏๆ็ถๅญ Agent ๅงๆๆจกๅผๅไปปๅกๅๅ
- ๅ ็ฝฎๅทฅๅ ท: ๆไปถๆไฝใShellใๆ็ดขใTodo ็ฎก็็ญไธฐๅฏๅทฅๅ ท้
- ๅฃฐๆๅผ้ ็ฝฎ: ้่ฟ JSON ๅ Markdown ้ ็ฝฎ Agent๏ผๆ ้็ผ็
- Python >= 3.11
- UV ๅ ็ฎก็ๅจ๏ผๆจ่๏ผ
# ไฝฟ็จ UV ๅฎ่ฃ
๏ผๆจ่๏ผ
uv sync
# ๆไฝฟ็จ pip
pip install -e .cp .env.example .env
# ็ผ่พ .env ๆไปถ๏ผ่ฎพ็ฝฎ OPENAI_API_KEY# ่ฟ่ก้่ๅๆๆผ็คบ
bash demo.sh
# ๆไฝฟ็จๅฟซ้ๅฏๅจ่ๆฌ
bash start.sh
# ็ดๆฅ่ฟ่กไปปๅก
python run_agent.py "็ฎ่ฆๅๆ่นๆๅ
ฌๅธ(AAPL)็ๅฝๅ็ถๅต"aiflex/
โโโ src/
โ โโโ sdk/ # ๆ ธๅฟ SDK
โ โ โโโ agent/
โ โ โ โโโ core/ # Agent ๆ ธๅฟๅฎ็ฐ
โ โ โ โ โโโ agent.py # Agent ็ฑปๅ Builder
โ โ โ โ โโโ agent_runtime.py # ReAct ่ฟ่กๆถ
โ โ โ โโโ tools/ # ๅ
็ฝฎๅทฅๅ
ทๅฎ็ฐ
โ โ โ โโโ llm/ # LLM ๆฝ่ฑกๅฑ
โ โ โ โโโ skills/ # ๆ่ฝๆณจๅ่กจ
โ โ โโโ stores/ # ๆฐๆฎๅญๅจๅฑ
โ โ โโโ integration/ # RagFlow ็ญ้ๆ
โ โ โโโ utils/ # ๅทฅๅ
ทๅฝๆฐ
โ โโโ framework/ # ๅฃฐๆๅผๆกๆถ
โ โโโ config/ # Pydantic ้
็ฝฎๆจกๅ
โ โโโ loader/ # ้
็ฝฎๅ ่ฝฝๅจ
โ โโโ registry/ # Agent ๆณจๅไธญๅฟ
โโโ tests/ # ๆต่ฏไปฃ็
โโโ run_agent.py # Agent ่ฟ่ก่ๆฌ
โโโ demo.sh # ๆผ็คบ่ๆฌ
โโโ start.sh # ๅฟซ้ๅฏๅจ่ๆฌ
โโโ pyproject.toml # ้กน็ฎ้
็ฝฎ
import asyncio
from sdk import AgentBuilder, OpenAILLM, OpenAIModelOptions
async def main():
# ๅๅงๅ LLM
llm = OpenAILLM(
api_key="your-api-key",
options=OpenAIModelOptions(model="gpt-4o-mini")
)
# ๅๅปบ Agent
agent = (
AgentBuilder()
.with_name("market-analyst")
.with_description("่กๅธๅธๅบๅๆๆบ่ฝไฝ")
.with_instructions("ไฝ ๆฏไธไฝไธไธ็่กๅธๅๆๅธ...")
.with_llm(llm)
.with_workspace_root("./workspace")
.with_experience_enabled(True)
.build()
)
# ่ฟ่กไปปๅก
result = await agent.run("ๅๆไปๅคฉ็ๅธๅบ็ญ็น")
print(result.output)
asyncio.run(main())ๅจ agents/ ็ฎๅฝไธๅๅปบ Agent ้
็ฝฎ๏ผ
agent.json
{
"name": "financial_analyst",
"version": "1.0.0",
"description": "AI ้่ๅๆๅธ",
"model": null,
"prompt": {
"file": "prompt.md"
},
"skills": {
"sources": ["skills/"],
"inline": []
},
"tools": {
"auto_discover": true,
"enabled": [],
"disabled": []
},
"subagents": [
{
"name": "data_fetcher",
"enabled": true
}
],
"runtime": {
"max_steps": 10,
"experience_enabled": false,
"knowledge_base": null
}
}prompt.md
# Financial Analyst Agent
You are an expert financial analyst with deep knowledge of stock markets.
## Guidelines
1. Always provide data-driven analysis
2. Consider multiple perspectives before making recommendations
3. Use available tools to gather current market dataๅๅปบagent.py
import asyncio
import json
import os
from pathlib import Path
from dotenv import load_dotenv
from framework import AgentFrameworkLoader
from sdk import OpenAILLM, OpenAIModelOptions
def print_agent_config(agent) -> None:
"""ๆๅฐ Agent ็ JSON ๆ ผๅผ้
็ฝฎไฟกๆฏ"""
# ่ทๅๅทฅๅ
ทๅ่กจ
tools = agent.tool_registry.list()
tools_list = [
{"name": tool.name, "description": tool.description}
for tool in tools
]
# ่ทๅๆ่ฝๅ่กจ
skills = agent.skill_registry.list()
skills_list = [
{"name": skill["name"], "description": skill.get("description", "")}
for skill in skills
]
config = {
"name": agent.name,
"description": agent.description,
"max_steps": agent.config.max_steps,
"instructions": agent.config.instructions,
"workspace_root": agent.config.workspace_root,
"model": {
"name": agent.llm.model,
"temperature": agent.llm.temperature,
"max_tokens": agent.llm.max_tokens,
},
"tools_count": len(tools_list),
"tools": tools_list,
"skills_count": len(skills_list),
"skills": skills_list,
"children_count": len(agent.children),
"children": [
{"name": child.name, "description": child.description}
for child in agent.children
],
"experience_enabled": agent.experience_enabled,
"mcp_lazy_load": agent.mcp_lazy_load,
"mcp_servers": agent.mcp_servers,
"codespace_enabled": agent.codespace_enabled,
"skill_sources": agent.skill_sources,
}
print(json.dumps(config, indent=2, ensure_ascii=False))
async def main():
# ๅ ่ฝฝ็ฏๅขๅ้
load_dotenv()
# ไป็ฏๅขๅ้่ฏปๅ้
็ฝฎ
api_key = os.getenv("OPENAI_API_KEY")
api_base = os.getenv("OPENAI_API_BASE", "https://api.openai.com/v1")
model = os.getenv("OPENAI_MODEL", "gpt-4o-mini")
# ๅๅงๅ LLM
llm = OpenAILLM(
api_key=api_key,
options=OpenAIModelOptions(model=model, api_base=api_base)
)
# ่ทๅๅฝๅ็ฎๅฝไฝไธบ Agent ็ฎๅฝ
agent_dir = Path(__file__).parent.resolve()
loader = AgentFrameworkLoader(agents_root=agent_dir, default_llm=llm)
# ๅ ่ฝฝๅไธช Agent
agent = await loader.load()
print(f"Loaded agent: {agent.name}")
# ๆๅฐ Agent ้
็ฝฎไฟกๆฏ
print("\n" + "=" * 60)
print("Agent Configuration (JSON):")
print("=" * 60)
print_agent_config(agent)
print("=" * 60 + "\n")
# ่ฟ่กไปปๅก
result = await agent.run("Analyze AAPL stock")
print(f"\nResult:\n{result.output}")
if __name__ == "__main__":
asyncio.run(main())็ถๅไฝฟ็จ่ฟ่ก่ๆฌ๏ผ
python agent.py "ๅๆ่นๆๅ
ฌๅธ(AAPL)็ๅฝๅ็ถๅต"Agent ้ป่ฎคๅฏ็จ็ๅทฅๅ ท๏ผ
| ๅทฅๅ ทๅ | ๅ่ฝ | ่ฏดๆ |
|---|---|---|
find_files |
ๆไปถๆ็ดข | ๆๆจกๅผๆ็ดขๆไปถ |
read_file |
่ฏปๅๆไปถ | ่ฏปๅๆไปถๅ ๅฎน |
write_file |
ๅๅ ฅๆไปถ | ๅๅปบๆ่ฆ็ๆไปถ |
edit_file |
็ผ่พๆไปถ | ็ฒพ็กฎๆฟๆขๆไปถๅ ๅฎน |
list_directory |
ๅๅบ็ฎๅฝ | ๅๅบ็ฎๅฝๅ ๅฎน |
search_text |
ๆๆฌๆ็ดข | ๅจๆไปถไธญๆ็ดขๆๆฌ |
shell |
Shell ๅฝไปค | ๆง่ก Shell ๅฝไปค |
web_search |
Web ๆ็ดข | ๆ็ดข็ฝ็ป๏ผ้่ฆ API Key๏ผ |
web_fetch |
URL ่ทๅ | ่ทๅ็ฝ้กตๅ ๅฎน |
todo_list |
Todo ็ฎก็ | ็ฎก็ๅพ ๅไบ้กน |
knowledge_base_retrieve |
็ฅ่ฏๅบๆฃ็ดข | RagFlow RAG ๆฃ็ดข |
experience_query |
็ป้ชๆฅ่ฏข | ๆฅ่ฏขๅๅฒ็ป้ช |
experience_update |
็ป้ชๆดๆฐ | ไฟๅญๆฐ็ป้ช |
ๆ่ฝๆฏ Agent ็ไธไธ็ฅ่ฏๆจกๅ๏ผ้่ฟ Markdown ๆไปถๅฎไน๏ผ
skills/market_analysis/SKILL.md
---
name: market_analysis
description: ้ซ็บงๅธๅบๅๆๆๆฏ
version: 1.0.0
tags: [market, analysis, technical-indicators]
---
# Market Analysis Skill
## Capabilities
- Technical analysis (moving averages, RSI, MACD)
- Trend identification and evaluation
- Support and resistance levels
- Volume analysisAgent ไผ่ชๅจๅ ่ฝฝ้ ็ฝฎ็ๆ่ฝ๏ผๅนถๅจ็ธๅ ณไปปๅกไธญไฝฟ็จใ
ๆฏๆ็ถๅญ Agent ๅงๆ๏ผ็ถ Agent ๅฏไปฅๅฐไปปๅกๅงๆ็ปๅญ Agent๏ผ
financial_analyst (็ถ)
โโโ data_fetcher (ๅญ)
ๅญ Agent ไผ่ขซ่ชๅจๅ ่ฃ ไธบๅทฅๅ ท๏ผ็ถ Agent ๅฏไปฅๅ่ฐ็จๅทฅๅ ทไธๆ ท่ฐ็จๅญ Agentใ
# OpenAI ้
็ฝฎ
OPENAI_API_KEY=sk-...
OPENAI_API_BASE=https://api.openai.com/v1
OPENAI_MODEL=gpt-4o-mini
# RagFlow ็ฅ่ฏๅบ๏ผๅฏ้๏ผ
RAGFLOW_BASE_URL=http://ragflow.example.com:80
RAGFLOW_API_KEY=ragflow-...
# Web ๆ็ดข๏ผๅฏ้๏ผ
BOCHA_API_KEY=your-bocha-api-key
{
"runtime": {
"max_steps": 30, // ๆๅคงๆง่กๆญฅๆฐ
"workspace_root": "./workspace", // ๅทฅไฝ็ฎๅฝ
"mcp_lazy_load": false, // MCP ๅปถ่ฟๅ ่ฝฝ
"experience_enabled": true, // ๅฏ็จ็ป้ชๅญฆไน
"compression_enabled": true, // ๅฏ็จ่ฎฐๅฟๅ็ผฉ
"knowledge_base": { // ็ฅ่ฏๅบ้
็ฝฎ
"enabled": true,
"similarity_threshold": 0.7
}
}
}# ่ฟ่กไปปๅก
python run_agent.py "ไฝ ็ไปปๅกๆ่ฟฐ"
# ไบคไบๅผๆจกๅผ
python run_agent.py --interactive
# ไฝฟ็จ็ๅฎ AI๏ผ้่ฆ้
็ฝฎ .env๏ผ
python run_agent.py "ไปปๅก" --real-llm
# ๅฟซ้ๅฏๅจ่ๅ
./start.sh# ไปฃ็ ๆฃๆฅ
uv run ruff check src/
# ไปฃ็ ๆ ผๅผๅ
uv run ruff format src/
# ็ฑปๅๆฃๆฅ
uv run mypy src/# ่ฟ่กๆๆๆต่ฏ
uv run pytest
# ๅธฆ่ฆ็็ๆฅๅ
uv run pytest --cov=sdk --cov-report=html
# ่ฟ่ก็นๅฎๆต่ฏ
uv run pytest tests/test_agent.pyfrom sdk import BaseTool, ToolDefinition
class MyCustomTool(BaseTool):
def get_definition(self) -> ToolDefinition:
return ToolDefinition(
name="my_tool",
description="ๆ็่ชๅฎไนๅทฅๅ
ท",
input_schema={
"type": "object",
"properties": {
"query": {"type": "string", "description": "ๆฅ่ฏขๅๆฐ"}
},
"required": ["query"]
}
)
async def execute(self, args: dict) -> str:
query = args["query"]
# ๅฎ็ฐๅทฅๅ
ท้ป่พ
return f"็ปๆ: {query}"โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Agent โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ
โ โ Skills โ โ Tools โ โ Subagents โ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Agent Runtime โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ ReAct Loop โ โ
โ โ Thought โ Action โ Observation โ Thought โ ... โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ LLM โ
โ (OpenAI / Compatible) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ