Skip to content

Latest commit

ย 

History

History
239 lines (181 loc) ยท 7.53 KB

File metadata and controls

239 lines (181 loc) ยท 7.53 KB

LangGraph ้›†ๆˆๆŒ‡ๅ—

ๆœฌๆŒ‡ๅ—่งฃ้‡Šๅฆ‚ไฝ•ไฝฟ็”จ zeroclaw-tools Python ๅŒ…ไธŽไปปไฝ•ๅ…ผๅฎน OpenAI ็š„ LLM๏ผˆๅคง่ฏญ่จ€ๆจกๅž‹๏ผŒLarge Language Model๏ผ‰ๆไพ›ๅ•†ๅฎž็Žฐไธ€่‡ด็š„ๅทฅๅ…ท่ฐƒ็”จใ€‚

่ƒŒๆ™ฏ

ๆŸไบ› LLM ๆไพ›ๅ•†๏ผŒ็‰นๅˆซๆ˜ฏๅƒ GLM-5๏ผˆๆ™บ่ฐฑ AI๏ผ‰่ฟ™ๆ ท็š„ไธญๆ–‡ๆจกๅž‹๏ผŒๅœจไฝฟ็”จๅŸบไบŽๆ–‡ๆœฌ็š„ๅทฅๅ…ท่ฐƒ็”จๆ—ถ่กŒไธบไธไธ€่‡ดใ€‚ZeroClaw ็š„ Rust ๆ ธๅฟƒ้€š่ฟ‡ OpenAI API ๆ ผๅผไฝฟ็”จ็ป“ๆž„ๅŒ–ๅทฅๅ…ท่ฐƒ็”จ๏ผŒไฝ†ๆŸไบ›ๆจกๅž‹ๅฏนไธๅŒๆ–นๆณ•็š„ๅ“ๅบ”ๆ›ดๅฅฝใ€‚

LangGraph ๆไพ›ไบ†ๆœ‰็Šถๆ€็š„ๅ›พๆ‰ง่กŒๅผ•ๆ“Ž๏ผŒๆ— ่ฎบๅบ•ๅฑ‚ๆจกๅž‹็š„ๅŽŸ็”Ÿ่ƒฝๅŠ›ๅฆ‚ไฝ•๏ผŒ้ƒฝ่ƒฝไฟ่ฏไธ€่‡ด็š„ๅทฅๅ…ท่ฐƒ็”จ่กŒไธบใ€‚

ๆžถๆž„

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                      Your Application                        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                   zeroclaw-tools Agent                       โ”‚
โ”‚                                                              โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚   โ”‚              LangGraph StateGraph                    โ”‚   โ”‚
โ”‚   โ”‚                                                      โ”‚   โ”‚
โ”‚   โ”‚    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”            โ”‚   โ”‚
โ”‚   โ”‚    โ”‚   Agent    โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ–ถ โ”‚   Tools    โ”‚            โ”‚   โ”‚
โ”‚   โ”‚    โ”‚   Node     โ”‚ โ—€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚   Node     โ”‚            โ”‚   โ”‚
โ”‚   โ”‚    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜            โ”‚   โ”‚
โ”‚   โ”‚         โ”‚                       โ”‚                    โ”‚   โ”‚
โ”‚   โ”‚         โ–ผ                       โ–ผ                    โ”‚   โ”‚
โ”‚   โ”‚    [Continue?]            [Execute Tool]             โ”‚   โ”‚
โ”‚   โ”‚         โ”‚                       โ”‚                    โ”‚   โ”‚
โ”‚   โ”‚    Yes โ”‚ No                Resultโ”‚                    โ”‚   โ”‚
โ”‚   โ”‚         โ–ผ                       โ–ผ                    โ”‚   โ”‚
โ”‚   โ”‚      [END]              [Back to Agent]              โ”‚   โ”‚
โ”‚   โ”‚                                                      โ”‚   โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                                                              โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚            OpenAI-Compatible LLM Provider                    โ”‚
โ”‚   (Z.AI, OpenRouter, Groq, DeepSeek, Ollama, etc.)          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๅฟซ้€Ÿๅผ€ๅง‹

ๅฎ‰่ฃ…

pip install zeroclaw-tools

ๅŸบๆœฌ็”จๆณ•

import asyncio
from zeroclaw_tools import create_agent, shell, file_read, file_write
from langchain_core.messages import HumanMessage

async def main():
    agent = create_agent(
        tools=[shell, file_read, file_write],
        model="glm-5",
        api_key="your-api-key",
        base_url="https://api.z.ai/api/coding/paas/v4"
    )

    result = await agent.ainvoke({
        "messages": [HumanMessage(content="Read /etc/hostname and tell me the machine name")]
    })

    print(result["messages"][-1].content)

asyncio.run(main())

ๅฏ็”จๅทฅๅ…ท

ๆ ธๅฟƒๅทฅๅ…ท

ๅทฅๅ…ท ๆ่ฟฐ
shell ๆ‰ง่กŒ shell ๅ‘ฝไปค
file_read ่ฏปๅ–ๆ–‡ไปถๅ†…ๅฎน
file_write ๅ‘ๆ–‡ไปถๅ†™ๅ…ฅๅ†…ๅฎน

ๆ‰ฉๅฑ•ๅทฅๅ…ท

ๅทฅๅ…ท ๆ่ฟฐ
web_search ็ฝ‘้กตๆœ็ดข๏ผˆ้œ€่ฆ BRAVE_API_KEY๏ผ‰
http_request ๅ‘้€ HTTP ่ฏทๆฑ‚
memory_store ๅฐ†ๆ•ฐๆฎๅญ˜ๅ‚จๅˆฐๆŒไน…ๅŒ–ๅ†…ๅญ˜
memory_recall ๅฌๅ›žๅญ˜ๅ‚จ็š„ๆ•ฐๆฎ

่‡ชๅฎšไน‰ๅทฅๅ…ท

ไฝฟ็”จ @tool ่ฃ…้ฅฐๅ™จๅˆ›ๅปบไฝ ่‡ชๅทฑ็š„ๅทฅๅ…ท๏ผš

from zeroclaw_tools import tool, create_agent

@tool
def get_weather(city: str) -> str:
    """Get the current weather for a city."""
    # Your implementation
    return f"Weather in {city}: Sunny, 25ยฐC"

@tool
def query_database(sql: str) -> str:
    """Execute a SQL query and return results."""
    # Your implementation
    return "Query returned 5 rows"

agent = create_agent(
    tools=[get_weather, query_database],
    model="glm-5",
    api_key="your-key"
)

ๆไพ›ๅ•†้…็ฝฎ

Z.AI / GLM-5

agent = create_agent(
    model="glm-5",
    api_key="your-zhipu-key",
    base_url="https://api.z.ai/api/coding/paas/v4"
)

OpenRouter

agent = create_agent(
    model="anthropic/claude-sonnet-4-6",
    api_key="your-openrouter-key",
    base_url="https://openrouter.ai/api/v1"
)

Groq

agent = create_agent(
    model="llama-3.3-70b-versatile",
    api_key="your-groq-key",
    base_url="https://api.groq.com/openai/v1"
)

Ollama๏ผˆๆœฌๅœฐ๏ผ‰

agent = create_agent(
    model="llama3.2",
    base_url="http://localhost:11434/v1"
)

Discord ๆœบๅ™จไบบ้›†ๆˆ

import os
from zeroclaw_tools.integrations import DiscordBot

bot = DiscordBot(
    token=os.environ["DISCORD_TOKEN"],
    guild_id=123456789,  # ไฝ ็š„ Discord ๆœๅŠกๅ™จ ID
    allowed_users=["123456789"],  # ๅฏไปฅไฝฟ็”จๆœบๅ™จไบบ็š„็”จๆˆท ID
    api_key=os.environ["API_KEY"],
    model="glm-5"
)

bot.run()

CLI ็”จๆณ•

# ่ฎพ็ฝฎ็Žฏๅขƒๅ˜้‡
export API_KEY="your-key"
export BRAVE_API_KEY="your-brave-key"  # ๅฏ้€‰๏ผŒ็”จไบŽ็ฝ‘้กตๆœ็ดข

# ๅ•ๆกๆถˆๆฏ
zeroclaw-tools "What is the current date?"

# ไบคไบ’ๆจกๅผ
zeroclaw-tools -i

ไธŽ Rust ZeroClaw ็š„ๅฏนๆฏ”

ๆ–น้ข Rust ZeroClaw zeroclaw-tools
ๆ€ง่ƒฝ ่ถ…ๅฟซ๏ผˆ~10ms ๅฏๅŠจ๏ผ‰ Python ๅฏๅŠจ๏ผˆ~500ms๏ผ‰
ๅ†…ๅญ˜ <5 MB ~50 MB
ไบŒ่ฟ›ๅˆถๅคงๅฐ ~3.4 MB pip ๅŒ…
ๅทฅๅ…ทไธ€่‡ดๆ€ง ไพ่ต–ๆจกๅž‹ LangGraph ไฟ่ฏ
ๅฏๆ‰ฉๅฑ•ๆ€ง Rust ็‰นๅพ Python ่ฃ…้ฅฐๅ™จ
็”Ÿๆ€็ณป็ปŸ Rust crates PyPI ๅŒ…

ไฝ•ๆ—ถไฝฟ็”จ Rust ZeroClaw๏ผš

  • ็”Ÿไบง็Žฏๅขƒ่พน็ผ˜้ƒจ็ฝฒ
  • ่ต„ๆบๅ—้™็Žฏๅขƒ๏ผˆๆ ‘่Ž“ๆดพ็ญ‰๏ผ‰
  • ๆœ€้ซ˜ๆ€ง่ƒฝ่ฆๆฑ‚

ไฝ•ๆ—ถไฝฟ็”จ zeroclaw-tools๏ผš

  • ๅŽŸ็”Ÿๅทฅๅ…ท่ฐƒ็”จ่กŒไธบไธไธ€่‡ด็š„ๆจกๅž‹
  • ไปฅ Python ไธบไธญๅฟƒ็š„ๅผ€ๅ‘
  • ๅฟซ้€ŸๅŽŸๅž‹ๅผ€ๅ‘
  • ไธŽ Python ๆœบๅ™จๅญฆไน ็”Ÿๆ€็ณป็ปŸ้›†ๆˆ

ๆ•…้šœๆŽ’้™ค

"API key required" ้”™่ฏฏ

่ฎพ็ฝฎ API_KEY ็Žฏๅขƒๅ˜้‡๏ผŒๆˆ–ๅ‘ create_agent() ไผ ้€’ api_key ๅ‚ๆ•ฐใ€‚

ๅทฅๅ…ท่ฐƒ็”จๆœชๆ‰ง่กŒ

็กฎไฟไฝ ็š„ๆจกๅž‹ๆ”ฏๆŒๅ‡ฝๆ•ฐ่ฐƒ็”จใ€‚ๆŸไบ›ๆ—งๆจกๅž‹ๅฏ่ƒฝไธๆ”ฏๆŒๅทฅๅ…ทใ€‚

้€Ÿ็އ้™ๅˆถ

ๅœจ่ฐƒ็”จไน‹้—ดๆทปๅŠ ๅปถ่ฟŸๆˆ–ๅฎž็Žฐไฝ ่‡ชๅทฑ็š„้€Ÿ็އ้™ๅˆถ๏ผš

import asyncio

for message in messages:
    result = await agent.ainvoke({"messages": [message]})
    await asyncio.sleep(1)  # ้€Ÿ็އ้™ๅˆถ

็›ธๅ…ณ้กน็›ฎ